xf86-video-intel: src/sna/kgem.c src/sna/sna_accel.c
Chris Wilson
ickle at kemper.freedesktop.org
Mon Dec 10 03:09:57 PST 2012
src/sna/kgem.c | 1 +
src/sna/sna_accel.c | 7 ++++++-
2 files changed, 7 insertions(+), 1 deletion(-)
New commits:
commit 3e9120d73c6f0c0e06b617da91cc2edce4434bc3
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Mon Dec 10 11:05:16 2012 +0000
sna: Immediately flush a split batch
If we submit a batch early (for example if the GPU is idle), then submit
whatever else the client drew immediately upon completion of its
blockhandler. This is required to prevent flashing due to visible delay
between the clear at the start of the cycle and then the overdraw later.
References: https://bugs.freedesktop.org/show_bug.cgi?id=51718
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index 921fdf8..faeb70d 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -1968,6 +1968,7 @@ static void kgem_commit(struct kgem *kgem)
}
kgem->next_request = NULL;
+ kgem->busy = true;
}
static void kgem_close_list(struct kgem *kgem, struct list *head)
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index e996cdb..43ed159 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -14181,6 +14181,8 @@ static bool sna_picture_init(ScreenPtr screen)
ps = GetPictureScreen(screen);
assert(ps != NULL);
+ assert(ps->CreatePicture != NULL);
+ assert(ps->DestroyPicture != NULL);
ps->Composite = sna_composite;
ps->CompositeRects = sna_composite_rectangles;
@@ -14377,7 +14379,8 @@ void sna_accel_block_handler(struct sna *sna, struct timeval **tv)
if (sna->timer_active)
UpdateCurrentTimeIf();
- if (sna->kgem.nbatch && kgem_ring_is_idle(&sna->kgem, sna->kgem.ring)) {
+ if (sna->kgem.nbatch &&
+ (sna->kgem.busy || kgem_ring_is_idle(&sna->kgem, sna->kgem.ring))) {
DBG(("%s: GPU idle, flushing\n", __FUNCTION__));
_kgem_submit(&sna->kgem);
}
@@ -14429,6 +14432,8 @@ set_tv:
(*tv)->tv_usec = timeout % 1000 * 1000;
}
}
+
+ sna->kgem.busy = false;
}
void sna_accel_wakeup_handler(struct sna *sna)
More information about the xorg-commit
mailing list