From df479cffccbdc71d13596bee38cd6434adf5f229 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Wed, 25 Sep 2013 14:57:22 -0700 Subject: [PATCH] egl_dri2: Set NativeVisualID to the matching GBM config for the gbm platform The EGLConfig doesn't have the rgba masks, only the rgba sizes. To make sure a config is usable with a given GBM/KMS format, we need a way to make sure the formats really match. --- src/egl/drivers/dri2/platform_drm.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c index fb28bd91c0a..7b1e3a17797 100644 --- a/src/egl/drivers/dri2/platform_drm.c +++ b/src/egl/drivers/dri2/platform_drm.c @@ -476,9 +476,28 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) dri2_setup_screen(disp); - for (i = 0; dri2_dpy->driver_configs[i]; i++) + for (i = 0; dri2_dpy->driver_configs[i]; i++) { + EGLint format, attr_list[3]; + unsigned int mask; + + dri2_dpy->core->getConfigAttrib(dri2_dpy->driver_configs[i], + __DRI_ATTRIB_RED_MASK, &mask); + if (mask == 0x3ff00000) + format = GBM_FORMAT_XRGB2101010; + else if (mask == 0x00ff0000) + format = GBM_FORMAT_XRGB8888; + else if (mask == 0xf800) + format = GBM_FORMAT_RGB565; + else + continue; + + attr_list[0] = EGL_NATIVE_VISUAL_ID; + attr_list[1] = format; + attr_list[2] = EGL_NONE; + dri2_add_config(disp, dri2_dpy->driver_configs[i], - i + 1, EGL_WINDOW_BIT, NULL, NULL); + i + 1, EGL_WINDOW_BIT, attr_list, NULL); + } drv->API.CreateWindowSurface = dri2_create_window_surface; drv->API.DestroySurface = dri2_destroy_surface; -- 2.30.2