Mesa (main): dzn: Fix exec_buf_stride calculation

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


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

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

dzn: Fix exec_buf_stride calculation

The stride depends on the indirect draw arguments which are different if
triangle-fan emulation is required.

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

---

 src/microsoft/vulkan/dzn_cmd_buffer.c | 5 ++++-
 src/microsoft/vulkan/dzn_nir.c        | 5 ++++-
 2 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/microsoft/vulkan/dzn_cmd_buffer.c b/src/microsoft/vulkan/dzn_cmd_buffer.c
index cb50daad21d..3a4d4841255 100644
--- a/src/microsoft/vulkan/dzn_cmd_buffer.c
+++ b/src/microsoft/vulkan/dzn_cmd_buffer.c
@@ -2785,10 +2785,13 @@ dzn_cmd_buffer_indirect_draw(struct dzn_cmd_buffer *cmdbuf,
    assert((draw_buf_stride & 3) == 0);
 
    uint32_t sysvals_stride = ALIGN_POT(sizeof(cmdbuf->state.sysvals.gfx), 256);
-   uint32_t exec_buf_stride = 32;
    uint32_t triangle_fan_index_buf_stride =
       dzn_cmd_buffer_triangle_fan_get_max_index_buf_size(cmdbuf, indexed) *
       sizeof(uint32_t);
+   uint32_t exec_buf_stride =
+      triangle_fan_index_buf_stride > 0 ?
+      sizeof(struct dzn_indirect_triangle_fan_draw_exec_params) :
+      sizeof(struct dzn_indirect_draw_exec_params);
    uint32_t triangle_fan_exec_buf_stride =
       sizeof(struct dzn_indirect_triangle_fan_rewrite_index_exec_params);
    ID3D12Resource *exec_buf;
diff --git a/src/microsoft/vulkan/dzn_nir.c b/src/microsoft/vulkan/dzn_nir.c
index d432731eb84..da626bcdc35 100644
--- a/src/microsoft/vulkan/dzn_nir.c
+++ b/src/microsoft/vulkan/dzn_nir.c
@@ -129,7 +129,10 @@ dzn_nir_indirect_draw_shader(enum dzn_indirect_draw_type type)
                    .align_mul = 4, .align_offset = 0, .range_base = 0, .range = ~0);
 
    nir_ssa_def *draw_stride = nir_channel(&b, params, 0);
-   nir_ssa_def *exec_stride = nir_imm_int(&b, sizeof(struct dzn_indirect_draw_exec_params));
+   nir_ssa_def *exec_stride =
+      triangle_fan ?
+      nir_imm_int(&b, sizeof(struct dzn_indirect_triangle_fan_draw_exec_params)) :
+      nir_imm_int(&b, sizeof(struct dzn_indirect_draw_exec_params));
    nir_ssa_def *index =
       nir_channel(&b, nir_load_global_invocation_id(&b, 32), 0);
 



More information about the mesa-commit mailing list