From de17b4aab568aca2fcf243bfb5871fc465b0ccee Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Thu, 18 Feb 2021 14:19:38 -0800 Subject: [PATCH] freedreno: Remove uniform variables after finalizing NIR. mesa/st optimizes the uniform storage if you have the finalize hook in place, causing the uniforms declared to potentially not have storage in the ParameterValues list any more. If you leave your uniforms around in the NIR, then a later finalization after variant creation will re-add the uniforms to parameters, defeating the optimization and likely reallocating the uniform storage (causing use-after-free). So, we have to do this before we can start using variants in mesa/st. Part-of: --- src/freedreno/ir3/ir3_nir.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/freedreno/ir3/ir3_nir.c b/src/freedreno/ir3/ir3_nir.c index 9ce2682..35bcad2 100644 --- a/src/freedreno/ir3/ir3_nir.c +++ b/src/freedreno/ir3/ir3_nir.c @@ -332,6 +332,11 @@ ir3_finalize_nir(struct ir3_compiler *compiler, nir_shader *s) debug_printf("----------------------\n"); } + nir_foreach_uniform_variable_safe(var, s) { + exec_node_remove(&var->node); + } + nir_validate_shader(s, "after uniform var removal"); + nir_sweep(s); } -- 2.7.4