From dba46bb8bc35836145bcb7e9d1b0e92f5617996b Mon Sep 17 00:00:00 2001 From: Gert Wollny Date: Fri, 28 Oct 2022 18:48:14 +0200 Subject: [PATCH] r600/sfn: handle possible inline const as array base for scratch loads Replace some asserts with unreachable too. Signed-off-by: Gert Wollny Part-of: --- src/gallium/drivers/r600/sfn/sfn_instr_fetch.cpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/r600/sfn/sfn_instr_fetch.cpp b/src/gallium/drivers/r600/sfn/sfn_instr_fetch.cpp index 9f0a1012d17..4c0736f6ed4 100644 --- a/src/gallium/drivers/r600/sfn/sfn_instr_fetch.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_instr_fetch.cpp @@ -26,6 +26,7 @@ #include "sfn_instr_fetch.h" +#include "sfn_alu_defines.h" #include "sfn_defines.h" #include "sfn_valuefactory.h" @@ -655,17 +656,18 @@ public: } void visit(LocalArray& value) { - assert(0); + unreachable("An array can't be a direct source for scratch reads"); (void)value; } void visit(LocalArrayValue& value) { - assert(0); + unreachable("An array value can't be a direct source for scratch reads"); + // TODO: an array element with constant offset could be used here (void)value; } void visit(UniformValue& value) { - assert(0); + unreachable("A uniform can't be a direct source for scratch reads"); (void)value; } void visit(LiteralConstant& value) @@ -675,8 +677,12 @@ public: } void visit(InlineConstant& value) { - assert(0); - (void)value; + if (value.sel() == ALU_SRC_1_INT) + m_lfs->set_array_base(1); + else if (value.sel() != ALU_SRC_0) + unreachable("Scratch array base is an inpossible inline constant"); + + m_lfs->set_src(new Register(0, 7, pin_none)); } LoadFromScratch *m_lfs;