Re: [Mesa-dev] [PATCH] format_unpack: add 8/16 rgba/rgb types.

2011-12-21 Thread Anuj Phogat
On 11/27/2011 12:54 PM, Dave Airlie wrote:
 From: Dave Airlie airl...@redhat.com

 fixing these makes piglit fbo-integer pass on softpipe.

 Signed-off-by: Dave Airlie airl...@redhat.com
 ---
  src/mesa/main/format_unpack.c |  135 
 +
  1 files changed, 135 insertions(+), 0 deletions(-)

 diff --git a/src/mesa/main/format_unpack.c b/src/mesa/main/format_unpack.c
 index 2d2e6a8..a6f0ad0 100644
 --- a/src/mesa/main/format_unpack.c
 +++ b/src/mesa/main/format_unpack.c
 @@ -1572,6 +1572,58 @@ unpack_int_rgba_RGBA_UINT32(const GLuint *src, GLuint 
 dst[][4], GLuint n)
  }
  
  static void
 +unpack_int_rgba_RGBA_UINT8(const GLubyte *src, GLuint dst[][4], GLuint n)
 +{
 +   unsigned int i;
 +
 +   for (i = 0; i  n; i++) {
 +  dst[i][0] = src[i * 4 + 0];
 +  dst[i][1] = src[i * 4 + 1];
 +  dst[i][2] = src[i * 4 + 2];
 +  dst[i][3] = src[i * 4 + 3];
 +   }
 +}
 +
 +static void
 +unpack_int_rgba_RGBA_INT8(const GLbyte *src, GLuint dst[][4], GLuint n)
 +{
 +   unsigned int i;
 +
 +   for (i = 0; i  n; i++) {
 +  dst[i][0] = src[i * 4 + 0];
 +  dst[i][1] = src[i * 4 + 1];
 +  dst[i][2] = src[i * 4 + 2];
 +  dst[i][3] = src[i * 4 + 3];
 +   }
 +}
 +
 +static void
 +unpack_int_rgba_RGBA_UINT16(const GLushort *src, GLuint dst[][4], GLuint n)
 +{
 +   unsigned int i;
 +
 +   for (i = 0; i  n; i++) {
 +  dst[i][0] = src[i * 4 + 0];
 +  dst[i][1] = src[i * 4 + 1];
 +  dst[i][2] = src[i * 4 + 2];
 +  dst[i][3] = src[i * 4 + 3];
 +   }
 +}
 +
 +static void
 +unpack_int_rgba_RGBA_INT16(const GLshort *src, GLuint dst[][4], GLuint n)
 +{
 +   unsigned int i;
 +
 +   for (i = 0; i  n; i++) {
 +  dst[i][0] = src[i * 4 + 0];
 +  dst[i][1] = src[i * 4 + 1];
 +  dst[i][2] = src[i * 4 + 2];
 +  dst[i][3] = src[i * 4 + 3];
 +   }
 +}
 +
 +static void
  unpack_int_rgba_RGB_UINT32(const GLuint *src, GLuint dst[][4], GLuint n)
  {
 unsigned int i;
 @@ -1585,6 +1637,59 @@ unpack_int_rgba_RGB_UINT32(const GLuint *src, GLuint 
 dst[][4], GLuint n)
  }
  
  static void
 +unpack_int_rgba_RGB_UINT16(const GLushort *src, GLuint dst[][4], GLuint n)
 +{
 +   unsigned int i;
 +
 +   for (i = 0; i  n; i++) {
 +  dst[i][0] = src[i * 3 + 0];
 +  dst[i][1] = src[i * 3 + 1];
 +  dst[i][2] = src[i * 3 + 2];
 +  dst[i][3] = 1;
 +   }
 +}
 +
 +static void
 +unpack_int_rgba_RGB_INT16(const GLshort *src, GLuint dst[][4], GLuint n)
 +{
 +   unsigned int i;
 +
 +   for (i = 0; i  n; i++) {
 +  dst[i][0] = src[i * 3 + 0];
 +  dst[i][1] = src[i * 3 + 1];
 +  dst[i][2] = src[i * 3 + 2];
 +  dst[i][3] = 1;
 +   }
 +}
 +
 +static void
 +unpack_int_rgba_RGB_UINT8(const GLubyte *src, GLuint dst[][4], GLuint n)
 +{
 +   unsigned int i;
 +
 +   for (i = 0; i  n; i++) {
 +  dst[i][0] = src[i * 3 + 0];
 +  dst[i][1] = src[i * 3 + 1];
 +  dst[i][2] = src[i * 3 + 2];
 +  dst[i][3] = 1;
 +   }
 +}
 +
 +
 +static void
 +unpack_int_rgba_RGB_INT8(const GLbyte *src, GLuint dst[][4], GLuint n)
 +{
 +   unsigned int i;
 +
 +   for (i = 0; i  n; i++) {
 +  dst[i][0] = src[i * 3 + 0];
 +  dst[i][1] = src[i * 3 + 1];
 +  dst[i][2] = src[i * 3 + 2];
 +  dst[i][3] = 1;
 +   }
 +}
 +
 +static void
  unpack_int_rgba_RG_UINT32(const GLuint *src, GLuint dst[][4], GLuint n)
  {
 unsigned int i;
 @@ -1668,10 +1773,40 @@ _mesa_unpack_int_rgba_row(gl_format format, GLuint n,
 case MESA_FORMAT_RGBA_INT32:
unpack_int_rgba_RGBA_UINT32(src, dst, n);
break;
 +
 +   case MESA_FORMAT_RGBA_UINT8:
 +  unpack_int_rgba_RGBA_UINT8(src, dst, n);
 +  break;
 +   case MESA_FORMAT_RGBA_INT8:
 +  unpack_int_rgba_RGBA_INT8(src, dst, n);
 +  break;
 +
 +   case MESA_FORMAT_RGBA_UINT16:
 +  unpack_int_rgba_RGBA_UINT16(src, dst, n);
 +  break;
 +   case MESA_FORMAT_RGBA_INT16:
 +  unpack_int_rgba_RGBA_INT16(src, dst, n);
 +  break;
 +
 case MESA_FORMAT_RGB_UINT32:
 case MESA_FORMAT_RGB_INT32:
unpack_int_rgba_RGB_UINT32(src, dst, n);
break;
 +
 +   case MESA_FORMAT_RGB_UINT8:
 +  unpack_int_rgba_RGB_UINT8(src, dst, n);
 +  break;
 +   case MESA_FORMAT_RGB_INT8:
 +  unpack_int_rgba_RGB_INT8(src, dst, n);
 +  break;
 +
 +   case MESA_FORMAT_RGB_UINT16:
 +  unpack_int_rgba_RGB_UINT16(src, dst, n);
 +  break;
 +   case MESA_FORMAT_RGB_INT16:
 +  unpack_int_rgba_RGB_INT16(src, dst, n);
 +  break;
 +
 case MESA_FORMAT_RG_UINT32:
 case MESA_FORMAT_RG_INT32:
unpack_int_rgba_RG_UINT32(src, dst, n);
Dave, I used this patch while developing a piglit test case to verify
functionality of glClearBuffer() on mixed format color buffers. Test is
getting
expected color values for 8/16 bit rgba types.
Are you planning to push this patch?

Thanks
Anuj
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH] format_unpack: add 8/16 rgba/rgb types.

2011-11-27 Thread Dave Airlie
From: Dave Airlie airl...@redhat.com

fixing these makes piglit fbo-integer pass on softpipe.

Signed-off-by: Dave Airlie airl...@redhat.com
---
 src/mesa/main/format_unpack.c |  135 +
 1 files changed, 135 insertions(+), 0 deletions(-)

diff --git a/src/mesa/main/format_unpack.c b/src/mesa/main/format_unpack.c
index 2d2e6a8..a6f0ad0 100644
--- a/src/mesa/main/format_unpack.c
+++ b/src/mesa/main/format_unpack.c
@@ -1572,6 +1572,58 @@ unpack_int_rgba_RGBA_UINT32(const GLuint *src, GLuint 
dst[][4], GLuint n)
 }
 
 static void
