mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 00:58:05 +02:00
nir: improve divergence analysis for loads with non-uniform resources
If ACCESS_NON_UNIFORM is not specified, we can assume the resource is uniform. This requires nir_lower_non_uniform_access to remove that flag. A few Detroit: Become Human shaders use a index sourced from a fragment input which is expected to be uniform. shader-db (Navi): Totals from 8 (0.01% of 127638) affected shaders: SGPRs: 224 -> 384 (+71.43%) VGPRs: 208 -> 112 (-46.15%) CodeSize: 5360 -> 5344 (-0.30%); split: -1.49%, +1.19% Instrs: 1036 -> 1028 (-0.77%); split: -1.93%, +1.16% VMEM: 1320 -> 608 (-53.94%) SMEM: 384 -> 336 (-12.50%); split: +14.58%, -27.08% VClause: 24 -> 16 (-33.33%) SClause: 48 -> 56 (+16.67%) PreSGPRs: 124 -> 216 (+74.19%) PreVGPRs: 168 -> 88 (-47.62%) Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5201>
This commit is contained in:
parent
b1619109ca
commit
d1283083ea
1 changed files with 14 additions and 5 deletions
|
|
@ -241,6 +241,20 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr)
|
|||
break;
|
||||
}
|
||||
|
||||
case nir_intrinsic_load_ubo:
|
||||
case nir_intrinsic_load_ssbo:
|
||||
is_divergent = (instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM)) ||
|
||||
instr->src[1].ssa->divergent;
|
||||
break;
|
||||
|
||||
case nir_intrinsic_image_load:
|
||||
case nir_intrinsic_image_deref_load:
|
||||
case nir_intrinsic_bindless_image_load:
|
||||
is_divergent = (instr->src[0].ssa->divergent && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM)) ||
|
||||
instr->src[1].ssa->divergent || instr->src[2].ssa->divergent || instr->src[3].ssa->divergent;
|
||||
break;
|
||||
|
||||
|
||||
/* Intrinsics with divergence depending on sources */
|
||||
case nir_intrinsic_ballot_bitfield_extract:
|
||||
case nir_intrinsic_ballot_find_lsb:
|
||||
|
|
@ -254,8 +268,6 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr)
|
|||
case nir_intrinsic_quad_swap_vertical:
|
||||
case nir_intrinsic_quad_swap_diagonal:
|
||||
case nir_intrinsic_load_deref:
|
||||
case nir_intrinsic_load_ubo:
|
||||
case nir_intrinsic_load_ssbo:
|
||||
case nir_intrinsic_load_shared:
|
||||
case nir_intrinsic_load_global:
|
||||
case nir_intrinsic_load_global_constant:
|
||||
|
|
@ -264,9 +276,6 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr)
|
|||
case nir_intrinsic_load_constant:
|
||||
case nir_intrinsic_load_sample_pos_from_id:
|
||||
case nir_intrinsic_load_kernel_input:
|
||||
case nir_intrinsic_image_load:
|
||||
case nir_intrinsic_image_deref_load:
|
||||
case nir_intrinsic_bindless_image_load:
|
||||
case nir_intrinsic_image_samples:
|
||||
case nir_intrinsic_image_deref_samples:
|
||||
case nir_intrinsic_bindless_image_samples:
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue