mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2026-05-09 03:48:03 +02:00
drm/i915: Handle clip/combine coords for spans.
This commit is contained in:
parent
e1f0c2e73f
commit
8e702044b3
1 changed files with 43 additions and 28 deletions
|
|
@ -280,8 +280,13 @@ i915_span_generic (i915_spans_t *spans,
|
|||
*vertices++ = alpha;
|
||||
if (spans->need_clip_surface) {
|
||||
s = x1, t = y1;
|
||||
cairo_matrix_transform_point (&spans->shader.source.base.matrix, &s, &t);
|
||||
*vertices++ = s; *vertices++ = t;
|
||||
cairo_matrix_transform_point (&spans->shader.clip.base.matrix, &s, &t);
|
||||
*vertices++ = texcoord_2d_16 (s, t);
|
||||
}
|
||||
if (spans->shader.need_combine) {
|
||||
s = x1, t = y1;
|
||||
cairo_matrix_transform_point (&spans->shader.dst.base.matrix, &s, &t);
|
||||
*vertices++ = texcoord_2d_16 (s, t);
|
||||
}
|
||||
|
||||
/* bottom left */
|
||||
|
|
@ -305,8 +310,13 @@ i915_span_generic (i915_spans_t *spans,
|
|||
*vertices++ = alpha;
|
||||
if (spans->need_clip_surface) {
|
||||
s = x0, t = y1;
|
||||
cairo_matrix_transform_point (&spans->shader.source.base.matrix, &s, &t);
|
||||
*vertices++ = s; *vertices++ = t;
|
||||
cairo_matrix_transform_point (&spans->shader.clip.base.matrix, &s, &t);
|
||||
*vertices++ = texcoord_2d_16 (s, t);
|
||||
}
|
||||
if (spans->shader.need_combine) {
|
||||
s = x0, t = y1;
|
||||
cairo_matrix_transform_point (&spans->shader.dst.base.matrix, &s, &t);
|
||||
*vertices++ = texcoord_2d_16 (s, t);
|
||||
}
|
||||
|
||||
/* top left */
|
||||
|
|
@ -330,8 +340,13 @@ i915_span_generic (i915_spans_t *spans,
|
|||
*vertices++ = alpha;
|
||||
if (spans->need_clip_surface) {
|
||||
s = x0, t = y0;
|
||||
cairo_matrix_transform_point (&spans->shader.source.base.matrix, &s, &t);
|
||||
*vertices++ = s; *vertices++ = t;
|
||||
cairo_matrix_transform_point (&spans->shader.clip.base.matrix, &s, &t);
|
||||
*vertices++ = texcoord_2d_16 (s, t);
|
||||
}
|
||||
if (spans->shader.need_combine) {
|
||||
s = x0, t = y0;
|
||||
cairo_matrix_transform_point (&spans->shader.dst.base.matrix, &s, &t);
|
||||
*vertices++ = texcoord_2d_16 (s, t);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -543,28 +558,6 @@ i915_spans_init (i915_spans_t *spans,
|
|||
if (unlikely (status))
|
||||
return status;
|
||||
|
||||
if (! spans->need_clip_surface) {
|
||||
switch (spans->shader.source.type.vertex) {
|
||||
case VS_CONSTANT:
|
||||
spans->span = i915_span_constant;
|
||||
break;
|
||||
case VS_LINEAR:
|
||||
spans->span = i915_span_linear;
|
||||
break;
|
||||
case VS_TEXTURE:
|
||||
spans->span = i915_span_texture;
|
||||
break;
|
||||
case VS_TEXTURE_16:
|
||||
spans->span = i915_span_texture16;
|
||||
break;
|
||||
default:
|
||||
spans->span = i915_span_generic;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
spans->span = i915_span_generic;
|
||||
}
|
||||
|
||||
spans->rectangle_size = 3 * (2 + i915_shader_num_texcoords (&spans->shader));
|
||||
return CAIRO_STATUS_SUCCESS;
|
||||
}
|
||||
|
|
@ -626,6 +619,28 @@ i915_clip_and_composite_spans (i915_surface_t *dst,
|
|||
if (unlikely (status))
|
||||
goto CLEANUP_DEVICE;
|
||||
|
||||
if (!spans.shader.need_combine && ! spans.need_clip_surface) {
|
||||
switch (spans.shader.source.type.vertex) {
|
||||
case VS_CONSTANT:
|
||||
spans.span = i915_span_constant;
|
||||
break;
|
||||
case VS_LINEAR:
|
||||
spans.span = i915_span_linear;
|
||||
break;
|
||||
case VS_TEXTURE:
|
||||
spans.span = i915_span_texture;
|
||||
break;
|
||||
case VS_TEXTURE_16:
|
||||
spans.span = i915_span_texture16;
|
||||
break;
|
||||
default:
|
||||
spans.span = i915_span_generic;
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
spans.span = i915_span_generic;
|
||||
}
|
||||
|
||||
status = draw_func (draw_closure, &spans.renderer, spans.extents);
|
||||
if (spans.clip_region != NULL && status == CAIRO_STATUS_SUCCESS) {
|
||||
intel_bo_unmap (spans.tail->bo);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue