Mesa (main): glx: fix querying GLX_FBCONFIG_ID for Window

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Dec 16 02:11:20 UTC 2021


Module: Mesa
Branch: main
Commit: 1cb5c1775b0a647600d3159c287063bccd0cc38c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=1cb5c1775b0a647600d3159c287063bccd0cc38c

Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Date:   Mon Dec 13 15:07:13 2021 +0100

glx: fix querying GLX_FBCONFIG_ID for Window

This commit fixes apps using the following sequence:
1. XCreateWindow(dpy) -> win
2. glXCreateContextAttribsARB(dpy, ...) -> ctx
3. glXMakeCurrent(dpy, win, ctx)
4. glXQueryDrawable(dpy, win, GLX_FBCONFIG_ID, ...)

glXQueryDrawable returned 0 (while correctly returning a valid
GLXFCONFIG_ID for other types of drawables).

This commit adds the same dance as driInferDrawableConfig to get
the GLX visual from the Window, and then the GLXFBCONFIG_ID of
this visual.

This fixes:
* piglit: glx-query-drawable --attr=GLX_FBCONFIG_ID --type=WINDOW
* Maya which uses the config ID from step 4 as an input to
glXChooseFBConfig.

Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14174>

---

 src/broadcom/ci/v3d-rpi4-fails.txt                 |  1 -
 src/broadcom/ci/vc4-rpi3-fails.txt                 |  1 -
 src/freedreno/ci/freedreno-a307-fails.txt          |  1 -
 src/freedreno/ci/freedreno-a530-fails.txt          |  1 -
 src/freedreno/ci/freedreno-a630-fails.txt          |  1 -
 src/gallium/drivers/iris/ci/iris-amly-fails.txt    |  3 --
 .../drivers/llvmpipe/ci/llvmpipe-quick_gl.txt      |  1 -
 .../radeonsi/ci/navi10-piglit-quick-fail.csv       |  1 -
 .../radeonsi/ci/raven-piglit-quick-fail.csv        |  1 -
 .../ci/sienna_cichlid-piglit-quick-fail.csv        |  1 -
 src/gallium/drivers/softpipe/ci/softpipe-quick.txt |  1 -
 src/gallium/drivers/zink/ci/zink-lvp-fails.txt     |  1 -
 src/gallium/drivers/zink/ci/zink-radv-fails.txt    |  1 -
 src/glx/glx_pbuffer.c                              | 41 ++++++++++++++++++++++
 src/panfrost/ci/panfrost-g52-fails.txt             |  1 -
 15 files changed, 41 insertions(+), 16 deletions(-)

diff --git a/src/broadcom/ci/v3d-rpi4-fails.txt b/src/broadcom/ci/v3d-rpi4-fails.txt
index 0d1e3cc2002..7efeb73382c 100644
--- a/src/broadcom/ci/v3d-rpi4-fails.txt
+++ b/src/broadcom/ci/v3d-rpi4-fails.txt
@@ -1,7 +1,6 @@
 glx at glx-make-current,Crash
 glx at glx-multi-window-single-context,Fail
 glx at glx-multithread-buffer,Fail
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx-swap-pixmap-bad,Fail
 glx at glx-visuals-depth -pixmap,Crash
 glx at glx-visuals-stencil -pixmap,Crash
diff --git a/src/broadcom/ci/vc4-rpi3-fails.txt b/src/broadcom/ci/vc4-rpi3-fails.txt
index ec52369b08e..7d397f2aceb 100644
--- a/src/broadcom/ci/vc4-rpi3-fails.txt
+++ b/src/broadcom/ci/vc4-rpi3-fails.txt
@@ -420,7 +420,6 @@ glx at glx-copy-sub-buffer samples=2,Crash
 glx at glx-copy-sub-buffer samples=4,Crash
 glx at glx-make-current,Crash
 glx at glx-multithread-buffer,Fail
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx-swap-pixmap-bad,Fail
 glx at glx-visuals-depth -pixmap,Crash
 glx at glx-visuals-depth,Crash
