summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/main/image.c25
-rw-r--r--src/mesa/main/image.h17
2 files changed, 32 insertions, 10 deletions
diff --git a/src/mesa/main/image.c b/src/mesa/main/image.c
index 4ea5f04c986..9ad97c56e40 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 abd84bf2f87..44863cc5927 100644
--- a/src/mesa/main/image.h
+++ b/src/mesa/main/image.h
@@ -28,15 +28,28 @@
#include "glheader.h"
+#include "compiler.h"
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,