From a1ea0956b46778d0331e4ef60ebd2be057fd0e9f Mon Sep 17 00:00:00 2001 From: Lionel Landwerlin Date: Thu, 30 May 2024 10:39:54 +0300 Subject: [PATCH] intel: fix HW generated local-id with indirect compute walker Signed-off-by: Lionel Landwerlin Fixes: 5e7f4ff97f ("intel: Add driver support for hardware generated local invocation IDs") Reviewed-by: Rohan Garg Part-of: --- src/gallium/drivers/iris/iris_state.c | 6 ++++++ src/intel/vulkan/genX_cmd_compute.c | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 043121b4835..760be45b2f5 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -8802,6 +8802,7 @@ static void iris_emit_execute_indirect_dispatch(struct iris_context *ice, const struct iris_screen *screen = batch->screen; struct iris_compiled_shader *shader = ice->shaders.prog[MESA_SHADER_COMPUTE]; + const struct iris_cs_data *cs_data = iris_cs_data(shader); const struct intel_cs_dispatch_info dispatch = iris_get_cs_dispatch_info(screen->devinfo, shader, grid->block); struct iris_bo *indirect = iris_resource_bo(grid->indirect); @@ -8810,6 +8811,11 @@ static void iris_emit_execute_indirect_dispatch(struct iris_context *ice, struct GENX(COMPUTE_WALKER_BODY) body = {}; body.SIMDSize = dispatch_size; body.MessageSIMD = dispatch_size; + body.GenerateLocalID = cs_data->generate_local_id != 0; + body.EmitLocal = cs_data->generate_local_id; + body.WalkOrder = cs_data->walk_order; + body.TileLayout = cs_data->walk_order == INTEL_WALK_ORDER_YXZ ? + TileY32bpe : Linear; body.LocalXMaximum = grid->block[0] - 1; body.LocalYMaximum = grid->block[1] - 1; body.LocalZMaximum = grid->block[2] - 1; diff --git a/src/intel/vulkan/genX_cmd_compute.c b/src/intel/vulkan/genX_cmd_compute.c index 2eaef454be9..552fcb5c1fa 100644 --- a/src/intel/vulkan/genX_cmd_compute.c +++ b/src/intel/vulkan/genX_cmd_compute.c @@ -315,6 +315,11 @@ emit_indirect_compute_walker(struct anv_cmd_buffer *cmd_buffer, .MessageSIMD = dispatch_size, .IndirectDataStartAddress = comp_state->push_data.offset, .IndirectDataLength = comp_state->push_data.alloc_size, + .GenerateLocalID = prog_data->generate_local_id != 0, + .EmitLocal = prog_data->generate_local_id, + .WalkOrder = prog_data->walk_order, + .TileLayout = prog_data->walk_order == INTEL_WALK_ORDER_YXZ ? + TileY32bpe : Linear, .LocalXMaximum = prog_data->local_size[0] - 1, .LocalYMaximum = prog_data->local_size[1] - 1, .LocalZMaximum = prog_data->local_size[2] - 1,