small fixes wrt texture handling

This commit is contained in:
Daniel Borca 2003-11-03 12:13:23 +00:00
parent 313e12e058
commit ef387549bd
2 changed files with 36 additions and 49 deletions

View file

@ -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;

View file

@ -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: