[Mesa-dev] [PATCH v2 09/29] mesa: Add _mesa_swap2_copy and _mesa_swap4_copy

Iago Toral itoral at igalia.com
Wed Dec 3 02:53:18 PST 2014


On Mon, 2014-12-01 at 09:18 -0700, Brian Paul wrote:
> On 12/01/2014 04:05 AM, Iago Toral Quiroga 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); }
> 
> I'd prefer to see these functions formatted normally:
> 
> static inline void
> _mesa_swap2(GLushort *p, GLuint n)
> {
>     _mesa_swap2_copy(p, p, n);
> }

Ok, I'll change that.
Thanks.
Iago

> 
> > +
> > +static inline void
> > +_mesa_swap4( GLuint *p, GLuint n ) { _mesa_swap4_copy(p, p, n); }
> >
> >   extern GLintptr
> >   _mesa_image_offset( GLuint dimensions,
> >
> 
> _______________________________________________
> 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