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

Author: Erik Faye-Lund <[email protected]>
Date:   Mon Aug 24 22:47:59 2020 +0200

d3d12: transition the right planes

We need to start transitioning at plane 1 for stencil-only resources,
otherwise we end up transitioning the depth-plane instead.

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/3837
Reviewed-by: Jesse Natalie <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7672>

---

 src/gallium/drivers/d3d12/d3d12_blit.cpp |  6 ++++--
 src/gallium/drivers/d3d12/d3d12_draw.cpp |  6 ++++--
 src/gallium/drivers/d3d12/d3d12_format.c | 10 ++++++++++
 src/gallium/drivers/d3d12/d3d12_format.h |  3 +++
 4 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/gallium/drivers/d3d12/d3d12_blit.cpp 
b/src/gallium/drivers/d3d12/d3d12_blit.cpp
index 685c0c22199..04428a3a2ad 100644
--- a/src/gallium/drivers/d3d12/d3d12_blit.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_blit.cpp
@@ -419,11 +419,13 @@ d3d12_direct_copy(struct d3d12_context *ctx,
                    src_subres, dst_subres);
 
 
-   d3d12_transition_subresources_state(ctx, src, src_subres, 1, 0, 1, 0,
+   d3d12_transition_subresources_state(ctx, src, src_subres, 1, 0, 1,
+                                       
d3d12_get_format_start_plane(src->base.format),
                                        
d3d12_get_format_num_planes(src->base.format),
                                        D3D12_RESOURCE_STATE_COPY_SOURCE);
 
-   d3d12_transition_subresources_state(ctx, dst, dst_subres, 1, 0, 1, 0,
+   d3d12_transition_subresources_state(ctx, dst, dst_subres, 1, 0, 1,
+                                       
d3d12_get_format_start_plane(dst->base.format),
                                        
d3d12_get_format_num_planes(dst->base.format),
                                        D3D12_RESOURCE_STATE_COPY_DEST);
 
diff --git a/src/gallium/drivers/d3d12/d3d12_draw.cpp 
b/src/gallium/drivers/d3d12/d3d12_draw.cpp
index b78d144ff11..f7c0ffd16e8 100644
--- a/src/gallium/drivers/d3d12/d3d12_draw.cpp
+++ b/src/gallium/drivers/d3d12/d3d12_draw.cpp
@@ -114,7 +114,8 @@ fill_srv_descriptors(struct d3d12_context *ctx,
             d3d12_transition_subresources_state(ctx, 
d3d12_resource(view->base.texture),
                                                 view->base.u.tex.first_level, 
view->mip_levels,
                                                 view->base.u.tex.first_layer, 
view->array_size,
-                                                0, 
d3d12_get_format_num_planes(view->base.format),
+                                                
d3d12_get_format_start_plane(view->base.format),
+                                                
d3d12_get_format_num_planes(view->base.format),
                                                 state);
          }
       } else {
@@ -384,7 +385,8 @@ transition_surface_subresources_state(struct d3d12_context 
*ctx,
    d3d12_transition_subresources_state(ctx, res,
                                        psurf->u.tex.level, 1,
                                        start_layer, num_layers,
-                                       0, 
d3d12_get_format_num_planes(psurf->format),
+                                       
d3d12_get_format_start_plane(psurf->format),
+                                       
d3d12_get_format_num_planes(psurf->format),
                                        state);
 }
 
diff --git a/src/gallium/drivers/d3d12/d3d12_format.c 
b/src/gallium/drivers/d3d12/d3d12_format.c
index 302b182f56b..5bf4e6110bf 100644
--- a/src/gallium/drivers/d3d12/d3d12_format.c
+++ b/src/gallium/drivers/d3d12/d3d12_format.c
@@ -290,6 +290,16 @@ d3d12_non_opaque_plane_count(DXGI_FORMAT format)
    return 1;
 }
 
+unsigned
+d3d12_get_format_start_plane(enum pipe_format fmt)
+{
+   const struct util_format_description *desc = util_format_description(fmt);
+   if (util_format_has_stencil(desc) && !util_format_has_depth(desc))
+      return 1;
+
+   return 0;
+}
+
 unsigned
 d3d12_get_format_num_planes(enum pipe_format fmt)
 {
diff --git a/src/gallium/drivers/d3d12/d3d12_format.h 
b/src/gallium/drivers/d3d12/d3d12_format.h
index b578f4ce383..538de9c2fdd 100644
--- a/src/gallium/drivers/d3d12/d3d12_format.h
+++ b/src/gallium/drivers/d3d12/d3d12_format.h
@@ -56,6 +56,9 @@ d3d12_get_format_info(enum pipe_format format, enum 
pipe_texture_target);
 enum pipe_format
 d3d12_emulated_vtx_format(enum pipe_format fmt);
 
+unsigned
+d3d12_get_format_start_plane(enum pipe_format fmt);
+
 unsigned
 d3d12_get_format_num_planes(enum pipe_format fmt);
 

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to