[Mesa-dev] [PATCH 05/22] nvir/nir: run some passes to make the conversion easier
Karol Herbst
kherbst at redhat.com
Thu Dec 21 15:51:23 UTC 2017
Signed-off-by: Karol Herbst <kherbst at redhat.com>
---
.../drivers/nouveau/codegen/nv50_ir_from_nir.cpp | 37 ++++++++++++++++++++++
1 file changed, 37 insertions(+)
diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp
index bfaeb1ffd5..4833da5914 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_nir.cpp
@@ -28,6 +28,12 @@
#include "codegen/nv50_ir_from_common.h"
#include "codegen/nv50_ir_util.h"
+static int
+type_size(const struct glsl_type *type)
+{
+ return glsl_count_attribute_slots(type, false);
+}
+
namespace {
using namespace nv50_ir;
@@ -49,6 +55,37 @@ Converter::Converter(Program *prog, nir_shader *nir, nv50_ir_prog_info *info)
bool
Converter::run()
{
+ bool progress;
+
+ if (prog->dbgFlags & NV50_IR_DEBUG_BASIC)
+ nir_print_shader(nir, stderr);
+
+ // converts intrinsic load_var to intrinsic load_uniform
+ NIR_PASS_V(nir, nir_lower_io, nir_var_all, type_size, (nir_lower_io_options)0);
+
+ NIR_PASS_V(nir, nir_lower_regs_to_ssa);
+ NIR_PASS_V(nir, nir_lower_load_const_to_scalar);
+
+ do {
+ progress = false;
+ // we need this to_ssa otherwise the later opts are less effective
+ NIR_PASS_V(nir, nir_lower_vars_to_ssa);
+ NIR_PASS(progress, nir, nir_lower_alu_to_scalar);
+ NIR_PASS(progress, nir, nir_lower_phis_to_scalar);
+ NIR_PASS(progress, nir, nir_copy_prop);
+ NIR_PASS(progress, nir, nir_opt_dce);
+ NIR_PASS(progress, nir, nir_opt_dead_cf);
+ } while (progress);
+
+ NIR_PASS_V(nir, nir_remove_dead_variables, nir_var_local);
+ NIR_PASS_V(nir, nir_convert_from_ssa, true);
+
+ /* Garbage collect dead instructions */
+ nir_sweep(nir);
+
+ if (prog->dbgFlags & NV50_IR_DEBUG_BASIC)
+ nir_print_shader(nir, stderr);
+
return false;
}
--
2.14.3
More information about the mesa-dev
mailing list