sna/gen4,5: Fix setting pipe control cache flush bits
authorEdward Sheldrake <ejsheldrake@gmail.com>
Mon, 3 Feb 2014 09:34:33 +0000 (09:34 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Mon, 3 Feb 2014 10:04:15 +0000 (10:04 +0000)
Cache flush bits are on dword 0, not 1, on gen4 and gen5. Also texture
cache invalidate is only available from Cantiga onwards.

src/sna/gen4_render.c
src/sna/gen4_render.h
src/sna/gen5_render.c

index 1d164b6..1580707 100644 (file)
@@ -575,8 +575,10 @@ inline static void
 gen4_emit_pipe_flush(struct sna *sna)
 {
 #if 1
-       OUT_BATCH(GEN4_PIPE_CONTROL | (4 - 2));
-       OUT_BATCH(GEN4_PIPE_CONTROL_WC_FLUSH);
+       OUT_BATCH(GEN4_PIPE_CONTROL |
+                 GEN4_PIPE_CONTROL_WC_FLUSH |
+                 (4 - 2));
+       OUT_BATCH(0);
        OUT_BATCH(0);
        OUT_BATCH(0);
 #else
@@ -600,14 +602,13 @@ gen4_emit_pipe_break(struct sna *sna)
 inline static void
 gen4_emit_pipe_invalidate(struct sna *sna)
 {
-#if 0
-       OUT_BATCH(GEN4_PIPE_CONTROL | (4 - 2));
-       OUT_BATCH(GEN4_PIPE_CONTROL_WC_FLUSH | GEN4_PIPE_CONTROL_TC_FLUSH);
+       OUT_BATCH(GEN4_PIPE_CONTROL |
+                 GEN4_PIPE_CONTROL_WC_FLUSH |
+                 (sna->kgem.gen >= 045 ? GEN4_PIPE_CONTROL_TC_FLUSH : 0) |
+                 (4 - 2));
+       OUT_BATCH(0);
        OUT_BATCH(0);
        OUT_BATCH(0);
-#else
-       OUT_BATCH(MI_FLUSH);
-#endif
 }
 
 static void gen4_emit_primitive(struct sna *sna)
index 53c7fc2..64d11e6 100644 (file)
 #define GEN4_PIPE_CONTROL_DEPTH_STALL   (1 << 13)
 #define GEN4_PIPE_CONTROL_WC_FLUSH      (1 << 12)
 #define GEN4_PIPE_CONTROL_IS_FLUSH      (1 << 11)
-#define GEN4_PIPE_CONTROL_TC_FLUSH      (1 << 10)
+#define GEN4_PIPE_CONTROL_TC_FLUSH      (1 << 10) /* ctg+ */
 #define GEN4_PIPE_CONTROL_NOTIFY_ENABLE (1 << 8)
 #define GEN4_PIPE_CONTROL_GLOBAL_GTT    (1 << 2)
 #define GEN4_PIPE_CONTROL_LOCAL_PGTT    (0 << 2)
index 8fb47cb..25555e0 100644 (file)
@@ -1016,8 +1016,10 @@ inline static void
 gen5_emit_pipe_flush(struct sna *sna)
 {
 #if 0
-       OUT_BATCH(GEN5_PIPE_CONTROL | (4 - 2));
-       OUT_BATCH(GEN5_PIPE_CONTROL_WC_FLUSH);
+       OUT_BATCH(GEN5_PIPE_CONTROL |
+                 GEN5_PIPE_CONTROL_WC_FLUSH |
+                 (4 - 2));
+       OUT_BATCH(0);
        OUT_BATCH(0);
        OUT_BATCH(0);
 #else