diff options
author | Rob Clark <robclark@freedesktop.org> | 2015-02-26 15:13:10 -0500 |
---|---|---|
committer | Emil Velikov <emil.l.velikov@gmail.com> | 2015-03-12 12:45:45 +0000 |
commit | 1dec8bbb8e2971ac0cd55dee279ce10ae22242f1 (patch) | |
tree | 4bd2aca6e0416ead48d286168c0fe658a4efa67d | |
parent | af4d1096f7e82c7759692ac1b83678d3c8029f4c (diff) |
freedreno/ir3: add support for memory (cat6) instructions
Scheduled basically the same as texture (cat5) instructions, using (sy)
flag for synchronization.
Signed-off-by: Rob Clark <robclark@freedesktop.org>
(cherry picked from commit 9d732d3125e1b39788a642a5723aeb54cb1983f3)
-rw-r--r-- | src/gallium/drivers/freedreno/ir3/ir3.h | 5 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/ir3/ir3_depth.c | 2 | ||||
-rw-r--r-- | src/gallium/drivers/freedreno/ir3/ir3_legalize.c | 2 |
3 files changed, 8 insertions, 1 deletions
diff --git a/src/gallium/drivers/freedreno/ir3/ir3.h b/src/gallium/drivers/freedreno/ir3/ir3.h index a3bbba941ce..4aebee63355 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3.h +++ b/src/gallium/drivers/freedreno/ir3/ir3.h @@ -420,6 +420,11 @@ static inline bool is_tex(struct ir3_instruction *instr) return (instr->category == 5); } +static inline bool is_mem(struct ir3_instruction *instr) +{ + return (instr->category == 6); +} + static inline bool is_input(struct ir3_instruction *instr) { return (instr->category == 2) && (instr->opc == OPC_BARY_F); diff --git a/src/gallium/drivers/freedreno/ir3/ir3_depth.c b/src/gallium/drivers/freedreno/ir3/ir3_depth.c index 76413d41589..8ff62ba70a6 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_depth.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_depth.c @@ -67,7 +67,7 @@ int ir3_delayslots(struct ir3_instruction *assigner, return 6; /* handled via sync flags: */ - if (is_sfu(assigner) || is_tex(assigner)) + if (is_sfu(assigner) || is_tex(assigner) || is_mem(assigner)) return 0; /* assigner must be alu: */ diff --git a/src/gallium/drivers/freedreno/ir3/ir3_legalize.c b/src/gallium/drivers/freedreno/ir3/ir3_legalize.c index 2ef11f183d7..11629f61f73 100644 --- a/src/gallium/drivers/freedreno/ir3/ir3_legalize.c +++ b/src/gallium/drivers/freedreno/ir3/ir3_legalize.c @@ -168,6 +168,8 @@ static void legalize(struct ir3_legalize_ctx *ctx) */ ctx->has_samp = true; regmask_set(&needs_sy, n->regs[0]); + } else if (is_mem(n)) { + regmask_set(&needs_sy, n->regs[0]); } /* both tex/sfu appear to not always immediately consume |