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