[Mesa-dev] [PATCH 2/2] glx: Implement GLX_EXT_no_config_context
Kenneth Graunke
kenneth at whitecape.org
Fri Sep 22 21:32:54 UTC 2017
On Thursday, September 21, 2017 12:59:55 PM PDT Adam Jackson wrote:
> This more or less ports EGL_KHR_no_config_context to GLX.
>
> This is currently a draft extension, under review at:
>
> https://github.com/KhronosGroup/OpenGL-Registry/pull/102
>
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
> src/glx/create_context.c | 37 +++++++++++++++++++++++--------------
> src/glx/glxextensions.c | 1 +
> src/glx/glxextensions.h | 1 +
> 3 files changed, 25 insertions(+), 14 deletions(-)
>
> diff --git a/src/glx/create_context.c b/src/glx/create_context.c
> index 38e949ab4c..d855699743 100644
> --- a/src/glx/create_context.c
> +++ b/src/glx/create_context.c
> @@ -47,21 +47,11 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config,
> xcb_generic_error_t *err;
> xcb_void_cookie_t cookie;
> unsigned dummy_err = 0;
> + int screen = -1;
>
> -
> - if (dpy == NULL || cfg == NULL)
> - return NULL;
> -
> - /* This means that either the caller passed the wrong display pointer or
> - * one of the internal GLX data structures (probably the fbconfig) has an
> - * error. There is nothing sensible to do, so return an error.
> - */
> - psc = GetGLXScreenConfigs(dpy, cfg->screen);
> - if (psc == NULL)
> + if (dpy == NULL)
> return NULL;
>
> - assert(cfg->screen == psc->scr);
> -
> /* Count the number of attributes specified by the application. All
> * attributes appear in pairs, except the terminating None.
> */
> @@ -70,6 +60,25 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config,
> /* empty */ ;
> }
>
> + if (cfg) {
> + screen = cfg->screen;
> + } else {
> + int i;
> + for (i = 0; i < num_attribs; i++)
for (int i = 0; i < num_attribs; i++) {
> + if (attrib_list[i * 2] == GLX_SCREEN)
> + screen = attrib_list[i * 2 + 1];
(please use curly braces in the loop)
This look good to me - are there tests of any kind? Otherwise, it's hard to
know if there's other code that's going to blow up without an FBconfig...
Regardless,
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
> + }
> +
> + /* This means that either the caller passed the wrong display pointer or
> + * one of the internal GLX data structures (probably the fbconfig) has an
> + * error. There is nothing sensible to do, so return an error.
> + */
> + psc = GetGLXScreenConfigs(dpy, screen);
> + if (psc == NULL)
> + return NULL;
> +
> + assert(screen == psc->scr);
> +
> if (direct && psc->vtable->create_context_attribs) {
> /* GLX drops the error returned by the driver. The expectation is that
> * an error will also be returned by the server. The server's error
> @@ -104,8 +113,8 @@ glXCreateContextAttribsARB(Display *dpy, GLXFBConfig config,
> cookie =
> xcb_glx_create_context_attribs_arb_checked(c,
> gc->xid,
> - cfg->fbconfigID,
> - cfg->screen,
> + cfg ? cfg->fbconfigID : 0,
> + screen,
> gc->share_xid,
> gc->isDirect,
> num_attribs,
> diff --git a/src/glx/glxextensions.c b/src/glx/glxextensions.c
> index 6882e442fe..64f8c2fe16 100644
> --- a/src/glx/glxextensions.c
> +++ b/src/glx/glxextensions.c
> @@ -145,6 +145,7 @@ static const struct extension_info known_glx_extensions[] = {
> { GLX(EXT_fbconfig_packed_float), VER(0,0), Y, Y, N, N },
> { GLX(EXT_framebuffer_sRGB), VER(0,0), Y, Y, N, N },
> { GLX(EXT_import_context), VER(0,0), Y, Y, N, N },
> + { GLX(EXT_no_config_context), VER(0,0), Y, Y, N, Y },
> { GLX(EXT_texture_from_pixmap), VER(0,0), Y, N, N, N },
> { GLX(EXT_visual_info), VER(0,0), Y, Y, N, N },
> { GLX(EXT_visual_rating), VER(0,0), Y, Y, N, N },
> diff --git a/src/glx/glxextensions.h b/src/glx/glxextensions.h
> index 6225742da5..52d7dc08eb 100644
> --- a/src/glx/glxextensions.h
> +++ b/src/glx/glxextensions.h
> @@ -49,6 +49,7 @@ enum
> EXT_fbconfig_packed_float_bit,
> EXT_framebuffer_sRGB_bit,
> EXT_import_context_bit,
> + EXT_no_config_context_bit,
> EXT_texture_from_pixmap_bit,
> EXT_visual_info_bit,
> EXT_visual_rating_bit,
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170922/c5cfbc9a/attachment.sig>
More information about the mesa-dev
mailing list