xf86-video-intel: src/sna/kgem.h src/sna/sna_accel.c

Chris Wilson ickle at kemper.freedesktop.org
Fri Jun 29 04:38:54 PDT 2012


 src/sna/kgem.h      |   10 ++++++++++
 src/sna/sna_accel.c |    5 ++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

New commits:
commit 15a0761cad862a5d73bbc2af81bc5267e66c307e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Jun 29 12:22:55 2012 +0100

    sna: Only consider the request list when deciding whether the GPU is busy
    
    Micro-optimisation to overhead extra checks and to make sure an
    unflushed bo doesn't prevent us from submitting more work before
    sleeping.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/kgem.h b/src/sna/kgem.h
index 2d8def8..f9b2a33 100644
--- a/src/sna/kgem.h
+++ b/src/sna/kgem.h
@@ -253,6 +253,16 @@ void kgem_bo_set_binding(struct kgem_bo *bo, uint32_t format, uint16_t offset);
 
 void kgem_bo_retire(struct kgem *kgem, struct kgem_bo *bo);
 bool kgem_retire(struct kgem *kgem);
+static inline bool kgem_is_idle(struct kgem *kgem)
+{
+	if (list_is_empty(&kgem->requests))
+		return true;
+
+	if (!kgem_retire(kgem))
+		return false;
+
+	return list_is_empty(&kgem->requests);
+}
 struct kgem_bo *kgem_get_last_request(struct kgem *kgem);
 
 void _kgem_submit(struct kgem *kgem);
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index b9164ae..d280f84 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -12807,7 +12807,10 @@ void sna_accel_close(struct sna *sna)
 
 void sna_accel_block_handler(struct sna *sna, struct timeval **tv)
 {
-	sna_accel_wakeup_handler(sna, NULL);
+	if (sna->kgem.nbatch && kgem_is_idle(&sna->kgem)) {
+		DBG(("%s: GPU idle, flushing\n", __FUNCTION__));
+		_kgem_submit(&sna->kgem);
+	}
 
 	if (sna_accel_do_flush(sna))
 		sna_accel_flush(sna);


More information about the xorg-commit mailing list