diff options
author | Alyssa Rosenzweig <[email protected]> | 2020-01-02 12:27:59 -0500 |
---|---|---|
committer | Alyssa Rosenzweig <[email protected]> | 2020-01-02 15:20:55 -0500 |
commit | 5bc62af2a08c96f2e90740bbd1503d26efa2b669 (patch) | |
tree | 8bfa19823b71fac4bc60d08ddbe8be3f8565cbfa /src/panfrost/midgard/midgard_schedule.c | |
parent | db879b034a131694a819da16ddcb680cd81597a8 (diff) |
pan/midgard: Generate MRT writeout loops
They need a very particular form; the naive way we did before is not
sufficient in practice, it doesn't look like. So let's follow the rough
structure of the blob's writeout since this is fixed code anyway.
Signed-off-by: Alyssa Rosenzweig <[email protected]>
Diffstat (limited to 'src/panfrost/midgard/midgard_schedule.c')
-rw-r--r-- | src/panfrost/midgard/midgard_schedule.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/panfrost/midgard/midgard_schedule.c b/src/panfrost/midgard/midgard_schedule.c index e0425fd0578..46e1f7a4a35 100644 --- a/src/panfrost/midgard/midgard_schedule.c +++ b/src/panfrost/midgard/midgard_schedule.c @@ -890,6 +890,9 @@ mir_schedule_alu( mir_choose_alu(&vlut, instructions, worklist, len, &predicate, UNIT_VLUT); if (writeout) { + /* Propagate up */ + bundle.last_writeout = branch->last_writeout; + midgard_instruction add = v_mov(~0, make_compiler_temp(ctx)); if (!ctx->is_blend) { @@ -938,7 +941,7 @@ mir_schedule_alu( /* If we have a render target reference, schedule a move for it */ - if (branch && branch->writeout && branch->constants[0]) { + if (branch && branch->writeout && (branch->constants[0] || ctx->is_blend)) { midgard_instruction mov = v_mov(~0, make_compiler_temp(ctx)); sadd = mem_dup(&mov, sizeof(midgard_instruction)); sadd->unit = UNIT_SADD; |