Mesa (main): dri: add [ax]bgr16161616 to format lookup tables

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jul 27 08:00:05 UTC 2022


Module: Mesa
Branch: main
Commit: 19f62b430369760ccfa246da6fcd3686e495f2df
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=19f62b430369760ccfa246da6fcd3686e495f2df

Author: Manuel Stoeckl <code at mstoeckl.com>
Date:   Mon Jan 17 22:03:20 2022 -0500

dri: add [ax]bgr16161616 to format lookup tables

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 at mstoeckl.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14580>

---

 src/egl/drivers/dri2/egl_dri2.c         |  2 ++
 src/gallium/frontends/dri/dri_helpers.c | 10 +++++-----
 src/gallium/frontends/dri/dri_util.c    | 10 ++++++++++
 src/loader/loader_dri3_helper.c         |  4 ++++
 4 files changed, 21 insertions(+), 5 deletions(-)

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;
    }



More information about the mesa-commit mailing list