mesa: misc GLX_INTEL_swap_event fixes
Fixup a few issues found through testing: - update GLX names to match glproto - register DRI2WireToEvent so it actually gets called Signed-off-by: Robert Bragg <robert@linux.intel.com>
This commit is contained in:
parent
9b22427911
commit
7a9329ba99
|
@ -518,8 +518,12 @@ typedef struct {
|
||||||
} GLXPbufferClobberEvent;
|
} GLXPbufferClobberEvent;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
int type;
|
||||||
|
unsigned long serial; /* # of last request processed by server */
|
||||||
|
Bool send_event; /* true if this came from a SendEvent request */
|
||||||
|
Display *display; /* Display the event was read from */
|
||||||
|
GLXDrawable drawable; /* drawable on which event was requested in event mask */
|
||||||
int event_type;
|
int event_type;
|
||||||
GLXDrawable drawable;
|
|
||||||
int64_t ust;
|
int64_t ust;
|
||||||
int64_t msc;
|
int64_t msc;
|
||||||
int64_t sbc;
|
int64_t sbc;
|
||||||
|
|
|
@ -698,10 +698,10 @@ typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawabl
|
||||||
|
|
||||||
#ifndef GLX_INTEL_swap_event
|
#ifndef GLX_INTEL_swap_event
|
||||||
#define GLX_INTEL_swap_event
|
#define GLX_INTEL_swap_event
|
||||||
#define GLX_BUFFER_SWAP_COMPLETE_MASK 0x10000000
|
#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x10000000
|
||||||
#define GLX_EXCHANGE_COMPLETE 0x8024
|
#define GLX_EXCHANGE_COMPLETE_INTEL 0x8024
|
||||||
#define GLX_BLIT_COMPLETE 0x8025
|
#define GLX_BLIT_COMPLETE_INTEL 0x8025
|
||||||
#define GLX_FLIP_COMPLETE 0x8026
|
#define GLX_FLIP_COMPLETE_INTEL 0x8026
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef GLX_SGIX_swap_barrier
|
#ifndef GLX_SGIX_swap_barrier
|
||||||
|
|
|
@ -81,12 +81,15 @@ static XEXT_GENERATE_FIND_DISPLAY (DRI2FindDisplay,
|
||||||
dri2Info,
|
dri2Info,
|
||||||
dri2ExtensionName,
|
dri2ExtensionName,
|
||||||
&dri2ExtensionHooks,
|
&dri2ExtensionHooks,
|
||||||
0, NULL)
|
1, NULL)
|
||||||
|
|
||||||
static Bool
|
static Bool
|
||||||
DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire)
|
DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire)
|
||||||
{
|
{
|
||||||
XExtDisplayInfo *info = DRI2FindDisplay(dpy);
|
XExtDisplayInfo *info = DRI2FindDisplay(dpy);
|
||||||
|
XExtDisplayInfo *glx_info = __glXFindDisplay(dpy);
|
||||||
|
static int glx_event_base;
|
||||||
|
static Bool found_glx_info = False;
|
||||||
|
|
||||||
XextCheckExtension(dpy, info, dri2ExtensionName, False);
|
XextCheckExtension(dpy, info, dri2ExtensionName, False);
|
||||||
|
|
||||||
|
@ -95,21 +98,26 @@ DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire)
|
||||||
{
|
{
|
||||||
GLXBufferSwapComplete *aevent = (GLXBufferSwapComplete *)event;
|
GLXBufferSwapComplete *aevent = (GLXBufferSwapComplete *)event;
|
||||||
xDRI2BufferSwapComplete *awire = (xDRI2BufferSwapComplete *)wire;
|
xDRI2BufferSwapComplete *awire = (xDRI2BufferSwapComplete *)wire;
|
||||||
switch (awire->type) {
|
aevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *) wire);
|
||||||
|
aevent->type =
|
||||||
|
(glx_info->codes->first_event + GLX_BufferSwapComplete) & 0x75;
|
||||||
|
aevent->send_event = (awire->type & 0x80) != 0;
|
||||||
|
aevent->display = dpy;
|
||||||
|
aevent->drawable = awire->drawable;
|
||||||
|
switch (awire->event_type) {
|
||||||
case DRI2_EXCHANGE_COMPLETE:
|
case DRI2_EXCHANGE_COMPLETE:
|
||||||
aevent->event_type = GLX_EXCHANGE_COMPLETE;
|
aevent->event_type = GLX_EXCHANGE_COMPLETE_INTEL;
|
||||||
break;
|
break;
|
||||||
case DRI2_BLIT_COMPLETE:
|
case DRI2_BLIT_COMPLETE:
|
||||||
aevent->event_type = GLX_BLIT_COMPLETE;
|
aevent->event_type = GLX_BLIT_COMPLETE_INTEL;
|
||||||
break;
|
break;
|
||||||
case DRI2_FLIP_COMPLETE:
|
case DRI2_FLIP_COMPLETE:
|
||||||
aevent->event_type = GLX_FLIP_COMPLETE;
|
aevent->event_type = GLX_FLIP_COMPLETE_INTEL;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* unknown swap completion type */
|
/* unknown swap completion type */
|
||||||
return False;
|
return False;
|
||||||
}
|
}
|
||||||
aevent->drawable = awire->drawable;
|
|
||||||
aevent->ust = ((CARD64)awire->ust_hi << 32) | awire->ust_lo;
|
aevent->ust = ((CARD64)awire->ust_hi << 32) | awire->ust_lo;
|
||||||
aevent->msc = ((CARD64)awire->msc_hi << 32) | awire->msc_lo;
|
aevent->msc = ((CARD64)awire->msc_hi << 32) | awire->msc_lo;
|
||||||
aevent->sbc = ((CARD64)awire->sbc_hi << 32) | awire->sbc_lo;
|
aevent->sbc = ((CARD64)awire->sbc_hi << 32) | awire->sbc_lo;
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#define NEED_EVENTS
|
#define NEED_EVENTS
|
||||||
#include <X11/Xproto.h>
|
#include <X11/Xproto.h>
|
||||||
#include <X11/Xlibint.h>
|
#include <X11/Xlibint.h>
|
||||||
|
#include <X11/extensions/extutil.h>
|
||||||
#define GLX_GLXEXT_PROTOTYPES
|
#define GLX_GLXEXT_PROTOTYPES
|
||||||
#include <GL/glx.h>
|
#include <GL/glx.h>
|
||||||
#include <GL/glxext.h>
|
#include <GL/glxext.h>
|
||||||
|
@ -793,6 +794,10 @@ extern GLboolean __glXGetMscRateOML(Display * dpy, GLXDrawable drawable,
|
||||||
GLboolean
|
GLboolean
|
||||||
__driGetMscRateOML(__DRIdrawable * draw,
|
__driGetMscRateOML(__DRIdrawable * draw,
|
||||||
int32_t * numerator, int32_t * denominator, void *private);
|
int32_t * numerator, int32_t * denominator, void *private);
|
||||||
|
|
||||||
|
/* So that dri2.c:DRI2WireToEvent() can access
|
||||||
|
* glx_info->codes->first_event */
|
||||||
|
XExtDisplayInfo *__glXFindDisplay (Display *dpy);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* !__GLX_client_h__ */
|
#endif /* !__GLX_client_h__ */
|
||||||
|
|
|
@ -120,7 +120,6 @@ static /* const */ XExtensionHooks __glXExtensionHooks = {
|
||||||
__glXErrorString, /* error_string */
|
__glXErrorString, /* error_string */
|
||||||
};
|
};
|
||||||
|
|
||||||
static
|
|
||||||
XEXT_GENERATE_FIND_DISPLAY(__glXFindDisplay, __glXExtensionInfo,
|
XEXT_GENERATE_FIND_DISPLAY(__glXFindDisplay, __glXExtensionInfo,
|
||||||
__glXExtensionName, &__glXExtensionHooks,
|
__glXExtensionName, &__glXExtensionHooks,
|
||||||
__GLX_NUMBER_EVENTS, NULL)
|
__GLX_NUMBER_EVENTS, NULL)
|
||||||
|
@ -194,11 +193,11 @@ __glXEventToWire(Display *dpy, XEvent *event, xEvent *wire)
|
||||||
break;
|
break;
|
||||||
case GLX_SAVED:
|
case GLX_SAVED:
|
||||||
break;
|
break;
|
||||||
case GLX_EXCHANGE_COMPLETE:
|
case GLX_EXCHANGE_COMPLETE_INTEL:
|
||||||
break;
|
break;
|
||||||
case GLX_BLIT_COMPLETE:
|
case GLX_BLIT_COMPLETE_INTEL:
|
||||||
break;
|
break;
|
||||||
case GLX_FLIP_COMPLETE:
|
case GLX_FLIP_COMPLETE_INTEL:
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* client doesn't support server event */
|
/* client doesn't support server event */
|
||||||
|
|
Loading…
Reference in New Issue