diff --git a/src/freedreno/ci/freedreno-a307-fails.txt b/src/freedreno/ci/freedreno-a307-fails.txt
index 2aaec126d0f..c4717672d61 100644
--- a/src/freedreno/ci/freedreno-a307-fails.txt
+++ b/src/freedreno/ci/freedreno-a307-fails.txt
@@ -161,7 +161,6 @@ spec at glsl-1.30@execution at interpolation@interpolation-noperspective-other-smooth-
 
 glx at glx-make-current,Crash
 glx at glx-multi-window-single-context,Fail
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx-swap-pixmap-bad,Fail
 glx at glx-visuals-depth -pixmap,Crash
 glx at glx-visuals-stencil -pixmap,Crash
diff --git a/src/freedreno/ci/freedreno-a530-fails.txt b/src/freedreno/ci/freedreno-a530-fails.txt
index 19bead612d7..314a8380f96 100644
--- a/src/freedreno/ci/freedreno-a530-fails.txt
+++ b/src/freedreno/ci/freedreno-a530-fails.txt
@@ -133,7 +133,6 @@ KHR-GLES3.packed_pixels.varied_rectangle.rgba32ui,Fail
 
 glx at glx-make-current,Crash
 glx at glx-multi-window-single-context,Fail
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx-swap-pixmap-bad,Fail
 glx at glx-visuals-depth -pixmap,Crash
 glx at glx-visuals-stencil -pixmap,Crash
diff --git a/src/freedreno/ci/freedreno-a630-fails.txt b/src/freedreno/ci/freedreno-a630-fails.txt
index 6263bf76ef8..ccf7d5a98c7 100644
--- a/src/freedreno/ci/freedreno-a630-fails.txt
+++ b/src/freedreno/ci/freedreno-a630-fails.txt
@@ -59,7 +59,6 @@ glx at glx_ext_import_context@make current- single process,Fail
 glx at glx_ext_import_context@query context info,Fail
 glx at glx-make-current,Crash
 glx at glx-multi-window-single-context,Fail
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx-swap-pixmap-bad,Fail
 glx at glx-visuals-depth -pixmap,Crash
 glx at glx-visuals-stencil -pixmap,Crash
diff --git a/src/gallium/drivers/iris/ci/iris-amly-fails.txt b/src/gallium/drivers/iris/ci/iris-amly-fails.txt
index d2449369a98..15e274b213b 100644
--- a/src/gallium/drivers/iris/ci/iris-amly-fails.txt
+++ b/src/gallium/drivers/iris/ci/iris-amly-fails.txt
@@ -54,9 +54,6 @@ glx at glx-make-current,Crash
 
 glx at glx-multi-window-single-context,Fail
 
-# error: no fbconfig id returned
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
-
 glx at glx-swap-pixmap-bad,Fail
 
 # failed to create drawable
diff --git a/src/gallium/drivers/llvmpipe/ci/llvmpipe-quick_gl.txt b/src/gallium/drivers/llvmpipe/ci/llvmpipe-quick_gl.txt
index d13603c0cc5..ef0a8cfe95d 100644
--- a/src/gallium/drivers/llvmpipe/ci/llvmpipe-quick_gl.txt
+++ b/src/gallium/drivers/llvmpipe/ci/llvmpipe-quick_gl.txt
@@ -14,7 +14,6 @@ glx/glx-multithread-makecurrent-2: skip
 glx/glx-multithread-makecurrent-3: skip
 glx/glx-multithread-makecurrent-4: skip
 glx/glx-multithread-texture: fail
-glx/glx-query-drawable-glx_fbconfig_id-window: fail
 glx/glx-swap-copy: fail
 glx/glx-swap-event_async: skip
 glx/glx-swap-event_event: skip
