mesa: replace gl_texture_format with gl_format
[mesa.git] / src / mesa / drivers / dri / savage / savagetex.c
index 1dcfee291f519f3032efe6a53de4f9101427e2f1..796da4fc0d7d568c04779cd77f2dc229948b296f 100644 (file)
 
 #include <GL/gl.h>
 
-#include "mm.h"
+#include "main/mm.h"
 #include "savagecontext.h"
 #include "savagetex.h"
 #include "savagetris.h"
 #include "savageioctl.h"
-#include "simple_list.h"
-#include "enums.h"
+#include "main/simple_list.h"
+#include "main/enums.h"
 #include "savage_bci.h"
 
-#include "macros.h"
-#include "texformat.h"
-#include "texstore.h"
-#include "texobj.h"
-
-#include "convolve.h"
-#include "colormac.h"
+#include "main/macros.h"
+#include "main/texformat.h"
+#include "main/texstore.h"
+#include "main/texobj.h"
+#include "main/convolve.h"
+#include "main/colormac.h"
 
 #include "swrast/swrast.h"
 
@@ -101,7 +100,7 @@ static const savageTileInfo tileInfo_s3d_s4[5] = {
  * \param w   width in bytes
  */
 #define SUBTILE_FUNC(w,h)                                      \
-static __inline GLubyte *savageUploadSubtile_##w##x##h         \
+static INLINE GLubyte *savageUploadSubtile_##w##x##h           \
 (GLubyte *dest, GLubyte *src, GLuint srcStride)                        \
 {                                                              \
     GLuint y;                                                  \
@@ -475,7 +474,7 @@ static void savageSetTexFilter(savageTexObjPtr t, GLenum minf, GLenum magf)
 
 /* Need a fallback ?
  */
-static void savageSetTexBorderColor(savageTexObjPtr t, GLubyte color[4])
+static void savageSetTexBorderColor(savageTexObjPtr t, const GLfloat color[4])
 {
 /*    t->Setup[SAVAGE_TEXREG_TEXBORDERCOL] =  */
     /*t->setup.borderColor = SAVAGEPACKCOLOR8888(color[0],color[1],color[2],color[3]); */
@@ -513,7 +512,7 @@ savageAllocTexObj( struct gl_texture_object *texObj )
 
       savageSetTexWrapping(t,texObj->WrapS,texObj->WrapT);
       savageSetTexFilter(t,texObj->MinFilter,texObj->MagFilter);
-      savageSetTexBorderColor(t,texObj->_BorderChan);
+      savageSetTexBorderColor(t,texObj->BorderColor);
    }
 
    return t;
@@ -528,6 +527,11 @@ savageAllocTexObj( struct gl_texture_object *texObj )
  * components to white. This way we get the correct result.
  */
 
+#if 0
+/* Using MESA_FORMAT_RGBA8888 to store alpha-only textures should
+ * work but is space inefficient.
+ */
+
 static GLboolean
 _savage_texstore_a1114444(TEXSTORE_PARAMS);
 
@@ -591,10 +595,11 @@ _savage_texstore_a1114444(TEXSTORE_PARAMS)
        return GL_FALSE;
     _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight);
     for (img = 0; img < srcDepth; img++) {
+        GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
         GLubyte *dstRow = (GLubyte *) dstAddr
-           + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes
+           + dstImageOffsets[dstZoffset + img] * texelBytes
            + dstYoffset * dstRowStride
-           + dstXoffset * dstFormat->TexelBytes;
+           + dstXoffset * texelBytes;
        for (row = 0; row < srcHeight; row++) {
             GLushort *dstUI = (GLushort *) dstRow;
            for (col = 0; col < srcWidth; col++) {
@@ -630,10 +635,11 @@ _savage_texstore_a1118888(TEXSTORE_PARAMS)
        return GL_FALSE;
     _mesa_adjust_image_for_convolution(ctx, dims, &srcWidth, &srcHeight);
     for (img = 0; img < srcDepth; img++) {
+        GLuint texelBytes = _mesa_get_format_bytes(dstFormat);
         GLubyte *dstRow = (GLubyte *) dstAddr
-           + dstImageOffsets[dstZoffset + img] * dstFormat->TexelBytes
+           + dstImageOffsets[dstZoffset + img] * texelBytes
            + dstYoffset * dstRowStride
-           + dstXoffset * dstFormat->TexelBytes;
+           + dstXoffset * texelBytes;
        for (row = 0; row < srcHeight; row++) {
             GLuint *dstUI = (GLuint *) dstRow;
            for (col = 0; col < srcWidth; col++) {
@@ -648,10 +654,11 @@ _savage_texstore_a1118888(TEXSTORE_PARAMS)
 
     return GL_TRUE;
 }
+#endif
 
 
 /* Called by the _mesa_store_teximage[123]d() functions. */
-static const struct gl_texture_format *
+static gl_format
 savageChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
                           GLenum format, GLenum type )
 {
@@ -670,15 +677,15 @@ savageChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
       switch ( type ) {
       case GL_UNSIGNED_INT_10_10_10_2:
       case GL_UNSIGNED_INT_2_10_10_10_REV:
-        return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555;
+        return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
       case GL_UNSIGNED_SHORT_4_4_4_4:
       case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-        return &_mesa_texformat_argb4444;
+        return MESA_FORMAT_ARGB4444;
       case GL_UNSIGNED_SHORT_5_5_5_1:
       case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-        return &_mesa_texformat_argb1555;
+        return MESA_FORMAT_ARGB1555;
       default:
-         return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
+         return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
       }
 
    case 3:
@@ -687,129 +694,152 @@ savageChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
       switch ( type ) {
       case GL_UNSIGNED_SHORT_4_4_4_4:
       case GL_UNSIGNED_SHORT_4_4_4_4_REV:
-        return &_mesa_texformat_argb4444;
+        return MESA_FORMAT_ARGB4444;
       case GL_UNSIGNED_SHORT_5_5_5_1:
       case GL_UNSIGNED_SHORT_1_5_5_5_REV:
-        return &_mesa_texformat_argb1555;
+        return MESA_FORMAT_ARGB1555;
       case GL_UNSIGNED_SHORT_5_6_5:
       case GL_UNSIGNED_SHORT_5_6_5_REV:
-        return &_mesa_texformat_rgb565;
+        return MESA_FORMAT_RGB565;
       default:
-         return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
+         return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
       }
 
    case GL_RGBA8:
    case GL_RGBA12:
    case GL_RGBA16:
       return !force16bpt ?
-         &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
+         MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
 
    case GL_RGB10_A2:
       return !force16bpt ?
-         &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555;
+         MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555;
 
    case GL_RGBA4:
    case GL_RGBA2:
-      return &_mesa_texformat_argb4444;
+      return MESA_FORMAT_ARGB4444;
 
    case GL_RGB5_A1:
-      return &_mesa_texformat_argb1555;
+      return MESA_FORMAT_ARGB1555;
 
    case GL_RGB8:
    case GL_RGB10:
    case GL_RGB12:
    case GL_RGB16:
-      return !force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_rgb565;
+      return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_RGB565;
 
    case GL_RGB5:
    case GL_RGB4:
    case GL_R3_G3_B2:
-      return &_mesa_texformat_rgb565;
+      return MESA_FORMAT_RGB565;
 
    case GL_ALPHA:
    case GL_COMPRESSED_ALPHA:
-      return isSavage4 ? &_mesa_texformat_a8 : (
+#if 0
+      return isSavage4 ? MESA_FORMAT_a8 : (
         do32bpt ? &_savage_texformat_a1118888 : &_savage_texformat_a1114444);
+#else
+      if (isSavage4)
+         return MESA_FORMAT_A8;
+      else if (do32bpt)
+         return MESA_FORMAT_ARGB8888;
+      else
+         return MESA_FORMAT_ARGB4444;
+#endif
    case GL_ALPHA4:
-      return isSavage4 ? &_mesa_texformat_a8 : &_savage_texformat_a1114444;
+#if 0
+      return isSavage4 ? MESA_FORMAT_a8 : &_savage_texformat_a1114444;
+#else
+      if (isSavage4)
+         return MESA_FORMAT_A8;
+      else
+         return MESA_FORMAT_ARGB4444;
+#endif
    case GL_ALPHA8:
    case GL_ALPHA12:
    case GL_ALPHA16:
-      return isSavage4 ? &_mesa_texformat_a8 : (
+#if 0
+      return isSavage4 ? MESA_FORMAT_a8 : (
         !force16bpt ? &_savage_texformat_a1118888 : &_savage_texformat_a1114444);
-
+#else
+      if (isSavage4)
+         return MESA_FORMAT_A8;
+      else if (force16bpt)
+         return MESA_FORMAT_ARGB4444;
+      else
+         return MESA_FORMAT_ARGB8888;
+#endif
    case 1:
    case GL_LUMINANCE:
    case GL_COMPRESSED_LUMINANCE:
       /* no alpha, but use argb1555 in 16bit case to get pure grey values */
-      return isSavage4 ? &_mesa_texformat_l8 : (
-        do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555);
+      return isSavage4 ? MESA_FORMAT_L8 : (
+        do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555);
    case GL_LUMINANCE4:
-      return isSavage4 ? &_mesa_texformat_l8 : &_mesa_texformat_argb1555;
+      return isSavage4 ? MESA_FORMAT_L8 : MESA_FORMAT_ARGB1555;
    case GL_LUMINANCE8:
    case GL_LUMINANCE12:
    case GL_LUMINANCE16:
-      return isSavage4 ? &_mesa_texformat_l8 : (
-        !force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb1555);
+      return isSavage4 ? MESA_FORMAT_L8 : (
+        !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB1555);
 
    case 2:
    case GL_LUMINANCE_ALPHA:
    case GL_COMPRESSED_LUMINANCE_ALPHA:
       /* Savage4 has a al44 texture format. But it's not supported by Mesa. */
-      return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
+      return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
    case GL_LUMINANCE4_ALPHA4:
    case GL_LUMINANCE6_ALPHA2:
-      return &_mesa_texformat_argb4444;
+      return MESA_FORMAT_ARGB4444;
    case GL_LUMINANCE8_ALPHA8:
    case GL_LUMINANCE12_ALPHA4:
    case GL_LUMINANCE12_ALPHA12:
    case GL_LUMINANCE16_ALPHA16:
-      return !force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
+      return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
 #if 0
    /* TFT_I8 produces garbage on ProSavageDDR and subsequent texture
     * disable keeps rendering garbage. Disabled for now. */
    case GL_INTENSITY:
    case GL_COMPRESSED_INTENSITY:
-      return isSavage4 ? &_mesa_texformat_i8 : (
-        do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444);
+      return isSavage4 ? MESA_FORMAT_i8 : (
+        do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444);
    case GL_INTENSITY4:
-      return isSavage4 ? &_mesa_texformat_i8 : &_mesa_texformat_argb4444;
+      return isSavage4 ? MESA_FORMAT_i8 : MESA_FORMAT_ARGB4444;
    case GL_INTENSITY8:
    case GL_INTENSITY12:
    case GL_INTENSITY16:
-      return isSavage4 ? &_mesa_texformat_i8 : (
-        !force16bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444);
+      return isSavage4 ? MESA_FORMAT_i8 : (
+        !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444);
 #else
    case GL_INTENSITY:
    case GL_COMPRESSED_INTENSITY:
-      return do32bpt ? &_mesa_texformat_argb8888 : &_mesa_texformat_argb4444;
+      return do32bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
    case GL_INTENSITY4:
-      return &_mesa_texformat_argb4444;
+      return MESA_FORMAT_ARGB4444;
    case GL_INTENSITY8:
    case GL_INTENSITY12:
    case GL_INTENSITY16:
-      return !force16bpt ? &_mesa_texformat_argb8888 :
-         &_mesa_texformat_argb4444;
+      return !force16bpt ? MESA_FORMAT_ARGB8888 : MESA_FORMAT_ARGB4444;
 #endif
 
    case GL_RGB_S3TC:
    case GL_RGB4_S3TC:
    case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
-      return &_mesa_texformat_rgb_dxt1;
+      return MESA_FORMAT_RGB_DXT1;
    case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
-      return &_mesa_texformat_rgba_dxt1;
+      return MESA_FORMAT_RGBA_DXT1;
 
    case GL_COMPRESSED_RGBA_S3TC_DXT3_EXT:
-      return &_mesa_texformat_rgba_dxt3;
+      return MESA_FORMAT_RGBA_DXT3;
 
    case GL_RGBA_S3TC:
    case GL_RGBA4_S3TC:
       if (!isSavage4)
         /* Not the best choice but Savage3D/MX/IX don't support DXT3 or DXT5. */
-        return &_mesa_texformat_rgba_dxt1;
+        return MESA_FORMAT_RGBA_DXT1;
       /* fall through */
    case GL_COMPRESSED_RGBA_S3TC_DXT5_EXT:
-      return &_mesa_texformat_rgba_dxt5;
+      return MESA_FORMAT_RGBA_DXT5;
 
 /*
    case GL_COLOR_INDEX:
@@ -823,7 +853,7 @@ savageChooseTextureFormat( GLcontext *ctx, GLint internalFormat,
 */
    default:
       _mesa_problem(ctx, "unexpected texture format in %s", __FUNCTION__);
-      return NULL;
+      return MESA_FORMAT_NONE;
    }
 }
 
@@ -838,7 +868,7 @@ static void savageSetTexImages( savageContextPtr imesa,
    assert(t);
    assert(image);
 
-   switch (image->TexFormat->MesaFormat) {
+   switch (image->TexFormat) {
    case MESA_FORMAT_ARGB8888:
       textureFormat = TFT_ARGB8888;
       t->texelBytes = tileIndex = 4;
@@ -1365,7 +1395,7 @@ static void savageUpdateTex0State_s4( GLcontext *ctx )
     if (imesa->regs.s4.texDescr.ni.tex1En)
         imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
 
-    imesa->regs.s4.texAddr[0].ui = (u_int32_t) t->setup.physAddr | 0x2;
+    imesa->regs.s4.texAddr[0].ui = (uint32_t) t->setup.physAddr | 0x2;
     if(t->base.heap->heapId == SAVAGE_AGP_HEAP)
        imesa->regs.s4.texAddr[0].ui |= 0x1;
     
@@ -1550,7 +1580,7 @@ static void savageUpdateTex1State_s4( GLcontext *ctx )
     imesa->regs.s4.texCtrl[1].ni.dMax = t->base.lastLevel - t->base.firstLevel;
     imesa->regs.s4.texDescr.ni.texBLoopEn = GL_TRUE;
 
-    imesa->regs.s4.texAddr[1].ui = (u_int32_t) t->setup.physAddr | 2;
+    imesa->regs.s4.texAddr[1].ui = (uint32_t) t->setup.physAddr | 2;
     if(t->base.heap->heapId == SAVAGE_AGP_HEAP)
        imesa->regs.s4.texAddr[1].ui |= 0x1;
 }
@@ -1701,7 +1731,7 @@ static void savageUpdateTexState_s3d( GLcontext *ctx )
     assert (t->hwFormat <= 7);
     imesa->regs.s3d.texDescr.ni.texFmt = t->hwFormat;
 
-    imesa->regs.s3d.texAddr.ui = (u_int32_t) t->setup.physAddr | 2;
+    imesa->regs.s3d.texAddr.ui = (uint32_t) t->setup.physAddr | 2;
     if(t->base.heap->heapId == SAVAGE_AGP_HEAP)
        imesa->regs.s3d.texAddr.ui |= 0x1;
 }
@@ -2019,7 +2049,7 @@ static void savageTexParameter( GLcontext *ctx, GLenum target,
       break;
   
    case GL_TEXTURE_BORDER_COLOR:
-      savageSetTexBorderColor(t,tObj->_BorderChan);
+      savageSetTexBorderColor(t,tObj->BorderColor);
       break;
 
    default:
@@ -2084,6 +2114,7 @@ void savageDDInitTextureFuncs( struct dd_function_table *functions )
 
    /* Texel fetching with our custom texture formats works just like
     * the standard argb formats. */
+#if 0
    _savage_texformat_a1114444.FetchTexel1D = _mesa_texformat_argb4444.FetchTexel1D;
    _savage_texformat_a1114444.FetchTexel2D = _mesa_texformat_argb4444.FetchTexel2D;
    _savage_texformat_a1114444.FetchTexel3D = _mesa_texformat_argb4444.FetchTexel3D;
@@ -2097,4 +2128,5 @@ void savageDDInitTextureFuncs( struct dd_function_table *functions )
    _savage_texformat_a1118888.FetchTexel1Df= _mesa_texformat_argb8888.FetchTexel1Df;
    _savage_texformat_a1118888.FetchTexel2Df= _mesa_texformat_argb8888.FetchTexel2Df;
    _savage_texformat_a1118888.FetchTexel3Df= _mesa_texformat_argb8888.FetchTexel3Df;
+#endif
 }