For the series (except 9-10):
Tested-by: Dieter Nützel <die...@nuetzel-hh.de>
with glmark2, UH, UV and KDE Plasma 5 on RX580
Dieter
Am 10.04.2018 06:34, schrieb Timothy Arceri:
---
src/compiler/glsl/glsl_to_nir.cpp | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/src/compiler/glsl/glsl_to_nir.cpp
b/src/compiler/glsl/glsl_to_nir.cpp
index 5a36963607e..55c01024669 100644
--- a/src/compiler/glsl/glsl_to_nir.cpp
+++ b/src/compiler/glsl/glsl_to_nir.cpp
@@ -26,6 +26,7 @@
*/
#include "glsl_to_nir.h"
+#include "ir_optimization.h"
#include "ir_visitor.h"
#include "ir_hierarchical_visitor.h"
#include "ir.h"
@@ -161,6 +162,25 @@ glsl_to_nir(const struct gl_shader_program
*shader_prog,
v2.run(sh->ir);
visit_exec_list(sh->ir, &v1);
+ nir_validate_shader(shader);
+
+ /* We have to lower away local constant initializers right before
we
+ * inline functions. That way they get properly initialized at the
top
+ * of the function and not at the top of its caller.
+ */
+ nir_lower_constant_initializers(shader, nir_var_local);
+ nir_lower_returns(shader);
+ nir_inline_functions(shader);
+
+ /* Now that we have inlined everything remove all of the functions
except
+ * main().
+ */
+ foreach_list_typed_safe(nir_function, function, node,
&(shader)->functions){
+ if (strcmp("main", function->name) != 0) {
+ exec_node_remove(&function->node);
+ }
+ }
+
nir_lower_constant_initializers(shader, (nir_variable_mode)~0);
/* Remap the locations to slots so those requiring two slots will
occupy
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev