amd/common: scan which components of gl_LocalInvocationID are used

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
Samuel Pitoiset 2017-12-14 16:48:02 +01:00
parent 42285ed8c3
commit e001944410
2 changed files with 7 additions and 1 deletions

View File

@ -45,11 +45,16 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, struct ac_shader_info *info)
case nir_intrinsic_load_num_work_groups:
info->cs.uses_grid_size = true;
break;
case nir_intrinsic_load_local_invocation_id:
case nir_intrinsic_load_work_group_id: {
unsigned mask = nir_ssa_def_components_read(&instr->dest.ssa);
while (mask) {
unsigned i = u_bit_scan(&mask);
info->cs.uses_block_id[i] = true;
if (instr->intrinsic == nir_intrinsic_load_work_group_id)
info->cs.uses_block_id[i] = true;
else
info->cs.uses_thread_id[i] = true;
}
break;
}

View File

@ -44,6 +44,7 @@ struct ac_shader_info {
struct {
bool uses_grid_size;
bool uses_block_id[3];
bool uses_thread_id[3];
} cs;
};