summaryrefslogtreecommitdiff
path: root/src
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 /src
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.
Diffstat (limited to 'src')
-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