summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Sheldrake <ejsheldrake@gmail.com>2014-02-03 09:34:33 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2014-02-03 10:04:15 +0000
commit1cbc59a917e7352fc68aa0e26b1575cbd0ceab0d (patch)
treed0d2aabad9ae331f620968a07198003836825b6d
parent7f08250a8960f90f6bd34de8c4a17870703bfa60 (diff)
sna/gen4,5: Fix setting pipe control cache flush bits
Cache flush bits are on dword 0, not 1, on gen4 and gen5. Also texture cache invalidate is only available from Cantiga onwards.
-rw-r--r--src/sna/gen4_render.c17
-rw-r--r--src/sna/gen4_render.h2
-rw-r--r--src/sna/gen5_render.c6
3 files changed, 14 insertions, 11 deletions
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 1d164b6e..1580707c 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -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)
diff --git a/src/sna/gen4_render.h b/src/sna/gen4_render.h
index 53c7fc2f..64d11e66 100644
--- a/src/sna/gen4_render.h
+++ b/src/sna/gen4_render.h
@@ -112,7 +112,7 @@
#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)
diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c
index 8fb47cb6..25555e0e 100644
--- a/src/sna/gen5_render.c
+++ b/src/sna/gen5_render.c
@@ -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