Mesa (master): r600/sb: hit the scheduler with a big hammer to avoid lds splits.

Dave Airlie airlied at kemper.freedesktop.org
Thu Jan 18 03:39:44 UTC 2018


Module: Mesa
Branch: master
Commit: 71a50de4fcf8202b500d51916100e8e905de3c44
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=71a50de4fcf8202b500d51916100e8e905de3c44

Author: Dave Airlie <airlied at redhat.com>
Date:   Wed Jan 10 04:38:07 2018 +0000

r600/sb: hit the scheduler with a big hammer to avoid lds splits.

This tries to avoid an lds queue read getting scheduled separately
from an lds ret read, the non-sb code uses the same style of hammer,
this isn't foolproof.

We can do better, but it's a bit tricky, as you have to scan ahead
and either schedule more lds oq moves and more lds reads and that
could lead to you running out of space anyways.

Acked-By: Roland Scheidegger <sroland at vmware.com>
Signed-off-by: Dave Airlie <airlied at redhat.com>

---

 src/gallium/drivers/r600/sb/sb_sched.cpp | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/src/gallium/drivers/r600/sb/sb_sched.cpp b/src/gallium/drivers/r600/sb/sb_sched.cpp
index 26e4811b1c..1feef585df 100644
--- a/src/gallium/drivers/r600/sb/sb_sched.cpp
+++ b/src/gallium/drivers/r600/sb/sb_sched.cpp
@@ -2034,6 +2034,9 @@ bool alu_clause_tracker::check_clause_limits() {
 	// ...and index registers
 	reserve_slots += (current_idx[0] != NULL) + (current_idx[1] != NULL);
 
+	if (gt.get_consumes_lds_oqa() && !outstanding_lds_oqa_reads)
+		reserve_slots += 60;
+
 	if (slot_count + slots > MAX_ALU_SLOTS - reserve_slots)
 		return false;
 




More information about the mesa-commit mailing list