Big-endian fixes for R200 sw TCL path.
authorIan Romanick <idr@us.ibm.com>
Sat, 23 Oct 2004 00:42:17 +0000 (00:42 +0000)
committerIan Romanick <idr@us.ibm.com>
Sat, 23 Oct 2004 00:42:17 +0000 (00:42 +0000)
src/mesa/drivers/dri/r200/r200_swtcl.c
src/mesa/tnl/t_vertex.c
src/mesa/tnl/t_vertex.h

index c40c7d09dbd4fa26c5a95f7d38176d4b0a8c33ea..4c6f19da4f0023f5129c032d81873104a842a4d0 100644 (file)
@@ -116,12 +116,17 @@ static void r200SetVertexFormat( GLcontext *ctx )
    }
 
    rmesa->swtcl.coloroffset = offset;
+#if MESA_LITTLE_ENDIAN 
    EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_RGBA, (R200_VTX_PK_RGBA << R200_VTX_COLOR_0_SHIFT) );
+#else
+   EMIT_ATTR( _TNL_ATTRIB_COLOR0, EMIT_4UB_4F_ABGR, (R200_VTX_PK_RGBA << R200_VTX_COLOR_0_SHIFT) );
+#endif
    offset += 1;
 
    rmesa->swtcl.specoffset = 0;
    if (index & (_TNL_BIT_COLOR1|_TNL_BIT_FOG)) {
 
+#if MESA_LITTLE_ENDIAN 
       if (index & _TNL_BIT_COLOR1) {
         rmesa->swtcl.specoffset = offset;
         EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_RGB, (R200_VTX_PK_RGBA << R200_VTX_COLOR_1_SHIFT) );
@@ -136,6 +141,22 @@ static void r200SetVertexFormat( GLcontext *ctx )
       else {
         EMIT_PAD( 1 );
       }
+#else
+      if (index & _TNL_BIT_FOG) {
+        EMIT_ATTR( _TNL_ATTRIB_FOG, EMIT_1UB_1F, (R200_VTX_PK_RGBA << R200_VTX_COLOR_1_SHIFT) );
+      }
+      else {
+        EMIT_PAD( 1 );
+      }
+
+      if (index & _TNL_BIT_COLOR1) {
+        rmesa->swtcl.specoffset = offset;
+        EMIT_ATTR( _TNL_ATTRIB_COLOR1, EMIT_3UB_3F_BGR, (R200_VTX_PK_RGBA << R200_VTX_COLOR_1_SHIFT) );
+      }
+      else {
+        EMIT_PAD( 3 );
+      }
+#endif
    }
 
    if (index & _TNL_BITS_TEX_ANY) {
index 1582c9f90a3aab6c7fe749cc56da4a1cb9157b34..984241c6a7776826d63329fa6ffdd6a731147d3d 100644 (file)
@@ -438,6 +438,46 @@ static void insert_4ub_4f_argb_1( const struct tnl_clipspace_attr *a, GLubyte *v
    v[0] = 0xff;
 }
 
+static void insert_4ub_4f_abgr_4( const struct tnl_clipspace_attr *a, GLubyte *v, 
+                               const GLfloat *in )
+{
+   (void) a;
+   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[2]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[0], in[3]);
+}
+
+static void insert_4ub_4f_abgr_3( const struct tnl_clipspace_attr *a, GLubyte *v, 
+                               const GLfloat *in )
+{
+   (void) a;
+   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[1], in[2]);
+   v[0] = 0xff;
+}
+
+static void insert_4ub_4f_abgr_2( const struct tnl_clipspace_attr *a, GLubyte *v, 
+                               const GLfloat *in )
+{
+   (void) a;
+   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
+   UNCLAMPED_FLOAT_TO_UBYTE(v[2], in[1]);
+   v[1] = 0x00;
+   v[0] = 0xff;
+}
+
+static void insert_4ub_4f_abgr_1( const struct tnl_clipspace_attr *a, GLubyte *v, 
+                               const GLfloat *in )
+{
+   (void) a;
+   UNCLAMPED_FLOAT_TO_UBYTE(v[3], in[0]);
+   v[2] = 0x00;
+   v[1] = 0x00;
+   v[0] = 0xff;
+}
+
 static void insert_3ub_3f_rgb_3( const struct tnl_clipspace_attr *a, GLubyte *v, 
                               const GLfloat *in )
 {
@@ -648,6 +688,16 @@ static void extract_4ub_4f_argb( const struct tnl_clipspace_attr *a, GLfloat *ou
    out[2] = UBYTE_TO_FLOAT(v[3]);
 }
 
+static void extract_4ub_4f_abgr( const struct tnl_clipspace_attr *a, GLfloat *out, 
+                                const GLubyte *v )
+{
+   (void) a;
+   out[3] = UBYTE_TO_FLOAT(v[0]);
+   out[2] = UBYTE_TO_FLOAT(v[1]);
+   out[1] = UBYTE_TO_FLOAT(v[2]);
+   out[0] = UBYTE_TO_FLOAT(v[3]);
+}
+
 static void extract_3ub_3f_rgb( const struct tnl_clipspace_attr *a, GLfloat *out, 
                                const GLubyte *v )
 {
@@ -764,6 +814,12 @@ static struct {
        insert_4ub_4f_argb_4 },
      4 * sizeof(GLubyte) },
 
+   { "4ub_4f_abgr",
+     extract_4ub_4f_abgr,
+     { insert_4ub_4f_abgr_1, insert_4ub_4f_abgr_2, insert_4ub_4f_abgr_3,
+       insert_4ub_4f_abgr_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 f2bd145d9e26c65e89adf242acf3f9df37094bcc..caa222014c9b6e0594ba4e3734960bbdc277cefc 100644 (file)
@@ -54,6 +54,7 @@ enum tnl_attr_format {
    EMIT_4UB_4F_RGBA,           /* for color */
    EMIT_4UB_4F_BGRA,           /* for color */
    EMIT_4UB_4F_ARGB,           /* for color */
+   EMIT_4UB_4F_ABGR,           /* for color */
    EMIT_4CHAN_4F_RGBA,         /* for swrast color */
    EMIT_PAD,                   /* leave a hole of 'offset' bytes */
    EMIT_MAX