diff options
author | Dave Airlie <[email protected]> | 2018-01-10 04:41:02 +0000 |
---|---|---|
committer | Dave Airlie <[email protected]> | 2018-01-18 03:38:05 +0000 |
commit | 8cfec333c08a9518735d261cc9d6a96d64276f1c (patch) | |
tree | 828f29ca7b512d8a277128b836315dc20bbb4746 /src/gallium/drivers/r600 | |
parent | 71a50de4fcf8202b500d51916100e8e905de3c44 (diff) |
r600/sb: schedule LDS ops in appropriate places.
So LDS ops have to be SLOT_X,
and LDS OQ reads have read port restrictions so we try
and force those into only having one per slot and avoiding
bank swizzles.
Acked-By: Roland Scheidegger <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
Diffstat (limited to 'src/gallium/drivers/r600')
-rw-r--r-- | src/gallium/drivers/r600/sb/sb_bc.h | 3 | ||||
-rw-r--r-- | src/gallium/drivers/r600/sb/sb_sched.cpp | 4 |
2 files changed, 7 insertions, 0 deletions
diff --git a/src/gallium/drivers/r600/sb/sb_bc.h b/src/gallium/drivers/r600/sb/sb_bc.h index 3a3bae9d445..b35671bf0ff 100644 --- a/src/gallium/drivers/r600/sb/sb_bc.h +++ b/src/gallium/drivers/r600/sb/sb_bc.h @@ -711,6 +711,9 @@ public: mask = 0x0F; if (!is_cayman() && (slot_flags & AF_S)) mask |= 0x10; + /* Force LDS_IDX ops into SLOT_X */ + if (op_ptr->opcode[0] == -1 && ((op_ptr->opcode[1] & 0xFF) == 0x11)) + mask = 0x01; return mask; } diff --git a/src/gallium/drivers/r600/sb/sb_sched.cpp b/src/gallium/drivers/r600/sb/sb_sched.cpp index 1feef585dfb..f5fd84d54ac 100644 --- a/src/gallium/drivers/r600/sb/sb_sched.cpp +++ b/src/gallium/drivers/r600/sb/sb_sched.cpp @@ -461,6 +461,10 @@ bool alu_group_tracker::try_reserve(alu_node* n) { if (n->uses_ar() && has_mova) return false; + if (consumes_lds_oqa) + return false; + if (n->consumes_lds_oq() && available_slots != (sh.get_ctx().has_trans ? 0x1F : 0x0F)) + return false; for (unsigned i = 0; i < nsrc; ++i) { unsigned last_id = next_id; |