summaryrefslogtreecommitdiffstats
path: root/src/freedreno
diff options
context:
space:
mode:
authorRob Clark <[email protected]>2019-08-08 14:31:50 -0700
committerRob Clark <[email protected]>2019-09-03 14:10:57 -0700
commit1ef459297c7208ff6279557ccfd0dc702f8f99e1 (patch)
tree5105a6f5a9183f3d7d860044f032320b535881ea /src/freedreno
parent305bcdf9921a0684e5dfca19dc42e849f3f2246c (diff)
freedreno/ir3: use uniform base
When lowering from ubo, use the constant base field in the load_uniform instruction for the constant part of the offset. Doesn't change much for constant indexing, but this will help for indirect indexing because constant-folding can't completely clean up the result. Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Eric Anholt <[email protected]>
Diffstat (limited to 'src/freedreno')
-rw-r--r--src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c b/src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c
index b3191a36c14..06c1c2212f2 100644
--- a/src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c
+++ b/src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c
@@ -108,20 +108,20 @@ lower_ubo_load_to_uniform(nir_intrinsic_instr *instr, nir_builder *b,
nir_ssa_def *ubo_offset = nir_ssa_for_src(b, instr->src[1], 1);
nir_ssa_def *new_offset = ir3_nir_try_propagate_bit_shift(b, ubo_offset, -2);
+ nir_ssa_def *uniform_offset;
if (new_offset)
- ubo_offset = new_offset;
+ uniform_offset = new_offset;
else
- ubo_offset = nir_ushr(b, ubo_offset, nir_imm_int(b, 2));
+ uniform_offset = nir_ushr(b, ubo_offset, nir_imm_int(b, 2));
const int range_offset =
(state->range[block].offset - state->range[block].start) / 4;
- nir_ssa_def *uniform_offset =
- nir_iadd(b, ubo_offset, nir_imm_int(b, range_offset));
nir_intrinsic_instr *uniform =
nir_intrinsic_instr_create(b->shader, nir_intrinsic_load_uniform);
uniform->num_components = instr->num_components;
uniform->src[0] = nir_src_for_ssa(uniform_offset);
+ nir_intrinsic_set_base(uniform, range_offset);
nir_ssa_dest_init(&uniform->instr, &uniform->dest,
uniform->num_components, instr->dest.ssa.bit_size,
instr->dest.ssa.name);