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@microsoft.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15912>
This commit is contained in:
committed by
Marge Bot
parent
7673697256
commit
1cefda7cb4
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user