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

Author: Emma Anholt <[email protected]>
Date:   Thu Sep 23 17:26:49 2021 -0700

turnip: Swizzle in 0, 1 for D24S8 STENCIL_ASPECT sampling.

This seems to be what is expected by the CTS, but I haven't found a
citation.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13009>

---

 src/freedreno/ci/deqp-freedreno-a630-fails.txt |  5 -----
 src/freedreno/vulkan/tu_image.c                | 10 ++++++++--
 2 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/src/freedreno/ci/deqp-freedreno-a630-fails.txt 
b/src/freedreno/ci/deqp-freedreno-a630-fails.txt
index 5473dbb4924..f43e3612d89 100644
--- a/src/freedreno/ci/deqp-freedreno-a630-fails.txt
+++ b/src/freedreno/ci/deqp-freedreno-a630-fails.txt
@@ -67,11 +67,6 @@ 
dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_si
 
dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_geom,Fail
 
dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes_two_buffers_vert,Fail
 
-dEQP-VK.texture.filtering.2d.formats.d24_unorm_s8_uint_stencil.nearest,Fail
-dEQP-VK.texture.filtering.2d_array.formats.d24_unorm_s8_uint_stencil.d24_unorm_s8_uint_stencil_nearest,Fail
-dEQP-VK.texture.filtering.cube.formats.d24_unorm_s8_uint_stencil.nearest,Fail
-dEQP-VK.texture.filtering.unnormal.formats.d24_unorm_s8_uint_stencil.nearest,Fail
-
 # Broken on all drivers: https://gitlab.freedesktop.org/mesa/mesa/-/issues/4582
 dEQP-VK.wsi.display_control.register_device_event,Fail
 
diff --git a/src/freedreno/vulkan/tu_image.c b/src/freedreno/vulkan/tu_image.c
index 804c5dd5b56..6b5d8eed9f8 100644
--- a/src/freedreno/vulkan/tu_image.c
+++ b/src/freedreno/vulkan/tu_image.c
@@ -136,11 +136,17 @@ tu6_texswiz(const VkComponentMapping *comps,
    case VK_FORMAT_D24_UNORM_S8_UINT:
       if (aspect_mask == VK_IMAGE_ASPECT_STENCIL_BIT) {
          if (!has_z24uint_s8uint) {
-            /* using FMT6_8_8_8_8_UINT */
+            /* using FMT6_8_8_8_8_UINT, so need to pick out the W channel and
+             * swizzle (0,0,1) in the rest (see "Conversion to RGBA").
+             */
             swiz[0] = A6XX_TEX_W;
             swiz[1] = A6XX_TEX_ZERO;
+            swiz[2] = A6XX_TEX_ZERO;
+            swiz[3] = A6XX_TEX_ONE;
          } else {
-            /* using FMT6_Z24_UINT_S8_UINT */
+            /* using FMT6_Z24_UINT_S8_UINT, which is (d, s, 0, 1), so need to
+             * swizzle away the d.
+             */
             swiz[0] = A6XX_TEX_Y;
             swiz[1] = A6XX_TEX_ZERO;
          }

Reply via email to