mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 18:10:11 +01:00
nir/divergence: resource_intel is less divergent than you thought
When the non_uniform flag is not set, the result is never divergent. v2: Remove redundant assignment to is_divergent. Suggested by Caio. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Caio Oliveira <caio.oliveira@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30251>
This commit is contained in:
parent
eda55c7c2f
commit
c160ed212e
1 changed files with 17 additions and 1 deletions
|
|
@ -590,7 +590,6 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state)
|
||||||
case nir_intrinsic_load_ssbo_address:
|
case nir_intrinsic_load_ssbo_address:
|
||||||
case nir_intrinsic_load_global_constant_bounded:
|
case nir_intrinsic_load_global_constant_bounded:
|
||||||
case nir_intrinsic_load_global_constant_offset:
|
case nir_intrinsic_load_global_constant_offset:
|
||||||
case nir_intrinsic_resource_intel:
|
|
||||||
case nir_intrinsic_load_reg:
|
case nir_intrinsic_load_reg:
|
||||||
case nir_intrinsic_load_constant_agx:
|
case nir_intrinsic_load_constant_agx:
|
||||||
case nir_intrinsic_load_reg_indirect:
|
case nir_intrinsic_load_reg_indirect:
|
||||||
|
|
@ -608,6 +607,23 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case nir_intrinsic_resource_intel:
|
||||||
|
/* Not having the non_uniform flag with divergent sources is undefined
|
||||||
|
* behavior. The Intel driver defines it pick the lowest numbered live
|
||||||
|
* SIMD lane (via emit_uniformize).
|
||||||
|
*/
|
||||||
|
if ((nir_intrinsic_resource_access_intel(instr) &
|
||||||
|
nir_resource_intel_non_uniform) != 0) {
|
||||||
|
unsigned num_srcs = nir_intrinsic_infos[instr->intrinsic].num_srcs;
|
||||||
|
for (unsigned i = 0; i < num_srcs; i++) {
|
||||||
|
if (instr->src[i].ssa->divergent) {
|
||||||
|
is_divergent = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case nir_intrinsic_shuffle:
|
case nir_intrinsic_shuffle:
|
||||||
is_divergent = instr->src[0].ssa->divergent &&
|
is_divergent = instr->src[0].ssa->divergent &&
|
||||||
instr->src[1].ssa->divergent;
|
instr->src[1].ssa->divergent;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue