glamor: Split the copy path out into its own function.
This commit is contained in:
parent
ad67299fa2
commit
15e58b5ffb
|
@ -446,6 +446,49 @@ glamor_get_picture_location(PicturePtr picture)
|
||||||
return glamor_get_drawable_location(picture->pDrawable);
|
return glamor_get_drawable_location(picture->pDrawable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
glamor_composite_copy(CARD8 op,
|
||||||
|
PicturePtr source,
|
||||||
|
PicturePtr dest,
|
||||||
|
INT16 x_source,
|
||||||
|
INT16 y_source,
|
||||||
|
INT16 x_dest,
|
||||||
|
INT16 y_dest,
|
||||||
|
CARD16 width,
|
||||||
|
CARD16 height)
|
||||||
|
{
|
||||||
|
RegionRec region;
|
||||||
|
|
||||||
|
if (!compatible_formats(op, dest, source))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (source->repeat || source->transform)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
x_dest += dest->pDrawable->x;
|
||||||
|
y_dest += dest->pDrawable->y;
|
||||||
|
x_source += source->pDrawable->x;
|
||||||
|
y_source += source->pDrawable->y;
|
||||||
|
|
||||||
|
if (!miComputeCompositeRegion(®ion,
|
||||||
|
source, NULL, dest,
|
||||||
|
x_source, y_source,
|
||||||
|
0, 0,
|
||||||
|
x_dest, y_dest,
|
||||||
|
width, height))
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
glamor_copy_n_to_n(source->pDrawable,
|
||||||
|
dest->pDrawable, NULL,
|
||||||
|
REGION_RECTS(®ion),
|
||||||
|
REGION_NUM_RECTS(®ion),
|
||||||
|
x_source - x_dest, y_source - y_dest,
|
||||||
|
FALSE, FALSE, 0, NULL);
|
||||||
|
REGION_UNINIT(dest->pDrawable->pScreen,
|
||||||
|
®ion);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
glamor_composite(CARD8 op,
|
glamor_composite(CARD8 op,
|
||||||
PicturePtr source,
|
PicturePtr source,
|
||||||
|
@ -491,30 +534,11 @@ glamor_composite(CARD8 op,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!mask) {
|
if (!mask) {
|
||||||
if (compatible_formats (op, dest, source)) {
|
if (glamor_composite_copy(op, source, dest,
|
||||||
if (!source->repeat && !source->transform) {
|
x_source, y_source,
|
||||||
x_dest += dest->pDrawable->x;
|
x_dest, y_dest,
|
||||||
y_dest += dest->pDrawable->y;
|
width, height))
|
||||||
x_source += source->pDrawable->x;
|
return;
|
||||||
y_source += source->pDrawable->y;
|
|
||||||
|
|
||||||
if (!miComputeCompositeRegion
|
|
||||||
(®ion,
|
|
||||||
source, NULL, dest,
|
|
||||||
x_source, y_source, 0, 0, x_dest, y_dest, width, height))
|
|
||||||
return;
|
|
||||||
|
|
||||||
glamor_copy_n_to_n(source->pDrawable,
|
|
||||||
dest->pDrawable, NULL,
|
|
||||||
REGION_RECTS(®ion),
|
|
||||||
REGION_NUM_RECTS(®ion),
|
|
||||||
x_source - x_dest, y_source - y_dest,
|
|
||||||
FALSE, FALSE, 0, NULL);
|
|
||||||
REGION_UNINIT(dest->pDrawable->pScreen,
|
|
||||||
®ion);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
Loading…
Reference in New Issue