summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Bragg <robert@linux.intel.com>2010-01-20 03:01:14 +0000
committerJesse Barnes <jbarnes@virtuousgeek.org>2010-01-25 15:40:56 -0800
commit7a9329ba99fe1242c07fbf4fd04e7a4dbeba2e72 (patch)
treed5e6f61d16534c8d8f9422a7d7a0038a55047bcf
parent9b22427911ad27efc1f36faee9462c6082d0417c (diff)
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>
-rw-r--r--include/GL/glx.h6
-rw-r--r--include/GL/glxext.h8
-rw-r--r--src/glx/x11/dri2.c20
-rw-r--r--src/glx/x11/glxclient.h5
-rw-r--r--src/glx/x11/glxext.c7
5 files changed, 31 insertions, 15 deletions
diff --git a/include/GL/glx.h b/include/GL/glx.h
index 82b0f22114..fd53964ea0 100644
--- a/include/GL/glx.h
+++ b/include/GL/glx.h
@@ -518,8 +518,12 @@ typedef struct {
} GLXPbufferClobberEvent;
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;
- GLXDrawable drawable;
int64_t ust;
int64_t msc;
int64_t sbc;
diff --git a/include/GL/glxext.h b/include/GL/glxext.h
index 36ee3665df..50740dd29d 100644
--- a/include/GL/glxext.h
+++ b/include/GL/glxext.h
@@ -698,10 +698,10 @@ typedef void ( * PFNGLXJOINSWAPGROUPSGIXPROC) (Display *dpy, GLXDrawable drawabl
#ifndef GLX_INTEL_swap_event
#define GLX_INTEL_swap_event
-#define GLX_BUFFER_SWAP_COMPLETE_MASK 0x10000000
-#define GLX_EXCHANGE_COMPLETE 0x8024
-#define GLX_BLIT_COMPLETE 0x8025
-#define GLX_FLIP_COMPLETE 0x8026
+#define GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x10000000
+#define GLX_EXCHANGE_COMPLETE_INTEL 0x8024
+#define GLX_BLIT_COMPLETE_INTEL 0x8025
+#define GLX_FLIP_COMPLETE_INTEL 0x8026
#endif
#ifndef GLX_SGIX_swap_barrier
diff --git a/src/glx/x11/dri2.c b/src/glx/x11/dri2.c
index 2cb5d3463a..832935a3ba 100644
--- a/src/glx/x11/dri2.c
+++ b/src/glx/x11/dri2.c
@@ -81,12 +81,15 @@ static XEXT_GENERATE_FIND_DISPLAY (DRI2FindDisplay,
dri2Info,
dri2ExtensionName,
&dri2ExtensionHooks,
- 0, NULL)
+ 1, NULL)
static Bool
DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire)
{
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);
@@ -95,21 +98,26 @@ DRI2WireToEvent(Display *dpy, XEvent *event, xEvent *wire)
{
GLXBufferSwapComplete *aevent = (GLXBufferSwapComplete *)event;
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:
- aevent->event_type = GLX_EXCHANGE_COMPLETE;
+ aevent->event_type = GLX_EXCHANGE_COMPLETE_INTEL;
break;
case DRI2_BLIT_COMPLETE:
- aevent->event_type = GLX_BLIT_COMPLETE;
+ aevent->event_type = GLX_BLIT_COMPLETE_INTEL;
break;
case DRI2_FLIP_COMPLETE:
- aevent->event_type = GLX_FLIP_COMPLETE;
+ aevent->event_type = GLX_FLIP_COMPLETE_INTEL;
break;
default:
/* unknown swap completion type */
return False;
}
- aevent->drawable = awire->drawable;
aevent->ust = ((CARD64)awire->ust_hi << 32) | awire->ust_lo;
aevent->msc = ((CARD64)awire->msc_hi << 32) | awire->msc_lo;
aevent->sbc = ((CARD64)awire->sbc_hi << 32) | awire->sbc_lo;
diff --git a/src/glx/x11/glxclient.h b/src/glx/x11/glxclient.h
index ded4f5a434..e0b286b688 100644
--- a/src/glx/x11/glxclient.h
+++ b/src/glx/x11/glxclient.h
@@ -41,6 +41,7 @@
#define NEED_EVENTS
#include <X11/Xproto.h>
#include <X11/Xlibint.h>
+#include <X11/extensions/extutil.h>
#define GLX_GLXEXT_PROTOTYPES
#include <GL/glx.h>
#include <GL/glxext.h>
@@ -793,6 +794,10 @@ extern GLboolean __glXGetMscRateOML(Display * dpy, GLXDrawable drawable,
GLboolean
__driGetMscRateOML(__DRIdrawable * draw,
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 /* !__GLX_client_h__ */
diff --git a/src/glx/x11/glxext.c b/src/glx/x11/glxext.c
index fe65216c41..09bb850319 100644
--- a/src/glx/x11/glxext.c
+++ b/src/glx/x11/glxext.c
@@ -120,7 +120,6 @@ static /* const */ XExtensionHooks __glXExtensionHooks = {
__glXErrorString, /* error_string */
};
-static
XEXT_GENERATE_FIND_DISPLAY(__glXFindDisplay, __glXExtensionInfo,
__glXExtensionName, &__glXExtensionHooks,
__GLX_NUMBER_EVENTS, NULL)
@@ -194,11 +193,11 @@ __glXEventToWire(Display *dpy, XEvent *event, xEvent *wire)
break;
case GLX_SAVED:
break;
- case GLX_EXCHANGE_COMPLETE:
+ case GLX_EXCHANGE_COMPLETE_INTEL:
break;
- case GLX_BLIT_COMPLETE:
+ case GLX_BLIT_COMPLETE_INTEL:
break;
- case GLX_FLIP_COMPLETE:
+ case GLX_FLIP_COMPLETE_INTEL:
break;
default:
/* client doesn't support server event */