xf86-video-intel: 4 commits - src/sna/brw src/sna/gen6_render.c src/sna/gen7_render.c

Chris Wilson ickle at kemper.freedesktop.org
Wed Aug 1 08:26:21 PDT 2012


 src/sna/brw/brw_wm.c  |   18 ++----------------
 src/sna/gen6_render.c |    6 +++++-
 src/sna/gen7_render.c |   32 +++++++-------------------------
 3 files changed, 14 insertions(+), 42 deletions(-)

New commits:
commit eaeda34bef711cc566f51dee092a19a3c4ac1a16
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Aug 1 16:23:05 2012 +0100

    sna: Fix computation of st values for SIMD8 dispatch
    
    Fixes regression with enabling 8-pixels.
    
    Reported-by: Mehran Kholdi <semekh.dev at gmail.com>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=53044
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/brw/brw_wm.c b/src/sna/brw/brw_wm.c
index bd4003d..f54e55e 100644
--- a/src/sna/brw/brw_wm.c
+++ b/src/sna/brw/brw_wm.c
@@ -42,12 +42,11 @@ static void brw_wm_affine_st(struct brw_compile *p, int dw,
 	if (dw == 16) {
 		brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED);
 		uv = p->gen >= 60 ? 6 : 3;
-		uv += 2*channel;
 	} else {
 		brw_set_compression_control(p, BRW_COMPRESSION_NONE);
 		uv = p->gen >= 60 ? 4 : 3;
-		uv += channel;
 	}
