No good reason really, simply that the original functions seemed simpler for the case of in-place swapping since you don't have to pass the dst parameter explicitly, so I figured there was a marginal gain in letting them stay, specially since their implementation is just an inline call to the other version. Do you prefer the other solution?
Iago On Wed, 2014-11-19 at 12:00 -0800, Jason Ekstrand wrote: > Any reason why you added 2 new functions, instead of just altering the > ones we have and updating where they are used? > > > On Tue, Nov 18, 2014 at 1:23 AM, Iago Toral Quiroga > <ito...@igalia.com> wrote: > We have _mesa_swap{2,4} but these do in-place byte-swapping > only. The new > functions receive an extra parameter so we can swap bytes on a > source > input array and store the results in a (possibly different) > destination > array. > > This is useful to implement byte-swapping in pixel uploads, > since in this > case we need to swap bytes on the src data which is owned by > the > application so we can't do an in-place byte swap. > --- > src/mesa/main/image.c | 25 +++++++++++++++++-------- > src/mesa/main/image.h | 10 ++++++++-- > 2 files changed, 25 insertions(+), 10 deletions(-) > > diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c > index 4ea5f04..9ad97c5 100644 > --- a/src/mesa/main/image.c > +++ b/src/mesa/main/image.c > @@ -41,36 +41,45 @@ > > > /** > - * Flip the order of the 2 bytes in each word in the given > array. > + * Flip the order of the 2 bytes in each word in the given > array (src) and > + * store the result in another array (dst). For in-place > byte-swapping this > + * function can be called with the same array for src and > dst. > * > - * \param p array. > + * \param dst the array where byte-swapped data will be > stored. > + * \param src the array with the source data we want to > byte-swap. > * \param n number of words. > */ > void > -_mesa_swap2( GLushort *p, GLuint n ) > +_mesa_swap2_copy( GLushort *dst, GLushort *src, GLuint n ) > { > GLuint i; > for (i = 0; i < n; i++) { > - p[i] = (p[i] >> 8) | ((p[i] << 8) & 0xff00); > + dst[i] = (src[i] >> 8) | ((src[i] << 8) & 0xff00); > } > } > > > > /* > - * Flip the order of the 4 bytes in each word in the given > array. > + * Flip the order of the 4 bytes in each word in the given > array (src) and > + * store the result in another array (dst). For in-place > byte-swapping this > + * function can be called with the same array for src and > dst. > + * > + * \param dst the array where byte-swapped data will be > stored. > + * \param src the array with the source data we want to > byte-swap. > + * \param n number of words. > */ > void > -_mesa_swap4( GLuint *p, GLuint n ) > +_mesa_swap4_copy( GLuint *dst, GLuint *src, GLuint n ) > { > GLuint i, a, b; > for (i = 0; i < n; i++) { > - b = p[i]; > + b = src[i]; > a = (b >> 24) > | ((b >> 8) & 0xff00) > | ((b << 8) & 0xff0000) > | ((b << 24) & 0xff000000); > - p[i] = a; > + dst[i] = a; > } > } > > diff --git a/src/mesa/main/image.h b/src/mesa/main/image.h > index abd84bf..79c6e68 100644 > --- a/src/mesa/main/image.h > +++ b/src/mesa/main/image.h > @@ -33,10 +33,16 @@ struct gl_context; > struct gl_pixelstore_attrib; > > extern void > -_mesa_swap2( GLushort *p, GLuint n ); > +_mesa_swap2_copy( GLushort *dst, GLushort *src, GLuint n ); > > extern void > -_mesa_swap4( GLuint *p, GLuint n ); > +_mesa_swap4_copy( GLuint *dst, GLuint *src, GLuint n ); > + > +static inline void > +_mesa_swap2( GLushort *p, GLuint n ) { _mesa_swap2_copy(p, p, > n); } > + > +static inline void > +_mesa_swap4( GLuint *p, GLuint n ) { _mesa_swap4_copy(p, p, > n); } > > extern GLintptr > _mesa_image_offset( GLuint dimensions, > -- > 1.9.1 > > _______________________________________________ > 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