intel/compiler: Use gl_shader_stage_uses_workgroup() helpers
Instead of checking for MESA_SHADER_COMPUTE (and KERNEL). Where appropriate, also use gl_shader_stage_is_compute(). This allows most of the workgroup-related lowering to be applied to Task and Mesh shaders. These will be added later and "inherit" from cs_prog_data structure. Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13629>
This commit is contained in:
@@ -192,8 +192,7 @@ emit_system_values_block(nir_block *block, fs_visitor *v)
|
||||
break;
|
||||
|
||||
case nir_intrinsic_load_workgroup_id:
|
||||
assert(v->stage == MESA_SHADER_COMPUTE ||
|
||||
v->stage == MESA_SHADER_KERNEL);
|
||||
assert(gl_shader_stage_uses_workgroup(v->stage));
|
||||
reg = &v->nir_system_values[SYSTEM_VALUE_WORKGROUP_ID];
|
||||
if (reg->file == BAD_FILE)
|
||||
*reg = *v->emit_cs_work_group_id_setup();
|
||||
@@ -3802,7 +3801,7 @@ void
|
||||
fs_visitor::nir_emit_cs_intrinsic(const fs_builder &bld,
|
||||
nir_intrinsic_instr *instr)
|
||||
{
|
||||
assert(stage == MESA_SHADER_COMPUTE || stage == MESA_SHADER_KERNEL);
|
||||
assert(gl_shader_stage_uses_workgroup(stage));
|
||||
struct brw_cs_prog_data *cs_prog_data = brw_cs_prog_data(prog_data);
|
||||
|
||||
fs_reg dest;
|
||||
@@ -3885,7 +3884,6 @@ fs_visitor::nir_emit_cs_intrinsic(const fs_builder &bld,
|
||||
|
||||
case nir_intrinsic_load_shared: {
|
||||
assert(devinfo->ver >= 7);
|
||||
assert(stage == MESA_SHADER_COMPUTE || stage == MESA_SHADER_KERNEL);
|
||||
|
||||
const unsigned bit_size = nir_dest_bit_size(instr->dest);
|
||||
fs_reg srcs[SURFACE_LOGICAL_NUM_SRCS];
|
||||
@@ -3922,7 +3920,6 @@ fs_visitor::nir_emit_cs_intrinsic(const fs_builder &bld,
|
||||
|
||||
case nir_intrinsic_store_shared: {
|
||||
assert(devinfo->ver >= 7);
|
||||
assert(stage == MESA_SHADER_COMPUTE || stage == MESA_SHADER_KERNEL);
|
||||
|
||||
const unsigned bit_size = nir_src_bit_size(instr->src[0]);
|
||||
fs_reg srcs[SURFACE_LOGICAL_NUM_SRCS];
|
||||
@@ -3959,8 +3956,12 @@ fs_visitor::nir_emit_cs_intrinsic(const fs_builder &bld,
|
||||
}
|
||||
|
||||
case nir_intrinsic_load_workgroup_size: {
|
||||
assert(compiler->lower_variable_group_size);
|
||||
/* For non-variable case, this should've been lowered already. */
|
||||
assert(nir->info.workgroup_size_variable);
|
||||
|
||||
assert(compiler->lower_variable_group_size);
|
||||
assert(gl_shader_stage_is_compute(stage));
|
||||
|
||||
for (unsigned i = 0; i < 3; i++) {
|
||||
bld.MOV(retype(offset(dest, bld, i), BRW_REGISTER_TYPE_UD),
|
||||
group_size[i]);
|
||||
|
||||
Reference in New Issue
Block a user