+unpack_int_rgba_RGBA_UINT8(const GLubyte *src, GLuint dst[][4], GLuint n)
+{
+   unsigned int i;
+
+   for (i = 0; i  n; i++) {
+  dst[i][0] = src[i * 4 + 0];
+  dst[i][1] = src[i * 4 + 1];
+  dst[i][2] = src[i * 4 + 2];
+  dst[i][3] = src[i * 4 + 3];
+   }
+}
+
+static void
+unpack_int_rgba_RGBA_INT8(const GLbyte *src, GLuint dst[][4], GLuint n)
+{
+   unsigned int i;
+
+   for (i = 0; i  n; i++) {
+  dst[i][0] = src[i * 4 + 0];
+  dst[i][1] = src[i * 4 + 1];
+  dst[i][2] = src[i * 4 + 2];
+  dst[i][3] = src[i * 4 + 3];
+   }
+}
+
+static void
+unpack_int_rgba_RGBA_UINT16(const GLushort *src, GLuint dst[][4], GLuint n)
+{
+   unsigned int i;
+
+   for (i = 0; i  n; i++) {
+  dst[i][0] = src[i * 4 + 0];
+  dst[i][1] = src[i * 4 + 1];
+  dst[i][2] = src[i * 4 + 2];
+  dst[i][3] = src[i * 4 + 3];
+   }
+}
+
+static void
+unpack_int_rgba_RGBA_INT16(const GLshort *src, GLuint dst[][4], GLuint n)
+{
+   unsigned int i;
+
+   for (i = 0; i  n; i++) {
+  dst[i][0] = src[i * 4 + 0];
+  dst[i][1] = src[i * 4 + 1];
+  dst[i][2] = src[i * 4 + 2];
+  dst[i][3] = src[i * 4 + 3];
+   }
+}
+
+static void
 unpack_int_rgba_RGB_UINT32(const GLuint *src, GLuint dst[][4], GLuint n)
 {
unsigned int i;
@@ -1585,6 +1637,59 @@ unpack_int_rgba_RGB_UINT32(const GLuint *src, GLuint 
dst[][4], GLuint n)
 }
 
 static void
