From 118b975ce7eda028fd8cfea81283f511ed14d8a4 Mon Sep 17 00:00:00 2001 From: Job Noorman Date: Tue, 14 Apr 2026 14:41:20 +0200 Subject: [PATCH] ir3: use ldg.k load size ldg.k can copy up to 256 vec4s at once but we currently emit one ldg.k per vec4. Fix this by using the load size field of ldg.k. Signed-off-by: Job Noorman Part-of: --- src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c b/src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c index 2457a4f5e77..3e83573d0eb 100644 --- a/src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c +++ b/src/freedreno/ir3/ir3_nir_analyze_ubo_ranges.c @@ -406,10 +406,12 @@ copy_global_to_uniform(nir_shader *nir, struct ir3_ubo_analysis_state *state) } unsigned size = (range->end - range->start); - for (unsigned offset = 0; offset < size; offset += 16) { + /* ldg.k can copy at most 256 vec4s. */ + for (unsigned offset = 0; offset < size; offset += 256 * 16) { unsigned const_offset = range->offset / 4 + offset / 4; - nir_copy_global_to_uniform_ir3(b, base, .base = start + offset, - .range_base = const_offset, .range = 1); + nir_copy_global_to_uniform_ir3( + b, base, .base = start + offset, .range_base = const_offset, + .range = MIN2(256, (size - offset) / 16)); } }