XCreatePixmap doesn't like that. Fixes piglit regression if the
GL implementation exposes RGB10 depth 30 FBConfigs, but the X-Screen
is set to default DefaultDepth of 24 bits, and therefore does not
support depth 30 pixmaps.

On RGB10 enabled Mesa fixes these tests on depth 24 screen:

glx-visuals-depth -pixmap
glx-visuals-stencil -pixmap

v2: Switch from checking against DefaultDepth of root window
    to checking against XListDepths() list of supported depths,
    as suggested by Michel.

Signed-off-by: Mario Kleiner <mario.kleiner...@gmail.com>
Cc: Michel Dänzer <michel.daen...@amd.com>
---
 tests/util/piglit-glx-util.c | 17 ++++++++++++++++-
 1 file changed, 16 insertions(+), 1 deletion(-)

diff --git a/tests/util/piglit-glx-util.c b/tests/util/piglit-glx-util.c
index 95e33ae..eca3249 100644
--- a/tests/util/piglit-glx-util.c
+++ b/tests/util/piglit-glx-util.c
@@ -269,10 +269,12 @@ piglit_glx_iterate_pixmap_fbconfigs(enum piglit_result 
(*draw)(Display *dpy,
        int screen;
        GLXFBConfig *configs;
        int n_configs;
-       int i;
+       int i, j;
        bool any_fail = false;
        bool any_pass = false;
        Window root_win;
+       int *depths;
+       int n_depths;
 
        Display *dpy = XOpenDisplay(NULL);
        if (!dpy) {
@@ -288,6 +290,12 @@ piglit_glx_iterate_pixmap_fbconfigs(enum piglit_result 
(*draw)(Display *dpy,
                piglit_report_result(PIGLIT_SKIP);
        }
 
+       depths = XListDepths(dpy, screen, &n_depths);
+       if (!depths) {
+               fprintf(stderr, "No supported screen depths\n");
+               piglit_report_result(PIGLIT_SKIP);
+       }
+
        for (i = 0; i < n_configs; i++) {
                GLXFBConfig config = configs[i];
                enum piglit_result result;
@@ -305,6 +313,11 @@ piglit_glx_iterate_pixmap_fbconfigs(enum piglit_result 
(*draw)(Display *dpy,
 
                glXGetFBConfigAttrib(dpy, config, GLX_BUFFER_SIZE,
                                     &depth);
+
+               for (j = 0; (j < n_depths) && (depth != depths[j]); j++);
+               if (j == n_depths)
+                       continue;
+
                ctx = glXCreateNewContext(dpy, config, GLX_RGBA_TYPE,
                                          NULL, true);
                pix = XCreatePixmap(dpy, root_win,
@@ -323,6 +336,8 @@ piglit_glx_iterate_pixmap_fbconfigs(enum piglit_result 
(*draw)(Display *dpy,
                glXDestroyContext(dpy, ctx);
        }
 
+       XFree(depths);
+
        if (any_fail)
                return PIGLIT_FAIL;
        else if (any_pass)
-- 
2.7.4

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to