glamor: Check for composite operations which are equivalent to copies
Increases x11perf -compwinwin500 numbers by a factor of 10 for me with radeonsi. Conditions copied from exaComposite(). Signed-off-by: Michel Dänzer <michel.daenzer@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
4711ebc174
commit
b64108fa30
|
@ -1406,6 +1406,29 @@ glamor_composite_clipped_region(CARD8 op,
|
||||||
DEBUGF("clipped (%d %d) (%d %d) (%d %d) width %d height %d \n",
|
DEBUGF("clipped (%d %d) (%d %d) (%d %d) width %d height %d \n",
|
||||||
x_source, y_source, x_mask, y_mask, x_dest, y_dest, width, height);
|
x_source, y_source, x_mask, y_mask, x_dest, y_dest, width, height);
|
||||||
|
|
||||||
|
/* Is the composite operation equivalent to a copy? */
|
||||||
|
if (!mask && !source->alphaMap && !dest->alphaMap
|
||||||
|
&& source->pDrawable && !source->transform
|
||||||
|
&& ((op == PictOpSrc
|
||||||
|
&& ((source->format == dest->format
|
||||||
|
|| (PICT_FORMAT_COLOR(dest->format)
|
||||||
|
&& PICT_FORMAT_COLOR(source->format)
|
||||||
|
&& dest->format == PICT_FORMAT(PICT_FORMAT_BPP(source->format),
|
||||||
|
PICT_FORMAT_TYPE(source->format),
|
||||||
|
0,
|
||||||
|
PICT_FORMAT_R(source->format),
|
||||||
|
PICT_FORMAT_G(source->format),
|
||||||
|
PICT_FORMAT_B(source->format))))
|
||||||
|
|| (op == PictOpOver
|
||||||
|
&& source->format == dest->format
|
||||||
|
&& !PICT_FORMAT_A(source->format)))))) {
|
||||||
|
glamor_copy(source->pDrawable, dest->pDrawable, NULL,
|
||||||
|
box, nbox, x_source - x_dest,
|
||||||
|
y_source - y_dest, FALSE, FALSE, 0, NULL);
|
||||||
|
ok = TRUE;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
/* XXX is it possible source mask have non-zero drawable.x/y? */
|
/* XXX is it possible source mask have non-zero drawable.x/y? */
|
||||||
if (source
|
if (source
|
||||||
&& ((!source->pDrawable
|
&& ((!source->pDrawable
|
||||||
|
|
Loading…
Reference in New Issue