xf86-video-intel: 3 commits - src/sna/compiler.h src/sna/gen7_render.c src/sna/gen7_render.h

Chris Wilson ickle at kemper.freedesktop.org
Sat Nov 19 00:38:21 PST 2011


 src/sna/compiler.h    |    2 
 src/sna/gen7_render.c |  423 ++++++++++++++++++++++++++++++++++++++++++--------
 src/sna/gen7_render.h |  278 ++------------------------------
 3 files changed, 385 insertions(+), 318 deletions(-)

New commits:
commit 4a86ec5ddbaf119fd9a32ecd963f7238152d7d28
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Nov 19 00:33:28 2011 +0000

    sna/gen7: Apply recent SNB tuning as applicable
    
    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 fffb9e9..efe8bb5 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -50,6 +50,7 @@
 #endif
 
 #define NO_COMPOSITE 0
+#define NO_COMPOSITE_SPANS 0
 #define NO_COPY 0
 #define NO_COPY_BOXES 0
 #define NO_FILL 0
@@ -154,7 +155,6 @@ static const struct wm_kernel_info {
 	Bool has_mask;
 } wm_kernels[] = {
 	KERNEL(NOMASK, ps_kernel_nomask_affine, FALSE),
-#if 0
 	KERNEL(NOMASK_PROJECTIVE, ps_kernel_nomask_projective, FALSE),
 
 	KERNEL(MASK, ps_kernel_masknoca_affine, TRUE),
@@ -165,7 +165,6 @@ static const struct wm_kernel_info {
 
 	KERNEL(MASKCA_SRCALPHA, ps_kernel_maskca_srcalpha_affine, TRUE),
 	KERNEL(MASKCA_SRCALPHA_PROJECTIVE, ps_kernel_maskca_srcalpha_projective, TRUE),
-#endif
 
 	KERNEL(VIDEO_PLANAR, ps_kernel_planar, FALSE),
 	KERNEL(VIDEO_PACKED, ps_kernel_packed, FALSE),
@@ -1551,19 +1550,13 @@ static bool gen7_rectangle_begin(struct sna *sna,
 	ndwords = 0;
 	if ((sna->render_state.gen7.vb_id & (1 << id)) == 0)
 		ndwords += 5;
-	if (sna->render_state.gen7.vertex_offset == 0)
-		ndwords += op->need_magic_ca_pass ? 60 : 6;
-	if (ndwords == 0)
-		return true;
-
 	if (!kgem_check_batch(&sna->kgem, ndwords))
 		return false;
 
-	if ((sna->render_state.gen7.vb_id & (1 << id)) == 0)
+	if ((sna->render_state.gen7.vb_id & id) == 0)
 		gen7_emit_vertex_buffer(sna, op);
-	if (sna->render_state.gen7.vertex_offset == 0)
-		gen7_emit_primitive(sna);
 
+	gen7_emit_primitive(sna);
 	return true;
 }
 
@@ -1588,19 +1581,20 @@ inline static int gen7_get_rectangles(struct sna *sna,
 {
 	int rem = vertex_space(sna);
 
-	if (rem < 3*op->floats_per_vertex) {
+	if (rem < op->floats_per_rect) {
 		DBG(("flushing vbo for %s: %d < %d\n",
-		     __FUNCTION__, rem, 3*op->floats_per_vertex));
+		     __FUNCTION__, rem, op->floats_per_rect));
 		rem = gen7_get_rectangles__flush(sna, op->need_magic_ca_pass);
 		if (rem == 0)
 			return 0;
 	}
 
-	if (!gen7_rectangle_begin(sna, op))
+	if (sna->render_state.gen7.vertex_offset == 0 &&
+	    !gen7_rectangle_begin(sna, op))
 		return 0;
 
-	if (want > 1 && want * op->floats_per_vertex*3 > rem)
-		want = rem / (3*op->floats_per_vertex);
+	if (want > 1 && want * op->floats_per_rect > rem)
+		want = rem / op->floats_per_rect;
 
 	sna->render.vertex_index += 3*want;
 	return want;
@@ -1947,6 +1941,7 @@ gen7_render_video(struct sna *sna,
 
 	tmp.is_affine = TRUE;
 	tmp.floats_per_vertex = 3;
+	tmp.floats_per_rect = 9;
 
 	if (is_planar_fourcc(frame->id)) {
 		tmp.u.gen7.wm_kernel = GEN7_WM_KERNEL_VIDEO_PLANAR;
@@ -2045,6 +2040,11 @@ gen7_composite_solid_init(struct sna *sna,
 	return channel->bo != NULL;
 }
 
+static inline bool too_large(int width, int height)
+{
+	return (width | height) > GEN7_MAX_SIZE;
+}
+
 static int
 gen7_composite_picture(struct sna *sna,
 		       PicturePtr picture,
@@ -2103,8 +2103,7 @@ gen7_composite_picture(struct sna *sna,
 		return sna_render_picture_convert(sna, picture, channel, pixmap,
 						  x, y, w, h, dst_x, dst_y);
 
-	if (pixmap->drawable.width > GEN7_MAX_SIZE ||
-	    pixmap->drawable.height > GEN7_MAX_SIZE) {
+	if (too_large(pixmap->drawable.width, pixmap->drawable.height)) {
 		DBG(("%s: extracting from pixmap %dx%d\n", __FUNCTION__,
 		     pixmap->drawable.width, pixmap->drawable.height));
 		return sna_render_picture_extract(sna, picture, channel,
@@ -2188,12 +2187,12 @@ gen7_composite_set_target(struct sna_composite_op *op, PicturePtr dst)
 static Bool
 try_blt(struct sna *sna, int width, int height)
 {
-	if (sna->kgem.mode == KGEM_BLT) {
+	if (sna->kgem.ring == KGEM_BLT) {
 		DBG(("%s: already performing BLT\n", __FUNCTION__));
 		return TRUE;
 	}
 
-	if (width > GEN7_MAX_SIZE || height > GEN7_MAX_SIZE) {
+	if (too_large(width, height)) {
 		DBG(("%s: operation too large for 3D pipe (%d, %d)\n",
 		     __FUNCTION__, width, height));
 		return TRUE;
@@ -2229,7 +2228,7 @@ gen7_render_composite(struct sna *sna,
 #endif
 
 	DBG(("%s: %dx%d, current mode=%d\n", __FUNCTION__,
-	     width, height, sna->kgem.mode));
+	     width, height, sna->kgem.ring));
 
 	if (mask == NULL &&
 	    try_blt(sna, width, height) &&
@@ -2253,7 +2252,7 @@ gen7_render_composite(struct sna *sna,
 		return FALSE;
 	sna_render_reduce_damage(tmp, dst_x, dst_y, width, height);
 
-	if (tmp->dst.width > GEN7_MAX_SIZE || tmp->dst.height > GEN7_MAX_SIZE) {
+	if (too_large(tmp->dst.width, tmp->dst.height)) {
 		if (!sna_render_composite_redirect(sna, tmp,
 						   dst_x, dst_y, width, height))
 			return FALSE;
@@ -2328,6 +2327,7 @@ gen7_render_composite(struct sna *sna,
 
 		tmp->floats_per_vertex = 3 + !tmp->is_affine;
 	}
+	tmp->floats_per_rect = 3 * tmp->floats_per_vertex;
 
 	tmp->u.gen7.wm_kernel =
 		gen7_choose_composite_kernel(tmp->op,
@@ -2366,6 +2366,310 @@ cleanup_dst:
 	return FALSE;
 }
 
+/* A poor man's span interface. But better than nothing? */
+#if !NO_COMPOSITE_SPANS
+static Bool
+gen7_composite_alpha_gradient_init(struct sna *sna,
+				   struct sna_composite_channel *channel)
+{
+	DBG(("%s\n", __FUNCTION__));
+
+	channel->filter = PictFilterNearest;
+	channel->repeat = RepeatPad;
+	channel->is_affine = TRUE;
+	channel->is_solid  = FALSE;
+	channel->transform = NULL;
+	channel->width  = 256;
+	channel->height = 1;
+	channel->card_format = GEN7_SURFACEFORMAT_B8G8R8A8_UNORM;
+
+	channel->bo = sna_render_get_alpha_gradient(sna);
+
+	channel->scale[0]  = channel->scale[1]  = 1;
+	channel->offset[0] = channel->offset[1] = 0;
+	return channel->bo != NULL;
+}
+
+inline static void
+gen7_emit_composite_texcoord(struct sna *sna,
+			     const struct sna_composite_channel *channel,
+			     int16_t x, int16_t y)
+{
+	float t[3];
+
+	if (channel->is_affine) {
+		sna_get_transformed_coordinates(x + channel->offset[0],
+						y + channel->offset[1],
+						channel->transform,
+						&t[0], &t[1]);
+		OUT_VERTEX_F(t[0] * channel->scale[0]);
+		OUT_VERTEX_F(t[1] * channel->scale[1]);
+	} else {
+		t[0] = t[1] = 0; t[2] = 1;
+		sna_get_transformed_coordinates_3d(x + channel->offset[0],
+						   y + channel->offset[1],
+						   channel->transform,
+						   &t[0], &t[1], &t[2]);
+		OUT_VERTEX_F(t[0] * channel->scale[0]);
+		OUT_VERTEX_F(t[1] * channel->scale[1]);
+		OUT_VERTEX_F(t[2]);
+	}
+}
+
+inline static void
+gen7_emit_composite_texcoord_affine(struct sna *sna,
+				    const struct sna_composite_channel *channel,
+				    int16_t x, int16_t y)
+{
+	float t[2];
+
+	sna_get_transformed_coordinates(x + channel->offset[0],
+					y + channel->offset[1],
+					channel->transform,
+					&t[0], &t[1]);
+	OUT_VERTEX_F(t[0] * channel->scale[0]);
+	OUT_VERTEX_F(t[1] * channel->scale[1]);
+}
+
+inline static void
+gen7_emit_composite_spans_vertex(struct sna *sna,
+				 const struct sna_composite_spans_op *op,
+				 int16_t x, int16_t y)
+{
+	OUT_VERTEX(x, y);
+	gen7_emit_composite_texcoord(sna, &op->base.src, x, y);
+}
+
+fastcall static void
+gen7_emit_composite_spans_primitive(struct sna *sna,
+				    const struct sna_composite_spans_op *op,
+				    const BoxRec *box,
+				    float opacity)
+{
+	gen7_emit_composite_spans_vertex(sna, op, box->x2, box->y2);
+	OUT_VERTEX_F(opacity);
+	OUT_VERTEX_F(1);
+	if (!op->base.is_affine)
+		OUT_VERTEX_F(1);
+
+	gen7_emit_composite_spans_vertex(sna, op, box->x1, box->y2);
+	OUT_VERTEX_F(opacity);
+	OUT_VERTEX_F(1);
+	if (!op->base.is_affine)
+		OUT_VERTEX_F(1);
+
+	gen7_emit_composite_spans_vertex(sna, op, box->x1, box->y1);
+	OUT_VERTEX_F(opacity);
+	OUT_VERTEX_F(0);
+	if (!op->base.is_affine)
+		OUT_VERTEX_F(1);
+}
+
+fastcall static void
+gen7_emit_composite_spans_solid(struct sna *sna,
+				const struct sna_composite_spans_op *op,
+				const BoxRec *box,
+				float opacity)
+{
+	OUT_VERTEX(box->x2, box->y2);
+	OUT_VERTEX_F(1); OUT_VERTEX_F(1);
+	OUT_VERTEX_F(opacity); OUT_VERTEX_F(1);
+
+	OUT_VERTEX(box->x1, box->y2);
+	OUT_VERTEX_F(0); OUT_VERTEX_F(1);
+	OUT_VERTEX_F(opacity); OUT_VERTEX_F(1);
+
+	OUT_VERTEX(box->x1, box->y1);
+	OUT_VERTEX_F(0); OUT_VERTEX_F(0);
+	OUT_VERTEX_F(opacity); OUT_VERTEX_F(0);
+}
+
+fastcall static void
+gen7_emit_composite_spans_affine(struct sna *sna,
+				 const struct sna_composite_spans_op *op,
+				 const BoxRec *box,
+				 float opacity)
+{
+	OUT_VERTEX(box->x2, box->y2);
+	gen7_emit_composite_texcoord_affine(sna, &op->base.src,
+					    box->x2, box->y2);
+	OUT_VERTEX_F(opacity);
+	OUT_VERTEX_F(1);
+
+	OUT_VERTEX(box->x1, box->y2);
+	gen7_emit_composite_texcoord_affine(sna, &op->base.src,
+					    box->x1, box->y2);
+	OUT_VERTEX_F(opacity);
+	OUT_VERTEX_F(1);
+
+	OUT_VERTEX(box->x1, box->y1);
+	gen7_emit_composite_texcoord_affine(sna, &op->base.src,
+					    box->x1, box->y1);
+	OUT_VERTEX_F(opacity);
+	OUT_VERTEX_F(0);
+}
+
+fastcall static void
+gen7_render_composite_spans_box(struct sna *sna,
+				const struct sna_composite_spans_op *op,
+				const BoxRec *box, float opacity)
+{
+	DBG(("%s: src=+(%d, %d), opacity=%f, dst=+(%d, %d), box=(%d, %d) x (%d, %d)\n",
+	     __FUNCTION__,
+	     op->base.src.offset[0], op->base.src.offset[1],
+	     opacity,
+	     op->base.dst.x, op->base.dst.y,
+	     box->x1, box->y1,
+	     box->x2 - box->x1,
+	     box->y2 - box->y1));
+
+	if (gen7_get_rectangles(sna, &op->base, 1) == 0) {
+		gen7_emit_composite_state(sna, &op->base);
+		gen7_get_rectangles(sna, &op->base, 1);
+	}
+
+	op->prim_emit(sna, op, box, opacity);
+}
+
+static void
+gen7_render_composite_spans_boxes(struct sna *sna,
+				  const struct sna_composite_spans_op *op,
+				  const BoxRec *box, int nbox,
+				  float opacity)
+{
+	DBG(("%s: nbox=%d, src=+(%d, %d), opacity=%f, dst=+(%d, %d)\n",
+	     __FUNCTION__, nbox,
+	     op->base.src.offset[0], op->base.src.offset[1],
+	     opacity,
+	     op->base.dst.x, op->base.dst.y));
+
+	do {
+		int nbox_this_time;
+
+		nbox_this_time = gen7_get_rectangles(sna, &op->base, nbox);
+		if (nbox_this_time == 0) {
+			gen7_emit_composite_state(sna, &op->base);
+			nbox_this_time = gen7_get_rectangles(sna, &op->base, nbox);
+		}
+		nbox -= nbox_this_time;
+
+		do {
+			DBG(("  %s: (%d, %d) x (%d, %d)\n", __FUNCTION__,
+			     box->x1, box->y1,
+			     box->x2 - box->x1,
+			     box->y2 - box->y1));
+
+			op->prim_emit(sna, op, box++, opacity);
+		} while (--nbox_this_time);
+	} while (nbox);
+}
+
+fastcall static void
+gen7_render_composite_spans_done(struct sna *sna,
+				 const struct sna_composite_spans_op *op)
+{
+	gen7_vertex_flush(sna);
+	_kgem_set_mode(&sna->kgem, KGEM_RENDER);
+
+	DBG(("%s()\n", __FUNCTION__));
+
+	sna_render_composite_redirect_done(sna, &op->base);
+	if (op->base.src.bo)
+		kgem_bo_destroy(&sna->kgem, op->base.src.bo);
+}
+
+static Bool
+gen7_render_composite_spans(struct sna *sna,
+			    uint8_t op,
+			    PicturePtr src,
+			    PicturePtr dst,
+			    int16_t src_x,  int16_t src_y,
+			    int16_t dst_x,  int16_t dst_y,
+			    int16_t width,  int16_t height,
+			    unsigned flags,
+			    struct sna_composite_spans_op *tmp)
+{
+	DBG(("%s: %dx%d with flags=%x, current mode=%d\n", __FUNCTION__,
+	     width, height, flags, sna->kgem.ring));
+
+	if ((flags & COMPOSITE_SPANS_RECTILINEAR) == 0)
+		return FALSE;
+
+	if (op >= ARRAY_SIZE(gen7_blend_op))
+		return FALSE;
+
+	if (need_tiling(sna, width, height))
+		return FALSE;
+
+	tmp->base.op = op;
+	if (!gen7_composite_set_target(&tmp->base, dst))
+		return FALSE;
+	sna_render_reduce_damage(&tmp->base, dst_x, dst_y, width, height);
+
+	if (tmp->base.dst.width > 8192 || tmp->base.dst.height > 8192) {
+		if (!sna_render_composite_redirect(sna, &tmp->base,
+						   dst_x, dst_y, width, height))
+			return FALSE;
+	}
+
+	switch (gen7_composite_picture(sna, src, &tmp->base.src,
+				       src_x, src_y,
+				       width, height,
+				       dst_x, dst_y)) {
+	case -1:
+		goto cleanup_dst;
+	case 0:
+		gen7_composite_solid_init(sna, &tmp->base.src, 0);
+	case 1:
+		gen7_composite_channel_convert(&tmp->base.src);
+		break;
+	}
+
+	tmp->base.is_affine = tmp->base.src.is_affine;
+	tmp->base.has_component_alpha = FALSE;
+	tmp->base.need_magic_ca_pass = FALSE;
+
+	gen7_composite_alpha_gradient_init(sna, &tmp->base.mask);
+
+	tmp->prim_emit = gen7_emit_composite_spans_primitive;
+	if (tmp->base.src.is_solid)
+		tmp->prim_emit = gen7_emit_composite_spans_solid;
+	else if (tmp->base.is_affine)
+		tmp->prim_emit = gen7_emit_composite_spans_affine;
+	tmp->base.floats_per_vertex = 5 + 2*!tmp->base.is_affine;
+	tmp->base.floats_per_rect = 3 * tmp->base.floats_per_vertex;
+
+	tmp->base.u.gen7.wm_kernel =
+		gen7_choose_composite_kernel(tmp->base.op,
+					     TRUE, FALSE,
+					     tmp->base.is_affine);
+	tmp->base.u.gen7.nr_surfaces = 3;
+	tmp->base.u.gen7.nr_inputs = 2;
+	tmp->base.u.gen7.ve_id = 1 << 1 | tmp->base.is_affine;
+
+	tmp->box   = gen7_render_composite_spans_box;
+	tmp->boxes = gen7_render_composite_spans_boxes;
+	tmp->done  = gen7_render_composite_spans_done;
+
+	if (!kgem_check_bo(&sna->kgem,
+			   tmp->base.dst.bo, tmp->base.src.bo,
+			   NULL))
+		kgem_submit(&sna->kgem);
+
+	if (kgem_bo_is_dirty(tmp->base.src.bo))
+		kgem_emit_flush(&sna->kgem);
+
+	gen7_emit_composite_state(sna, &tmp->base);
+	gen7_align_vertex(sna, &tmp->base);
+	return TRUE;
+
+cleanup_dst:
+	if (tmp->base.redirect.real_bo)
+		kgem_bo_destroy(&sna->kgem, tmp->base.dst.bo);
+	return FALSE;
+}
+#endif
+
 static void
 gen7_emit_copy_state(struct sna *sna,
 		     const struct sna_composite_op *op)
@@ -2420,7 +2724,7 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
 	     __FUNCTION__, src_dx, src_dy, dst_dx, dst_dy, n, alu,
 	     src_bo == dst_bo));
 
-	if (sna->kgem.mode == KGEM_BLT &&
+	if (sna->kgem.ring == KGEM_BLT &&
 	    sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
 	    sna_blt_copy_boxes(sna, alu,
 			       src_bo, src_dx, src_dy,
@@ -2430,10 +2734,8 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
 		return TRUE;
 
 	if (!(alu == GXcopy || alu == GXclear) || src_bo == dst_bo ||
-	    src->drawable.width > GEN7_MAX_SIZE ||
-	    src->drawable.height > GEN7_MAX_SIZE ||
-	    dst->drawable.width > GEN7_MAX_SIZE ||
-	    dst->drawable.height > GEN7_MAX_SIZE) {
+	    too_large(src->drawable.width, src->drawable.height) ||
+	    too_large(dst->drawable.width, dst->drawable.height)) {
 		if (!sna_blt_compare_depth(&src->drawable, &dst->drawable))
 			return FALSE;
 
@@ -2468,6 +2770,7 @@ gen7_render_copy_boxes(struct sna *sna, uint8_t alu,
 
 	tmp.is_affine = TRUE;
 	tmp.floats_per_vertex = 3;
+	tmp.floats_per_rect = 9;
 	tmp.has_component_alpha = 0;
 	tmp.need_magic_ca_pass = 0;
 
@@ -2577,7 +2880,7 @@ gen7_render_copy(struct sna *sna, uint8_t alu,
 	     src->drawable.width, src->drawable.height,
 	     dst->drawable.width, dst->drawable.height));
 
-	if (sna->kgem.mode == KGEM_BLT &&
+	if (sna->kgem.ring == KGEM_BLT &&
 	    sna_blt_compare_depth(&src->drawable, &dst->drawable) &&
 	    sna_blt_copy(sna, alu,
 			 src_bo, dst_bo,
@@ -2586,10 +2889,8 @@ gen7_render_copy(struct sna *sna, uint8_t alu,
 		return TRUE;
 
 	if (!(alu == GXcopy || alu == GXclear) || src_bo == dst_bo ||
-	    src->drawable.width > GEN7_MAX_SIZE ||
-	    src->drawable.height > GEN7_MAX_SIZE ||
-	    dst->drawable.width > GEN7_MAX_SIZE ||
-	    dst->drawable.height > GEN7_MAX_SIZE) {
+	    too_large(src->drawable.width, src->drawable.height) ||
+	    too_large(dst->drawable.width, dst->drawable.height)) {
 		if (!sna_blt_compare_depth(&src->drawable, &dst->drawable))
 			return FALSE;
 
@@ -2618,6 +2919,7 @@ gen7_render_copy(struct sna *sna, uint8_t alu,
 
 	op->base.is_affine = true;
 	op->base.floats_per_vertex = 3;
+	op->base.floats_per_rect = 9;
 
 	op->base.u.gen7.wm_kernel = GEN7_WM_KERNEL_NOMASK;
 	op->base.u.gen7.nr_surfaces = 2;
@@ -2696,9 +2998,8 @@ gen7_render_fill_boxes(struct sna *sna,
 		return FALSE;
 	}
 
-	if (sna->kgem.mode == KGEM_BLT ||
-	    dst->drawable.width > GEN7_MAX_SIZE ||
-	    dst->drawable.height > GEN7_MAX_SIZE ||
+	if (sna->kgem.ring != KGEM_RENDER ||
+	    too_large(dst->drawable.width, dst->drawable.height) ||
 	    !gen7_check_dst_format(format)) {
 		uint8_t alu = -1;
 
@@ -2725,8 +3026,7 @@ gen7_render_fill_boxes(struct sna *sna,
 				       pixel, box, n))
 			return TRUE;
 
-		if (dst->drawable.width > GEN7_MAX_SIZE ||
-		    dst->drawable.height > GEN7_MAX_SIZE ||
+		if (too_large(dst->drawable.width, dst->drawable.height) ||
 		    !gen7_check_dst_format(format))
 			return FALSE;
 	}
@@ -2765,6 +3065,7 @@ gen7_render_fill_boxes(struct sna *sna,
 
 	tmp.is_affine = TRUE;
 	tmp.floats_per_vertex = 3;
+	tmp.floats_per_rect = 9;
 
 	tmp.u.gen7.wm_kernel = GEN7_WM_KERNEL_NOMASK;
 	tmp.u.gen7.nr_surfaces = 2;
@@ -2917,7 +3218,7 @@ gen7_render_fill(struct sna *sna, uint8_t alu,
 			    op);
 #endif
 
-	if (sna->kgem.mode == KGEM_BLT &&
+	if (sna->kgem.ring != KGEM_RENDER &&
 	    sna_blt_fill(sna, alu,
 			 dst_bo, dst->drawable.bitsPerPixel,
 			 color,
@@ -2925,8 +3226,7 @@ gen7_render_fill(struct sna *sna, uint8_t alu,
 		return TRUE;
 
 	if (!(alu == GXcopy || alu == GXclear) ||
-	    dst->drawable.width > GEN7_MAX_SIZE ||
-	    dst->drawable.height > GEN7_MAX_SIZE)
+	    too_large(dst->drawable.width, dst->drawable.height))
 		return sna_blt_fill(sna, alu,
 				    dst_bo, dst->drawable.bitsPerPixel,
 				    color,
@@ -2956,7 +3256,10 @@ gen7_render_fill(struct sna *sna, uint8_t alu,
 	op->base.mask.repeat = SAMPLER_EXTEND_NONE;
 
 	op->base.is_affine = TRUE;
+	op->base.has_component_alpha = FALSE;
+	op->base.need_magic_ca_pass = FALSE;
 	op->base.floats_per_vertex = 3;
+	op->base.floats_per_rect = 9;
 
 	op->base.u.gen7.wm_kernel = GEN7_WM_KERNEL_NOMASK;
 	op->base.u.gen7.nr_surfaces = 2;
@@ -3009,7 +3312,7 @@ gen7_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
 #endif
 
 	/* Prefer to use the BLT if already engaged */
-	if (sna->kgem.mode != KGEM_RENDER &&
+	if (sna->kgem.ring != KGEM_RENDER &&
 	    gen7_render_fill_one_try_blt(sna, dst, bo, color,
 					 x1, y1, x2, y2, alu))
 		return TRUE;
@@ -3045,10 +3348,11 @@ gen7_render_fill_one(struct sna *sna, PixmapPtr dst, struct kgem_bo *bo,
 
 	tmp.is_affine = TRUE;
 	tmp.floats_per_vertex = 3;
+	tmp.floats_per_rect = 9;
 	tmp.has_component_alpha = 0;
 	tmp.need_magic_ca_pass = FALSE;
 
-	tmp.u.gen7.wm_kernel = GEN6_WM_KERNEL_NOMASK;
+	tmp.u.gen7.wm_kernel = GEN7_WM_KERNEL_NOMASK;
 	tmp.u.gen7.nr_surfaces = 2;
 	tmp.u.gen7.nr_inputs = 1;
 	tmp.u.gen7.ve_id = 1;
@@ -3176,6 +3480,9 @@ Bool gen7_render_init(struct sna *sna)
 	sna->kgem.context_switch = gen7_render_context_switch;
 
 	sna->render.composite = gen7_render_composite;
+#if !NO_COMPOSITE_SPANS
+	sna->render.composite_spans = gen7_render_composite_spans;
+#endif
 	sna->render.video = gen7_render_video;
 
 	sna->render.copy_boxes = gen7_render_copy_boxes;
commit fe944d61d53c275a168da2e9515d1e42be81630b
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Sat Nov 19 00:02:17 2011 +0000

    sna/gen7: Correct shifts for surface state
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/gen7_render.h b/src/sna/gen7_render.h
index db78402..06ab0ee 100644
--- a/src/sna/gen7_render.h
+++ b/src/sna/gen7_render.h
@@ -1311,29 +1311,20 @@ struct gen7_sampler_state {
 	} ss3;
 };
 
-
 /* Surface state DW0 */
-#define GEN7_SURFACE_CUBEFACE_ENABLES	0x3f
-#define GEN7_SURFACE_RC_READ_WRITE	(1 << 7)
-#define GEN7_SURFACE_TILED		(1<< 12)
-#define GEN7_SURFACE_TILED_Y		(1<< 13)
+#define GEN7_SURFACE_RC_READ_WRITE	(1 << 8)
+#define GEN7_SURFACE_TILED		(1 << 14)
+#define GEN7_SURFACE_TILED_Y		(1 << 13)
 #define GEN7_SURFACE_FORMAT_SHIFT	18
-#define GEN7_SURFACE_FORMAT_MASK	INTEL_MASK(26, 18)
-#define GEN7_SURFACE_TYPE_SHIFT		28
+#define GEN7_SURFACE_TYPE_SHIFT		29
 
 /* Surface state DW2 */
-#define GEN7_SURFACE_HEIGHT_SHIFT        19
-#define GEN7_SURFACE_HEIGHT_MASK         INTEL_MASK(31, 19)
-#define GEN7_SURFACE_WIDTH_SHIFT         6
-#define GEN7_SURFACE_WIDTH_MASK          INTEL_MASK(18, 6)
-#define GEN7_SURFACE_LOD_SHIFT           2
-#define GEN7_SURFACE_LOD_MASK            INTEL_MASK(5, 2)
+#define GEN7_SURFACE_HEIGHT_SHIFT        16
+#define GEN7_SURFACE_WIDTH_SHIFT         0
 
 /* Surface state DW3 */
 #define GEN7_SURFACE_DEPTH_SHIFT         21
-#define GEN7_SURFACE_DEPTH_MASK          INTEL_MASK(31, GEN7_SURFACE_DEPTH_SHIFT)
 #define GEN7_SURFACE_PITCH_SHIFT         0
-#define GEN7_SURFACE_PITCH_MASK          INTEL_MASK(18, GEN7_SURFACE_PITCH_SHIFT)
 
 /* _3DSTATE_VERTEX_BUFFERS on GEN7*/
 /* DW1 */
commit 70042400fd95f613b9547d0a72d6288abcc2357d
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Fri Nov 18 23:41:33 2011 +0000

    sna/gen7: minor tidy of redundant defines
    
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/compiler.h b/src/sna/compiler.h
index 2c8b43d..ad1313b 100644
--- a/src/sna/compiler.h
+++ b/src/sna/compiler.h
@@ -48,4 +48,6 @@
 
 #define VG_CLEAR(s) VG(memset(&s, 0, sizeof(s)))
 
+#define COMPILE_TIME_ASSERT(E) ((void)sizeof(char[1 - 2*!(E)]))
+
 #endif /* _SNA_COMPILER_H_ */
diff --git a/src/sna/gen7_render.c b/src/sna/gen7_render.c
index 0296841..fffb9e9 100644
--- a/src/sna/gen7_render.c
+++ b/src/sna/gen7_render.c
@@ -417,14 +417,6 @@ gen7_choose_composite_kernel(int op, Bool has_mask, Bool is_ca, Bool is_affine)
 }
 
 static void
-gen7_emit_sip(struct sna *sna)
-{
-	/* Set system instruction pointer */
-	OUT_BATCH(GEN7_STATE_SIP | 0);
-	OUT_BATCH(0);
-}
-
-static void
 gen7_emit_urb(struct sna *sna)
 {
 	OUT_BATCH(GEN7_3DSTATE_PUSH_CONSTANT_ALLOC_PS | (2 - 2));
@@ -653,6 +645,7 @@ gen7_emit_wm_invariant(struct sna *sna)
 		  GEN7_WM_PERSPECTIVE_PIXEL_BARYCENTRIC);
 	OUT_BATCH(0);
 
+#if 0
 	/* XXX length bias of 7 in old spec? */
 	OUT_BATCH(GEN7_3DSTATE_CONSTANT_PS | (7 - 2));
 	OUT_BATCH(0);
@@ -661,6 +654,7 @@ gen7_emit_wm_invariant(struct sna *sna)
 	OUT_BATCH(0);
 	OUT_BATCH(0);
 	OUT_BATCH(0);
+#endif
 }
 
 static void
@@ -694,7 +688,6 @@ gen7_emit_invariant(struct sna *sna)
 	OUT_BATCH(GEN7_3DSTATE_SAMPLE_MASK | (2 - 2));
 	OUT_BATCH(1);
 
-	gen7_emit_sip(sna);
 	gen7_emit_urb(sna);
 
 	gen7_emit_state_base_address(sna);
@@ -1079,11 +1072,6 @@ static void gen7_vertex_finish(struct sna *sna, Bool last)
 	sna->render_state.gen7.vb_id = 0;
 }
 
-typedef struct gen7_surface_state_padded {
-	struct gen7_surface_state state;
-	char pad[32 - sizeof(struct gen7_surface_state)];
-} gen7_surface_state_padded;
-
 static void null_create(struct sna_static_stream *stream)
 {
 	/* A bunch of zeros useful for legacy border color and depth-stencil */
@@ -1186,6 +1174,8 @@ gen7_bind_bo(struct sna *sna,
 	uint32_t domains;
 	uint16_t offset;
 
+	COMPILE_TIME_ASSERT(sizeof(struct gen7_surface_state) == 32);
+
 	/* After the first bind, we manage the cache domains within the batch */
 	if (is_dst) {
 		domains = I915_GEM_DOMAIN_RENDER << 16 |I915_GEM_DOMAIN_RENDER;
@@ -1197,11 +1187,11 @@ gen7_bind_bo(struct sna *sna,
 	if (offset)
 		return offset;
 
-	offset = sna->kgem.surface - sizeof(struct gen7_surface_state_padded) / sizeof(uint32_t);
+	offset = sna->kgem.surface - sizeof(struct gen7_surface_state) / sizeof(uint32_t);
 	offset *= sizeof(uint32_t);
 
 	sna->kgem.surface -=
-		sizeof(struct gen7_surface_state_padded) / sizeof(uint32_t);
+		sizeof(struct gen7_surface_state) / sizeof(uint32_t);
 	ss = sna->kgem.batch + sna->kgem.surface;
 	ss[0] = (GEN7_SURFACE_2D << GEN7_SURFACE_TYPE_SHIFT |
 		 gen7_tiling_bits(bo->tiling) |
@@ -1622,10 +1612,10 @@ inline static uint32_t *gen7_composite_get_binding_table(struct sna *sna,
 	uint32_t *table;
 
 	sna->kgem.surface -=
-		sizeof(struct gen7_surface_state_padded) / sizeof(uint32_t);
+		sizeof(struct gen7_surface_state) / sizeof(uint32_t);
 	/* Clear all surplus entries to zero in case of prefetch */
 	table = memset(sna->kgem.batch + sna->kgem.surface,
-		       0, sizeof(struct gen7_surface_state_padded));
+		       0, sizeof(struct gen7_surface_state));
 
 	DBG(("%s(%x)\n", __FUNCTION__, 4*sna->kgem.surface));
 
@@ -1691,7 +1681,7 @@ static void gen7_emit_composite_state(struct sna *sna,
 	    *(uint64_t *)(sna->kgem.batch + sna->render_state.gen7.surface_table) == *(uint64_t*)binding_table &&
 	    (op->mask.bo == NULL ||
 	     sna->kgem.batch[sna->render_state.gen7.surface_table+2] == binding_table[2])) {
-		sna->kgem.surface += sizeof(struct gen7_surface_state_padded) / sizeof(uint32_t);
+		sna->kgem.surface += sizeof(struct gen7_surface_state) / sizeof(uint32_t);
 		offset = sna->render_state.gen7.surface_table;
 	}
 
@@ -1829,7 +1819,7 @@ static uint32_t gen7_bind_video_source(struct sna *sna,
 {
 	struct gen7_surface_state *ss;
 
-	sna->kgem.surface -= sizeof(struct gen7_surface_state_padded) / sizeof(uint32_t);
+	sna->kgem.surface -= sizeof(struct gen7_surface_state) / sizeof(uint32_t);
 
 	ss = memset(sna->kgem.batch + sna->kgem.surface, 0, sizeof(*ss));
 	ss->ss0.surface_type = GEN7_SURFACE_2D;
@@ -2400,7 +2390,7 @@ gen7_emit_copy_state(struct sna *sna,
 
 	if (sna->kgem.surface == offset &&
 	    *(uint64_t *)(sna->kgem.batch + sna->render_state.gen7.surface_table) == *(uint64_t*)binding_table) {
-		sna->kgem.surface += sizeof(struct gen7_surface_state_padded) / sizeof(uint32_t);
+		sna->kgem.surface += sizeof(struct gen7_surface_state) / sizeof(uint32_t);
 		offset = sna->render_state.gen7.surface_table;
 	}
 
@@ -2678,7 +2668,7 @@ gen7_emit_fill_state(struct sna *sna, const struct sna_composite_op *op)
 	if (sna->kgem.surface == offset &&
 	    *(uint64_t *)(sna->kgem.batch + sna->render_state.gen7.surface_table) == *(uint64_t*)binding_table) {
 		sna->kgem.surface +=
-			sizeof(struct gen7_surface_state_padded)/sizeof(uint32_t);
+			sizeof(struct gen7_surface_state)/sizeof(uint32_t);
 		offset = sna->render_state.gen7.surface_table;
 	}
 
diff --git a/src/sna/gen7_render.h b/src/sna/gen7_render.h
index 01482ec..db78402 100644
--- a/src/sna/gen7_render.h
+++ b/src/sna/gen7_render.h
@@ -16,11 +16,6 @@
 #define GEN7_MEDIA_STATE_POINTERS		GEN7_3D(2, 0, 0)
 #define GEN7_MEDIA_OBJECT			GEN7_3D(2, 1, 0)
 
-#define GEN7_3DSTATE_BINDING_TABLE_POINTERS	GEN7_3D(3, 0, 1)
-# define GEN7_3DSTATE_BINDING_TABLE_MODIFY_PS  (1 << 12)/* for GEN7 */
-# define GEN7_3DSTATE_BINDING_TABLE_MODIFY_GS  (1 << 9) /* for GEN7 */
-# define GEN7_3DSTATE_BINDING_TABLE_MODIFY_VS  (1 << 8) /* for GEN7 */
-
 #define GEN7_3DSTATE_VERTEX_BUFFERS		GEN7_3D(3, 0, 8)
 #define GEN7_3DSTATE_VERTEX_ELEMENTS		GEN7_3D(3, 0, 9)
 #define GEN7_3DSTATE_INDEX_BUFFER		GEN7_3D(3, 0, 0xa)
@@ -127,6 +122,7 @@
 #define BASE_ADDRESS_MODIFY		(1 << 0)
 
 /* for GEN7_PIPE_CONTROL */
+#define GEN7_PIPE_CONTROL			GEN7_3D(3, 2, 0)
 #define GEN7_PIPE_CONTROL_NOWRITE       (0 << 14)
 #define GEN7_PIPE_CONTROL_WRITE_QWORD   (1 << 14)
 #define GEN7_PIPE_CONTROL_WRITE_DEPTH   (2 << 14)
@@ -171,11 +167,6 @@
 #define GEN7_SVG_CTL_IO_AUB	       (4 << 8)
 #define GEN7_SVG_CTL_SIP		       (5 << 8)
 
-#define GEN7_SVG_RDATA		       0x7404
-#define GEN7_SVG_WORK_CTL	       0x7408
-
-#define GEN7_VF_CTL		       0x7500
-
 #define GEN7_VF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
 #define GEN7_VF_CTL_SNAPSHOT_MUX_SELECT_THREADID	   (0 << 8)
 #define GEN7_VF_CTL_SNAPSHOT_MUX_SELECT_VF_DEBUG	   (1 << 8)
@@ -295,44 +286,6 @@
 #define GEN7_EU_ATT_CLR_1	       0x8834
 #define GEN7_EU_RDATA		       0x8840
 
-#define GEN7_3D(Pipeline,Opcode,Subopcode) ((3 << 29) | \
-					   ((Pipeline) << 27) | \
-					   ((Opcode) << 24) | \
-					   ((Subopcode) << 16))
-
-#define GEN7_STATE_BASE_ADDRESS			GEN7_3D(0, 1, 1)
-#define GEN7_STATE_SIP				GEN7_3D(0, 1, 2)
-
-#define GEN7_PIPELINE_SELECT			GEN7_3D(1, 1, 4)
-
-#define GEN7_MEDIA_STATE_POINTERS		GEN7_3D(2, 0, 0)
-#define GEN7_MEDIA_OBJECT			GEN7_3D(2, 1, 0)
-
-#define GEN7_3DSTATE_BINDING_TABLE_POINTERS	GEN7_3D(3, 0, 1)
-# define GEN7_3DSTATE_BINDING_TABLE_MODIFY_PS  (1 << 12)/* for GEN7 */
-# define GEN7_3DSTATE_BINDING_TABLE_MODIFY_GS  (1 << 9) /* for GEN7 */
-# define GEN7_3DSTATE_BINDING_TABLE_MODIFY_VS  (1 << 8) /* for GEN7 */
-
-#define GEN7_3DSTATE_VERTEX_BUFFERS		GEN7_3D(3, 0, 8)
-#define GEN7_3DSTATE_VERTEX_ELEMENTS		GEN7_3D(3, 0, 9)
-#define GEN7_3DSTATE_INDEX_BUFFER		GEN7_3D(3, 0, 0xa)
-#define GEN7_3DSTATE_VF_STATISTICS		GEN7_3D(3, 0, 0xb)
-
-#define GEN7_3DSTATE_DRAWING_RECTANGLE		GEN7_3D(3, 1, 0)
-#define GEN7_3DSTATE_CONSTANT_COLOR		GEN7_3D(3, 1, 1)
-#define GEN7_3DSTATE_SAMPLER_PALETTE_LOAD	GEN7_3D(3, 1, 2)
-#define GEN7_3DSTATE_CHROMA_KEY			GEN7_3D(3, 1, 4)
-
-#define GEN7_3DSTATE_POLY_STIPPLE_OFFSET		GEN7_3D(3, 1, 6)
-#define GEN7_3DSTATE_POLY_STIPPLE_PATTERN	GEN7_3D(3, 1, 7)
-#define GEN7_3DSTATE_LINE_STIPPLE		GEN7_3D(3, 1, 8)
-#define GEN7_3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP	GEN7_3D(3, 1, 9)
-/* These two are BLC and CTG only, not BW or CL */
-#define GEN7_3DSTATE_AA_LINE_PARAMS		GEN7_3D(3, 1, 0xa)
-#define GEN7_3DSTATE_GS_SVB_INDEX		GEN7_3D(3, 1, 0xb)
-
-#define GEN7_PIPE_CONTROL			GEN7_3D(3, 2, 0)
-
 #define GEN7_3DPRIMITIVE				GEN7_3D(3, 3, 0)
 
 /* for GEN7+ */
@@ -441,184 +394,11 @@
 #define GEN7_CLIP_DISABLE	       0
 #define GEN7_CLIP_ENABLE		       1
 
-/* for GEN7_PIPE_CONTROL */
-#define GEN7_PIPE_CONTROL_NOWRITE       (0 << 14)
-#define GEN7_PIPE_CONTROL_WRITE_QWORD   (1 << 14)
-#define GEN7_PIPE_CONTROL_WRITE_DEPTH   (2 << 14)
-#define GEN7_PIPE_CONTROL_WRITE_TIME    (3 << 14)
-#define GEN7_PIPE_CONTROL_DEPTH_STALL   (1 << 13)
-#define GEN7_PIPE_CONTROL_WC_FLUSH      (1 << 12)
-#define GEN7_PIPE_CONTROL_IS_FLUSH      (1 << 11)
-#define GEN7_PIPE_CONTROL_TC_FLUSH      (1 << 10)
-#define GEN7_PIPE_CONTROL_NOTIFY_ENABLE (1 << 8)
-#define GEN7_PIPE_CONTROL_GLOBAL_GTT    (1 << 2)
-#define GEN7_PIPE_CONTROL_LOCAL_PGTT    (0 << 2)
-#define GEN7_PIPE_CONTROL_DEPTH_CACHE_FLUSH	(1 << 0)
-
-/* 3DPRIMITIVE bits */
-#define GEN7_3DPRIMITIVE_VERTEX_SEQUENTIAL (0 << 15)
-#define GEN7_3DPRIMITIVE_VERTEX_RANDOM	  (1 << 15)
-/* Primitive types are in gen7_defines.h */
-#define GEN7_3DPRIMITIVE_TOPOLOGY_SHIFT	  10
-
-#define GEN7_SVG_CTL		       0x7400
-
-#define GEN7_SVG_CTL_GS_BA	       (0 << 8)
-#define GEN7_SVG_CTL_SS_BA	       (1 << 8)
-#define GEN7_SVG_CTL_IO_BA	       (2 << 8)
-#define GEN7_SVG_CTL_GS_AUB	       (3 << 8)
-#define GEN7_SVG_CTL_IO_AUB	       (4 << 8)
-#define GEN7_SVG_CTL_SIP		       (5 << 8)
-
 #define GEN7_SVG_RDATA		       0x7404
 #define GEN7_SVG_WORK_CTL	       0x7408
 
 #define GEN7_VF_CTL		       0x7500
 
-#define GEN7_VF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
-#define GEN7_VF_CTL_SNAPSHOT_MUX_SELECT_THREADID	   (0 << 8)
-#define GEN7_VF_CTL_SNAPSHOT_MUX_SELECT_VF_DEBUG	   (1 << 8)
-#define GEN7_VF_CTL_SNAPSHOT_TYPE_VERTEX_SEQUENCE   (0 << 4)
-#define GEN7_VF_CTL_SNAPSHOT_TYPE_VERTEX_INDEX	   (1 << 4)
-#define GEN7_VF_CTL_SKIP_INITIAL_PRIMITIVES	   (1 << 3)
-#define GEN7_VF_CTL_MAX_PRIMITIVES_LIMIT_ENABLE	   (1 << 2)
-#define GEN7_VF_CTL_VERTEX_RANGE_LIMIT_ENABLE	   (1 << 1)
-#define GEN7_VF_CTL_SNAPSHOT_ENABLE	     	   (1 << 0)
-
-#define GEN7_VF_STRG_VAL		       0x7504
-#define GEN7_VF_STR_VL_OVR	       0x7508
-#define GEN7_VF_VC_OVR		       0x750c
-#define GEN7_VF_STR_PSKIP	       0x7510
-#define GEN7_VF_MAX_PRIM		       0x7514
-#define GEN7_VF_RDATA		       0x7518
-
-#define GEN7_VS_CTL		       0x7600
-#define GEN7_VS_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
-#define GEN7_VS_CTL_SNAPSHOT_MUX_VERTEX_0	   (0 << 8)
-#define GEN7_VS_CTL_SNAPSHOT_MUX_VERTEX_1	   (1 << 8)
-#define GEN7_VS_CTL_SNAPSHOT_MUX_VALID_COUNT	   (2 << 8)
-#define GEN7_VS_CTL_SNAPSHOT_MUX_VS_KERNEL_POINTER  (3 << 8)
-#define GEN7_VS_CTL_SNAPSHOT_ALL_THREADS		   (1 << 2)
-#define GEN7_VS_CTL_THREAD_SNAPSHOT_ENABLE	   (1 << 1)
-#define GEN7_VS_CTL_SNAPSHOT_ENABLE		   (1 << 0)
-
-#define GEN7_VS_STRG_VAL		       0x7604
-#define GEN7_VS_RDATA		       0x7608
-
-#define GEN7_SF_CTL		       0x7b00
-#define GEN7_SF_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
-#define GEN7_SF_CTL_SNAPSHOT_MUX_VERTEX_0_FF_ID	   (0 << 8)
-#define GEN7_SF_CTL_SNAPSHOT_MUX_VERTEX_0_REL_COUNT (1 << 8)
-#define GEN7_SF_CTL_SNAPSHOT_MUX_VERTEX_1_FF_ID	   (2 << 8)
-#define GEN7_SF_CTL_SNAPSHOT_MUX_VERTEX_1_REL_COUNT (3 << 8)
-#define GEN7_SF_CTL_SNAPSHOT_MUX_VERTEX_2_FF_ID	   (4 << 8)
-#define GEN7_SF_CTL_SNAPSHOT_MUX_VERTEX_2_REL_COUNT (5 << 8)
-#define GEN7_SF_CTL_SNAPSHOT_MUX_VERTEX_COUNT	   (6 << 8)
-#define GEN7_SF_CTL_SNAPSHOT_MUX_SF_KERNEL_POINTER  (7 << 8)
-#define GEN7_SF_CTL_MIN_MAX_PRIMITIVE_RANGE_ENABLE  (1 << 4)
-#define GEN7_SF_CTL_DEBUG_CLIP_RECTANGLE_ENABLE	   (1 << 3)
-#define GEN7_SF_CTL_SNAPSHOT_ALL_THREADS		   (1 << 2)
-#define GEN7_SF_CTL_THREAD_SNAPSHOT_ENABLE	   (1 << 1)
-#define GEN7_SF_CTL_SNAPSHOT_ENABLE		   (1 << 0)
-
-#define GEN7_SF_STRG_VAL		       0x7b04
-#define GEN7_SF_RDATA		       0x7b18
-
-#define GEN7_WIZ_CTL		       0x7c00
-#define GEN7_WIZ_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
-#define GEN7_WIZ_CTL_SUBSPAN_INSTANCE_SHIFT	   16
-#define GEN7_WIZ_CTL_SNAPSHOT_MUX_WIZ_KERNEL_POINTER   (0 << 8)
-#define GEN7_WIZ_CTL_SNAPSHOT_MUX_SUBSPAN_INSTANCE     (1 << 8)
-#define GEN7_WIZ_CTL_SNAPSHOT_MUX_PRIMITIVE_SEQUENCE   (2 << 8)
-#define GEN7_WIZ_CTL_SINGLE_SUBSPAN_DISPATCH	      (1 << 6)
-#define GEN7_WIZ_CTL_IGNORE_COLOR_SCOREBOARD_STALLS    (1 << 5)
-#define GEN7_WIZ_CTL_ENABLE_SUBSPAN_INSTANCE_COMPARE   (1 << 4)
-#define GEN7_WIZ_CTL_USE_UPSTREAM_SNAPSHOT_FLAG	      (1 << 3)
-#define GEN7_WIZ_CTL_SNAPSHOT_ALL_THREADS	      (1 << 2)
-#define GEN7_WIZ_CTL_THREAD_SNAPSHOT_ENABLE	      (1 << 1)
-#define GEN7_WIZ_CTL_SNAPSHOT_ENABLE		      (1 << 0)
-
-#define GEN7_WIZ_STRG_VAL			      0x7c04
-#define GEN7_WIZ_RDATA				      0x7c18
-
-#define GEN7_TS_CTL		       0x7e00
-#define GEN7_TS_CTL_SNAPSHOT_COMPLETE		   (1 << 31)
-#define GEN7_TS_CTL_SNAPSHOT_MESSAGE_ERROR	   (0 << 8)
-#define GEN7_TS_CTL_SNAPSHOT_INTERFACE_DESCRIPTOR   (3 << 8)
-#define GEN7_TS_CTL_SNAPSHOT_ALL_CHILD_THREADS	   (1 << 2)
-#define GEN7_TS_CTL_SNAPSHOT_ALL_ROOT_THREADS  	   (1 << 1)
-#define GEN7_TS_CTL_SNAPSHOT_ENABLE		   (1 << 0)
-
-#define GEN7_TS_STRG_VAL		       0x7e04
-#define GEN7_TS_RDATA		       0x7e08
-
-#define GEN7_TD_CTL		       0x8000
-#define GEN7_TD_CTL_MUX_SHIFT	       8
-#define GEN7_TD_CTL_EXTERNAL_HALT_R0_DEBUG_MATCH	   (1 << 7)
-#define GEN7_TD_CTL_FORCE_EXTERNAL_HALT		   (1 << 6)
-#define GEN7_TD_CTL_EXCEPTION_MASK_OVERRIDE	   (1 << 5)
-#define GEN7_TD_CTL_FORCE_THREAD_BREAKPOINT_ENABLE  (1 << 4)
-#define GEN7_TD_CTL_BREAKPOINT_ENABLE		   (1 << 2)
-#define GEN7_TD_CTL2		       0x8004
-#define GEN7_TD_CTL2_ILLEGAL_OPCODE_EXCEPTION_OVERRIDE (1 << 28)
-#define GEN7_TD_CTL2_MASKSTACK_EXCEPTION_OVERRIDE      (1 << 26)
-#define GEN7_TD_CTL2_SOFTWARE_EXCEPTION_OVERRIDE	      (1 << 25)
-#define GEN7_TD_CTL2_ACTIVE_THREAD_LIMIT_SHIFT	      16
-#define GEN7_TD_CTL2_ACTIVE_THREAD_LIMIT_ENABLE	      (1 << 8)
-#define GEN7_TD_CTL2_THREAD_SPAWNER_EXECUTION_MASK_ENABLE (1 << 7)
-#define GEN7_TD_CTL2_WIZ_EXECUTION_MASK_ENABLE	      (1 << 6)
-#define GEN7_TD_CTL2_SF_EXECUTION_MASK_ENABLE	      (1 << 5)
-#define GEN7_TD_CTL2_CLIPPER_EXECUTION_MASK_ENABLE     (1 << 4)
-#define GEN7_TD_CTL2_GS_EXECUTION_MASK_ENABLE	      (1 << 3)
-#define GEN7_TD_CTL2_VS_EXECUTION_MASK_ENABLE	      (1 << 0)
-#define GEN7_TD_VF_VS_EMSK	       0x8008
-#define GEN7_TD_GS_EMSK		       0x800c
-#define GEN7_TD_CLIP_EMSK	       0x8010
-#define GEN7_TD_SF_EMSK		       0x8014
-#define GEN7_TD_WIZ_EMSK		       0x8018
-#define GEN7_TD_0_6_EHTRG_VAL	       0x801c
-#define GEN7_TD_0_7_EHTRG_VAL	       0x8020
-#define GEN7_TD_0_6_EHTRG_MSK           0x8024
-#define GEN7_TD_0_7_EHTRG_MSK	       0x8028
-#define GEN7_TD_RDATA		       0x802c
-#define GEN7_TD_TS_EMSK		       0x8030
-
-#define GEN7_EU_CTL		       0x8800
-#define GEN7_EU_CTL_SELECT_SHIFT	       16
-#define GEN7_EU_CTL_DATA_MUX_SHIFT      8
-#define GEN7_EU_ATT_0		       0x8810
-#define GEN7_EU_ATT_1		       0x8814
-#define GEN7_EU_ATT_DATA_0	       0x8820
-#define GEN7_EU_ATT_DATA_1	       0x8824
-#define GEN7_EU_ATT_CLR_0	       0x8830
-#define GEN7_EU_ATT_CLR_1	       0x8834
-#define GEN7_EU_RDATA		       0x8840
-
-/* 3D state:
- */
-#define _3DOP_3DSTATE_PIPELINED       0x0
-#define _3DOP_3DSTATE_NONPIPELINED    0x1
-#define _3DOP_3DCONTROL               0x2
-#define _3DOP_3DPRIMITIVE             0x3
-
-#define _3DSTATE_PIPELINED_POINTERS       0x00
-#define _3DSTATE_BINDING_TABLE_POINTERS   0x01
-#define _3DSTATE_VERTEX_BUFFERS           0x08
-#define _3DSTATE_VERTEX_ELEMENTS          0x09
-#define _3DSTATE_INDEX_BUFFER             0x0A
-#define _3DSTATE_VF_STATISTICS            0x0B
-#define _3DSTATE_DRAWING_RECTANGLE            0x00
-#define _3DSTATE_CONSTANT_COLOR               0x01
-#define _3DSTATE_SAMPLER_PALETTE_LOAD         0x02
-#define _3DSTATE_CHROMA_KEY                   0x04
-#define _3DSTATE_DEPTH_BUFFER                 0x05
-#define _3DSTATE_POLY_STIPPLE_OFFSET          0x06
-#define _3DSTATE_POLY_STIPPLE_PATTERN         0x07
-#define _3DSTATE_LINE_STIPPLE                 0x08
-#define _3DSTATE_GLOBAL_DEPTH_OFFSET_CLAMP    0x09
-#define _3DCONTROL    0x00
-#define _3DPRIMITIVE  0x00
-
 #define _3DPRIM_POINTLIST         0x01
 #define _3DPRIM_LINELIST          0x02
 #define _3DPRIM_LINESTRIP         0x03
@@ -644,13 +424,13 @@
 #define _3DPRIM_VERTEXBUFFER_ACCESS_SEQUENTIAL 0
 #define _3DPRIM_VERTEXBUFFER_ACCESS_RANDOM     1
 
-#define GEN7_ANISORATIO_2     0 
-#define GEN7_ANISORATIO_4     1 
-#define GEN7_ANISORATIO_6     2 
-#define GEN7_ANISORATIO_8     3 
-#define GEN7_ANISORATIO_10    4 
-#define GEN7_ANISORATIO_12    5 
-#define GEN7_ANISORATIO_14    6 
+#define GEN7_ANISORATIO_2     0
+#define GEN7_ANISORATIO_4     1
+#define GEN7_ANISORATIO_6     2
+#define GEN7_ANISORATIO_8     3
+#define GEN7_ANISORATIO_10    4
+#define GEN7_ANISORATIO_12    5
+#define GEN7_ANISORATIO_14    6
 #define GEN7_ANISORATIO_16    7
 
 #define GEN7_BLENDFACTOR_ONE                 0x1
@@ -749,20 +529,20 @@
 #define GEN7_LOGICOPFUNCTION_COPY             12
 #define GEN7_LOGICOPFUNCTION_OR_REVERSE       13
 #define GEN7_LOGICOPFUNCTION_OR               14
-#define GEN7_LOGICOPFUNCTION_SET              15  
+#define GEN7_LOGICOPFUNCTION_SET              15
 
-#define GEN7_MAPFILTER_NEAREST        0x0 
-#define GEN7_MAPFILTER_LINEAR         0x1 
+#define GEN7_MAPFILTER_NEAREST        0x0
+#define GEN7_MAPFILTER_LINEAR         0x1
 #define GEN7_MAPFILTER_ANISOTROPIC    0x2
 
-#define GEN7_MIPFILTER_NONE        0   
-#define GEN7_MIPFILTER_NEAREST     1   
+#define GEN7_MIPFILTER_NONE        0
+#define GEN7_MIPFILTER_NEAREST     1
 #define GEN7_MIPFILTER_LINEAR      3
 
 #define GEN7_POLYGON_FRONT_FACING     0
 #define GEN7_POLYGON_BACK_FACING      1
 
-#define GEN7_PREFILTER_ALWAYS     0x0 
+#define GEN7_PREFILTER_ALWAYS     0x0
 #define GEN7_PREFILTER_NEVER      0x1
 #define GEN7_PREFILTER_LESS       0x2
 #define GEN7_PREFILTER_EQUAL      0x3
@@ -772,10 +552,10 @@
 #define GEN7_PREFILTER_GEQUAL     0x7
 
 #define GEN7_PROVOKING_VERTEX_0    0
-#define GEN7_PROVOKING_VERTEX_1    1 
+#define GEN7_PROVOKING_VERTEX_1    1
 #define GEN7_PROVOKING_VERTEX_2    2
 
-#define GEN7_RASTRULE_UPPER_LEFT  0    
+#define GEN7_RASTRULE_UPPER_LEFT  0
 #define GEN7_RASTRULE_UPPER_RIGHT 1
 
 #define GEN7_RENDERTARGET_CLAMPRANGE_UNORM    0
@@ -991,7 +771,6 @@
 #define GEN7_VFCOMPONENT_STORE_PID    7
 
 
-
 /* Execution Unit (EU) defines
  */
 
@@ -1134,7 +913,7 @@
 
 #define GEN7_ARF_NULL                  0x00
 #define GEN7_ARF_ADDRESS               0x10
-#define GEN7_ARF_ACCUMULATOR           0x20   
+#define GEN7_ARF_ACCUMULATOR           0x20
 #define GEN7_ARF_FLAG                  0x30
 #define GEN7_ARF_MASK                  0x40
 #define GEN7_ARF_MASK_STACK            0x50
@@ -1149,8 +928,6 @@
 #define GEN7_LMASK   2
 #define GEN7_CMASK   3
 
-
-
 #define GEN7_THREAD_NORMAL     0
 #define GEN7_THREAD_ATOMIC     1
 #define GEN7_THREAD_SWITCH     2


More information about the xorg-commit mailing list