summaryrefslogtreecommitdiff
path: root/src/i915_render.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-06-17 13:56:30 +0100
committerOwain G. Ainsworth <oga@openbsd.org>2010-06-17 15:03:31 +0100
commit1a2f4582755b15262f18a36f63f4c840888f87c6 (patch)
tree4b8d95071618facb9a200d389a0a7bcdafcf90ed /src/i915_render.c
parent6ac82c3da3f3cf1df15532fc65624d548fbdb8bf (diff)
i915: Force the emission of BUF_INFO on every composite_setup
We should be able to eliminate these as the drawable remains unchanged. However, the implicit flush of BUF_INFO fixes the rendering in KDE. Alternatively, we need an MI_FLUSH | INHIBIT_RENDER_CACHE_FLUSH between composites. (Note that it is not stale cache data causing the rendering corruption and that a pipelined flush is not sufficient either.) Also, having tried varies points at which to flush, the only place where the flush is effective seems to be between composite operations - that is a flush after 2D is not sufficient. Reported-by: Vasily Khoruzhick <anarsoul@gmail.com> Reported-by: Clemens Eisserer <linuxhippy@gmail.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> (cherry picked from commit 2ff7a2fc9d939554502e9adec89cae5597a9e82c) Signed-off-by: Owain G. Ainsworth <oga@openbsd.org>
Diffstat (limited to 'src/i915_render.c')
-rw-r--r--src/i915_render.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/i915_render.c b/src/i915_render.c
index 0fe960a7..53c99142 100644
--- a/src/i915_render.c
+++ b/src/i915_render.c
@@ -1028,10 +1028,15 @@ static void i915_emit_composite_setup(ScrnInfoPtr scrn)
OUT_BATCH (intel->render_mask_solid);
}
- /* BUF_INFO is an implicit flush, so avoid if the target has not changed */
- if (dest != intel->render_current_dest) {
+ /* BUF_INFO is an implicit flush, so avoid if the target has not changed.
+ * XXX However for reasons unfathomed, correct rendering in KDE requires
+ * at least a MI_FLUSH | INHIBIT_RENDER_CACHE_FLUSH here.
+ */
+ if (1 || dest != intel->render_current_dest) {
uint32_t tiling_bits;
+ intel_batch_do_flush(scrn);
+
if (i830_pixmap_tiled(dest)) {
tiling_bits = BUF_3D_TILED_SURFACE;
if (i830_get_pixmap_intel(dest)->tiling