[Mesa-dev] [PATCH 2/2] glx: Hack around versions of XCB that lack GLX_ARB_create_context support
Ian Romanick
idr at freedesktop.org
Mon Jan 2 17:44:31 PST 2012
From: Ian Romanick <ian.d.romanick at intel.com>
A lot of tests in 'make check' will fail under these circumstances,
but at least the build should work.
Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
---
src/glx/create_context.c | 14 ++++++++++++++
src/glx/glxextensions.c | 9 +++++++++
2 files changed, 23 insertions(+), 0 deletions(-)
diff --git a/src/glx/create_context.c b/src/glx/create_context.c
index 41f0805..11f9340 100644
--- a/src/glx/create_context.c
+++ b/src/glx/create_context.c
@@ -94,6 +94,7 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config,
* the protocol error and handle it. Part of handling the error is freeing
* the possibly non-NULL value returned by this function.
*/
+#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB
cookie =
xcb_glx_create_context_attribs_arb_checked(c,
gc->xid,
@@ -105,6 +106,19 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config,
(const uint32_t *)
attrib_list);
err = xcb_request_check(c, cookie);
+#else
+ /* This is a hugely ugly hack to make things compile on systems that lack
+ * the proper XCB version.
+ */
+ memset(&cookie, 0, sizeof(cookie));
+
+ err = calloc(1, sizeof(*err));
+ err->error_code = BadRequest;
+ err->sequence = dpy->request;
+ err->resource_id = gc->xid;
+ err->minor_code = gc->majorOpcode;
+ err->major_code = 34;
+#endif
if (err != NULL) {
gc->vtable->destroy(gc);
gc = NULL;
diff --git a/src/glx/glxextensions.c b/src/glx/glxextensions.c
index 73b84dc..0fcd8a9 100644
--- a/src/glx/glxextensions.c
+++ b/src/glx/glxextensions.c
@@ -71,8 +71,13 @@ struct extension_info
/* *INDENT-OFF* */
static const struct extension_info known_glx_extensions[] = {
+#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB
{ GLX(ARB_create_context), VER(0,0), Y, N, N, N },
{ GLX(ARB_create_context_profile), VER(0,0), Y, N, N, N },
+#else
+ { GLX(ARB_create_context), VER(0,0), N, N, N, N },
+ { GLX(ARB_create_context_profile), VER(0,0), N, N, N, N },
+#endif
{ GLX(ARB_get_proc_address), VER(1,4), Y, N, Y, N },
{ GLX(ARB_multisample), VER(1,4), Y, Y, N, N },
{ GLX(ATI_pixel_format_float), VER(0,0), N, N, N, N },
@@ -80,7 +85,11 @@ static const struct extension_info known_glx_extensions[] = {
{ GLX(EXT_visual_info), VER(0,0), Y, Y, N, N },
{ GLX(EXT_visual_rating), VER(0,0), Y, Y, N, N },
{ GLX(EXT_framebuffer_sRGB), VER(0,0), Y, Y, N, N },
+#ifdef XCB_GLX_CREATE_CONTEXT_ATTRIBS_ARB
{ GLX(EXT_create_context_es2_profile), VER(0,0), Y, N, N, Y },
+#else
+ { GLX(EXT_create_context_es2_profile), VER(0,0), N, N, N, N },
+#endif
{ GLX(MESA_copy_sub_buffer), VER(0,0), Y, N, N, N },
{ GLX(MESA_multithread_makecurrent),VER(0,0), Y, N, Y, N },
{ GLX(MESA_swap_control), VER(0,0), Y, N, N, Y },
--
1.7.6.4
More information about the mesa-dev
mailing list