dri: add [ax]bgr16161616 to format lookup tables
authorManuel Stoeckl <code@mstoeckl.com>
Tue, 18 Jan 2022 03:03:20 +0000 (22:03 -0500)
committerMarge Bot <emma+marge@anholt.net>
Wed, 27 Jul 2022 07:27:10 +0000 (07:27 +0000)
Note: The format __DRI_IMAGE_FORMAT_ABGR16161616 was already
in the dri2_format_table, but had been hidden from outside view,
for lack of an official DRM fourcc. Since its fourcc has now been
assigned, it is safe to reveal the format.

Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14580>

src/egl/drivers/dri2/egl_dri2.c
src/gallium/frontends/dri/dri_helpers.c
src/gallium/frontends/dri/dri_util.c
src/loader/loader_dri3_helper.c

index 87ea2bd..79e1cbe 100644 (file)
@@ -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:
index e170965..7b3d869 100644 (file)
@@ -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,
index 4a6c201..8eeeed0 100644 (file)
@@ -1050,6 +1050,16 @@ static const struct {
       .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,
       .internal_format =        GL_RGB10_A2,
index ae4fb37..89f0d8e 100644 (file)
@@ -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;
    }