nir: use wg id to wg idx shortcut if two dims of num_workgroups are 1
Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22334>
This commit is contained in:

committed by
Marge Bot

parent
b5792c1a34
commit
7ebfbc97a8
@@ -5408,6 +5408,7 @@ typedef struct nir_lower_compute_system_values_options {
|
||||
bool lower_local_invocation_index:1;
|
||||
bool lower_cs_local_id_to_index:1;
|
||||
bool lower_workgroup_id_to_index:1;
|
||||
uint16_t num_workgroups[3]; /* Compile-time-known dispatch sizes, or 0 if unknown. */
|
||||
} nir_lower_compute_system_values_options;
|
||||
|
||||
bool nir_lower_compute_system_values(nir_shader *shader,
|
||||
|
@@ -672,10 +672,18 @@ lower_compute_system_value_instr(nir_builder *b,
|
||||
if (options && options->has_base_workgroup_id)
|
||||
return nir_iadd(b, nir_u2uN(b, nir_load_workgroup_id_zero_base(b), bit_size),
|
||||
nir_load_base_workgroup_id(b, bit_size));
|
||||
else if (options && options->lower_workgroup_id_to_index)
|
||||
return lower_id_to_index_no_umod(b, nir_load_workgroup_index(b),
|
||||
else if (options && options->lower_workgroup_id_to_index) {
|
||||
nir_ssa_def *wg_idx = nir_load_workgroup_index(b);
|
||||
|
||||
nir_ssa_def *val =
|
||||
try_lower_id_to_index_1d(b, wg_idx, options->num_workgroups);
|
||||
if (val)
|
||||
return val;
|
||||
|
||||
return lower_id_to_index_no_umod(b, wg_idx,
|
||||
nir_load_num_workgroups(b, bit_size),
|
||||
bit_size);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
|
Reference in New Issue
Block a user