From: Gert Wollny Date: Sat, 16 May 2020 18:39:45 +0000 (+0200) Subject: r600/sfn: Fix splitting constants that come from different kcache banks. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9f942a8e7c72c720bc7d4669a15fa4d37dd7ce7c;p=mesa.git r600/sfn: Fix splitting constants that come from different kcache banks. Signed-off-by: Gert Wollny Reviewed-by: Reviewed-by: Dave Airlie Part-of: --- diff --git a/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.cpp b/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.cpp index 35da6d4ef4d..e63fa973c17 100644 --- a/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_emitaluinstruction.cpp @@ -191,13 +191,13 @@ void EmitAluInstruction::split_constants(const nir_alu_instr& instr) return; int nconst = 0; - std::array c; + std::array c; std::array idx; for (unsigned i = 0; i < op_info->num_inputs; ++i) { PValue src = from_nir(instr.src[i], 0); assert(src); if (src->type() == Value::kconst) { - c[nconst] = src; + c[nconst] = static_cast(src.get()); idx[nconst++] = i; } @@ -206,11 +206,12 @@ void EmitAluInstruction::split_constants(const nir_alu_instr& instr) return; unsigned sel = c[0]->sel(); + unsigned kcache = c[0]->kcache_bank(); sfn_log << SfnLog::reg << "split " << nconst << " constants, sel[0] = " << sel; ; for (int i = 1; i < nconst; ++i) { sfn_log << "sel[" << i << "] = " << c[i]->sel() << "\n"; - if (c[i]->sel() != sel) { + if (c[i]->sel() != sel || c[i]->kcache_bank() != kcache) { load_uniform(instr.src[idx[i]]); } }