[PATCH xserver 2/2] glamor: Avoid software fallback for planemasked ZPixmap GetImage
Eric Anholt
eric at anholt.net
Mon Mar 20 17:42:24 UTC 2017
Adam Jackson <ajax at redhat.com> writes:
> Same trick as in fb: just do a normal GetImage and deal with the
> planemask on the CPU if you have to. Since the software fallback hit for
> glamor is pretty brutal, this is a much more impressive win for glamor
> than it was for fb:
>
> 11100.0 87700.0 (7.901) (copy 0xaaaaaaaa) ShmGetImage 10x10 square
> 9840.0 47800.0 (4.858) (copy 0xaaaaaaaa) ShmGetImage 100x100 square
> 1550.0 4240.0 (2.735) (copy 0xaaaaaaaa) ShmGetImage 500x500 square
> 9450.0 78900.0 (8.349) (0xaaaaaaaa) GetImage 10x10 square
> 6910.0 30900.0 (4.472) (0xaaaaaaaa) GetImage 100x100 square
> 431.0 2020.0 (4.687) (0xaaaaaaaa) GetImage 500x500 square
>
> Measured with Xephyr -glamor on Skylake GT3e.
>
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
> glamor/glamor_image.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/glamor/glamor_image.c b/glamor/glamor_image.c
> index 3158749..7e17961 100644
> --- a/glamor/glamor_image.c
> +++ b/glamor/glamor_image.c
> @@ -116,7 +116,7 @@ glamor_get_image_gl(DrawablePtr drawable, int x, int y, int w, int h,
> if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv))
> goto bail;
>
> - if (format != ZPixmap || !glamor_pm_is_solid(drawable->depth, plane_mask))
> + if (format != ZPixmap)
> goto bail;
>
> glamor_get_drawable_deltas(drawable, pixmap, &off_x, &off_y);
> @@ -128,6 +128,16 @@ glamor_get_image_gl(DrawablePtr drawable, int x, int y, int w, int h,
> drawable->x + off_x, drawable->y + off_y,
> -x, -y,
> (uint8_t *) d, byte_stride);
> +
> + if (!glamor_pm_is_solid(drawable->depth, plane_mask)) {
> + FbStip pm = fbReplicatePixel(plane_mask, drawable->bitsPerPixel);
> + FbStip *dst = (void *)d;
> + uint32_t dstStride = byte_stride /= sizeof(FbStip);
I don't think you want the second '=' here. Harmless, but looked weird.
Other than that, r-b.
> +
> + for (int i = 0; i < dstStride * h; i++)
> + dst[i] &= pm;
> + }
> +
> return TRUE;
> bail:
> return FALSE;
> --
> 2.9.3
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: https://lists.x.org/mailman/listinfo/xorg-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <https://lists.x.org/archives/xorg-devel/attachments/20170320/475dd042/attachment.sig>
More information about the xorg-devel
mailing list