r600/sfn: Correctly update the number of literals when forcing a new
authorGert Wollny <gert.wollny@collabora.com>
Sat, 23 May 2020 16:28:05 +0000 (18:28 +0200)
committerMarge Bot <eric+marge@anholt.net>
Tue, 26 May 2020 06:17:42 +0000 (06:17 +0000)
group

When forcing a new instruction group by adding a ALU_OP_NOP, the
literals for the instruction that triggered this must be taken into
account for the next group, so update the number of literals
accordingly.

Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5187>

src/gallium/drivers/r600/sfn/sfn_ir_to_assembly.cpp

index dd6e9f63c070844ba12b5985ebc5018a018df042..415e17a903ab9c705bab24cc347cb497efe37e66 100644 (file)
@@ -247,6 +247,7 @@ bool AssemblyFromShaderLegacyImpl::emit_alu(const AluInstruction& ai, ECFAluOpCo
       return false;
    }
 
+   unsigned old_nliterals_in_group = m_nliterals_in_group;
    for (unsigned i = 0; i < ai.n_sources(); ++i) {
       auto& s = ai.src(i);
       if (s.type() == Value::literal)
@@ -266,7 +267,7 @@ bool AssemblyFromShaderLegacyImpl::emit_alu(const AluInstruction& ai, ECFAluOpCo
       if (retval)
          return false;
       memset(&alu, 0, sizeof(alu));
-      m_nliterals_in_group = 0;
+      m_nliterals_in_group -= old_nliterals_in_group;
    }
 
    alu.op = opcode_map.at(ai.opcode());