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