xf86-video-intel: 3 commits - src/sna/gen4_render.c src/sna/sna_glyphs.c
Chris Wilson
ickle at kemper.freedesktop.org
Sun Jul 7 01:22:09 PDT 2013
src/sna/gen4_render.c | 43 +++++++++++++++++++++----------------------
src/sna/sna_glyphs.c | 3 +--
2 files changed, 22 insertions(+), 24 deletions(-)
New commits:
commit dbb585b9d2510efa9f8432bc25842fa14a8e495e
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Jul 7 09:17:58 2013 +0100
sna/gen4: Remove custom max flush vertices w/a from video path
This should now be superseded by using the common w/a.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index 86ce306..8e03910 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -1418,7 +1418,7 @@ gen4_render_video(struct sna *sna,
do {
int n;
- n = gen4_get_rectangles(sna, &tmp, min(nbox, 16),
+ n = gen4_get_rectangles(sna, &tmp, nbox,
gen4_video_bind_surfaces);
assert(n);
nbox -= n;
@@ -1449,13 +1449,8 @@ gen4_render_video(struct sna *sna,
}
box++;
} while (--n);
- gen4_vertex_flush(sna);
- if (!nbox)
- break;
-
- /* VUE corruption strikes again */
- OUT_BATCH(MI_FLUSH | MI_INHIBIT_RENDER_CACHE_FLUSH);
- } while (1);
+ } while (nbox);
+ gen4_vertex_flush(sna);
return true;
}
commit 2a59eadf8165bd70780ac16220456c6196ac3ff1
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Jul 7 09:13:49 2013 +0100
sna/gen4: Remove the glyph mask hack and tune the flush w/a
Remove the hack from the glyph path to force the use of an auxiliary
channel, and reduce the maximum amount of inflight vertices until we can
then render glyphs with no corruption (at least in my test case).
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index d8cdb36..86ce306 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -62,6 +62,8 @@
#define NO_FILL_BOXES 0
#define NO_VIDEO 0
+#define MAX_FLUSH_VERTICES 6
+
#define GEN4_GRF_BLOCKS(nreg) ((nreg + 15) / 16 - 1)
/* Set up a default static partitioning of the URB, which is supposed to
@@ -652,7 +654,7 @@ inline static int gen4_get_rectangles(struct sna *sna,
if (sna->kgem.nbatch == sna->render_state.gen4.last_primitive)
rem = sna->kgem.nbatch - 5;
if (rem) {
- rem = 16 - (sna->render.vertex_index - sna->render.vertex_start) / 3;
+ rem = MAX_FLUSH_VERTICES - (sna->render.vertex_index - sna->render.vertex_start) / 3;
if (rem <= 0) {
if (sna->render.vertex_offset) {
gen4_vertex_flush(sna);
@@ -661,10 +663,10 @@ inline static int gen4_get_rectangles(struct sna *sna,
op->u.gen4.wm_kernel);
}
OUT_BATCH(MI_FLUSH | MI_INHIBIT_RENDER_CACHE_FLUSH);
- rem = 16;
+ rem = MAX_FLUSH_VERTICES;
}
} else
- rem = 16;
+ rem = MAX_FLUSH_VERTICES;
if (want > rem)
want = rem;
#endif
diff --git a/src/sna/sna_glyphs.c b/src/sna/sna_glyphs.c
index 62415c8..43086a0 100644
--- a/src/sna/sna_glyphs.c
+++ b/src/sna/sna_glyphs.c
@@ -1130,8 +1130,7 @@ next_image:
__FUNCTION__,
(int)this_atlas->format,
(int)(format->depth << 24 | format->format)));
- if (this_atlas->format == (format->depth << 24 | format->format) &&
- (sna->kgem.gen >> 3) != 4) { /* XXX cache corruption? how? */
+ if (this_atlas->format == (format->depth << 24 | format->format)) {
ok = sna->render.composite(sna, PictOpAdd,
this_atlas, NULL, mask,
0, 0, 0, 0, 0, 0,
commit c9c1833c30421e1461f6b03b858bbc187068eb0c
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Sun Jul 7 08:58:52 2013 +0100
sna/gen4: Tighten FORCE_FLUSH w/a to spot amalgamation of primitives
Inspect whether this rectangle will be added to the previous primitive
and so charge it against the current number of inflight rectangles.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c
index a5e49e5..d8cdb36 100644
--- a/src/sna/gen4_render.c
+++ b/src/sna/gen4_render.c
@@ -648,13 +648,18 @@ inline static int gen4_get_rectangles(struct sna *sna,
assert(want);
#if FORCE_FLUSH
- if (sna->render.vertex_offset) {
+ rem = sna->render.vertex_offset;
+ if (sna->kgem.nbatch == sna->render_state.gen4.last_primitive)
+ rem = sna->kgem.nbatch - 5;
+ if (rem) {
rem = 16 - (sna->render.vertex_index - sna->render.vertex_start) / 3;
if (rem <= 0) {
- gen4_vertex_flush(sna);
- if (gen4_magic_ca_pass(sna, op))
- gen4_emit_pipelined_pointers(sna, op, op->op,
- op->u.gen4.wm_kernel);
+ if (sna->render.vertex_offset) {
+ gen4_vertex_flush(sna);
+ if (gen4_magic_ca_pass(sna, op))
+ gen4_emit_pipelined_pointers(sna, op, op->op,
+ op->u.gen4.wm_kernel);
+ }
OUT_BATCH(MI_FLUSH | MI_INHIBIT_RENDER_CACHE_FLUSH);
rem = 16;
}
@@ -2455,8 +2460,7 @@ fallback_blt:
box++;
} while (--n);
- if (!FORCE_FLUSH || sna->render.vertex_offset)
- gen4_vertex_flush(sna);
+ gen4_vertex_flush(sna);
sna_render_composite_redirect_done(sna, &tmp);
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
return true;
@@ -2694,8 +2698,7 @@ gen4_render_fill_boxes(struct sna *sna,
box++;
} while (--n);
- if (!FORCE_FLUSH || sna->render.vertex_offset)
- gen4_vertex_flush(sna);
+ gen4_vertex_flush(sna);
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
return true;
}
@@ -2878,8 +2881,7 @@ gen4_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
gen4_render_fill_rectangle(sna, &tmp, x1, y1, x2 - x1, y2 - y1);
- if (!FORCE_FLUSH || sna->render.vertex_offset)
- gen4_vertex_flush(sna);
+ gen4_vertex_flush(sna);
kgem_bo_destroy(&sna->kgem, tmp.src.bo);
return true;
More information about the xorg-commit
mailing list