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