From ac22dd4292841e27bb6147cf1aa7867f36bb2118 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 17 Jan 2014 14:33:26 +0000 Subject: sna/gen4: Add an ALWAYS_FLUSH debugging option Still gen4 is cursed. This should restore the plateau we reached with 2.99.907 by forcing a full GPU flush between every operation. References: https://bugs.freedesktop.org/show_bug.cgi?id=55500 Signed-off-by: Chris Wilson --- src/sna/gen4_render.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c index e239c21f..720d5c37 100644 --- a/src/sna/gen4_render.c +++ b/src/sna/gen4_render.c @@ -54,6 +54,8 @@ #define FORCE_NONRECTILINEAR_SPANS -1 #define FORCE_FLUSH 1 /* https://bugs.freedesktop.org/show_bug.cgi?id=55500 */ +#define ALWAYS_FLUSH 1 + #define NO_COMPOSITE 0 #define NO_COMPOSITE_SPANS 0 #define NO_COPY 0 @@ -584,7 +586,7 @@ gen4_emit_pipe_flush(struct sna *sna) inline static void gen4_emit_pipe_break(struct sna *sna) { -#if 1 +#if !ALWAYS_FLUSH OUT_BATCH(GEN4_PIPE_CONTROL | (4 - 2)); OUT_BATCH(0); OUT_BATCH(0); @@ -1078,7 +1080,7 @@ gen4_emit_state(struct sna *sna, flush = wm_binding_table & 1; wm_binding_table &= ~1; - if (kgem_bo_is_dirty(op->src.bo) || kgem_bo_is_dirty(op->mask.bo)) { + if (ALWAYS_FLUSH || kgem_bo_is_dirty(op->src.bo) || kgem_bo_is_dirty(op->mask.bo)) { DBG(("%s: flushing dirty (%d, %d), forced? %d\n", __FUNCTION__, kgem_bo_is_dirty(op->src.bo), kgem_bo_is_dirty(op->mask.bo), @@ -1138,7 +1140,7 @@ gen4_bind_surfaces(struct sna *sna, offset = sna->render_state.gen4.surface_table; } - if (sna->kgem.batch[sna->render_state.gen4.surface_table] == binding_table[0]) + if (!ALWAYS_FLUSH && sna->kgem.batch[sna->render_state.gen4.surface_table] == binding_table[0]) dirty = 0; gen4_emit_state(sna, op, offset | dirty); @@ -1376,7 +1378,7 @@ static void gen4_video_bind_surfaces(struct sna *sna, src_surf_format); } - if (sna->kgem.batch[sna->render_state.gen4.surface_table] == binding_table[0]) + if (!ALWAYS_FLUSH && sna->kgem.batch[sna->render_state.gen4.surface_table] == binding_table[0]) dirty = 0; gen4_emit_state(sna, op, offset | dirty); @@ -2322,7 +2324,7 @@ gen4_copy_bind_surfaces(struct sna *sna, const struct sna_composite_op *op) offset = sna->render_state.gen4.surface_table; } - if (sna->kgem.batch[sna->render_state.gen4.surface_table] == binding_table[0]) + if (!ALWAYS_FLUSH && sna->kgem.batch[sna->render_state.gen4.surface_table] == binding_table[0]) dirty = 0; gen4_emit_state(sna, op, offset | dirty); -- cgit v1.2.3