glsl_to_nir: Use a variable's constant_value if it wasn't const-propped out.
authorEmma Anholt <emma@anholt.net>
Tue, 7 Mar 2023 00:26:14 +0000 (16:26 -0800)
committerMarge Bot <emma+marge@anholt.net>
Wed, 15 Mar 2023 03:29:19 +0000 (03:29 +0000)
glsl has been constant-propagating out references to ir->constant_value
(the value of a variable declared as const), but we can get rid of that
whole pass if we just have glsl-to-nir hand the constant propagating
problem off to NIR.

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21751>

src/compiler/glsl/glsl_to_nir.cpp

index 9f79119..9032f76 100644 (file)
@@ -707,7 +707,13 @@ nir_visitor::visit(ir_variable *ir)
       var->state_slots = NULL;
    }
 
-   var->constant_initializer = constant_copy(ir->constant_initializer, var);
+   /* Values declared const will have ir->constant_value instead of
+    * ir->constant_initializer.
+    */
+   if (ir->constant_initializer)
+      var->constant_initializer = constant_copy(ir->constant_initializer, var);
+   else
+      var->constant_initializer = constant_copy(ir->constant_value, var);
 
    if (var->data.mode == nir_var_function_temp)
       nir_function_impl_add_variable(impl, var);