rs480: fix textures and secondary color(?). clipping is still busted. tested on r480
authorAapo Tahkola <aapo@aapo-desktop.(none)>
Sun, 6 May 2007 16:18:10 +0000 (19:18 +0300)
committerAapo Tahkola <aapo@aapo-desktop.(none)>
Sun, 6 May 2007 16:18:10 +0000 (19:18 +0300)
src/mesa/drivers/dri/r300/r300_maos.c

index b2ce6cb991c7156a06bd3fbf3003008fe7115906..8de464bcd810b1017ff2725aa6986a0695a3c0d9 100644 (file)
@@ -400,6 +400,7 @@ int r300EmitArrays(GLcontext *ctx)
        GLuint i;
        GLuint InputsRead = 0, OutputsWritten = 0;
        int *inputs = NULL;
+       int vir_inputs[VERT_ATTRIB_MAX];
        GLint tab[VERT_ATTRIB_MAX];
        int swizzle[VERT_ATTRIB_MAX][4];
        
@@ -442,9 +443,22 @@ int r300EmitArrays(GLcontext *ctx)
                                inputs[i] = -1;
                                
                if(!(r300->radeon.radeonScreen->chip_flags & RADEON_CHIPSET_TCL)) {
-                       for (i = 0; i < VERT_ATTRIB_MAX; i++)
-                               if (inputs[i] > 0)
-                                       inputs[i]++;
+                       /* Fixed, apply to vir0 only */
+                       memcpy(vir_inputs, inputs, VERT_ATTRIB_MAX * sizeof(int));
+                       inputs = vir_inputs;
+                       
+                       if (InputsRead & VERT_ATTRIB_POS)
+                               inputs[VERT_ATTRIB_POS] = 0;
+                       
+                       if (InputsRead & (1 << VERT_ATTRIB_COLOR0))
+                               inputs[VERT_ATTRIB_COLOR0] = 2;
+                       
+                       if (InputsRead & (1 << VERT_ATTRIB_COLOR1))
+                               inputs[VERT_ATTRIB_COLOR0] = 3;
+                       
+                       for (i = VERT_ATTRIB_TEX0; i <= VERT_ATTRIB_TEX7; i++)
+                               if (InputsRead & (1 << i))
+                                       inputs[i] = 6 + (i - VERT_ATTRIB_TEX0);
                }
                
                RENDERINPUTS_COPY( rmesa->state.render_inputs_bitset, inputs_bitset );