summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2011-05-07 19:51:04 +0100
committerChris Wilson <chris@chris-wilson.co.uk>2011-05-07 20:04:18 +0100
commit3145530feed879082bcfab11ffc8e7fd0911c920 (patch)
tree95c19c2df2f1f68f004f20bee7663fc7d911e290 /src
parent67e5a74e997f199327f9115c7ba867df3c49da8d (diff)
Ensure that the partial batch is flushed upon the blockhandler
Currently, we require that a batch containing a dirty bo be submitted before we mark the device as requiring a flush. So if we never submit a batch between block handlers, we can end up sleeping without ever flushing either the partial batch or the rendering to the scanout. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=36776 Tested-by: Vasily Khoruzhick <anarsoul@gmail.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'src')
-rw-r--r--src/intel_batchbuffer.c9
-rw-r--r--src/intel_batchbuffer.h2
2 files changed, 2 insertions, 9 deletions
diff --git a/src/intel_batchbuffer.c b/src/intel_batchbuffer.c
index 289ed2b2..95eca434 100644
--- a/src/intel_batchbuffer.c
+++ b/src/intel_batchbuffer.c
@@ -175,13 +175,6 @@ void intel_batch_emit_flush(ScrnInfoPtr scrn)
intel_batch_do_flush(scrn);
}
-static Bool intel_batch_needs_flush(intel_screen_private *intel)
-{
- ScreenPtr screen = intel->scrn->pScreen;
- PixmapPtr pixmap = screen->GetScreenPixmap(screen);
- return intel_get_pixmap_private(pixmap)->batch_write;
-}
-
void intel_batch_submit(ScrnInfoPtr scrn)
{
intel_screen_private *intel = intel_get_screen_private(scrn);
@@ -241,8 +234,6 @@ void intel_batch_submit(ScrnInfoPtr scrn)
}
}
- intel->needs_flush |= intel_batch_needs_flush(intel);
-
while (!list_is_empty(&intel->batch_pixmaps)) {
struct intel_pixmap *entry;
diff --git a/src/intel_batchbuffer.h b/src/intel_batchbuffer.h
index 2403a387..f5f118ef 100644
--- a/src/intel_batchbuffer.h
+++ b/src/intel_batchbuffer.h
@@ -137,6 +137,8 @@ intel_batch_mark_pixmap_domains(intel_screen_private *intel,
priv->batch_write |= write_domain != 0;
priv->busy = 1;
+
+ intel->needs_flush |= write_domain != 0;
}
static inline void