From b074ea9fe805f4fecb0c5a407e577892158776b4 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 (cherry picked from commit ae049f6fea2b5abc8efbae434b9ab860f134733b) Part-of: --- .pick_status.json | 2 +- src/gallium/drivers/r600/sfn/sfn_scheduler.cpp | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index bb53b4b4b86..30f1b4d063a 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1504,7 +1504,7 @@ "description": "r600: limit pre-evergreen predicate ready size", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "713edb59982cb89e7a7c26eb14b5ab5b1081bb39", "notes": null 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);