From 884ac52eaa8723aad2f87a659fbee0bde2501401 Mon Sep 17 00:00:00 2001 From: Rhys Perry Date: Wed, 18 Aug 2021 11:02:21 +0100 Subject: [PATCH] nir: consider push constant loads as always dynamically uniform Signed-off-by: Rhys Perry Reviewed-by: Timothy Arceri Part-of: --- src/compiler/nir/nir.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/compiler/nir/nir.c b/src/compiler/nir/nir.c index 7b1e7a55892..7b7af5d9b55 100644 --- a/src/compiler/nir/nir.c +++ b/src/compiler/nir/nir.c @@ -1355,12 +1355,18 @@ nir_src_is_dynamically_uniform(nir_src src) if (src.ssa->parent_instr->type == nir_instr_type_load_const) return true; - /* As are uniform variables */ if (src.ssa->parent_instr->type == nir_instr_type_intrinsic) { nir_intrinsic_instr *intr = nir_instr_as_intrinsic(src.ssa->parent_instr); + /* As are uniform variables */ if (intr->intrinsic == nir_intrinsic_load_uniform && nir_src_is_dynamically_uniform(intr->src[0])) return true; + /* Push constant loads always use uniform offsets. */ + if (intr->intrinsic == nir_intrinsic_load_push_constant) + return true; + if (intr->intrinsic == nir_intrinsic_load_deref && + nir_deref_mode_is(nir_src_as_deref(intr->src[0]), nir_var_mem_push_const)) + return true; } /* Operating together dynamically uniform expressions produces a