sna/gen3: Use inline transform+scale function

So as to avoid reading back from the vbo (which may be wc mapped).

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
This commit is contained in:
Chris Wilson 2012-12-28 19:23:36 +00:00
parent f0fca544b0
commit dba83dacd2
1 changed files with 31 additions and 41 deletions

View File

@ -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