diff --git a/src/gallium/drivers/radeonsi/ci/navi10-piglit-quick-fail.csv b/src/gallium/drivers/radeonsi/ci/navi10-piglit-quick-fail.csv
index af005bf0b01..312ee4bb1fc 100644
--- a/src/gallium/drivers/radeonsi/ci/navi10-piglit-quick-fail.csv
+++ b/src/gallium/drivers/radeonsi/ci/navi10-piglit-quick-fail.csv
@@ -1,6 +1,5 @@
 glx at glx-make-current,Crash
 glx at glx-multi-window-single-context,Fail
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx-visuals-depth -pixmap,Crash
 glx at glx-visuals-stencil -pixmap,Crash
 glx at glx_arb_create_context_es2_profile@invalid opengl es version,Fail
diff --git a/src/gallium/drivers/radeonsi/ci/raven-piglit-quick-fail.csv b/src/gallium/drivers/radeonsi/ci/raven-piglit-quick-fail.csv
index 39d0d205320..26918ae79f4 100644
--- a/src/gallium/drivers/radeonsi/ci/raven-piglit-quick-fail.csv
+++ b/src/gallium/drivers/radeonsi/ci/raven-piglit-quick-fail.csv
@@ -1,6 +1,5 @@
 glx at glx-make-current,Crash
 glx at glx-multi-window-single-context,Fail
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx-visuals-depth -pixmap,Crash
 glx at glx-visuals-stencil -pixmap,Crash
 glx at glx_arb_create_context_es2_profile@invalid opengl es version,Fail
diff --git a/src/gallium/drivers/radeonsi/ci/sienna_cichlid-piglit-quick-fail.csv b/src/gallium/drivers/radeonsi/ci/sienna_cichlid-piglit-quick-fail.csv
index 2f92769b291..a393fbcc4c2 100644
--- a/src/gallium/drivers/radeonsi/ci/sienna_cichlid-piglit-quick-fail.csv
+++ b/src/gallium/drivers/radeonsi/ci/sienna_cichlid-piglit-quick-fail.csv
@@ -1,6 +1,5 @@
 glx at glx-make-current,Crash
 glx at glx-multi-window-single-context,Fail
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx-visuals-depth -pixmap,Crash
 glx at glx-visuals-stencil -pixmap,Crash
 glx at glx_arb_create_context_es2_profile@invalid opengl es version,Fail
diff --git a/src/gallium/drivers/softpipe/ci/softpipe-quick.txt b/src/gallium/drivers/softpipe/ci/softpipe-quick.txt
index 03209b8ece3..6d9d49e910b 100644
--- a/src/gallium/drivers/softpipe/ci/softpipe-quick.txt
+++ b/src/gallium/drivers/softpipe/ci/softpipe-quick.txt
@@ -16,7 +16,6 @@ glx/glx-multithread-makecurrent-1: skip
 glx/glx-multithread-makecurrent-2: skip
 glx/glx-multithread-makecurrent-3: skip
 glx/glx-multithread-makecurrent-4: skip
-glx/glx-query-drawable-glx_fbconfig_id-window: fail
 glx/glx-swap-copy: fail
 glx/glx-swap-event_async: skip
 glx/glx-swap-event_event: skip
diff --git a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt
index 14ecc823074..8a10a7dd147 100644
--- a/src/gallium/drivers/zink/ci/zink-lvp-fails.txt
+++ b/src/gallium/drivers/zink/ci/zink-lvp-fails.txt
@@ -91,7 +91,6 @@ glx at glx-visuals-depth,Crash
 glx at glx-visuals-depth -pixmap,Crash
 glx at glx-visuals-stencil,Crash
 glx at glx-visuals-stencil -pixmap,Crash
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx_arb_create_context_es2_profile@invalid opengl es version,Fail
 glx at glx_arb_create_context_no_error@no error,Fail
 glx at glx_ext_import_context@free context,Fail
