* be any dependency (the blob appears to forbid even accessing other
* channels of a given texture register). */
- unsigned out_of_order : 2;
- unsigned unknown4 : 10;
+ unsigned out_of_order : 4;
+ unsigned unknown4 : 8;
/* In immediate mode, each offset field is an immediate range [0, 7].
*
/* TODO: bias component */
}
-/* Up to 3 { ALU, LDST } bundles can execute in parallel with a texture op.
+/*
+ * Up to 15 { ALU, LDST } bundles can execute in parallel with a texture op.
* Given a texture op, lookahead to see how many such bundles we can flag for
- * OoO execution */
-
+ * OoO execution
+ */
static bool
mir_can_run_ooo(midgard_block *block, midgard_bundle *bundle,
unsigned dependency)
if (!IS_ALU(bundle->tag) && bundle->tag != TAG_LOAD_STORE_4)
return false;
- /* Ensure there is no read-after-write dependency */
-
for (unsigned i = 0; i < bundle->instruction_count; ++i) {
midgard_instruction *ins = bundle->instructions[i];
+ /* No branches, jumps, or discards */
+ if (ins->compact_branch)
+ return false;
+
+ /* No read-after-write data dependencies */
mir_foreach_src(ins, s) {
if (ins->src[s] == dependency)
return false;
{
unsigned count = 0;
- for (count = 0; count < 3; ++count) {
+ for (count = 0; count < 15; ++count) {
if (!mir_can_run_ooo(block, bundle + count + 1, ins->dest))
break;
}