glsl: fix function inlining for images
authorTimothy Arceri <tarceri@itsqueeze.com>
Mon, 12 Dec 2022 02:06:54 +0000 (13:06 +1100)
committerMarge Bot <emma+marge@anholt.net>
Mon, 12 Dec 2022 21:28:44 +0000 (21:28 +0000)
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 <martin.roukala@mupuf.org>
Reviewed-by: Emma Anholt <emma@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20274>

src/compiler/glsl/opt_function_inlining.cpp

index 44a18cfd8d85157ba79327be7547174ab6711929..56ac90c07ccbcfb8bdb39616a6e5c61df232adca 100644 (file)
@@ -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,