i965/miptree: Replace is_lossless_compressed with mt->aux_usage checks
[mesa.git] / src / mesa / drivers / dri / radeon / radeon_maos_vbtmp.h
index 8a07a01cb21e60e7f9da53ebc0c3f2cb28101577..c4ffef1beef5ad92b873190dc7765dea30922266 100644 (file)
@@ -1,6 +1,5 @@
 /*
  * Mesa 3-D graphics library
- * Version:  4.1
  *
  * Copyright (C) 1999-2002  Brian Paul   All Rights Reserved.
  *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
- * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
  *
  * Authors:
- *    Keith Whitwell <keith@tungstengraphics.com>
+ *    Keith Whitwell <keithw@vmware.com>
  */
 
 #ifndef LOCALVARS
@@ -34,7 +34,7 @@
 #define TCL_DEBUG 0
 #endif
 
-static void TAG(emit)( GLcontext *ctx,
+static void TAG(emit)( struct gl_context *ctx,
                       GLuint start, GLuint end,
                       void *dest )
 {
@@ -50,28 +50,24 @@ static void TAG(emit)( GLcontext *ctx,
    GLuint rqcoordsnoswap = 0;
    GLuint (*coord)[4];
    GLuint coord_stride; /* object coordinates */
-   GLubyte dummy[4];
    int i;
 
    union emit_union *v = (union emit_union *)dest;
 
-   if (RADEON_DEBUG & DEBUG_VERTS)
-      fprintf(stderr, "%s\n", __FUNCTION__); 
+   radeon_print(RADEON_SWRENDER, RADEON_VERBOSE, "%s\n", __func__);
 
-   coord = (GLuint (*)[4])VB->ObjPtr->data;
-   coord_stride = VB->ObjPtr->stride;
+   coord = (GLuint (*)[4])VB->AttribPtr[_TNL_ATTRIB_POS]->data;
+   coord_stride = VB->AttribPtr[_TNL_ATTRIB_POS]->stride;
 
    if (DO_TEX2) {
-      if (VB->TexCoordPtr[2]) {
+      if (VB->AttribPtr[_TNL_ATTRIB_TEX2]) {
         const GLuint t2 = GET_TEXSOURCE(2);
-        tc2 = (GLuint (*)[4])VB->TexCoordPtr[t2]->data;
-        tc2_stride = VB->TexCoordPtr[t2]->stride;
-        if (DO_PTEX && VB->TexCoordPtr[t2]->size < 3) {
-        /* since DO_PTEX is only true when we have 3 or more coords
-           in the first place we don't really need this right? */
+        tc2 = (GLuint (*)[4])VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->data;
+        tc2_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->stride;
+        if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->size < 3) {
            fill_tex |= (1<<2);
         }
-        else if (DO_PTEX && VB->TexCoordPtr[t2]->size < 4) {
+        else if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t2]->size < 4) {
            rqcoordsnoswap |= (1<<2);
         }
       } else {
@@ -81,14 +77,14 @@ static void TAG(emit)( GLcontext *ctx,
    }
 
    if (DO_TEX1) {
-      if (VB->TexCoordPtr[1]) {
+      if (VB->AttribPtr[_TNL_ATTRIB_TEX1]) {
         const GLuint t1 = GET_TEXSOURCE(1);
-        tc1 = (GLuint (*)[4])VB->TexCoordPtr[t1]->data;
-        tc1_stride = VB->TexCoordPtr[t1]->stride;
-        if (DO_PTEX && VB->TexCoordPtr[t1]->size < 3) {
+        tc1 = (GLuint (*)[4])VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->data;
+        tc1_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->stride;
+        if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->size < 3) {
            fill_tex |= (1<<1);
         }
-        else if (DO_PTEX && VB->TexCoordPtr[t1]->size < 4) {
+        else if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t1]->size < 4) {
            rqcoordsnoswap |= (1<<1);
         }
       } else {
@@ -98,14 +94,14 @@ static void TAG(emit)( GLcontext *ctx,
    }
 
    if (DO_TEX0) {
-      if (VB->TexCoordPtr[0]) {
+      if (VB->AttribPtr[_TNL_ATTRIB_TEX0]) {
         const GLuint t0 = GET_TEXSOURCE(0);
-        tc0_stride = VB->TexCoordPtr[t0]->stride;
-        tc0 = (GLuint (*)[4])VB->TexCoordPtr[t0]->data;
-        if (DO_PTEX && VB->TexCoordPtr[t0]->size < 3) {
+        tc0_stride = VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->stride;
+        tc0 = (GLuint (*)[4])VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->data;
+        if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->size < 3) {
            fill_tex |= (1<<0);
         }
-        else if (DO_PTEX && VB->TexCoordPtr[t0]->size < 4) {
+        else if (DO_PTEX && VB->AttribPtr[_TNL_ATTRIB_TEX0 + t0]->size < 4) {
            rqcoordsnoswap |= (1<<0);
         }
       } else {
@@ -116,9 +112,9 @@ static void TAG(emit)( GLcontext *ctx,
    }
 
    if (DO_NORM) {
-      if (VB->NormalPtr) {
-        norm_stride = VB->NormalPtr->stride;
-        norm = (GLuint (*)[4])VB->NormalPtr->data;
+      if (VB->AttribPtr[_TNL_ATTRIB_NORMAL]) {
+        norm_stride = VB->AttribPtr[_TNL_ATTRIB_NORMAL]->stride;
+        norm = (GLuint (*)[4])VB->AttribPtr[_TNL_ATTRIB_NORMAL]->data;
       } else {
         norm_stride = 0;
         norm = (GLuint (*)[4])&ctx->Current.Attrib[VERT_ATTRIB_NORMAL];
@@ -126,31 +122,31 @@ static void TAG(emit)( GLcontext *ctx,
    }
 
    if (DO_RGBA) {
-      if (VB->ColorPtr[0]) {
-        col = VB->ColorPtr[0]->data;
-        col_stride = VB->ColorPtr[0]->stride;
+      if (VB->AttribPtr[_TNL_ATTRIB_COLOR0]) {
+        col = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->data;
+        col_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR0]->stride;
       } else {
         col = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_COLOR0];
         col_stride = 0;
       }
    }
 
-   if (DO_SPEC) {
-      if (VB->SecondaryColorPtr[0]) {
-        spec = VB->SecondaryColorPtr[0]->data;
-        spec_stride = VB->SecondaryColorPtr[0]->stride;
+   if (DO_SPEC_OR_FOG) {
+      if (VB->AttribPtr[_TNL_ATTRIB_COLOR1]) {
+        spec = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->data;
+        spec_stride = VB->AttribPtr[_TNL_ATTRIB_COLOR1]->stride;
       } else {
         spec = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_COLOR1];
         spec_stride = 0;
       }
    }
 
-   if (DO_FOG) {
-      if (VB->FogCoordPtr) {
-        fog = VB->FogCoordPtr->data;
-        fog_stride = VB->FogCoordPtr->stride;
+   if (DO_SPEC_OR_FOG) {
+      if (VB->AttribPtr[_TNL_ATTRIB_FOG]) {
+        fog = VB->AttribPtr[_TNL_ATTRIB_FOG]->data;
+        fog_stride = VB->AttribPtr[_TNL_ATTRIB_FOG]->stride;
       } else {
-        fog = (GLfloat (*)[4])&dummy; fog[0][0] = 0.0F;
+        fog = (GLfloat (*)[4])ctx->Current.Attrib[VERT_ATTRIB_FOG];
         fog_stride = 0;
       }
    }
@@ -204,7 +200,7 @@ static void TAG(emit)( GLcontext *ctx,
            STRIDE_4F(col, col_stride);
            v++;
         }
-        if (DO_SPEC || DO_FOG) {
+        if (DO_SPEC_OR_FOG) {
            if (DO_SPEC) {
               UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.red, spec[0][0]);
               UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.green, spec[0][1]);
@@ -212,8 +208,8 @@ static void TAG(emit)( GLcontext *ctx,
               STRIDE_4F(spec, spec_stride);
            }
            if (DO_FOG) {
-              UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.alpha, fog[0][0]);
-              fog = (GLfloat (*)[4])((GLubyte *)fog + fog_stride);
+              UNCLAMPED_FLOAT_TO_UBYTE(v[0].rgba.alpha, radeonComputeFogBlendFactor(ctx, fog[0][0]));
+              STRIDE_4F(fog, fog_stride);
            }
            if (TCL_DEBUG) fprintf(stderr, "%x ", v[0].ui);
            v++;
@@ -257,6 +253,7 @@ static void TAG(emit)( GLcontext *ctx,
         if (DO_TEX2) {
            v[0].ui = tc2[0][0];
            v[1].ui = tc2[0][1];
+           if (TCL_DEBUG) fprintf(stderr, "t2: %.2f %.2f ", v[0].f, v[1].f);
            if (DO_PTEX) {
               if (fill_tex & (1<<2))
                  v[2].f = 1.0;
@@ -264,6 +261,7 @@ static void TAG(emit)( GLcontext *ctx,
                  v[2].ui = tc2[0][2];
               else
                  v[2].ui = tc2[0][3];
+              if (TCL_DEBUG) fprintf(stderr, "%.2f ", v[2].f);
               v += 3;
            } 
            else
@@ -283,7 +281,7 @@ static void TAG(init)( void )
    if (DO_W) sz++;
    if (DO_NORM) sz += 3;
    if (DO_RGBA) sz++;
-   if (DO_SPEC || DO_FOG) sz++;
+   if (DO_SPEC_OR_FOG) sz++;
    if (DO_TEX0) sz += 2;
    if (DO_TEX0 && DO_PTEX) sz++;
    if (DO_TEX1) sz += 2;