From dc23db2a0ddf1e223e90356bdac7dae3cf1c0a69 Mon Sep 17 00:00:00 2001 From: Rohan Garg Date: Mon, 19 Aug 2024 11:17:44 +0200 Subject: [PATCH] anv: program a custom byte stride on Xe2 for indirect draws Xe2 allows us to program in a custom byte stride for indirect draws Backport-to: 24.2 Signed-off-by: Rohan Garg Reviewed-by: Lionel Landwerlin Part-of: --- src/intel/vulkan/genX_cmd_draw.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/intel/vulkan/genX_cmd_draw.c b/src/intel/vulkan/genX_cmd_draw.c index e438855b95c..5f51a7f3583 100644 --- a/src/intel/vulkan/genX_cmd_draw.c +++ b/src/intel/vulkan/genX_cmd_draw.c @@ -1657,6 +1657,14 @@ emit_indirect_draws(struct anv_cmd_buffer *cmd_buffer, if (cmd_buffer->state.conditional_render_enabled) genX(cmd_emit_conditional_render_predicate)(cmd_buffer); +#if GFX_VER >= 20 + if (execute_indirect_supported) { + anv_batch_emit(&cmd_buffer->batch, GENX(STATE_BYTE_STRIDE), sb_stride) { + sb_stride.ByteStride = indirect_data_stride; + sb_stride.ByteStrideEnable = !aligned_stride; + } + } +#endif uint32_t offset = 0; for (uint32_t i = 0; i < draw_count; i++) { struct anv_address draw = anv_address_add(indirect_data_addr, offset); @@ -1711,7 +1719,7 @@ emit_indirect_draws(struct anv_cmd_buffer *cmd_buffer, * need to emit one instruction per draw, but we're still avoiding * the register loads with MI commands. */ - if (aligned_stride) + if (aligned_stride || GFX_VER >= 20) break; #else unreachable("EXECUTE_INDIRECT_DRAW instruction expectation mismatch");