diff options
-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; |