diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2011-07-08 17:44:58 +0100 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2011-07-08 18:59:05 +0100 |
commit | 649ebcef0938c7cde4f3172a639d39488454999a (patch) | |
tree | 117961de37988f48f13d2fa90fd832cc09b155d5 | |
parent | 625e37b317e4d237bdc9f80d7ab86b5d2badddc7 (diff) |
sna: A buffer only needs a flush if it remains dirty at the end of the batch
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
-rw-r--r-- | src/sna/kgem.c | 7 | ||||
-rw-r--r-- | src/sna/kgem.h | 3 | ||||
-rw-r--r-- | src/sna/sna_dri.c | 2 |
3 files changed, 8 insertions, 4 deletions
diff --git a/src/sna/kgem.c b/src/sna/kgem.c index dfac9763..afd2a09f 100644 --- a/src/sna/kgem.c +++ b/src/sna/kgem.c @@ -634,6 +634,7 @@ static void kgem_commit(struct kgem *kgem) bo->src_bound = bo->dst_bound = 0; bo->presumed_offset = bo->exec->offset; bo->exec = NULL; + bo->needs_flush |= bo->dirty; bo->dirty = false; bo->gpu = true; bo->cpu_read = false; @@ -1581,7 +1582,7 @@ uint32_t kgem_add_reloc(struct kgem *kgem, kgem->reloc[index].presumed_offset = bo->presumed_offset; if (read_write_domain & 0x7fff) - bo->needs_flush = bo->dirty = true; + bo->dirty = true; delta += bo->presumed_offset; } else { @@ -1597,7 +1598,9 @@ uint32_t kgem_add_reloc(struct kgem *kgem, void *kgem_bo_map(struct kgem *kgem, struct kgem_bo *bo, int prot) { - void *ptr = gem_mmap(kgem->fd, bo->handle, bo->size, prot); + void *ptr; + + ptr = gem_mmap(kgem->fd, bo->handle, bo->size, prot); if (ptr == NULL) return NULL; diff --git a/src/sna/kgem.h b/src/sna/kgem.h index 2ad975ae..9da47405 100644 --- a/src/sna/kgem.h +++ b/src/sna/kgem.h @@ -181,10 +181,11 @@ static inline void kgem_bo_submit(struct kgem *kgem, struct kgem_bo *bo) void __kgem_flush(struct kgem *kgem, struct kgem_bo *bo); static inline void kgem_bo_flush(struct kgem *kgem, struct kgem_bo *bo) { + kgem_bo_submit(kgem, bo); + if (!bo->needs_flush) return; - kgem_bo_submit(kgem, bo); __kgem_flush(kgem, bo); bo->needs_flush = false; diff --git a/src/sna/sna_dri.c b/src/sna/sna_dri.c index 2a8a8651..a6cc9ceb 100644 --- a/src/sna/sna_dri.c +++ b/src/sna/sna_dri.c @@ -862,7 +862,7 @@ sna_dri_flip(struct sna *sna, DrawablePtr draw, struct sna_dri_frame_event *info return sna_dri_schedule_flip(sna, draw, info); } - DBG(("%s: chaining flip\n", __FUNCION__)); + DBG(("%s: chaining flip\n", __FUNCTION__)); assert(pending->chain == NULL); pending->chain = info; return TRUE; |