Mesa (master): st/mesa: Don't map all P01X DRM formats to P016

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Sep 9 20:18:48 UTC 2020


Module: Mesa
Branch: master
Commit: c3c99f45718080b66676c2b028015abbafeaee11
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c3c99f45718080b66676c2b028015abbafeaee11

Author: Nanley Chery <nanley.g.chery at intel.com>
Date:   Thu Jul 30 17:39:26 2020 -0700

st/mesa: Don't map all P01X DRM formats to P016

Allow gallium drivers to distinguish between the P010, P012, and P016
DRM formats.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6486>

---

 src/gallium/frontends/dri/dri_helpers.c  | 4 ++--
 src/gallium/include/pipe/p_format.h      | 2 ++
 src/mesa/state_tracker/st_atom_sampler.c | 1 +
 src/mesa/state_tracker/st_atom_texture.c | 1 +
 src/mesa/state_tracker/st_cb_eglimage.c  | 4 ++++
 src/mesa/state_tracker/st_program.h      | 1 +
 src/mesa/state_tracker/st_sampler_view.c | 1 +
 src/util/format/u_format.csv             | 1 +
 src/util/format/u_format.h               | 3 +++
 9 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/gallium/frontends/dri/dri_helpers.c b/src/gallium/frontends/dri/dri_helpers.c
