Mesa (main): nir/lower_system_values: replace local_invocation_id components with zero
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Nov 12 19:39:28 UTC 2021
Module: Mesa
Branch: main
Commit: 719b48f85d6a5f5d9129e99d2e9a0783c03ecec4
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=719b48f85d6a5f5d9129e99d2e9a0783c03ecec4
Author: Rhys Perry <pendingchaos02 at gmail.com>
Date: Thu Nov 11 14:26:00 2021 +0000
nir/lower_system_values: replace local_invocation_id components with zero
fossil-db (Sienna Cichlid):
Totals from 360 (0.28% of 128647) affected shaders:
VGPRs: 7912 -> 7272 (-8.09%); split: -8.59%, +0.51%
CodeSize: 542456 -> 544688 (+0.41%); split: -0.32%, +0.73%
MaxWaves: 10866 -> 10952 (+0.79%)
Instrs: 95973 -> 96010 (+0.04%); split: -0.34%, +0.38%
Latency: 4366023 -> 4344664 (-0.49%); split: -0.90%, +0.41%
InvThroughput: 19656659 -> 18297185 (-6.92%); split: -6.92%, +0.00%
VClause: 3242 -> 3116 (-3.89%); split: -4.04%, +0.15%
SClause: 3422 -> 3504 (+2.40%); split: -0.20%, +2.60%
Copies: 8854 -> 9376 (+5.90%); split: -0.89%, +6.79%
Branches: 2329 -> 2326 (-0.13%); split: -0.39%, +0.26%
PreSGPRs: 7620 -> 7841 (+2.90%); split: -0.43%, +3.33%
PreVGPRs: 5765 -> 5504 (-4.53%)
Signed-off-by: Rhys Perry <pendingchaos02 at gmail.com>
Reviewed-by: Daniel-schuermann <daniel at schuermann.dev>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13757>
---
src/compiler/nir/nir_lower_system_values.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/src/compiler/nir/nir_lower_system_values.c b/src/compiler/nir/nir_lower_system_values.c
index 4d270578da6..5a60b42fbc0 100644
--- a/src/compiler/nir/nir_lower_system_values.c
+++ b/src/compiler/nir/nir_lower_system_values.c
@@ -387,6 +387,21 @@ lower_compute_system_value_instr(nir_builder *b,
return nir_vec3(b, x, y, z);
}
+
+ /* If a workgroup size dimension is 1, then the local invocation id must be zero. */
+ nir_component_mask_t is_zero = 0;
+ is_zero |= b->shader->info.workgroup_size[0] == 1 ? 0x1 : 0x0;
+ is_zero |= b->shader->info.workgroup_size[1] == 1 ? 0x2 : 0x0;
+ is_zero |= b->shader->info.workgroup_size[2] == 1 ? 0x4 : 0x0;
+ if (!b->shader->info.workgroup_size_variable && is_zero) {
+ nir_ssa_def *defs[3];
+ for (unsigned i = 0; i < 3; i++) {
+ defs[i] = is_zero & (1 << i) ? nir_imm_zero(b, 1, 32) :
+ nir_channel(b, &intrin->dest.ssa, i);
+ }
+ return nir_vec(b, defs, 3);
+ }
+
return NULL;
case nir_intrinsic_load_local_invocation_index:
More information about the mesa-commit
mailing list