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: 713edb5998 ("r600/sfn: handle the IF predicate in the scheduler")
Signed-off-by: Patrick Lerda <patrick9876@free.fr>
(cherry picked from commit ae049f6fea)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38432>
This commit is contained in:
Patrick Lerda 2025-11-02 20:25:31 +01:00 committed by Dylan Baker
parent 42726a2afa
commit b074ea9fe8
2 changed files with 3 additions and 2 deletions

View file

@ -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

View file

@ -1269,7 +1269,8 @@ BlockScheduler::collect_ready_alu_vec(std::list<AluInstr *>& 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);