index 90a8a392fad..01a1fb3d96c 100644
--- a/src/gallium/frontends/dri/dri_helpers.c
+++ b/src/gallium/frontends/dri/dri_helpers.c
@@ -491,11 +491,11 @@ static const struct dri2_format_mapping dri2_format_table[] = {
           { 1, 1, 1, __DRI_IMAGE_FORMAT_GR88, 2 } } },
 
       { DRM_FORMAT_P010,          __DRI_IMAGE_FORMAT_NONE,
-        __DRI_IMAGE_COMPONENTS_Y_UV,      PIPE_FORMAT_P016, 2,
+        __DRI_IMAGE_COMPONENTS_Y_UV,      PIPE_FORMAT_P010, 2,
         { { 0, 0, 0, __DRI_IMAGE_FORMAT_R16, 2 },
           { 1, 1, 1, __DRI_IMAGE_FORMAT_GR1616, 4 } } },
       { DRM_FORMAT_P012,          __DRI_IMAGE_FORMAT_NONE,
-        __DRI_IMAGE_COMPONENTS_Y_UV,      PIPE_FORMAT_P016, 2,
+        __DRI_IMAGE_COMPONENTS_Y_UV,      PIPE_FORMAT_P012, 2,
         { { 0, 0, 0, __DRI_IMAGE_FORMAT_R16, 2 },
           { 1, 1, 1, __DRI_IMAGE_FORMAT_GR1616, 4 } } },
       { DRM_FORMAT_P016,          __DRI_IMAGE_FORMAT_NONE,
diff --git a/src/gallium/include/pipe/p_format.h b/src/gallium/include/pipe/p_format.h
index f1a4652c36e..fd3cf5b3236 100644
--- a/src/gallium/include/pipe/p_format.h
+++ b/src/gallium/include/pipe/p_format.h
@@ -464,6 +464,7 @@ enum pipe_format {
    PIPE_FORMAT_FXT1_RGBA,
 
    PIPE_FORMAT_P010,
+   PIPE_FORMAT_P012,
    PIPE_FORMAT_P016,
 
    PIPE_FORMAT_R10G10B10X2_UNORM,
@@ -582,6 +583,7 @@ pipe_format_to_chroma_format(enum pipe_format format)
       case PIPE_FORMAT_YV12:
       case PIPE_FORMAT_IYUV:
       case PIPE_FORMAT_P010:
+      case PIPE_FORMAT_P012:
       case PIPE_FORMAT_P016:
       case PIPE_FORMAT_Y16_U16_V16_420_UNORM:
          return PIPE_VIDEO_CHROMA_FORMAT_420;
diff --git a/src/mesa/state_tracker/st_atom_sampler.c b/src/mesa/state_tracker/st_atom_sampler.c
index 7ae981b71b4..0c188c104c1 100644
--- a/src/mesa/state_tracker/st_atom_sampler.c
+++ b/src/mesa/state_tracker/st_atom_sampler.c
@@ -316,6 +316,7 @@ update_shader_samplers(struct st_context *st,
       switch (st_get_view_format(stObj)) {
       case PIPE_FORMAT_NV12:
       case PIPE_FORMAT_P010:
+      case PIPE_FORMAT_P012:
       case PIPE_FORMAT_P016:
       case PIPE_FORMAT_YUYV:
       case PIPE_FORMAT_UYVY:
diff --git a/src/mesa/state_tracker/st_atom_texture.c b/src/mesa/state_tracker/st_atom_texture.c
index 5a0f91ccb14..f1f8dffcf2c 100644
--- a/src/mesa/state_tracker/st_atom_texture.c
+++ b/src/mesa/state_tracker/st_atom_texture.c
@@ -196,6 +196,7 @@ update_textures(struct st_context *st,
                st->pipe->create_sampler_view(st->pipe, stObj->pt->next, &tmpl);
          break;
       case PIPE_FORMAT_P010:
+      case PIPE_FORMAT_P012:
       case PIPE_FORMAT_P016:
          /* we need one additional R16G16 view: */
          tmpl.format = PIPE_FORMAT_RG1616_UNORM;
diff --git a/src/mesa/state_tracker/st_cb_eglimage.c b/src/mesa/state_tracker/st_cb_eglimage.c
index bf25e313091..8b44ba3e65a 100644
--- a/src/mesa/state_tracker/st_cb_eglimage.c
+++ b/src/mesa/state_tracker/st_cb_eglimage.c
@@ -69,6 +69,8 @@ is_format_supported(struct pipe_screen *screen, enum pipe_format format,
                                                  PIPE_TEXTURE_2D, nr_samples,
                                                  nr_storage_samples, usage);
          break;
+      case PIPE_FORMAT_P010:
+      case PIPE_FORMAT_P012:
       case PIPE_FORMAT_P016:
          supported = screen->is_format_supported(screen, PIPE_FORMAT_R16_UNORM,
                                                  PIPE_TEXTURE_2D, nr_samples,
@@ -250,6 +252,8 @@ st_bind_egl_image(struct gl_context *ctx,
          texFormat = MESA_FORMAT_R_UNORM8;
          texObj->RequiredTextureImageUnits = 2;
          break;
+      case PIPE_FORMAT_P010:
+      case PIPE_FORMAT_P012:
       case PIPE_FORMAT_P016:
          texFormat = MESA_FORMAT_R_UNORM16;
          texObj->RequiredTextureImageUnits = 2;
diff --git a/src/mesa/state_tracker/st_program.h b/src/mesa/state_tracker/st_program.h
index 7483450eae5..7fb94386ff9 100644
--- a/src/mesa/state_tracker/st_program.h
+++ b/src/mesa/state_tracker/st_program.h
@@ -80,6 +80,7 @@ st_get_external_sampler_key(struct st_context *st, struct gl_program *prog)
       switch (format) {
       case PIPE_FORMAT_NV12:
       case PIPE_FORMAT_P010:
+      case PIPE_FORMAT_P012:
       case PIPE_FORMAT_P016:
          key.lower_nv12 |= (1 << unit);
          break;
diff --git a/src/mesa/state_tracker/st_sampler_view.c b/src/mesa/state_tracker/st_sampler_view.c
index a31e573c01a..80ba82d9711 100644
--- a/src/mesa/state_tracker/st_sampler_view.c
+++ b/src/mesa/state_tracker/st_sampler_view.c
@@ -500,6 +500,7 @@ get_sampler_view_format(struct st_context *st,
       format = PIPE_FORMAT_R8_UNORM;
       break;
    case PIPE_FORMAT_P010:
+   case PIPE_FORMAT_P012:
    case PIPE_FORMAT_P016:
       format = PIPE_FORMAT_R16_UNORM;
       break;
diff --git a/src/util/format/u_format.csv b/src/util/format/u_format.csv
index 2f71e70e736..3ed5bb8aaaa 100644
--- a/src/util/format/u_format.csv
+++ b/src/util/format/u_format.csv
@@ -396,6 +396,7 @@ PIPE_FORMAT_Y16_U16V16_422_UNORM  , planar2, 1, 1, 1,     ,     ,     ,     , xy
 PIPE_FORMAT_Y16_U16_V16_444_UNORM , planar3, 1, 1, 1,     ,     ,     ,     , xyzw, yuv
 
 PIPE_FORMAT_P010                  , planar2, 1, 1, 1,     ,     ,     ,     , xyzw, yuv
+PIPE_FORMAT_P012                  , planar2, 1, 1, 1,     ,     ,     ,     , xyzw, yuv
 PIPE_FORMAT_P016                  , planar2, 1, 1, 1,     ,     ,     ,     , xyzw, yuv
 
 # Usually used to implement IA44 and AI44 formats in video decoding
diff --git a/src/util/format/u_format.h b/src/util/format/u_format.h
index 034d43a2897..f19c6c089b7 100644
--- a/src/util/format/u_format.h
+++ b/src/util/format/u_format.h
@@ -1319,6 +1319,7 @@ util_format_get_plane_format(enum pipe_format format, unsigned plane)
    case PIPE_FORMAT_Y16_U16_V16_444_UNORM:
       return PIPE_FORMAT_R16_UNORM;
    case PIPE_FORMAT_P010:
+   case PIPE_FORMAT_P012:
    case PIPE_FORMAT_P016:
    case PIPE_FORMAT_Y16_U16V16_422_UNORM:
       return !plane ? PIPE_FORMAT_R16_UNORM : PIPE_FORMAT_R16G16_UNORM;
@@ -1338,6 +1339,7 @@ util_format_get_plane_width(enum pipe_format format, unsigned plane,
    case PIPE_FORMAT_NV12:
    case PIPE_FORMAT_NV21:
    case PIPE_FORMAT_P010:
+   case PIPE_FORMAT_P012:
    case PIPE_FORMAT_P016:
    case PIPE_FORMAT_Y8_U8_V8_422_UNORM:
    case PIPE_FORMAT_Y8_U8V8_422_UNORM:
@@ -1360,6 +1362,7 @@ util_format_get_plane_height(enum pipe_format format, unsigned plane,
    case PIPE_FORMAT_NV12:
    case PIPE_FORMAT_NV21:
    case PIPE_FORMAT_P010:
+   case PIPE_FORMAT_P012:
    case PIPE_FORMAT_P016:
    case PIPE_FORMAT_Y16_U16_V16_420_UNORM:
       return !plane ? height : (height + 1) / 2;



More information about the mesa-commit mailing list