diff options
author | Dave Airlie <[email protected]> | 2018-01-10 04:38:07 +0000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2018-01-18 03:37:56 +0000 |
commit | 71a50de4fcf8202b500d51916100e8e905de3c44 (patch) | |
tree | 6bab86a8217069a5d3431b991bf29e2f5033cdd9 /src/gallium/drivers/r600/sb | |
parent | 46549bd6b62f251c588bead63866721f7cf9ea1c (diff) |
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 <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium/drivers/r600/sb')
-rw-r--r-- | src/gallium/drivers/r600/sb/sb_sched.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/sb/sb_sched.cpp b/src/gallium/drivers/r600/sb/sb_sched.cpp index 26e4811b1ce..1feef585dfb 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; |