+	uv += 2*channel;
 
 	msg++;
 	if (p->gen >= 60) {
@@ -462,9 +461,6 @@ brw_wm_kernel__affine_mask(struct brw_compile *p, int dispatch)
 {
 	int src, mask;
 
-	if (dispatch == 8)
-		return false; /* XXX sampler alpha retuns all 0 */
-
 	if (p->gen < 60)
 		brw_wm_xy(p, dispatch);
 
@@ -495,9 +491,6 @@ brw_wm_kernel__affine_mask_sa(struct brw_compile *p, int dispatch)
 {
 	int src, mask;
 
-	if (dispatch == 8)
-		return false; /* XXX sampler alpha retuns all 0 */
-
 	if (p->gen < 60)
 		brw_wm_xy(p, dispatch);
 
@@ -518,12 +511,11 @@ static void brw_wm_projective_st(struct brw_compile *p, int dw,
 	if (dw == 16) {
 		brw_set_compression_control(p, BRW_COMPRESSION_COMPRESSED);
 		uv = p->gen >= 60 ? 6 : 3;
-		uv += 2*channel;
 	} else {
 		brw_set_compression_control(p, BRW_COMPRESSION_NONE);
 		uv = p->gen >= 60 ? 4 : 3;
-		uv += channel;
 	}
+	uv += 2*channel;
 
 	msg++;
 	if (p->gen >= 60) {
@@ -614,9 +606,6 @@ brw_wm_kernel__projective_mask(struct brw_compile *p, int dispatch)
 {
 	int src, mask;
 
-	if (dispatch == 8)
-		return false; /* XXX sampler alpha retuns all 0 */
-
 	if (p->gen < 60)
 		brw_wm_xy(p, dispatch);
 
@@ -647,9 +636,6 @@ brw_wm_kernel__projective_mask_sa(struct brw_compile *p, int dispatch)
 {
 	int src, mask;
 
-	if (dispatch == 8)
-		return false; /* XXX sampler alpha retuns all 0 */
-
 	if (p->gen < 60)
 		brw_wm_xy(p, dispatch);
 
commit 55231eca818c82620c0146384b19b5d5659f6cd6
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Aug 1 16:22:23 2012 +0100

    sna/gen6: Install a fallback 16-pixel shader
    
    In case the DBG options leave no shader compiled, make sure we always
    supply one.
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen6_render.c b/src/sna/gen6_render.c
index db7599d..19b8a2d 100644
--- a/src/sna/gen6_render.c
+++ b/src/sna/gen6_render.c
@@ -4193,7 +4193,11 @@ static bool gen6_render_setup(struct sna *sna)
 								     wm_kernels[m].data, 32);
 			}
 		}
-		assert(state->wm_kernel[m][0]|state->wm_kernel[m][1]|state->wm_kernel[m][2]);
+		if ((state->wm_kernel[m][0]|state->wm_kernel[m][1]|state->wm_kernel[m][2]) == 0) {
+			state->wm_kernel[m][1] =
+				sna_static_stream_compile_wm(sna, &general,
+							     wm_kernels[m].data, 16);
+		}
 	}
 
 	ss = sna_static_stream_map(&general,
commit 4e79c1fef064ce68914eb644edd7f588be3d7300
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Aug 1 15:58:43 2012 +0100

    Revert "sna/gen7: Prefer the BLT for self-copies"
    
    This reverts commit 89e75dbcb6749bde7587ecc08abed276c255e7f9.
    
    Having removed the forced stall for a RENDER self-copy there is no
    longer a need to encourage ring switching.
    
    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 193de00..96eb86a 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -2470,13 +2470,6 @@ try_blt(struct sna *sna,
 	if (can_switch_rings(sna)) {
 		if (sna_picture_is_solid(src, NULL))
 			return true;
-
-		if (dst->pDrawable == src->pDrawable)
-			return true;
-
-		if (src->pDrawable &&
-		    get_drawable_pixmap(dst->pDrawable) == get_drawable_pixmap(src->pDrawable))
-			return true;
 	}
 
 	return false;
@@ -3318,8 +3311,7 @@ static inline bool prefer_blt_copy(struct sna *sna,
 }
 
 static inline bool
-overlaps(struct sna *sna,
-	 struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
+overlaps(struct kgem_bo *src_bo, int16_t src_dx, int16_t src_dy,
 	 struct kgem_bo *dst_bo, int16_t dst_dx, int16_t dst_dy,
 	 const BoxRec *box, int n)
 {
@@ -3328,9 +3320,6 @@ overlaps(struct sna *sna,
 	if (src_bo != dst_bo)
 		return false;
 
-	if (can_switch_rings(sna))
-		return true;
-
 	extents = box[0];
 	while (--n) {
 		box++;
@@ -3363,8 +3352,7 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
 	DBG(("%s (%d, %d)->(%d, %d) x %d, alu=%x, self-copy=%d, overlaps? %d\n",
 	     __FUNCTION__, src_dx, src_dy, dst_dx, dst_dy, n, alu,
 	     src_bo == dst_bo,
-	     overlaps(sna,
-		      src_bo, src_dx, src_dy,
+	     overlaps(src_bo, src_dx, src_dy,
 		      dst_bo, dst_dx, dst_dy,
 		      box, n)));
 
@@ -3403,8 +3391,7 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
 	}
 
 	if (!(alu == GXcopy || alu == GXclear) ||
-	    overlaps(sna,
-		     src_bo, src_dx, src_dy,
+	    overlaps(src_bo, src_dx, src_dy,
 		     dst_bo, dst_dx, dst_dy,
 		     box, n)) {
 fallback_blt:
commit 85cef78a40c6a7a0254f8fba685f224eac6038e1
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Aug 1 13:39:36 2012 +0100

    sna/gen7: Simplify the force-stall detection
    
    After reducing the number of conditions where we think we need to force
    the stall on the results, we can then simplify the code to detect
    that remaining 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 5f11741..193de00 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -1030,13 +1030,12 @@ gen7_emit_state(struct sna *sna,
 	gen7_emit_wm(sna, GEN7_KERNEL(op->u.gen7.flags));
 	gen7_emit_vertex_elements(sna, op);
 
-	need_stall = false;
-	if (wm_binding_table & 1)
-		need_stall = GEN7_BLEND(op->u.gen7.flags) != NO_BLEND;
-	need_stall |= gen7_emit_binding_table(sna, wm_binding_table & ~1);
+	need_stall = gen7_emit_binding_table(sna, wm_binding_table);
 	need_stall &= gen7_emit_drawing_rectangle(sna, op);
 
 	if (kgem_bo_is_dirty(op->src.bo) || kgem_bo_is_dirty(op->mask.bo)) {
+		if (op->dst.bo == op->src.bo || op->dst.bo == op->mask.bo)
+			need_stall = GEN7_BLEND(op->u.gen7.flags) != NO_BLEND;
 		gen7_emit_pipe_invalidate(sna, need_stall);
 		kgem_clear_dirty(&sna->kgem);
 		kgem_bo_mark_dirty(&sna->kgem, op->dst.bo);
@@ -1779,12 +1778,8 @@ static void gen7_emit_composite_state(struct sna *sna,
 {
 	uint32_t *binding_table;
 	uint16_t offset;
-	bool dirty;
 
 	gen7_get_batch(sna);
-	dirty = false;
-	if (op->dst.bo == op->src.bo || op->dst.bo == op->mask.bo)
-		dirty = kgem_bo_is_dirty(op->dst.bo);
 
 	binding_table = gen7_composite_get_binding_table(sna, &offset);
 
@@ -1816,7 +1811,7 @@ static void gen7_emit_composite_state(struct sna *sna,
 		offset = sna->render_state.gen7.surface_table;
 	}
 
-	gen7_emit_state(sna, op, offset | dirty);
+	gen7_emit_state(sna, op, offset);
 }
 
 static void


More information about the xorg-commit mailing list