summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGert Wollny <[email protected]>2020-04-12 16:52:57 +0200
committerMarge Bot <[email protected]>2020-04-21 15:10:43 +0000
commit50b66622f19aa5e3d7c393e9bbff847d16d788de (patch)
tree2b4e432b8673a05b06423b09189d31cd10bbc249 /src
parent9c7ce4d76e7b772e9d51dda2532a94d69bd4bee1 (diff)
r600/sfn: Count only literals that are not inline to split instruction groups
An instruction group can only support 4 distinct literals, but inline constants count into this number, so skip them when counting. Signed-off-by: Gert Wollny <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4609>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp b/src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp
index cf76d475679..e6a9f202819 100644
--- a/src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp
@@ -246,7 +246,7 @@ bool AssemblyFromShaderLegacyImpl::emit_alu(const AluInstruction& ai, ECFAluOpCo
* scheduler */
if (m_nliterals_in_group > 4) {
sfn_log << SfnLog::assembly << " Have " << m_nliterals_in_group << " inject a last op (nop)\n";
- alu.op = op0_nop;
+ alu.op = ALU_OP0_NOP;
alu.last = 1;
int retval = r600_bytecode_add_alu(m_bc, &alu);
if (retval)
@@ -1057,21 +1057,31 @@ bool AssemblyFromShaderLegacyImpl::copy_src(r600_bytecode_alu_src& src, const Va
if (v.value() == 0) {
src.sel = ALU_SRC_0;
src.chan = 0;
+ --m_nliterals_in_group;
return true;
}
if (v.value() == 1) {
src.sel = ALU_SRC_1_INT;
src.chan = 0;
+ --m_nliterals_in_group;
return true;
}
if (v.value_float() == 1.0f) {
src.sel = ALU_SRC_1;
src.chan = 0;
+ --m_nliterals_in_group;
return true;
}
if (v.value_float() == 0.5f) {
src.sel = ALU_SRC_0_5;
src.chan = 0;
+ --m_nliterals_in_group;
+ return true;
+ }
+ if (v.value() == 0xffffffff) {
+ src.sel = ALU_SRC_M_1_INT;
+ src.chan = 0;
+ --m_nliterals_in_group;
return true;
}
src.value = v.value();