From dbdb8fabfbade3f19fd8af3524468b5e6668bb66 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Tue, 4 Dec 2012 12:37:23 +0000 Subject: [PATCH] sna/gen4: Special case solids through the general vertex emitter Signed-off-by: Chris Wilson --- src/sna/gen4_render.c | 20 ++++++++++++++++++-- src/sna/gen5_render.c | 20 ++++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/sna/gen4_render.c b/src/sna/gen4_render.c index 3ec51137..fb1c742e 100644 --- a/src/sna/gen4_render.c +++ b/src/sna/gen4_render.c @@ -840,7 +840,15 @@ gen4_emit_composite_primitive(struct sna *sna, const float *mask_sf = op->mask.scale; bool has_mask = op->u.gen4.ve_id & 2; - if (is_affine) { + if (op->src.is_solid) { + src_x[0] = 0; + src_y[0] = 0; + src_x[1] = 0; + src_y[1] = 1; + src_x[2] = 1; + src_y[2] = 1; + src_w[0] = src_w[1] = src_w[2] = 1; + } else if (is_affine) { sna_get_transformed_coordinates(r->src.x + op->src.offset[0], r->src.y + op->src.offset[1], op->src.transform, @@ -880,7 +888,15 @@ gen4_emit_composite_primitive(struct sna *sna, } if (has_mask) { - if (is_affine) { + if (op->mask.is_solid) { + mask_x[0] = 0; + mask_y[0] = 0; + mask_x[1] = 0; + mask_y[1] = 1; + mask_x[2] = 1; + mask_y[2] = 1; + mask_w[0] = mask_w[1] = mask_w[2] = 1; + } else if (is_affine) { sna_get_transformed_coordinates(r->mask.x + op->mask.offset[0], r->mask.y + op->mask.offset[1], op->mask.transform, diff --git a/src/sna/gen5_render.c b/src/sna/gen5_render.c index 17c221e4..49542cc8 100644 --- a/src/sna/gen5_render.c +++ b/src/sna/gen5_render.c @@ -834,7 +834,15 @@ gen5_emit_composite_primitive(struct sna *sna, const float *src_sf = op->src.scale; const float *mask_sf = op->mask.scale; - if (is_affine) { + if (op->src.is_solid) { + src_x[0] = 0; + src_y[0] = 0; + src_x[1] = 0; + src_y[1] = 1; + src_x[2] = 1; + src_y[2] = 1; + src_w[0] = src_w[1] = src_w[2] = 1; + } else if (is_affine) { sna_get_transformed_coordinates(r->src.x + op->src.offset[0], r->src.y + op->src.offset[1], op->src.transform, @@ -874,7 +882,15 @@ gen5_emit_composite_primitive(struct sna *sna, } if (op->mask.bo) { - if (is_affine) { + if (op->mask.is_solid) { + mask_x[0] = 0; + mask_y[0] = 0; + mask_x[1] = 0; + mask_y[1] = 1; + mask_x[2] = 1; + mask_y[2] = 1; + mask_w[0] = mask_w[1] = mask_w[2] = 1; + } else if (is_affine) { sna_get_transformed_coordinates(r->mask.x + op->mask.offset[0], r->mask.y + op->mask.offset[1], op->mask.transform,