summaryrefslogtreecommitdiff
path: root/src/egl/drivers/dri2/platform_wayland.c
diff options
context:
space:
mode:
authorKevin Strasser <kevin.strasser@intel.com>2019-01-24 16:32:48 -0800
committerAdam Jackson <ajax@nwnk.net>2019-08-21 18:36:57 +0000
commit7b4ed2b513efad86616e932eb4bca20557addc78 (patch)
tree9379268ee850c2bac41c54eea8a10ae0a5b9aea1 /src/egl/drivers/dri2/platform_wayland.c
parent3562f48c9d58793429fc5ea655b8b4629b495ce0 (diff)
downloadmesa-7b4ed2b513efad86616e932eb4bca20557addc78.tar.gz
egl: Convert configs to use shifts and sizes instead of masks
Change dri2_add_config to take arrays of shifts and sizes, and compare with those set in the dri config. Convert all platform driver masks to shifts and sizes. In order to handle older drivers, where shift attributes aren't available, we fall back to the mask attributes and compute the shifts with ffs. Signed-off-by: Kevin Strasser <kevin.strasser@intel.com> Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Diffstat (limited to 'src/egl/drivers/dri2/platform_wayland.c')
-rw-r--r--src/egl/drivers/dri2/platform_wayland.c49
1 files changed, 30 insertions, 19 deletions
diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c
index 70a7bef9b11..6f538835617 100644
--- a/src/egl/drivers/dri2/platform_wayland.c
+++ b/src/egl/drivers/dri2/platform_wayland.c
@@ -69,49 +69,57 @@ static const struct dri2_wl_visual {
*/
int alt_dri_image_format;
int bpp;
- unsigned int rgba_masks[4];
+ int rgba_shifts[4];
+ unsigned int rgba_sizes[4];
} dri2_wl_visuals[] = {
{
"XRGB2101010",
WL_DRM_FORMAT_XRGB2101010, WL_SHM_FORMAT_XRGB2101010,
__DRI_IMAGE_FORMAT_XRGB2101010, __DRI_IMAGE_FORMAT_XBGR2101010, 32,
- { 0x3ff00000, 0x000ffc00, 0x000003ff, 0x00000000 }
+ { 20, 10, 0, -1 },
+ { 10, 10, 10, 0 },
},
{
"ARGB2101010",
WL_DRM_FORMAT_ARGB2101010, WL_SHM_FORMAT_ARGB2101010,
__DRI_IMAGE_FORMAT_ARGB2101010, __DRI_IMAGE_FORMAT_ABGR2101010, 32,
- { 0x3ff00000, 0x000ffc00, 0x000003ff, 0xc0000000 }
+ { 20, 10, 0, 30 },
+ { 10, 10, 10, 2 },
},
{
"XBGR2101010",
WL_DRM_FORMAT_XBGR2101010, WL_SHM_FORMAT_XBGR2101010,
__DRI_IMAGE_FORMAT_XBGR2101010, __DRI_IMAGE_FORMAT_XRGB2101010, 32,
- { 0x000003ff, 0x000ffc00, 0x3ff00000, 0x00000000 }
+ { 0, 10, 20, -1 },
+ { 10, 10, 10, 0 },
},
{
"ABGR2101010",
WL_DRM_FORMAT_ABGR2101010, WL_SHM_FORMAT_ABGR2101010,
__DRI_IMAGE_FORMAT_ABGR2101010, __DRI_IMAGE_FORMAT_ARGB2101010, 32,
- { 0x000003ff, 0x000ffc00, 0x3ff00000, 0xc0000000 }
+ { 0, 10, 20, 30 },
+ { 10, 10, 10, 2 },
},
{
"XRGB8888",
WL_DRM_FORMAT_XRGB8888, WL_SHM_FORMAT_XRGB8888,
__DRI_IMAGE_FORMAT_XRGB8888, __DRI_IMAGE_FORMAT_NONE, 32,
- { 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000 }
+ { 16, 8, 0, -1 },
+ { 8, 8, 8, 0 },
},
{
"ARGB8888",
WL_DRM_FORMAT_ARGB8888, WL_SHM_FORMAT_ARGB8888,
__DRI_IMAGE_FORMAT_ARGB8888, __DRI_IMAGE_FORMAT_NONE, 32,
- { 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000 }
+ { 16, 8, 0, 24 },
+ { 8, 8, 8, 8 },
},
{
"RGB565",
WL_DRM_FORMAT_RGB565, WL_SHM_FORMAT_RGB565,
__DRI_IMAGE_FORMAT_RGB565, __DRI_IMAGE_FORMAT_NONE, 16,
- { 0xf800, 0x07e0, 0x001f, 0x0000 }
+ { 11, 5, 0, -1 },
+ { 5, 6, 5, 0 },
},
};
@@ -123,20 +131,22 @@ static int
dri2_wl_visual_idx_from_config(struct dri2_egl_display *dri2_dpy,
const __DRIconfig *config)
{
- unsigned int red, green, blue, alpha;
+ int shifts[4];
+ unsigned int sizes[4];
- dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_RED_MASK, &red);
- dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_GREEN_MASK, &green);
- dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_BLUE_MASK, &blue);
- dri2_dpy->core->getConfigAttrib(config, __DRI_ATTRIB_ALPHA_MASK, &alpha);
+ dri2_get_shifts_and_sizes(dri2_dpy->core, config, shifts, sizes);
for (unsigned int i = 0; i < ARRAY_SIZE(dri2_wl_visuals); i++) {
const struct dri2_wl_visual *wl_visual = &dri2_wl_visuals[i];
- if (red == wl_visual->rgba_masks[0] &&
- green == wl_visual->rgba_masks[1] &&
- blue == wl_visual->rgba_masks[2] &&
- alpha == wl_visual->rgba_masks[3]) {
+ if (shifts[0] == wl_visual->rgba_shifts[0] &&
+ shifts[1] == wl_visual->rgba_shifts[1] &&
+ shifts[2] == wl_visual->rgba_shifts[2] &&
+ shifts[3] == wl_visual->rgba_shifts[3] &&
+ sizes[0] == wl_visual->rgba_sizes[0] &&
+ sizes[1] == wl_visual->rgba_sizes[1] &&
+ sizes[2] == wl_visual->rgba_sizes[2] &&
+ sizes[3] == wl_visual->rgba_sizes[3]) {
return i;
}
}
@@ -1354,7 +1364,7 @@ dri2_wl_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp)
continue;
dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i],
- count + 1, EGL_WINDOW_BIT, NULL, dri2_wl_visuals[j].rgba_masks);
+ count + 1, EGL_WINDOW_BIT, NULL, dri2_wl_visuals[j].rgba_shifts, dri2_wl_visuals[j].rgba_sizes);
if (dri2_conf) {
if (dri2_conf->base.ConfigID == count + 1)
count++;
@@ -1387,7 +1397,8 @@ dri2_wl_add_configs_for_visuals(_EGLDriver *drv, _EGLDisplay *disp)
*/
dri2_conf = dri2_add_config(disp, dri2_dpy->driver_configs[i],
count + 1, EGL_WINDOW_BIT, NULL,
- dri2_wl_visuals[c].rgba_masks);
+ dri2_wl_visuals[c].rgba_shifts,
+ dri2_wl_visuals[c].rgba_sizes);
if (dri2_conf) {
if (dri2_conf->base.ConfigID == count + 1)
count++;