Ensure that any buffer allocated for a scanout image is kept out of the
CPU/LLC cache so as to avoid any visual glitch.

Cc: Kenneth Graunke <kenn...@whitecape.org>
---
 src/mesa/drivers/dri/i965/intel_screen.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/src/mesa/drivers/dri/i965/intel_screen.c 
b/src/mesa/drivers/dri/i965/intel_screen.c
index 3666b65bb6..3e72ab14c8 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -693,6 +693,16 @@ intel_create_image_common(__DRIscreen *dri_screen,
    image->pitch = surf.row_pitch;
    image->modifier = modifier;
 
+   /* When a buffer is transformed into a framebuffer and mapped for use
+    * by scanout (i.e. any sprite plane, scanout, cursor, overlay etc),
+    * it is moved to UC - reads by the display engine are serviced directly
+    * from memory ignoring the CPU/LLC cache. If we leave pixels in the CPU
+    * cache due to mistaken use of WB, that causes screen corruption that
+    * randomly heals over time (due to eventual cache eviction).
+    */
+   if (use & (__DRI_IMAGE_USE_CURSOR | __DRI_IMAGE_USE_SCANOUT))
+      image->bo->cache_coherent = false;
+
    return image;
 }
 
-- 
2.13.3

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to