From 96d19e898acb56d8fc6e6febbc6498f67cdd66a0 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Thu, 24 Sep 2020 17:08:27 -0400 Subject: [PATCH] glx: Implement GLX_EXT_get_drawable_type Trivial extension to let the client query whether this is a window pixmap or pbuffer. Mostly for Mesa's convenience when setting up drawable state, but plausibly useful for apps and middleware as well. Upstream OpenGL Registry merge request: https://github.com/KhronosGroup/OpenGL-Registry/pull/425 --- glx/extension_string.c | 1 + glx/extension_string.h | 1 + glx/glxcmds.c | 10 +++++++++- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/glx/extension_string.c b/glx/extension_string.c index d7e2c7242..a5b8c747e 100644 --- a/glx/extension_string.c +++ b/glx/extension_string.c @@ -86,6 +86,7 @@ static const struct extension_info known_glx_extensions[] = { { GLX(EXT_create_context_es2_profile), VER(0,0), N, }, { GLX(EXT_fbconfig_packed_float), VER(0,0), N, }, { GLX(EXT_framebuffer_sRGB), VER(0,0), N, }, + { GLX(EXT_get_drawable_type), VER(0,0), Y, }, { GLX(EXT_import_context), VER(0,0), N, }, { GLX(EXT_libglvnd), VER(0,0), N, }, { GLX(EXT_no_config_context), VER(0,0), N, }, diff --git a/glx/extension_string.h b/glx/extension_string.h index eab385a3c..5c8f981d9 100644 --- a/glx/extension_string.h +++ b/glx/extension_string.h @@ -47,6 +47,7 @@ enum { EXT_create_context_es_profile_bit, EXT_create_context_es2_profile_bit, EXT_fbconfig_packed_float_bit, + EXT_get_drawable_type_bit, EXT_import_context_bit, EXT_libglvnd_bit, EXT_no_config_context_bit, diff --git a/glx/glxcmds.c b/glx/glxcmds.c index c29b62676..98ddc7e5e 100644 --- a/glx/glxcmds.c +++ b/glx/glxcmds.c @@ -1860,7 +1860,7 @@ DoGetDrawableAttributes(__GLXclientState * cl, XID drawId) xGLXGetDrawableAttributesReply reply; __GLXdrawable *pGlxDraw = NULL; DrawablePtr pDraw; - CARD32 attributes[18]; + CARD32 attributes[20]; int num = 0, error; if (!validGlxDrawable(client, drawId, GLX_DRAWABLE_ANY, @@ -1897,6 +1897,14 @@ DoGetDrawableAttributes(__GLXclientState * cl, XID drawId) ATTRIB(GLX_STEREO_TREE_EXT, 0); } } + + /* GLX_EXT_get_drawable_type */ + if (!pGlxDraw || pGlxDraw->type == GLX_DRAWABLE_WINDOW) + ATTRIB(GLX_DRAWABLE_TYPE, GLX_WINDOW_BIT); + else if (pGlxDraw->type == GLX_DRAWABLE_PIXMAP) + ATTRIB(GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT); + else if (pGlxDraw->type == GLX_DRAWABLE_PBUFFER) + ATTRIB(GLX_DRAWABLE_TYPE, GLX_PBUFFER_BIT); #undef ATTRIB reply = (xGLXGetDrawableAttributesReply) {