draw: add fetch for bgra ubyte surfaces
authorKeith Whitwell <keith@tungstengraphics.com>
Mon, 3 Mar 2008 16:44:04 +0000 (17:44 +0100)
committerKeith Whitwell <keith@tungstengraphics.com>
Mon, 3 Mar 2008 16:50:09 +0000 (17:50 +0100)
src/gallium/auxiliary/draw/draw_vertex_fetch.c

index cb8cdd04a3ee19748dd697fab242f9629de29a2a..b56d85396de6f7adc0e8f4584414ccb33fc18d79 100644 (file)
@@ -54,7 +54,7 @@ fetch_##NAME(const void *ptr, float *attrib)          \
    int i;                                              \
                                                        \
    for (i = 0; i < SZ; i++) {                          \
-      attrib[i] = CVT;                                 \
+      attrib[i] = CVT(i);                              \
    }                                                   \
                                                        \
    for (; i < 4; i++) {                                        \
@@ -62,24 +62,24 @@ fetch_##NAME(const void *ptr, float *attrib)                \
    }                                                   \
 }
 
-#define CVT_64_FLOAT   (float) ((double *) ptr)[i]
-#define CVT_32_FLOAT   ((float *) ptr)[i]
+#define CVT_64_FLOAT(i)   (float) ((double *) ptr)[i]
+#define CVT_32_FLOAT(i)   ((float *) ptr)[i]
 
-#define CVT_8_USCALED  (float) ((unsigned char *) ptr)[i]
-#define CVT_16_USCALED (float) ((unsigned short *) ptr)[i]
-#define CVT_32_USCALED (float) ((unsigned int *) ptr)[i]
+#define CVT_8_USCALED(i)  (float) ((unsigned char *) ptr)[i]
+#define CVT_16_USCALED(i) (float) ((unsigned short *) ptr)[i]
+#define CVT_32_USCALED(i) (float) ((unsigned int *) ptr)[i]
 
-#define CVT_8_SSCALED  (float) ((char *) ptr)[i]
-#define CVT_16_SSCALED (float) ((short *) ptr)[i]
-#define CVT_32_SSCALED (float) ((int *) ptr)[i]
+#define CVT_8_SSCALED(i)  (float) ((char *) ptr)[i]
+#define CVT_16_SSCALED(i) (float) ((short *) ptr)[i]
+#define CVT_32_SSCALED(i) (float) ((int *) ptr)[i]
 
-#define CVT_8_UNORM    (float) ((unsigned char *) ptr)[i] / 255.0f
-#define CVT_16_UNORM   (float) ((unsigned short *) ptr)[i] / 65535.0f
-#define CVT_32_UNORM   (float) ((unsigned int *) ptr)[i] / 4294967295.0f
+#define CVT_8_UNORM(i)    (float) ((unsigned char *) ptr)[i] / 255.0f
+#define CVT_16_UNORM(i)   (float) ((unsigned short *) ptr)[i] / 65535.0f
+#define CVT_32_UNORM(i)   (float) ((unsigned int *) ptr)[i] / 4294967295.0f
 
-#define CVT_8_SNORM    (float) ((char *) ptr)[i] / 127.0f
-#define CVT_16_SNORM   (float) ((short *) ptr)[i] / 32767.0f
-#define CVT_32_SNORM   (float) ((int *) ptr)[i] / 2147483647.0f
+#define CVT_8_SNORM(i)    (float) ((char *) ptr)[i] / 127.0f
+#define CVT_16_SNORM(i)   (float) ((short *) ptr)[i] / 32767.0f
+#define CVT_32_SNORM(i)   (float) ((int *) ptr)[i] / 2147483647.0f
 
 FETCH_ATTRIB( R64G64B64A64_FLOAT,   4, CVT_64_FLOAT )
 FETCH_ATTRIB( R64G64B64_FLOAT,      3, CVT_64_FLOAT )
@@ -156,6 +156,16 @@ FETCH_ATTRIB( A8R8G8B8_UNORM,       4, CVT_8_UNORM )
 
 
 
+static void
+fetch_B8G8R8A8_UNORM(const void *ptr, float *attrib)
+{
+   attrib[2] = CVT_8_UNORM(0);
+   attrib[1] = CVT_8_UNORM(1);
+   attrib[0] = CVT_8_UNORM(2);
+   attrib[3] = CVT_8_UNORM(3);
+}
+
+
 static fetch_func get_fetch_func( enum pipe_format format )
 {
 #if 0
@@ -296,6 +306,10 @@ static fetch_func get_fetch_func( enum pipe_format format )
    case PIPE_FORMAT_A8R8G8B8_UNORM:
       return fetch_A8R8G8B8_UNORM;
 
+
+   case PIPE_FORMAT_B8G8R8A8_UNORM:
+      return fetch_B8G8R8A8_UNORM;
+
    case 0:
       return NULL;             /* not sure why this is needed */