diff --git a/src/sna/gen3_render.c b/src/sna/gen3_render.c index 2c79beb0..03b4cd83 100644 --- a/src/sna/gen3_render.c +++ b/src/sna/gen3_render.c @@ -553,29 +553,27 @@ gen3_emit_composite_primitive_affine_source(struct sna *sna, int16_t dst_y = r->dst.y + op->dst.y; int src_x = r->src.x + (int)op->src.offset[0]; int src_y = r->src.y + (int)op->src.offset[1]; - float sx, sy; + float *v; - _sna_get_transformed_coordinates(src_x + r->width, src_y + r->height, - transform, - &sx, &sy); + v = sna->render.vertices + sna->render.vertex_used; + sna->render.vertex_used += 12; - gen3_emit_composite_dstcoord(sna, dst_x + r->width, dst_y + r->height); - OUT_VERTEX(sx * op->src.scale[0]); - OUT_VERTEX(sy * op->src.scale[1]); + v[0] = dst_x + r->width; + v[5] = v[1] = dst_y + r->height; + v[8] = v[4] = dst_x; + v[9] = dst_y; - _sna_get_transformed_coordinates(src_x, src_y + r->height, - transform, - &sx, &sy); - gen3_emit_composite_dstcoord(sna, dst_x, dst_y + r->height); - OUT_VERTEX(sx * op->src.scale[0]); - OUT_VERTEX(sy * op->src.scale[1]); + _sna_get_transformed_scaled(src_x + r->width, src_y + r->height, + transform, op->src.scale, + &v[2], &v[3]); - _sna_get_transformed_coordinates(src_x, src_y, - transform, - &sx, &sy); - gen3_emit_composite_dstcoord(sna, dst_x, dst_y); - OUT_VERTEX(sx * op->src.scale[0]); - OUT_VERTEX(sy * op->src.scale[1]); + _sna_get_transformed_scaled(src_x, src_y + r->height, + transform, op->src.scale, + &v[6], &v[7]); + + _sna_get_transformed_scaled(src_x, src_y, + transform, op->src.scale, + &v[10], &v[11]); } fastcall static void @@ -3158,7 +3156,7 @@ gen3_emit_composite_spans_primitive_affine_source(struct sna *sna, float opacity) { PictTransform *transform = op->base.src.transform; - float x, y, *v; + float *v; v = sna->render.vertices + sna->render.vertex_used; sna->render.vertex_used += 15; @@ -3167,30 +3165,22 @@ gen3_emit_composite_spans_primitive_affine_source(struct sna *sna, v[6] = v[1] = op->base.dst.y + box->y2; v[10] = v[5] = op->base.dst.x + box->x1; v[11] = op->base.dst.y + box->y1; - v[4] = opacity; - v[9] = opacity; - v[14] = opacity; + v[14] = v[9] = v[4] = opacity; - _sna_get_transformed_coordinates((int)op->base.src.offset[0] + box->x2, - (int)op->base.src.offset[1] + box->y2, - transform, - &x, &y); - v[2] = x * op->base.src.scale[0]; - v[3] = y * op->base.src.scale[1]; + _sna_get_transformed_scaled((int)op->base.src.offset[0] + box->x2, + (int)op->base.src.offset[1] + box->y2, + transform, op->base.src.scale, + &v[2], &v[3]); - _sna_get_transformed_coordinates((int)op->base.src.offset[0] + box->x1, - (int)op->base.src.offset[1] + box->y2, - transform, - &x, &y); - v[7] = x * op->base.src.scale[0]; - v[8] = y * op->base.src.scale[1]; + _sna_get_transformed_scaled((int)op->base.src.offset[0] + box->x1, + (int)op->base.src.offset[1] + box->y2, + transform, op->base.src.scale, + &v[7], &v[8]); - _sna_get_transformed_coordinates((int)op->base.src.offset[0] + box->x1, - (int)op->base.src.offset[1] + box->y1, - transform, - &x, &y); - v[12] = x * op->base.src.scale[0]; - v[13] = y * op->base.src.scale[1]; + _sna_get_transformed_scaled((int)op->base.src.offset[0] + box->x1, + (int)op->base.src.offset[1] + box->y1, + transform, op->base.src.scale, + &v[12], &v[13]); } fastcall static void