diff --git a/src/gallium/drivers/zink/ci/zink-radv-fails.txt b/src/gallium/drivers/zink/ci/zink-radv-fails.txt
index 43779dae9e1..a12f2c72061 100644
--- a/src/gallium/drivers/zink/ci/zink-radv-fails.txt
+++ b/src/gallium/drivers/zink/ci/zink-radv-fails.txt
@@ -656,7 +656,6 @@ glx at glx_ext_import_context@make current- single process,Fail
 glx at glx_ext_import_context@query context info,Fail
 glx at glx-make-current,Crash
 glx at glx-multi-window-single-context,Fail
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx-swap-copy,Fail
 glx at glx-swap-pixmap-bad,Fail
 glx at glx-visuals-depth,Crash
diff --git a/src/glx/glx_pbuffer.c b/src/glx/glx_pbuffer.c
index 7500651529e..f7d9a631377 100644
--- a/src/glx/glx_pbuffer.c
+++ b/src/glx/glx_pbuffer.c
@@ -38,6 +38,9 @@
 #include <limits.h>
 #include "glxextensions.h"
 
+#include <X11/Xlib-xcb.h>
+#include <xcb/xproto.h>
+
 #ifdef GLX_USE_APPLEGL
 #include <pthread.h>
 #include "apple/apple_glx_drawable.h"
@@ -387,6 +390,44 @@ __glXGetDrawableAttribute(Display * dpy, GLXDrawable drawable,
    UnlockDisplay(dpy);
    SyncHandle();
 
+#if defined(GLX_DIRECT_RENDERING) && !defined(GLX_USE_APPLEGL)
+   if (pdraw && attribute == GLX_FBCONFIG_ID && !found && priv && priv->screens != NULL) {
+      /* If we failed to lookup the GLX_FBCONFIG_ID, it may be because the drawable is
+       * a bare Window, so try differently by first figure out its visual, then GLX
+       * visual like driInferDrawableConfig does.
+       */
+      xcb_get_window_attributes_cookie_t cookie = { 0 };
+      xcb_get_window_attributes_reply_t *attr = NULL;
+
+      xcb_connection_t *conn = XGetXCBConnection(dpy);
+
+      if (conn) {
+         cookie = xcb_get_window_attributes(conn, drawable);
+         attr = xcb_get_window_attributes_reply(conn, cookie, NULL);
+         if (attr) {
+            /* Find the Window's GLX Visual */
+            struct glx_config *conf = glx_config_find_visual(pdraw->psc->visuals, attr->visual);
+            free(attr);
+
+            if (conf && conf->screen >= 0 && conf->screen < ScreenCount(dpy)) {
+               /* Then find the GLXFBConfig of the GLX Visual */
+               struct glx_config *c;
+               for (c = priv->screens[conf->screen]->configs; c != NULL;
+                    c = c->next) {
+                  if (!c->visualID)
+                     continue;
+                  if (c->visualID == conf->visualID) {
+                     *value = c->fbconfigID;
+                     found = 1;
+                     break;
+                  }
+               }
+            }
+         }
+      }
+   }
+#endif
+
    return found;
 }
 
diff --git a/src/panfrost/ci/panfrost-g52-fails.txt b/src/panfrost/ci/panfrost-g52-fails.txt
index a8e12d9a4d4..cbfbfbe4a83 100644
--- a/src/panfrost/ci/panfrost-g52-fails.txt
+++ b/src/panfrost/ci/panfrost-g52-fails.txt
@@ -13,7 +13,6 @@ glx at glx_ext_import_context@query context info,Fail
 glx at glx-make-current,Crash
 glx at glx-multithread-clearbuffer,Crash
 glx at glx-multi-window-single-context,Fail
-glx at glx-query-drawable-glx_fbconfig_id-window,Fail
 glx at glx-swap-pixmap-bad,Fail
 glx at glx-visuals-depth -pixmap,Crash
 glx at glx-visuals-stencil -pixmap,Crash



More information about the mesa-commit mailing list