freedreno: Fix up end range of unaligned UBO loads.
authorEric Anholt <eric@anholt.net>
Thu, 6 Jun 2019 21:27:13 +0000 (14:27 -0700)
committerEric Anholt <eric@anholt.net>
Sat, 22 Jun 2019 00:14:43 +0000 (17:14 -0700)
We need the constants uploaded to cover the NIR offset plus the size,
not the aligned-down start of our upload range plus the size.  Fixes
mistaken UBO analysis with mat3 loads.

Fixes: 893425a607a6 ("freedreno/ir3: Push UBOs to constant file")
Reviewed-by: Kristian H. Kristensen <hoegsberg@google.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c

index aaf962977b36efcd87ac1828139ada97b11116c0..46216a6f8621e52490479c8cb691fcaa779bd922 100644 (file)
@@ -32,10 +32,11 @@ get_ubo_load_range(nir_intrinsic_instr *instr)
 {
        struct ir3_ubo_range r;
 
+       const int offset = nir_src_as_uint(instr->src[1]);
        const int bytes = nir_intrinsic_dest_components(instr) * 4;
 
-       r.start = ROUND_DOWN_TO(nir_src_as_uint(instr->src[1]), 16 * 4);
-       r.end = ALIGN(r.start + bytes, 16 * 4);
+       r.start = ROUND_DOWN_TO(offset, 16 * 4);
+       r.end = ALIGN(offset + bytes, 16 * 4);
 
        return r;
 }