+unpack_int_rgba_RGB_UINT16(const GLushort *src, GLuint dst[][4], GLuint n)
+{
+   unsigned int i;
+
+   for (i = 0; i  n; i++) {
+  dst[i][0] = src[i * 3 + 0];
+  dst[i][1] = src[i * 3 + 1];
+  dst[i][2] = src[i * 3 + 2];
+  dst[i][3] = 1;
+   }
+}
+
+static void
+unpack_int_rgba_RGB_INT16(const GLshort *src, GLuint dst[][4], GLuint n)
+{
+   unsigned int i;
+
+   for (i = 0; i  n; i++) {
+  dst[i][0] = src[i * 3 + 0];
+  dst[i][1] = src[i * 3 + 1];
+  dst[i][2] = src[i * 3 + 2];
+  dst[i][3] = 1;
+   }
+}
+
+static void
+unpack_int_rgba_RGB_UINT8(const GLubyte *src, GLuint dst[][4], GLuint n)
+{
+   unsigned int i;
+
+   for (i = 0; i  n; i++) {
+  dst[i][0] = src[i * 3 + 0];
+  dst[i][1] = src[i * 3 + 1];
+  dst[i][2] = src[i * 3 + 2];
+  dst[i][3] = 1;
+   }
+}
+
+
+static void
+unpack_int_rgba_RGB_INT8(const GLbyte *src, GLuint dst[][4], GLuint n)
+{
+   unsigned int i;
+
+   for (i = 0; i  n; i++) {
+  dst[i][0] = src[i * 3 + 0];
+  dst[i][1] = src[i * 3 + 1];
+  dst[i][2] = src[i * 3 + 2];
+  dst[i][3] = 1;
+   }
+}
+
+static void
 unpack_int_rgba_RG_UINT32(const GLuint *src, GLuint dst[][4], GLuint n)
 {
unsigned int i;
@@ -1668,10 +1773,40 @@ _mesa_unpack_int_rgba_row(gl_format format, GLuint n,
case MESA_FORMAT_RGBA_INT32:
   unpack_int_rgba_RGBA_UINT32(src, dst, n);
   break;
+
+   case MESA_FORMAT_RGBA_UINT8:
+  unpack_int_rgba_RGBA_UINT8(src, dst, n);
+  break;
+   case MESA_FORMAT_RGBA_INT8:
+  unpack_int_rgba_RGBA_INT8(src, dst, n);
+  break;
+
+   case MESA_FORMAT_RGBA_UINT16:
+  unpack_int_rgba_RGBA_UINT16(src, dst, n);
+  break;
+   case MESA_FORMAT_RGBA_INT16:
+  unpack_int_rgba_RGBA_INT16(src, dst, n);
+  break;
+
case MESA_FORMAT_RGB_UINT32:
case MESA_FORMAT_RGB_INT32:
   unpack_int_rgba_RGB_UINT32(src, dst, n);
   break;
+
+   case MESA_FORMAT_RGB_UINT8:
+  unpack_int_rgba_RGB_UINT8(src, dst, n);
+  break;
+   case MESA_FORMAT_RGB_INT8:
+  unpack_int_rgba_RGB_INT8(src, dst, n);
+  break;
+
+   case MESA_FORMAT_RGB_UINT16:
+  unpack_int_rgba_RGB_UINT16(src, dst, n);
+  break;
+   case MESA_FORMAT_RGB_INT16:
+  unpack_int_rgba_RGB_INT16(src, dst, n);
+  break;
+
case MESA_FORMAT_RG_UINT32:
case MESA_FORMAT_RG_INT32:
   unpack_int_rgba_RG_UINT32(src, dst, n);
-- 
1.7.7.3

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] format_unpack: add 8/16 rgba/rgb types.

2011-11-27 Thread Eric Anholt
On Sun, 27 Nov 2011 20:54:34 +, Dave Airlie airl...@gmail.com wrote:
 From: Dave Airlie airl...@redhat.com
 
 fixing these makes piglit fbo-integer pass on softpipe.

I didn't do these because I wasn't sure how clamping and sign extension
were supposed to work in the pack path.  The specs have text on it, but
I couldn't make clear sense of it.  Do you have a solid idea, and if so
could we get a little bit of explanation in the switch statement maybe?

 +static void
  unpack_int_rgba_RG_UINT32(const GLuint *src, GLuint dst[][4], GLuint n)
  {
 unsigned int i;
 @@ -1668,10 +1773,40 @@ _mesa_unpack_int_rgba_row(gl_format format, GLuint n,
 case MESA_FORMAT_RGBA_INT32:
unpack_int_rgba_RGBA_UINT32(src, dst, n);
break;
 +
 +   case MESA_FORMAT_RGBA_UINT8:
 +  unpack_int_rgba_RGBA_UINT8(src, dst, n);
 +  break;
 +   case MESA_FORMAT_RGBA_INT8:
 +  unpack_int_rgba_RGBA_INT8(src, dst, n);
 +  break;
 +
 +   case MESA_FORMAT_RGBA_UINT16:
 +  unpack_int_rgba_RGBA_UINT16(src, dst, n);
 +  break;
 +   case MESA_FORMAT_RGBA_INT16:
 +  unpack_int_rgba_RGBA_INT16(src, dst, n);
 +  break;
 +

Having the ordering of cases be 32, 8, 16 looks odd.  Let's flip it
around to either 8, 16, 32 or 32, 16, 8.

 +   case MESA_FORMAT_RGB_UINT8:
 +  unpack_int_rgba_RGB_UINT8(src, dst, n);
 +  break;
 +   case MESA_FORMAT_RGB_INT8:
 +  unpack_int_rgba_RGB_INT8(src, dst, n);
 +  break;
 +
 +   case MESA_FORMAT_RGB_UINT16:
 +  unpack_int_rgba_RGB_UINT16(src, dst, n);
 +  break;
 +   case MESA_FORMAT_RGB_INT16:
 +  unpack_int_rgba_RGB_INT16(src, dst, n);
 +  break;
 +
 case MESA_FORMAT_RG_UINT32:
 case MESA_FORMAT_RG_INT32:
unpack_int_rgba_RG_UINT32(src, dst, n);

No RG/R/A/L/I cases make me sad.


pgpicDpXPj6e2.pgp
Description: PGP signature
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev