Mesa (main): d3d12: Use overall resource format + plane format to get format info

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Dec 8 20:58:21 UTC 2021


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

Author: Jesse Natalie <jenatali at microsoft.com>
Date:   Fri Sep 24 08:47:32 2021 -0700

d3d12: Use overall resource format + plane format to get format info

Reviewed-by: Sil Vilerino <sivileri at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14123>

---

 src/gallium/drivers/d3d12/d3d12_context.cpp | 4 ++--
 src/gallium/drivers/d3d12/d3d12_format.c    | 9 ++++++++-
 src/gallium/drivers/d3d12/d3d12_format.h    | 2 +-
 3 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/d3d12/d3d12_context.cpp b/src/gallium/drivers/d3d12/d3d12_context.cpp
index 7cac481de20..72aad42e34b 100644
--- a/src/gallium/drivers/d3d12/d3d12_context.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_context.cpp
@@ -799,7 +799,7 @@ d3d12_init_sampler_view_descriptor(struct d3d12_sampler_view *sampler_view)
    struct d3d12_resource *res = d3d12_resource(texture);
    struct d3d12_screen *screen = d3d12_screen(texture->screen);
 
-   struct d3d12_format_info format_info = d3d12_get_format_info(state->format, state->target);
+   struct d3d12_format_info format_info = d3d12_get_format_info(res->overall_format, state->format, state->target);
    D3D12_SHADER_RESOURCE_VIEW_DESC desc = {};
    desc.Format = d3d12_get_resource_srv_format(state->format, state->target);
    desc.ViewDimension = view_dimension(state->target, texture->nr_samples);
@@ -914,7 +914,7 @@ d3d12_create_sampler_view(struct pipe_context *pctx,
    sampler_view->array_size = texture->array_size;
    sampler_view->texture_generation_id = p_atomic_read(&res->generation_id);
 
-   struct d3d12_format_info format_info = d3d12_get_format_info(state->format, state->target);
+   struct d3d12_format_info format_info = d3d12_get_format_info(res->overall_format, state->format, state->target);
    pipe_swizzle swizzle[4] = {
       format_info.swizzle[sampler_view->base.swizzle_r],
       format_info.swizzle[sampler_view->base.swizzle_g],
diff --git a/src/gallium/drivers/d3d12/d3d12_format.c b/src/gallium/drivers/d3d12/d3d12_format.c
index cee66c28dde..885d768d38e 100644
--- a/src/gallium/drivers/d3d12/d3d12_format.c
+++ b/src/gallium/drivers/d3d12/d3d12_format.c
@@ -302,7 +302,7 @@ d3d12_get_resource_srv_format(enum pipe_format f, enum pipe_texture_target targe
         PIPE_SWIZZLE_0, PIPE_SWIZZLE_1, PIPE_SWIZZLE_NONE }
 
 struct d3d12_format_info
-d3d12_get_format_info(enum pipe_format pformat, enum pipe_texture_target target)
+d3d12_get_format_info(enum pipe_format resource_format, enum pipe_format pformat, enum pipe_texture_target target)
 {
    DEF_SWIZZLE(IDENTITY, X, Y, Z, W);
    DEF_SWIZZLE(RGB1, X, Y, Z, 1);
@@ -323,9 +323,16 @@ d3d12_get_format_info(enum pipe_format pformat, enum pipe_texture_target target)
 
    const struct util_format_description
       *format_desc = util_format_description(pformat);
+   unsigned plane_count = util_format_get_num_planes(resource_format);
    if (!util_format_is_srgb(pformat)) {
       if (target == PIPE_BUFFER && util_format_is_alpha(pformat)) {
          swizzle = BUFFER_SWIZZLE;
+      } else if (plane_count > 1) {
+         for (plane_slice = 0; plane_slice < plane_count; ++plane_slice) {
+            if (util_format_get_plane_format(resource_format, plane_slice) == pformat)
+               break;
+         }
+         assert(plane_slice < plane_count);
       } else if (pformat == PIPE_FORMAT_A8_UNORM) {
          /* no need to swizzle, it's natively supported */
       } else if (util_format_is_intensity(pformat)) {
diff --git a/src/gallium/drivers/d3d12/d3d12_format.h b/src/gallium/drivers/d3d12/d3d12_format.h
index d9e0f99d8ef..e854120d301 100644
--- a/src/gallium/drivers/d3d12/d3d12_format.h
+++ b/src/gallium/drivers/d3d12/d3d12_format.h
@@ -61,7 +61,7 @@ struct d3d12_format_info {
 };
 
 struct d3d12_format_info
-d3d12_get_format_info(enum pipe_format format, enum pipe_texture_target);
+d3d12_get_format_info(enum pipe_format resource_format, enum pipe_format format, enum pipe_texture_target);
 
 enum pipe_format
 d3d12_emulated_vtx_format(enum pipe_format fmt);



More information about the mesa-commit mailing list