aboutsummaryrefslogtreecommitdiffstats
path: root/src/panfrost/midgard/midgard_schedule.c
diff options
context:
space:
mode:
authorAlyssa Rosenzweig <[email protected]>2020-01-02 12:27:59 -0500
committerAlyssa Rosenzweig <[email protected]>2020-01-02 15:20:55 -0500
commit5bc62af2a08c96f2e90740bbd1503d26efa2b669 (patch)
tree8bfa19823b71fac4bc60d08ddbe8be3f8565cbfa /src/panfrost/midgard/midgard_schedule.c
parentdb879b034a131694a819da16ddcb680cd81597a8 (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.c5
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;