Add ARGB modes to support big-endian systems.
authorIan Romanick <idr@us.ibm.com>
Sun, 17 Oct 2004 21:53:43 +0000 (21:53 +0000)
committerIan Romanick <idr@us.ibm.com>
Sun, 17 Oct 2004 21:53:43 +0000 (21:53 +0000)
src/mesa/tnl/t_vertex.c
src/mesa/tnl/t_vertex.h

index 7147193..1582c9f 100644 (file)
@@ -398,6 +398,46 @@ static void insert_4ub_4f_bgra_1( const struct tnl_clipspace_attr *a, GLubyte *v
    v[3] = 0xff;
 }
 
+static void insert_4ub_4f_argb_4( const struct tnl_clipspace_attr *a, GLubyte *v, 
+                               const GLfloat *in )
+{
+   (void) a;
+   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[2]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[3]);
+}
+
+static void insert_4ub_4f_argb_3( const struct tnl_clipspace_attr *a, GLubyte *v, 
+                               const GLfloat *in )
+{
+   (void) a;
+   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[2]);
+   v[0] = 0xff;
+}
+
+static void insert_4ub_4f_argb_2( const struct tnl_clipspace_attr *a, GLubyte *v, 
+                               const GLfloat *in )
+{
+   (void) a;
+   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
+   v[3] = 0x00;
+   v[0] = 0xff;
+}
+
+static void insert_4ub_4f_argb_1( const struct tnl_clipspace_attr *a, GLubyte *v, 
+                               const GLfloat *in )
+{
+   (void) a;
+   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[0]);
+   v[2] = 0x00;
+   v[3] = 0x00;
+   v[0] = 0xff;
+}
+
 static void insert_3ub_3f_rgb_3( const struct tnl_clipspace_attr *a, GLubyte *v, 
                               const GLfloat *in )
 {
@@ -598,6 +638,16 @@ static void extract_4ub_4f_bgra( const struct tnl_clipspace_attr *a, GLfloat *ou
    out[3] = UBYTE_TO_FLOAT(v[3]);
 }
 
+static void extract_4ub_4f_argb( const struct tnl_clipspace_attr *a, GLfloat *out, 
+                                const GLubyte *v )
+{
+   (void) a;
+   out[3] = UBYTE_TO_FLOAT(v[0]);
+   out[0] = UBYTE_TO_FLOAT(v[1]);
+   out[1] = UBYTE_TO_FLOAT(v[2]);
+   out[2] = UBYTE_TO_FLOAT(v[3]);
+}
+
 static void extract_3ub_3f_rgb( const struct tnl_clipspace_attr *a, GLfloat *out, 
                                const GLubyte *v )
 {
@@ -708,6 +758,12 @@ static struct {
        insert_4ub_4f_bgra_4 },
      4 * sizeof(GLubyte) },
 
+   { "4ub_4f_argb",
+     extract_4ub_4f_argb,
+     { insert_4ub_4f_argb_1, insert_4ub_4f_argb_2, insert_4ub_4f_argb_3,
+       insert_4ub_4f_argb_4 },
+     4 * sizeof(GLubyte) },
+
    { "4chan_4f_rgba",
      extract_4chan_4f_rgba,
      { insert_4chan_4f_rgba_1, insert_4chan_4f_rgba_2, insert_4chan_4f_rgba_3,
index 6e0813e..f2bd145 100644 (file)
@@ -53,6 +53,7 @@ enum tnl_attr_format {
    EMIT_3UB_3F_BGR,            /* for specular color */
    EMIT_4UB_4F_RGBA,           /* for color */
    EMIT_4UB_4F_BGRA,           /* for color */
+   EMIT_4UB_4F_ARGB,           /* for color */
    EMIT_4CHAN_4F_RGBA,         /* for swrast color */
    EMIT_PAD,                   /* leave a hole of 'offset' bytes */
    EMIT_MAX