[Mesa-dev] [PATCH] util: replace format equality test with compatibility test in blit code

Jose Fonseca jfonseca at vmware.com
Tue Feb 28 07:11:30 PST 2012


Looks good. Thanks for using util_format_description.

If cpu usage in u_format becomes an issue in the future I'd suggest obtaining util_format_description only once per format, as currently util_format_description() ends up being called a few times per format.

At any rate, I think that cpu should rarely be a bottleneck on blit functions. And if it is, then we should probably consider adding support for multiple rectangles per call, as opposed of only one.

Jose


----- Original Message -----
> This lets us use the resource_copy_region() path when blitting from
> R8G8B8A8 to R8G8B8x8, for example.
> ---
>  src/gallium/auxiliary/util/u_blit.c |   17 ++++++++++++++++-
>  1 files changed, 16 insertions(+), 1 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/util/u_blit.c
> b/src/gallium/auxiliary/util/u_blit.c
> index a10fd17..8865823 100644
> --- a/src/gallium/auxiliary/util/u_blit.c
> +++ b/src/gallium/auxiliary/util/u_blit.c
> @@ -321,6 +321,21 @@ regions_overlap(int srcX0, int srcY0,
>  
>  
>  /**
> + * Can we blit from src format to dest format with a simple copy?
> + */
> +static boolean
> +formats_compatible(enum pipe_format src_format,
> +                   enum pipe_format dst_format)
> +{
> +   const struct util_format_description *src_desc =
> +      util_format_description(src_format);
> +   const struct util_format_description *dst_desc =
> +      util_format_description(dst_format);
> +   return util_is_format_compatible(src_desc, dst_desc);
> +}
> +
> +
> +/**
>   * Copy pixel block from src surface to dst surface.
>   * Overlapping regions are acceptable.
>   * Flipping and stretching are supported.
> @@ -377,7 +392,7 @@ util_blit_pixels_writemask(struct blit_state
> *ctx,
>      * no overlapping.
>      * Filter mode should not matter since there's no stretching.
>      */
> -   if (dst_format == src_format &&
> +   if (formats_compatible(src_format, dst_format) &&
>         srcX0 < srcX1 &&
>         dstX0 < dstX1 &&
>         srcY0 < srcY1 &&
> --
> 1.7.3.4
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> 


More information about the mesa-dev mailing list