Mesa (main): ir3: handle gl_Layer and gl_ViewportIndex when there is TES + GS

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu May 26 09:08:28 UTC 2022


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

Author: Danylo Piliaiev <dpiliaiev at igalia.com>
Date:   Tue May 24 20:31:44 2022 +0300

ir3: handle gl_Layer and gl_ViewportIndex when there is TES + GS

Fixes CTS tests:
 KHR-GL46.shader_viewport_layer_array.ShaderViewportIndexTestCase
 KHR-GL46.shader_viewport_layer_array.ShaderLayerFramebufferLayeredTestCase
 KHR-GL46.shader_viewport_layer_array.ShaderLayerFramebufferNonLayeredTestCase

Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6497

Signed-off-by: Danylo Piliaiev <dpiliaiev at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16696>

---

 src/freedreno/ir3/ir3_nir_lower_tess.c             | 9 +++++++--
 src/freedreno/ir3/ir3_shader.h                     | 3 ++-
 src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt | 3 ---
 3 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/freedreno/ir3/ir3_nir_lower_tess.c b/src/freedreno/ir3/ir3_nir_lower_tess.c
index a038cd6c41e..db96893aa75 100644
--- a/src/freedreno/ir3/ir3_nir_lower_tess.c
+++ b/src/freedreno/ir3/ir3_nir_lower_tess.c
@@ -29,7 +29,8 @@ struct state {
    uint32_t topology;
 
    struct primitive_map {
-      unsigned loc[32 + 4]; /* +POSITION +PSIZE +CLIP_DIST0 +CLIP_DIST1 */
+      /* +POSITION, +PSIZE, ... - see shader_io_get_unique_index */
+      unsigned loc[32 + 6];
       unsigned stride;
    } map;
 
@@ -106,8 +107,12 @@ shader_io_get_unique_index(gl_varying_slot slot)
       return 2;
    if (slot == VARYING_SLOT_CLIP_DIST1)
       return 3;
+   if (slot == VARYING_SLOT_VIEWPORT)
+      return 4;
+   if (slot == VARYING_SLOT_LAYER)
+      return 5;
    if (slot >= VARYING_SLOT_VAR0 && slot <= VARYING_SLOT_VAR31)
-      return 4 + (slot - VARYING_SLOT_VAR0);
+      return 6 + (slot - VARYING_SLOT_VAR0);
    unreachable("illegal slot in get unique index\n");
 }
 
diff --git a/src/freedreno/ir3/ir3_shader.h b/src/freedreno/ir3/ir3_shader.h
index 79dde853974..e91c2df6cc1 100644
--- a/src/freedreno/ir3/ir3_shader.h
+++ b/src/freedreno/ir3/ir3_shader.h
@@ -625,8 +625,9 @@ struct ir3_shader_variant {
    /* Map from location to offset in per-primitive storage. In dwords for
     * HS, where varyings are read in the next stage via ldg with a dword
     * offset, and in bytes for all other stages.
+    * +POSITION, +PSIZE, ... - see shader_io_get_unique_index
     */
-   unsigned output_loc[32 + 4]; /* +POSITION +PSIZE +CLIP_DIST0 +CLIP_DIST1 */
+   unsigned output_loc[32 + 6];
 
    /* attributes (VS) / varyings (FS):
     * Note that sysval's should come *after* normal inputs.
diff --git a/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt b/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt
index e67864e2cb5..d6a2e02fda7 100644
--- a/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt
+++ b/src/gallium/drivers/zink/ci/zink-tu-a630-fails.txt
@@ -230,9 +230,6 @@ KHR-GL46.shader_image_load_store.multiple-uniforms,Fail
 KHR-GL46.shader_storage_buffer_object.basic-atomic-case1,Fail
 KHR-GL46.shader_storage_buffer_object.basic-stdLayout-case3-cs,Crash
 KHR-GL46.shader_storage_buffer_object.basic-stdLayout-case3-vs,Crash
-KHR-GL46.shader_viewport_layer_array.ShaderLayerFramebufferLayeredTestCase,Crash
-KHR-GL46.shader_viewport_layer_array.ShaderLayerFramebufferNonLayeredTestCase,Crash
-KHR-GL46.shader_viewport_layer_array.ShaderViewportIndexTestCase,Crash
 KHR-GL46.tessellation_shader.vertex.vertex_ordering,Fail
 KHR-GL46.texture_cube_map_array.color_depth_attachments,Fail
 KHR-GL46.texture_cube_map_array.image_op_geometry_sh,Fail



More information about the mesa-commit mailing list