This hides the flush control attribute from the CreateContextAttribs request. Older X servers don't know about it and will throw an error, and at least for purposes of testing it's not something that matters.
Signed-off-by: Adam Jackson <a...@redhat.com> --- src/glx/create_context.c | 19 ++++++++++++++++++- src/glx/glxextensions.c | 2 +- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/glx/create_context.c b/src/glx/create_context.c index 38e949a..e9b8c6f 100644 --- a/src/glx/create_context.c +++ b/src/glx/create_context.c @@ -48,6 +48,8 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config, xcb_void_cookie_t cookie; unsigned dummy_err = 0; + int attribs[64]; + if (dpy == NULL || cfg == NULL) return NULL; @@ -93,6 +95,21 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config, gc->xid = xcb_generate_id(c); gc->share_xid = (share != NULL) ? share->xid : 0; + /* hide flush from xserver */ + memset(attribs, 0, sizeof(attribs)); + if (num_attribs) { + int i, len = (num_attribs * 2 + 1) * sizeof(int); + memcpy(attribs, attrib_list, len); + + for (i = 0; attrib_list[i]; i += 2) { + if (attrib_list[i] == GLX_CONTEXT_RELEASE_BEHAVIOR_ARB) { + memcpy(&(attribs[i]), &(attrib_list[i+1]), len - (i*sizeof(int))); + num_attribs--; + break; + } + } + } + /* The manual pages for glXCreateContext and glXCreateNewContext say: * * "NULL is returned if execution fails on the client side." @@ -110,7 +127,7 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config, gc->isDirect, num_attribs, (const uint32_t *) - attrib_list); + num_attribs ? attribs : NULL); err = xcb_request_check(c, cookie); if (err != NULL) { gc->vtable->destroy(gc); diff --git a/src/glx/glxextensions.c b/src/glx/glxextensions.c index 4be3c11..fd289d1 100644 --- a/src/glx/glxextensions.c +++ b/src/glx/glxextensions.c @@ -165,7 +165,7 @@ static const struct extension_info known_glx_extensions[] = { { GLX(EXT_texture_from_pixmap), VER(0,0), Y, N, N, N }, { GLX(INTEL_swap_event), VER(0,0), Y, N, N, N }, { GLX(EXT_buffer_age), VER(0,0), Y, N, N, Y }, - { GLX(ARB_context_flush_control), VER(0,0), Y, N, N, N }, + { GLX(ARB_context_flush_control), VER(0,0), Y, N, Y, N }, { NULL } }; -- 2.4.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev