diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index 87ea2bdb3de..79e1cbe25ad 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -2665,6 +2665,8 @@ dri2_num_fourcc_format_planes(EGLint format) case DRM_FORMAT_ABGR2101010: case DRM_FORMAT_RGBA1010102: case DRM_FORMAT_BGRA1010102: + case DRM_FORMAT_ABGR16161616: + case DRM_FORMAT_XBGR16161616: case DRM_FORMAT_XBGR16161616F: case DRM_FORMAT_ABGR16161616F: case DRM_FORMAT_YUYV: diff --git a/src/gallium/frontends/dri/dri_helpers.c b/src/gallium/frontends/dri/dri_helpers.c index e170965bfdd..7b3d869b53a 100644 --- a/src/gallium/frontends/dri/dri_helpers.c +++ b/src/gallium/frontends/dri/dri_helpers.c @@ -446,6 +446,9 @@ static const struct dri2_format_mapping dri2_format_table[] = { { DRM_FORMAT_ABGR16161616, __DRI_IMAGE_FORMAT_ABGR16161616, __DRI_IMAGE_COMPONENTS_RGBA, PIPE_FORMAT_R16G16B16A16_UNORM, 1, { { 0, 0, 0, __DRI_IMAGE_FORMAT_ABGR16161616 } } }, + { DRM_FORMAT_XBGR16161616, __DRI_IMAGE_FORMAT_XBGR16161616, + __DRI_IMAGE_COMPONENTS_RGB, PIPE_FORMAT_R16G16B16X16_UNORM, 1, + { { 0, 0, 0, __DRI_IMAGE_FORMAT_XBGR16161616 } } }, { DRM_FORMAT_ARGB2101010, __DRI_IMAGE_FORMAT_ARGB2101010, __DRI_IMAGE_COMPONENTS_RGBA, PIPE_FORMAT_B10G10R10A2_UNORM, 1, { { 0, 0, 0, __DRI_IMAGE_FORMAT_ARGB2101010 } } }, @@ -693,11 +696,8 @@ dri2_query_dma_buf_formats(__DRIscreen *_screen, int max, int *formats, const struct dri2_format_mapping *map = &dri2_format_table[i]; /* The sRGB format is not a real FourCC as defined by drm_fourcc.h, so we - * must not leak it out to clients. The ABGR16161616 format wasn't - * real until recently. Don't leak it out for now. - */ - if (dri2_format_table[i].dri_fourcc == __DRI_IMAGE_FOURCC_SARGB8888 || - dri2_format_table[i].dri_fourcc == DRM_FORMAT_ABGR16161616) + * must not leak it out to clients. */ + if (dri2_format_table[i].dri_fourcc == __DRI_IMAGE_FOURCC_SARGB8888) continue; if (pscreen->is_format_supported(pscreen, map->pipe_format, diff --git a/src/gallium/frontends/dri/dri_util.c b/src/gallium/frontends/dri/dri_util.c index 4a6c201387e..8eeeed03add 100644 --- a/src/gallium/frontends/dri/dri_util.c +++ b/src/gallium/frontends/dri/dri_util.c @@ -1049,6 +1049,16 @@ static const struct { .mesa_format = MESA_FORMAT_RGBX_FLOAT16, .internal_format = GL_RGBA16F, }, + { + .image_format = __DRI_IMAGE_FORMAT_ABGR16161616, + .mesa_format = MESA_FORMAT_RGBA_UNORM16, + .internal_format = GL_RGBA16, + }, + { + .image_format = __DRI_IMAGE_FORMAT_XBGR16161616, + .mesa_format = MESA_FORMAT_RGBX_UNORM16, + .internal_format = GL_RGBA16, + }, { .image_format = __DRI_IMAGE_FORMAT_ARGB2101010, .mesa_format = MESA_FORMAT_B10G10R10A2_UNORM, diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c index ae4fb374604..89f0d8eaba1 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -1281,6 +1281,8 @@ dri3_cpp_for_format(uint32_t format) { case __DRI_IMAGE_FORMAT_SABGR8: case __DRI_IMAGE_FORMAT_SXRGB8: return 4; + case __DRI_IMAGE_FORMAT_ABGR16161616: + case __DRI_IMAGE_FORMAT_XBGR16161616: case __DRI_IMAGE_FORMAT_XBGR16161616F: case __DRI_IMAGE_FORMAT_ABGR16161616F: return 8; @@ -1343,6 +1345,8 @@ image_format_to_fourcc(int format) case __DRI_IMAGE_FORMAT_ARGB2101010: return DRM_FORMAT_ARGB2101010; case __DRI_IMAGE_FORMAT_XBGR2101010: return DRM_FORMAT_XBGR2101010; case __DRI_IMAGE_FORMAT_ABGR2101010: return DRM_FORMAT_ABGR2101010; + case __DRI_IMAGE_FORMAT_ABGR16161616: return DRM_FORMAT_ABGR16161616; + case __DRI_IMAGE_FORMAT_XBGR16161616: return DRM_FORMAT_XBGR16161616; case __DRI_IMAGE_FORMAT_XBGR16161616F: return DRM_FORMAT_XBGR16161616F; case __DRI_IMAGE_FORMAT_ABGR16161616F: return DRM_FORMAT_ABGR16161616F; }