mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-06-06 01:58:17 +02:00
nir/divergence: Consider ACCESS_SMEM_AMD divergence across subgroups
AMD SMEM instructions are always uniform within a subgroup, but they may be divergent across subgroups, ie. each subgroup may have a different value from the same SMEM instruction. This needs to be considered for divergence across subgroups as well as for vertex divergence, because vertices of the same primitive may be split between different waves. Signed-off-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Reviewed-by: Georg Lehmann <dadschoorse@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41584>
This commit is contained in:
parent
f43bc8e8be
commit
5b385b703b
1 changed files with 6 additions and 1 deletions
|
|
@ -1075,8 +1075,13 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state)
|
|||
(nir_intrinsic_access(instr) & ACCESS_SKIP_HELPERS))
|
||||
is_divergent = true;
|
||||
|
||||
/* SMEM access is always subgroup uniform.
|
||||
* Note, it's only uniform across vertices/subgroups when
|
||||
* all its sources are uniform (already taken into account above).
|
||||
*/
|
||||
if (nir_intrinsic_has_access(instr) &&
|
||||
(nir_intrinsic_access(instr) & ACCESS_SMEM_AMD))
|
||||
(nir_intrinsic_access(instr) & ACCESS_SMEM_AMD) &&
|
||||
!(state->options & (nir_divergence_vertex | nir_divergence_across_subgroups)))
|
||||
is_divergent = false;
|
||||
|
||||
instr->def.divergent = is_divergent;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue