Merge branch 'llvm-cliptest-viewport'
[mesa.git] / src / mesa / drivers / dri / r128 / r128_texstate.c
index 3f4347b02e83949d4e70ddd1722db7b2bc7dceb1..11441639411121747f83b1f80c88dac4aa31cf2d 100644 (file)
@@ -1,4 +1,3 @@
-/* $XFree86: xc/lib/GL/mesa/src/drv/r128/r128_tex.c,v 1.7 2001/01/08 01:07:21 martin Exp $ */
 /**************************************************************************
 
 Copyright 1999, 2000 ATI Technologies Inc. and Precision Insight, Inc.,
@@ -33,16 +32,13 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
  *   Brian Paul <brianp@valinux.com>
  */
 
-#include "glheader.h"
-#include "imports.h"
-#include "context.h"
-#include "macros.h"
-#include "texformat.h"
+#include "main/glheader.h"
+#include "main/imports.h"
+#include "main/context.h"
+#include "main/macros.h"
 
 #include "r128_context.h"
-#include "r128_state.h"
 #include "r128_ioctl.h"
-#include "r128_vb.h"
 #include "r128_tris.h"
 #include "r128_tex.h"
 
@@ -51,7 +47,7 @@ static void r128SetTexImages( r128ContextPtr rmesa,
                               const struct gl_texture_object *tObj )
 {
    r128TexObjPtr t = (r128TexObjPtr) tObj->DriverData;
-   struct gl_texture_image *baseImage = tObj->Image[tObj->BaseLevel];
+   struct gl_texture_image *baseImage = tObj->Image[0][tObj->BaseLevel];
    int log2Pitch, log2Height, log2Size, log2MinSize;
    int totalSize;
    int i;
@@ -61,16 +57,19 @@ static void r128SetTexImages( r128ContextPtr rmesa,
    assert(baseImage);
 
    if ( R128_DEBUG & DEBUG_VERBOSE_API )
-      fprintf( stderr, "%s( %p )\n", __FUNCTION__, tObj );
+      fprintf( stderr, "%s( %p )\n", __FUNCTION__, (void *) tObj );
 
-   switch (baseImage->TexFormat->MesaFormat) {
+   switch (baseImage->TexFormat) {
    case MESA_FORMAT_ARGB8888:
+   case MESA_FORMAT_ARGB8888_REV:
       t->textureFormat = R128_DATATYPE_ARGB8888;
       break;
    case MESA_FORMAT_ARGB4444:
+   case MESA_FORMAT_ARGB4444_REV:
       t->textureFormat = R128_DATATYPE_ARGB4444;
       break;
    case MESA_FORMAT_RGB565:
+   case MESA_FORMAT_RGB565_REV:
       t->textureFormat = R128_DATATYPE_RGB565;
       break;
    case MESA_FORMAT_RGB332:
@@ -90,20 +89,14 @@ static void r128SetTexImages( r128ContextPtr rmesa,
    };
 
    /* Compute which mipmap levels we really want to send to the hardware.
-    * This depends on the base image size, GL_TEXTURE_MIN_LOD,
-    * GL_TEXTURE_MAX_LOD, GL_TEXTURE_BASE_LEVEL, and GL_TEXTURE_MAX_LEVEL.
-    * Yes, this looks overly complicated, but it's all needed.
     */
-   firstLevel = tObj->BaseLevel + (GLint) (tObj->MinLod + 0.5);
-   firstLevel = MAX2(firstLevel, tObj->BaseLevel);
-   lastLevel = tObj->BaseLevel + (GLint) (tObj->MaxLod + 0.5);
-   lastLevel = MAX2(lastLevel, tObj->BaseLevel);
-   lastLevel = MIN2(lastLevel, tObj->BaseLevel + baseImage->MaxLog2);
-   lastLevel = MIN2(lastLevel, tObj->MaxLevel);
-   lastLevel = MAX2(firstLevel, lastLevel); /* need at least one level */
-
-   log2Pitch = tObj->Image[firstLevel]->WidthLog2;
-   log2Height = tObj->Image[firstLevel]->HeightLog2;
+
+   driCalculateTextureFirstLastLevel( (driTextureObject *) t );
+   firstLevel = t->base.firstLevel;
+   lastLevel  = t->base.lastLevel;
+
+   log2Pitch = tObj->Image[0][firstLevel]->WidthLog2;
+   log2Height = tObj->Image[0][firstLevel]->HeightLog2;
    log2Size = MAX2(log2Pitch, log2Height);
    log2MinSize = log2Size;
 
@@ -112,7 +105,7 @@ static void r128SetTexImages( r128ContextPtr rmesa,
    for ( i = firstLevel; i <= lastLevel; i++ ) {
       const struct gl_texture_image *texImage;
 
-      texImage = tObj->Image[i];
+      texImage = tObj->Image[0][i];
       if ( !texImage || !texImage->Data ) {
          lastLevel = i - 1;
         break;
@@ -121,14 +114,14 @@ static void r128SetTexImages( r128ContextPtr rmesa,
       log2MinSize = texImage->MaxLog2;
 
       t->image[i - firstLevel].offset = totalSize;
-      t->image[i - firstLevel].width  = tObj->Image[i]->Width;
-      t->image[i - firstLevel].height = tObj->Image[i]->Height;
+      t->image[i - firstLevel].width  = tObj->Image[0][i]->Width;
+      t->image[i - firstLevel].height = tObj->Image[0][i]->Height;
 
       t->base.dirty_images[0] |= (1 << i);
 
-      totalSize += (tObj->Image[i]->Height *
-                   tObj->Image[i]->Width *
-                   tObj->Image[i]->TexFormat->TexelBytes);
+      totalSize += (tObj->Image[0][i]->Height *
+                   tObj->Image[0][i]->Width *
+                   _mesa_get_format_bytes(tObj->Image[0][i]->TexFormat));
 
       /* Offsets must be 32-byte aligned for host data blits and tiling */
       totalSize = (totalSize + 31) & ~31;
@@ -199,18 +192,18 @@ static void r128SetTexImages( r128ContextPtr rmesa,
 #define INPUT_PREVIOUS                 (R128_INPUT_FACTOR_PREV_COLOR | \
                                         R128_INP_FACTOR_A_PREV_ALPHA)
 
-static GLboolean r128UpdateTextureEnv( GLcontext *ctx, int unit )
+static GLboolean r128UpdateTextureEnv( struct gl_context *ctx, int unit )
 {
    r128ContextPtr rmesa = R128_CONTEXT(ctx);
    GLint source = rmesa->tmu_source[unit];
    const struct gl_texture_unit *texUnit = &ctx->Texture.Unit[source];
    const struct gl_texture_object *tObj = texUnit->_Current;
-   const GLenum format = tObj->Image[tObj->BaseLevel]->Format;
+   const GLenum format = tObj->Image[0][tObj->BaseLevel]->_BaseFormat;
    GLuint combine;
 
    if ( R128_DEBUG & DEBUG_VERBOSE_API ) {
       fprintf( stderr, "%s( %p, %d )\n",
-              __FUNCTION__, ctx, unit );
+              __FUNCTION__, (void *) ctx, unit );
    }
 
    if ( unit == 0 ) {
@@ -483,7 +476,7 @@ static GLboolean r128UpdateTextureEnv( GLcontext *ctx, int unit )
    return GL_TRUE;
 }
 
-static void disable_tex( GLcontext *ctx, int unit )
+static void disable_tex( struct gl_context *ctx, int unit )
 {
    r128ContextPtr rmesa = R128_CONTEXT(ctx);
 
@@ -506,7 +499,7 @@ static void disable_tex( GLcontext *ctx, int unit )
    rmesa->blend_flags &= ~R128_BLEND_MULTITEX;
 }
 
-static GLboolean enable_tex_2d( GLcontext *ctx, int unit )
+static GLboolean enable_tex_2d( struct gl_context *ctx, int unit )
 {
    r128ContextPtr rmesa = R128_CONTEXT(ctx);
    const int source = rmesa->tmu_source[unit];
@@ -531,7 +524,7 @@ static GLboolean enable_tex_2d( GLcontext *ctx, int unit )
    return GL_TRUE;
 }
 
-static GLboolean update_tex_common( GLcontext *ctx, int unit )
+static GLboolean update_tex_common( struct gl_context *ctx, int unit )
 {
    r128ContextPtr rmesa = R128_CONTEXT(ctx);
    const int source = rmesa->tmu_source[unit];
@@ -541,7 +534,7 @@ static GLboolean update_tex_common( GLcontext *ctx, int unit )
 
 
    /* Fallback if there's a texture border */
-   if ( tObj->Image[tObj->BaseLevel]->Border > 0 ) {
+   if ( tObj->Image[0][tObj->BaseLevel]->Border > 0 ) {
       return GL_FALSE;
    }
 
@@ -604,7 +597,7 @@ static GLboolean update_tex_common( GLcontext *ctx, int unit )
    return r128UpdateTextureEnv( ctx, unit );
 }
 
-static GLboolean updateTextureUnit( GLcontext *ctx, int unit )
+static GLboolean updateTextureUnit( struct gl_context *ctx, int unit )
 {
    r128ContextPtr rmesa = R128_CONTEXT(ctx);
    const int source = rmesa->tmu_source[unit];
@@ -625,7 +618,7 @@ static GLboolean updateTextureUnit( GLcontext *ctx, int unit )
 }
 
 
-void r128UpdateTextureState( GLcontext *ctx )
+void r128UpdateTextureState( struct gl_context *ctx )
 {
    r128ContextPtr rmesa = R128_CONTEXT(ctx);
    GLboolean ok;