diff options
| author | Daniel Borca <dborca@users.sourceforge.net> | 2003-11-03 12:13:23 +0000 | 
|---|---|---|
| committer | Daniel Borca <dborca@users.sourceforge.net> | 2003-11-03 12:13:23 +0000 | 
| commit | ef387549bda21c6338817c83ecfb248dc92cd001 (patch) | |
| tree | 7ad26f7cde76c7490ed631b413583aee6a44567e /src | |
| parent | 313e12e05843dadb12a3a53d2dd161478c9b3202 (diff) | |
small fixes wrt texture handling
Diffstat (limited to 'src')
| -rw-r--r-- | src/mesa/drivers/glide/fxddtex.c | 75 | ||||
| -rw-r--r-- | src/mesa/main/texcompress.c | 10 | 
2 files changed, 36 insertions, 49 deletions
| diff --git a/src/mesa/drivers/glide/fxddtex.c b/src/mesa/drivers/glide/fxddtex.c index 16710bd232..0fc17f31cf 100644 --- a/src/mesa/drivers/glide/fxddtex.c +++ b/src/mesa/drivers/glide/fxddtex.c @@ -515,26 +515,20 @@ logbase2(int n)  } +/* fxTexGetInfo + * w, h     - source texture width and height + * lodlevel - Glide lod level token for the larger texture dimension + * ar       - Glide aspect ratio token + * sscale   - S scale factor used during triangle setup + * tscale   - T scale factor used during triangle setup + * wscale   - OpenGL -> Glide image width scale factor + * hscale   - OpenGL -> Glide image height scale factor + */  int  fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,  	     float *sscale, float *tscale,  	     int *wscale, int *hscale)  { -   static GrLOD_t lod[12] = { -          GR_LOD_LOG2_1, -          GR_LOD_LOG2_2, -          GR_LOD_LOG2_4, -          GR_LOD_LOG2_8, -          GR_LOD_LOG2_16, -          GR_LOD_LOG2_32, -          GR_LOD_LOG2_64, -          GR_LOD_LOG2_128, -          GR_LOD_LOG2_256, -          GR_LOD_LOG2_512, -          GR_LOD_LOG2_1024, -          GR_LOD_LOG2_2048 -   }; -     int logw, logh, ws, hs;     GrLOD_t l;     GrAspectRatio_t aspectratio; @@ -543,76 +537,69 @@ fxTexGetInfo(int w, int h, GrLOD_t * lodlevel, GrAspectRatio_t * ar,     logw = logbase2(w);     logh = logbase2(h); -   switch (logw - logh) { +   l = MAX2(logw, logh); +   aspectratio = logw - logh; + +   /* hardware only allows a maximum aspect ratio of 8x1, so handle
 +    * |aspectratio| > 3 by scaling the image and using an 8x1 aspect
 +    * ratio
 +    */
 +   switch (aspectratio) {     case 0: -      aspectratio = GR_ASPECT_LOG2_1x1; -      l = lod[logw]; -      s = t = 256.0f; -      ws = hs = 1; +      s = 256.0f; +      t = 256.0f; +      ws = 1; +      hs = 1;        break;     case 1: -      aspectratio = GR_ASPECT_LOG2_2x1; -      l = lod[logw];        s = 256.0f;        t = 128.0f;        ws = 1;        hs = 1;        break;     case 2: -      aspectratio = GR_ASPECT_LOG2_4x1; -      l = lod[logw];        s = 256.0f;        t = 64.0f;        ws = 1;        hs = 1;        break;     case 3: -      aspectratio = GR_ASPECT_LOG2_8x1; -      l = lod[logw];        s = 256.0f;        t = 32.0f;        ws = 1;        hs = 1;        break;     case -1: -      aspectratio = GR_ASPECT_LOG2_1x2; -      l = lod[logh];        s = 128.0f;        t = 256.0f;        ws = 1;        hs = 1;        break;     case -2: -      aspectratio = GR_ASPECT_LOG2_1x4; -      l = lod[logh];        s = 64.0f;        t = 256.0f;        ws = 1;        hs = 1;        break;     case -3: -      aspectratio = GR_ASPECT_LOG2_1x8; -      l = lod[logh];        s = 32.0f;        t = 256.0f;        ws = 1;        hs = 1;        break;     default: -      if ((logw - logh) > 3) { -         aspectratio = GR_ASPECT_LOG2_8x1; -         l = lod[logw]; +      if (aspectratio > 3) {           s = 256.0f;           t = 32.0f;           ws = 1; -         hs = 1 << (logw - logh - 3); -      } else /*if ((logw - logh) < -3)*/ { -         aspectratio = GR_ASPECT_LOG2_1x8; -         l = lod[logh]; +         hs = 1 << (aspectratio - 3); +         aspectratio = GR_ASPECT_LOG2_8x1; +      } else /*if (aspectratio < -3)*/ {           s = 32.0f;           t = 256.0f; -         ws = 1 << (logh - logw - 3); +         ws = 1 << (-aspectratio - 3);           hs = 1; +         aspectratio = GR_ASPECT_LOG2_1x8;        }     } @@ -865,7 +852,7 @@ GLboolean fxDDIsCompressedFormat ( GLcontext *ctx, GLenum internalFormat )  /* [dBorca]   * we are handling differently the above formats from the generic   * GL_COMPRESSED_RGB[A]. For this, we will always have to separately - * check the below formats... + * check for the ones below!
   */  #if FX_TC_NCC || FX_TC_NAPALM @@ -902,10 +889,10 @@ GLuint fxDDCompressedTextureSize (GLcontext *ctx,   switch (format) {   case GL_COMPRESSED_RGB_FXT1_3DFX:   case GL_COMPRESSED_RGBA_FXT1_3DFX: -    /* round up to multiple of 4 */ +    /* round up to multiples of 8, 4 */      size = ((width + 7) / 8) * ((height + 3) / 4) * 16; -    /* Textures smaller than 4x4 will effectively be made into 4x4 and -     * take 8 bytes. +    /* Textures smaller than 8x4 will effectively be made into 8x4 and +     * take 16 bytes.       */      if (size < 16)         size = 16; diff --git a/src/mesa/main/texcompress.c b/src/mesa/main/texcompress.c index 1b9daac1e6..3e06275c93 100644 --- a/src/mesa/main/texcompress.c +++ b/src/mesa/main/texcompress.c @@ -103,10 +103,10 @@ _mesa_compressed_texture_size( GLcontext *ctx,     switch (format) {     case GL_COMPRESSED_RGB_FXT1_3DFX:     case GL_COMPRESSED_RGBA_FXT1_3DFX: -      /* round up to multiple of 4 */ +      /* round up to multiples of 8, 4 */        size = ((width + 7) / 8) * ((height + 3) / 4) * 16; -      /* Textures smaller than 4x4 will effectively be made into 4x4 and -       * take 8 bytes. +      /* Textures smaller than 8x4 will effectively be made into 8x4 and +       * take 16 bytes.         */        if (size < 16)           size = 16; @@ -161,7 +161,7 @@ _mesa_compressed_row_stride(GLenum format, GLsizei width)     switch (format) {     case GL_COMPRESSED_RGB_FXT1_3DFX:     case GL_COMPRESSED_RGBA_FXT1_3DFX: -      bytesPerTile = 8; +      bytesPerTile = 16;        break;     case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:     case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: @@ -208,7 +208,7 @@ _mesa_compressed_image_address(GLint col, GLint row, GLint img,     switch (format) {     case GL_COMPRESSED_RGB_FXT1_3DFX:     case GL_COMPRESSED_RGBA_FXT1_3DFX: -      bytesPerTile = 8; +      bytesPerTile = 16;        break;     case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:     case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT: | 
