diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 07f2dec7a32..6e7069058fb 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -8677,6 +8677,14 @@ iris_upload_compute_walker(struct iris_context *ice, cw.PostSync.MOCS = iris_mocs(NULL, &screen->isl_dev, 0); cw.InterfaceDescriptor = idd; +#if GFX_VERx10 >= 125 + cw.GenerateLocalID = cs_prog_data->generate_local_id != 0; + cw.EmitLocal = cs_prog_data->generate_local_id; + cw.WalkOrder = cs_prog_data->walk_order; + cw.TileLayout = cs_prog_data->walk_order == BRW_WALK_ORDER_YXZ ? + TileY32bpe : Linear; +#endif + assert(brw_cs_push_const_total_size(cs_prog_data, dispatch.threads) == 0); } } diff --git a/src/intel/blorp/blorp_genX_exec.h b/src/intel/blorp/blorp_genX_exec.h index 7e41bed94f9..543595d5a31 100644 --- a/src/intel/blorp/blorp_genX_exec.h +++ b/src/intel/blorp/blorp_genX_exec.h @@ -2191,6 +2191,14 @@ blorp_exec_compute(struct blorp_batch *batch, const struct blorp_params *params) cw.IndirectDataStartAddress = push_const_offset; cw.IndirectDataLength = push_const_size; +#if GFX_VERx10 >= 125 + cw.GenerateLocalID = cs_prog_data->generate_local_id != 0; + cw.EmitLocal = cs_prog_data->generate_local_id; + cw.WalkOrder = cs_prog_data->walk_order; + cw.TileLayout = cs_prog_data->walk_order == BRW_WALK_ORDER_YXZ ? + TileY32bpe : Linear; +#endif + cw.InterfaceDescriptor = (struct GENX(INTERFACE_DESCRIPTOR_DATA)) { .KernelStartPointer = params->cs_prog_kernel, .SamplerStatePointer = samplers_offset, diff --git a/src/intel/compiler/brw_compiler.h b/src/intel/compiler/brw_compiler.h index 55deba7e2f8..df9f71bda0d 100644 --- a/src/intel/compiler/brw_compiler.h +++ b/src/intel/compiler/brw_compiler.h @@ -1322,6 +1322,15 @@ struct brw_push_const_block { unsigned size; /* Bytes, register aligned */ }; +enum PACKED brw_compute_walk_order { + BRW_WALK_ORDER_XYZ = 0, + BRW_WALK_ORDER_XZY = 1, + BRW_WALK_ORDER_YXZ = 2, + BRW_WALK_ORDER_YZX = 3, + BRW_WALK_ORDER_ZXY = 4, + BRW_WALK_ORDER_ZYX = 5, +}; + struct brw_cs_prog_data { struct brw_stage_prog_data base; @@ -1344,6 +1353,8 @@ struct brw_cs_prog_data { bool uses_inline_data; bool uses_btd_stack_ids; bool uses_systolic; + uint8_t generate_local_id; + enum brw_compute_walk_order walk_order; struct { struct brw_push_const_block cross_thread; diff --git a/src/intel/vulkan/genX_cmd_compute.c b/src/intel/vulkan/genX_cmd_compute.c index 8ee45982219..224d3224a02 100644 --- a/src/intel/vulkan/genX_cmd_compute.c +++ b/src/intel/vulkan/genX_cmd_compute.c @@ -359,6 +359,11 @@ emit_compute_walker(struct anv_cmd_buffer *cmd_buffer, #if GFX_VERx10 == 125 .SystolicModeEnable = prog_data->uses_systolic, #endif + .GenerateLocalID = prog_data->generate_local_id != 0, + .EmitLocal = prog_data->generate_local_id, + .WalkOrder = prog_data->walk_order, + .TileLayout = prog_data->walk_order == BRW_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, diff --git a/src/intel/vulkan/genX_simple_shader.c b/src/intel/vulkan/genX_simple_shader.c index 9adbf8cac36..2776f5ef256 100644 --- a/src/intel/vulkan/genX_simple_shader.c +++ b/src/intel/vulkan/genX_simple_shader.c @@ -557,6 +557,14 @@ genX(emit_simple_shader_dispatch)(struct anv_simple_shader *state, cw.ExecutionMask = dispatch.right_mask; cw.PostSync.MOCS = anv_mocs(device, NULL, 0); +#if GFX_VERx10 >= 125 + cw.GenerateLocalID = prog_data->generate_local_id != 0; + cw.EmitLocal = prog_data->generate_local_id; + cw.WalkOrder = prog_data->walk_order; + cw.TileLayout = prog_data->walk_order == BRW_WALK_ORDER_YXZ ? + TileY32bpe : Linear; +#endif + cw.InterfaceDescriptor = (struct GENX(INTERFACE_DESCRIPTOR_DATA)) { .KernelStartPointer = state->kernel->kernel.offset + brw_cs_prog_data_prog_offset(prog_data,