From ccf0fdd56dc6efd30e425209d753ed4f90562d76 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 9 Jul 2013 20:41:51 +0100 Subject: [PATCH] sna: Only flush after the BLT operation if we have more than 2 distinct bo In order to preserve the optimisation of discarding incomplete batches, we don't always want to immediately submit the batch after inserting the first command. As we currently only cancel a batch if it only touches the bo being discarded, we can skip the immediate flush if it only accesses one bo and maybe be able to use the undo optimisation later. Signed-off-by: Chris Wilson --- src/sna/sna_blt.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/sna/sna_blt.c b/src/sna/sna_blt.c index 796aa63e..ec3278bf 100644 --- a/src/sna/sna_blt.c +++ b/src/sna/sna_blt.c @@ -85,7 +85,7 @@ static const uint8_t fill_ROP[] = { static void nop_done(struct sna *sna, const struct sna_composite_op *op) { assert(sna->kgem.nbatch <= KGEM_BATCH_SIZE(&sna->kgem)); - if (sna->kgem.nreloc && __kgem_ring_empty(&sna->kgem)) + if (sna->kgem.nexec > 1 && __kgem_ring_empty(&sna->kgem)) _kgem_submit(&sna->kgem); (void)op; } @@ -95,7 +95,7 @@ static void gen6_blt_copy_done(struct sna *sna, const struct sna_composite_op *o struct kgem *kgem = &sna->kgem; assert(kgem->nbatch <= KGEM_BATCH_SIZE(kgem)); - if (kgem->nreloc && __kgem_ring_empty(kgem)) { + if (kgem->nexec > 1 && __kgem_ring_empty(kgem)) { _kgem_submit(kgem); return; } @@ -2301,7 +2301,7 @@ static void convert_done(struct sna *sna, const struct sna_composite_op *op) struct kgem *kgem = &sna->kgem; assert(kgem->nbatch <= KGEM_BATCH_SIZE(kgem)); - if (kgem->nreloc && __kgem_ring_empty(kgem)) + if (kgem->nexec > 1 && __kgem_ring_empty(kgem)) _kgem_submit(kgem); kgem_bo_destroy(kgem, op->src.bo); @@ -2800,7 +2800,7 @@ bool sna_blt_fill_boxes(struct sna *sna, uint8_t alu, } } while (nbox); - if (kgem->nreloc && __kgem_ring_empty(kgem)) + if (kgem->nexec > 1 && __kgem_ring_empty(kgem)) _kgem_submit(kgem); return true; @@ -2989,7 +2989,7 @@ bool sna_blt_copy_boxes(struct sna *sna, uint8_t alu, } while (1); } - if (kgem->nreloc && __kgem_ring_empty(kgem)) { + if (kgem->nexec > 1 && __kgem_ring_empty(kgem)) { _kgem_submit(kgem); } else if (kgem->gen >= 060 && kgem_check_batch(kgem, 3)) { uint32_t *b = kgem->batch + kgem->nbatch;