[Mesa-dev] [PATCH 3/3] mesa/st: glsl_to_tgsi: tie in the new register renaming approach
Gert Wollny
gw.fossdev at gmail.com
Fri Jun 9 23:15:08 UTC 2017
This patch replaces the old register livetime estimation with the
new approach.
---
src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 0e7f4b646a..b76ad42536 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -55,10 +55,11 @@
#include "st_glsl_types.h"
#include "st_nir.h"
#include "st_shader_cache.h"
-#include "st_glsl_to_tgsi_private.h"
+#include "st_glsl_to_tgsi_temprename.h"
#include "util/hash_table.h"
#include <algorithm>
+#include <iostream>
#define PROGRAM_ANY_CONST ((1 << PROGRAM_STATE_VAR) | \
(1 << PROGRAM_CONSTANT) | \
@@ -323,6 +324,7 @@ public:
void merge_two_dsts(void);
void merge_registers(void);
+ void merge_registers_alternative(void);
void renumber_registers(void);
void emit_block_mov(ir_assignment *ir, const struct glsl_type *type,
@@ -5042,6 +5044,17 @@ glsl_to_tgsi_visitor::merge_two_dsts(void)
}
}
+void
+glsl_to_tgsi_visitor::merge_registers_alternative(void)
+{
+ rename_reg_pair proto ={false, 0};
+ std::vector<rename_reg_pair> renames(this->next_temp, proto);
+ tgsi_temp_lifetime analysis(&this->instructions, this->next_temp);
+ auto lt = analysis.get_lifetimes();
+ evaluate_remapping(lt, renames);
+ rename_temp_registers(&renames[0]);
+}
+
/* Merges temporary registers together where possible to reduce the number of
* registers needed to run a program.
*
@@ -6492,7 +6505,7 @@ get_mesa_program_tgsi(struct gl_context *ctx,
v->merge_two_dsts();
if (!skip_merge_registers)
- v->merge_registers();
+ v->merge_registers_alternative();
v->renumber_registers();
/* Write the END instruction. */
--
2.13.0
More information about the mesa-dev
mailing list