mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 19:58:09 +02:00
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:
parent
b5792c1a34
commit
7ebfbc97a8
2 changed files with 11 additions and 2 deletions
|
|
@ -5408,6 +5408,7 @@ typedef struct nir_lower_compute_system_values_options {
|
||||||
bool lower_local_invocation_index:1;
|
bool lower_local_invocation_index:1;
|
||||||
bool lower_cs_local_id_to_index:1;
|
bool lower_cs_local_id_to_index:1;
|
||||||
bool lower_workgroup_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;
|
} nir_lower_compute_system_values_options;
|
||||||
|
|
||||||
bool nir_lower_compute_system_values(nir_shader *shader,
|
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)
|
if (options && options->has_base_workgroup_id)
|
||||||
return nir_iadd(b, nir_u2uN(b, nir_load_workgroup_id_zero_base(b), bit_size),
|
return nir_iadd(b, nir_u2uN(b, nir_load_workgroup_id_zero_base(b), bit_size),
|
||||||
nir_load_base_workgroup_id(b, bit_size));
|
nir_load_base_workgroup_id(b, bit_size));
|
||||||
else if (options && options->lower_workgroup_id_to_index)
|
else if (options && options->lower_workgroup_id_to_index) {
|
||||||
return lower_id_to_index_no_umod(b, nir_load_workgroup_index(b),
|
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),
|
nir_load_num_workgroups(b, bit_size),
|
||||||
bit_size);
|
bit_size);
|
||||||
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue