xf86-video-intel: 2 commits - src/sna/gen7_render.c src/sna/kgem.c src/sna/sna_display.c src/sna/sna_render.h
Chris Wilson
ickle at kemper.freedesktop.org
Wed Nov 12 03:52:56 PST 2014
src/sna/gen7_render.c | 14 +++++++++++---
src/sna/kgem.c | 2 +-
src/sna/sna_display.c | 2 +-
src/sna/sna_render.h | 1 +
4 files changed, 14 insertions(+), 5 deletions(-)
New commits:
commit f9f85b88032b2458d4d24ceca450fdaa65e6b94d
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Nov 12 11:50:33 2014 +0000
sna: Reorder PARAMs based on upstream inclusion
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index dd91801..e8d71d8 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -140,7 +140,7 @@ search_snoop_cache(struct kgem *kgem, unsigned int num_pages, unsigned flags);
#define LOCAL_I915_PARAM_HAS_NO_RELOC 25
#define LOCAL_I915_PARAM_HAS_HANDLE_LUT 26
#define LOCAL_I915_PARAM_HAS_WT 27
-#define LOCAL_I915_PARAM_MMAP_VERSION 29
+#define LOCAL_I915_PARAM_MMAP_VERSION 30
#define LOCAL_I915_EXEC_IS_PINNED (1<<10)
#define LOCAL_I915_EXEC_NO_RELOC (1<<11)
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index d098642..0b7e838 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -5034,7 +5034,7 @@ sna_cursor_pre_init(struct sna *sna)
#define DRM_CAP_CURSOR_WIDTH 8
#define DRM_CAP_CURSOR_HEIGHT 9
-#define I915_PARAM_HAS_COHERENT_PHYS_GTT 30
+#define I915_PARAM_HAS_COHERENT_PHYS_GTT 29
sna->cursor.max_size = 64;
commit 13fa1f1a26aed83cd8fccafb9a0bdb096f69534b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Wed Nov 12 10:54:36 2014 +0000
sna/gen7: Be paranoid and force a pipecontrol stall at least every 4 flushes
The documentation warns of potential GPU hangs if we emit more than 4
pipecontrol flushes without a CS stall. This is highly unlikely given
how frequently we must inject stalls into the pipeline, but force a
stall just in case!
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 2d8f296..2ecfd64 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -1069,6 +1069,7 @@ gen7_emit_pipe_invalidate(struct sna *sna)
GEN7_PIPE_CONTROL_CS_STALL);
OUT_BATCH(0);
OUT_BATCH(0);
+ sna->render_state.gen7.pipe_controls_since_stall = 0;
}
inline static void
@@ -1077,9 +1078,11 @@ gen7_emit_pipe_flush(struct sna *sna, bool need_stall)
unsigned stall;
stall = 0;
- if (need_stall)
- stall = (GEN7_PIPE_CONTROL_CS_STALL |
- GEN7_PIPE_CONTROL_STALL_AT_SCOREBOARD);
+ if (need_stall) {
+ stall = GEN7_PIPE_CONTROL_CS_STALL;
+ sna->render_state.gen7.pipe_controls_since_stall = 0;
+ } else
+ sna->render_state.gen7.pipe_controls_since_stall++;
OUT_BATCH(GEN7_PIPE_CONTROL | (4 - 2));
OUT_BATCH(GEN7_PIPE_CONTROL_WC_FLUSH | stall);
@@ -1095,6 +1098,7 @@ gen7_emit_pipe_stall(struct sna *sna)
GEN7_PIPE_CONTROL_STALL_AT_SCOREBOARD);
OUT_BATCH(0);
OUT_BATCH(0);
+ sna->render_state.gen7.pipe_controls_since_stall = 0;
}
static void
@@ -1124,6 +1128,9 @@ gen7_emit_state(struct sna *sna,
need_stall &= gen7_emit_drawing_rectangle(sna, op);
if (ALWAYS_STALL)
need_stall = true;
+ if (sna->kgem.gen < 075 &&
+ sna->render_state.gen7.pipe_controls_since_stall >= 3)
+ need_stall = true;
if (need_invalidate) {
gen7_emit_pipe_invalidate(sna);
@@ -3746,6 +3753,7 @@ gen7_render_clear(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo)
}
static void gen7_render_reset(struct sna *sna)
{
+ sna->render_state.gen7.pipe_controls_since_stall = 0;
sna->render_state.gen7.emit_flush = false;
sna->render_state.gen7.needs_invariant = true;
sna->render_state.gen7.ve_id = 3 << 2;
diff --git a/src/sna/sna_render.h b/src/sna/sna_render.h
index 823b86c..6e1fa48 100644
--- a/src/sna/sna_render.h
+++ b/src/sna/sna_render.h
@@ -508,6 +508,7 @@ struct gen7_render_state {
uint16_t last_primitive;
int16_t floats_per_vertex;
uint16_t surface_table;
+ uint16_t pipe_controls_since_stall;
bool needs_invariant;
bool emit_flush;
More information about the xorg-commit
mailing list