From 9e9b8dc7f8a25c1d0ff7e8f93ea7603b08f62d36 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Mon, 12 Dec 2022 13:06:54 +1100 Subject: [PATCH] glsl: fix function inlining for images Here we skip replacing parameters with their actual values for images as glsl_to_nir() expects them to be copied to temps first. Tree grafting has a similiar rule to avoid this happening also. Fixes: 8d10a6835f32 ("glsl: dont create temps for builtin function inputs") Tested-by: Martin Roukala Reviewed-by: Emma Anholt Part-of: --- src/compiler/glsl/opt_function_inlining.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/compiler/glsl/opt_function_inlining.cpp b/src/compiler/glsl/opt_function_inlining.cpp index 44a18cf..56ac90c 100644 --- a/src/compiler/glsl/opt_function_inlining.cpp +++ b/src/compiler/glsl/opt_function_inlining.cpp @@ -140,6 +140,12 @@ should_replace_variable(ir_variable *sig_param, ir_rvalue *param, sig_param->data.mode != ir_var_const_in) return false; + /* Some places in glsl_to_nir() expect images to always be copied to a temp + * first. + */ + if (sig_param->type->without_array()->is_image() && !param->is_dereference()) + return false; + /* SSBO and shared vars might be passed to a built-in such as an atomic * memory function, where copying these to a temp before passing to the * atomic function is not valid so we must replace these instead. Also, -- 2.7.4