Commit 15e58b5f authored by Eric Anholt's avatar Eric Anholt Committed by Zhigang Gong

glamor: Split the copy path out into its own function.

parent ad67299f
...@@ -446,6 +446,49 @@ glamor_get_picture_location(PicturePtr picture) ...@@ -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(&region,
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(&region),
REGION_NUM_RECTS(&region),
x_source - x_dest, y_source - y_dest,
FALSE, FALSE, 0, NULL);
REGION_UNINIT(dest->pDrawable->pScreen,
&region);
return TRUE;
}
void void
glamor_composite(CARD8 op, glamor_composite(CARD8 op,
PicturePtr source, PicturePtr source,
...@@ -491,30 +534,11 @@ glamor_composite(CARD8 op, ...@@ -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
(&region,
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(&region),
REGION_NUM_RECTS(&region),
x_source - x_dest, y_source - y_dest,
FALSE, FALSE, 0, NULL);
REGION_UNINIT(dest->pDrawable->pScreen,
&region);
return;
}
}
} }
goto fail; goto fail;
......
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