Mesa (main): dzn: Simplify the triangle_fan_rewrite_index shader

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Apr 22 07:38:03 UTC 2022


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

Author: Boris Brezillon <boris.brezillon at collabora.com>
Date:   Wed Apr  6 17:30:33 2022 +0200

dzn: Simplify the triangle_fan_rewrite_index shader

We don't need the first_vertex argument when turning non-indexed
triangle-fan draws into indexed triangle-list ones, the firstVertex
argument can simply be passed as a vertexOffset.

Reviewed-by: Jesse Natalie <jenatali at microsoft.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15912>

---

 src/microsoft/vulkan/dzn_nir.c | 14 ++++++--------
 src/microsoft/vulkan/dzn_nir.h |  5 +----
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/src/microsoft/vulkan/dzn_nir.c b/src/microsoft/vulkan/dzn_nir.c
index da626bcdc35..f8f5ce056eb 100644
--- a/src/microsoft/vulkan/dzn_nir.c
+++ b/src/microsoft/vulkan/dzn_nir.c
@@ -163,8 +163,8 @@ dzn_nir_indirect_draw_shader(enum dzn_indirect_draw_type type)
       exec_vals[2] = nir_imul_imm(&b, triangle_count, 3);
       exec_vals[3] = nir_channel(&b, draw_info1, 1);
       exec_vals[4] = nir_imm_int(&b, 0);
-      exec_vals[5] = indexed ? nir_channel(&b, draw_info1, 3) : nir_imm_int(&b, 0);
-      exec_vals[6] = indexed ? draw_info2 : nir_channel(&b, draw_info1, 3);
+      exec_vals[5] = first_vertex;
+      exec_vals[6] = base_instance;
 
       nir_ssa_def *triangle_fan_exec_buf_desc =
          dzn_nir_create_bo_desc(&b, nir_var_mem_ssbo, 0, 3,
@@ -183,7 +183,7 @@ dzn_nir_indirect_draw_shader(enum dzn_indirect_draw_type type)
       nir_ssa_def *triangle_fan_exec_vals[] = {
          triangle_fan_index_buf_addr_lo,
          triangle_fan_index_buf_addr_hi,
-         nir_channel(&b, draw_info1, 2),
+         indexed ? nir_channel(&b, draw_info1, 2) : nir_imm_int(&b, 0),
          triangle_count,
          nir_imm_int(&b, 1),
          nir_imm_int(&b, 1),
@@ -311,13 +311,11 @@ dzn_nir_triangle_fan_rewrite_index_shader(uint8_t old_index_size)
          nir_vec3(&b, nir_channel(&b, old_index12, 0),
                   nir_channel(&b, old_index12, 1), old_index0);
    } else {
-      nir_ssa_def *first_vertex = nir_channel(&b, params, 0);
-
       new_indices =
          nir_vec3(&b,
-                  nir_iadd(&b, nir_iadd_imm(&b, triangle, 1), first_vertex),
-                  nir_iadd(&b, nir_iadd_imm(&b, triangle, 2), first_vertex),
-                  first_vertex);
+                  nir_iadd_imm(&b, triangle, 1),
+                  nir_iadd_imm(&b, triangle, 2),
+                  nir_imm_int(&b, 0));
    }
 
    nir_ssa_def *new_index_offset =
diff --git a/src/microsoft/vulkan/dzn_nir.h b/src/microsoft/vulkan/dzn_nir.h
index 5eaec3ecc7c..4b3fef49ff7 100644
--- a/src/microsoft/vulkan/dzn_nir.h
+++ b/src/microsoft/vulkan/dzn_nir.h
@@ -79,10 +79,7 @@ struct dzn_indirect_triangle_fan_draw_exec_params {
 };
 
 struct dzn_triangle_fan_rewrite_index_params {
-   union {
-      uint32_t first_index;
-      uint32_t first_vertex;
-   };
+   uint32_t first_index;
 };
 
 struct dzn_indirect_triangle_fan_rewrite_index_exec_params {



More information about the mesa-commit mailing list