From ae049f6fea2b5abc8efbae434b9ab860f134733b Mon Sep 17 00:00:00 2001 From: Patrick Lerda Date: Sun, 2 Nov 2025 20:25:31 +0100 Subject: [PATCH] r600: limit pre-evergreen predicate ready size With the current stack configuration the rv770 seems to be unable to go beyond three with the "vs-output-array-float-index-wr-before-gs.shader_test" test. Anyway, the value four seems to be sufficient for the other tests. This issue was triggered on rv770, for instance, with: "piglit/bin/shader_runner tests/spec/glsl-1.50/execution/variable-indexing/gs-output-array-float-index-wr.shader_test -auto -fbo" "piglit/bin/shader_runner tests/spec/glsl-1.50/execution/variable-indexing/vs-output-array-float-index-wr-before-gs.shader_test -auto -fbo" Fixes: 713edb59982c ("r600/sfn: handle the IF predicate in the scheduler") Signed-off-by: Patrick Lerda Part-of: --- src/gallium/drivers/r600/sfn/sfn_scheduler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/r600/sfn/sfn_scheduler.cpp b/src/gallium/drivers/r600/sfn/sfn_scheduler.cpp index 74804aac3ef..88c146e7849 100644 --- a/src/gallium/drivers/r600/sfn/sfn_scheduler.cpp +++ b/src/gallium/drivers/r600/sfn/sfn_scheduler.cpp @@ -1269,7 +1269,8 @@ BlockScheduler::collect_ready_alu_vec(std::list& ready, ++i; } - if (predicate && *predicate && available.empty() && ready.size() < 16 && + if (predicate && *predicate && available.empty() && + ready.size() < (m_chip_class >= ISA_CC_EVERGREEN ? 16 : 3) && (*predicate)->ready()) { assert((*predicate)->alu_slots() == 1); ready.push_back(*predicate);