[cairo] [patch] gl: create BGRA texture and avoid conversion
Chris Wilson
chris at chris-wilson.co.uk
Fri Feb 1 07:14:29 PST 2013
On Wed, Jan 30, 2013 at 07:48:00PM +0000, Henry (Yu) Song - SISA wrote:
> From 73287550e6eeb68d6c9f08767d1dc4ad6d4f6905 Mon Sep 17 00:00:00 2001
> From: Henry Song <henry.song at samsung.com>
> Date: Wed, 30 Jan 2013 10:43:56 -0800
> Subject: [PATCH] gl: create BGRA texture if driver supports, and consolidate
> conversion from BGRA to RGBA into one function
>
> If GLES2 driver supports GL_EXT_read_bgra, we can create a texture with
> BGRA format. The benefit of this is cairo does not need to do conversion
> when upload BGRA image which is the default format used by cairo. This
> does not affect GL drivers, where we always create RGBA textures.
>
> There are two map_to_image() function. One is public cairo_surface_map_to_image()
> where it does conversion from CAIRO_FORMAT_INVALID TO CAIRO_FORMAT_ARGB32, the
> second one is private _cairo_surface_map_to_image () where it does not do
> conversion. This can be confusion for any compositor implementation. This patch
> centralizes conversion of BGRA to RGBA to one single function. So regardless
> which functions to call, the conversion will always be done when unmap image
>
>
> ---
> src/cairo-gl-device.c | 28 ++++-----
> src/cairo-gl-private.h | 4 +-
> src/cairo-gl-surface.c | 126 +++++++++++++++++++++++++++++++++------
> src/cairo-gl-traps-compositor.c | 30 ----------
> 4 files changed, 120 insertions(+), 68 deletions(-)
>
> diff --git a/src/cairo-gl-device.c b/src/cairo-gl-device.c
> index 22297b3..2086c8f 100644
> --- a/src/cairo-gl-device.c
> +++ b/src/cairo-gl-device.c
> +static cairo_image_surface_t *
> +_cairo_gl_convert_image (cairo_gl_context_t *ctx,
> + cairo_gl_surface_t *dst,
> + cairo_image_surface_t *src,
> + int src_x, int src_y,
> + int width, int height)
I would replace the body of this function with a call to
_cairo_image_surface_coerce_to_format(). Actually, I'd rewrite that
function as _cairo_image_surface_coerce_to_pixman_format() (and make the
existing one a wrapper to it).
Other than a request to break the checks up into separate if()
statements for clarity, the refactoring looks sane.
-Chris
--
Chris Wilson, Intel Open Source Technology Centre
More information about the cairo
mailing list