intel: fix HW generated local-id with indirect compute walker

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: 5e7f4ff97f ("intel: Add driver support for hardware generated local invocation IDs")
Reviewed-by: Rohan Garg <rohan.garg@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29473>
This commit is contained in:
Lionel Landwerlin
2024-05-30 10:39:54 +03:00
committed by Marge Bot
parent d4b37eca5f
commit a1ea0956b4
2 changed files with 11 additions and 0 deletions

View File

@@ -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;

View File

@@ -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,