Good idea. Jose
----- Original Message ----- > This lets us use the resource_copy_region() path when blitting from > R8G8B8A8 to R8G8B8x8, for example. > > v2: be smarter when src_format==dst_format > --- > src/gallium/auxiliary/util/u_blit.c | 22 +++++++++++++++++++++- > 1 files changed, 21 insertions(+), 1 deletions(-) > > diff --git a/src/gallium/auxiliary/util/u_blit.c > b/src/gallium/auxiliary/util/u_blit.c > index a10fd17..1279733 100644 > --- a/src/gallium/auxiliary/util/u_blit.c > +++ b/src/gallium/auxiliary/util/u_blit.c > @@ -321,6 +321,26 @@ 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) > +{ > + if (src_format == dst_format) { > + return TRUE; > + } > + else { > + 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 +397,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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev