diff options
-rw-r--r-- | src/egl/drivers/dri2/platform_x11.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c index 5d6efea61417..c8c676d2f001 100644 --- a/src/egl/drivers/dri2/platform_x11.c +++ b/src/egl/drivers/dri2/platform_x11.c @@ -766,6 +766,18 @@ dri2_x11_authenticate(_EGLDisplay *disp, uint32_t id) return dri2_x11_do_authenticate(dri2_dpy, id); } +static bool +dri2_x11_config_match_attrib(struct dri2_egl_display *dri2_dpy, + const __DRIconfig *config, + unsigned int attrib, + unsigned int value) +{ + uint32_t config_val; + if (!dri2_dpy->core->getConfigAttrib(config, attrib, &config_val)) + return false; + return config_val == value; +} + static EGLBoolean dri2_x11_add_configs_for_visuals(struct dri2_egl_display *dri2_dpy, _EGLDisplay *disp, bool supports_preserved) @@ -844,6 +856,41 @@ dri2_x11_add_configs_for_visuals(struct dri2_egl_display *dri2_dpy, xcb_depth_next(&d); } + /* Add a 565-no-depth-no-stencil pbuffer-only config. If X11 is depth 24, + * we wouldn't have 565 available, which the CTS demands. + */ + for (int j = 0; dri2_dpy->driver_configs[j]; j++) { + const __DRIconfig *config = dri2_dpy->driver_configs[j]; + const EGLint config_attrs[] = { + EGL_NATIVE_VISUAL_ID, 0, + EGL_NATIVE_VISUAL_TYPE, EGL_NONE, + EGL_NONE + }; + EGLint surface_type = EGL_PBUFFER_BIT; + unsigned int rgba_masks[4] = { + 0x1f << 11, + 0x3f << 5, + 0x1f << 0, + 0, + }; + + /* Check that we've found single-sample, no depth, no stencil. */ + if (!dri2_x11_config_match_attrib(dri2_dpy, config, + __DRI_ATTRIB_DEPTH_SIZE, 0) || + !dri2_x11_config_match_attrib(dri2_dpy, config, + __DRI_ATTRIB_STENCIL_SIZE, 0) || + !dri2_x11_config_match_attrib(dri2_dpy, config, + __DRI_ATTRIB_SAMPLES, 0)) { + continue; + } + + if (dri2_add_config(disp, config, config_count + 1, surface_type, + config_attrs, rgba_masks)) { + config_count++; + break; + } + } + if (!config_count) { _eglLog(_EGL_WARNING, "DRI2: failed to create any config"); return EGL_FALSE; |