Commit 97efbd25 authored by Chris Wilson's avatar Chris Wilson 🤔 Committed by Eric Anholt

Use CLAMP_TO_BORDER in copy_n_to_n so we can sample outside of the source

In order to reduce a composite operation to a source, we need to provide
Render semantics for the pixel values of samples outside of the source
pixmap, i.e. they need to be rgba(0, 0, 0, 0). This is provided by using
the CLAMP_TO_BORDER repeat mode, but only if the texture has an alpha
channel.
Signed-off-by: Chris Wilson's avatarChris Wilson <chris@chris-wilson.co.uk>
Reviewed-by: default avatarZhigang Gong <zhigang.gong@linux.intel.com>
parent 864153bb
......@@ -226,6 +226,12 @@ glamor_copy_n_to_n_textured(DrawablePtr src,
dispatch->glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
dispatch->glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_WRAP_S,
GL_CLAMP_TO_BORDER);
dispatch->glTexParameteri(GL_TEXTURE_2D,
GL_TEXTURE_WRAP_T,
GL_CLAMP_TO_BORDER);
dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2,
GL_FLOAT, GL_FALSE,
......
......@@ -622,9 +622,10 @@ glamor_composite_with_copy(CARD8 op,
x_source, y_source,
0, 0, x_dest, y_dest, width, height))
return TRUE;
/* Fallback if we sample outside the source so that we swizzle the
* clear color appropriately. If the source has an alpha channel,
* we could rely on CLAMP_TO_BORDER working as required...
if (PICT_FORMAT_A(source->format) == 0) {
/* Fallback if we sample outside the source so that we
* swizzle the correct clear color for out-of-bounds texels.
*/
if (region.extents.x1 + x_source - x_dest < 0)
goto cleanup_region;
......@@ -635,6 +636,7 @@ glamor_composite_with_copy(CARD8 op,
goto cleanup_region;
if (region.extents.y2 + y_source - y_dest > source->pDrawable->height)
goto cleanup_region;
}
ret = glamor_copy_n_to_n_nf(source->pDrawable,
dest->pDrawable, NULL,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment