Offset LOD bias by about 0.3 to match software rendering more closely.

Another small tweak to subtile upload (mostly cosmetic).
This commit is contained in:
Felix Kuehling 2005-02-12 14:37:17 +00:00
parent ed9119b72a
commit 25817dc26b
1 changed files with 18 additions and 18 deletions

View File

@ -46,6 +46,11 @@
#include "xmlpool.h"
/* On Savage4 the texure LOD-bias needs an offset of ~ 0.3 to get
* somewhere close to software rendering.
*/
#define SAVAGE4_LOD_OFFSET 10
/* Size 1, 2 and 4 images are packed into the last subtile. Each image
* is repeated to fill a 4x4 pixel area. The figure below shows the
* layout of those 4x4 pixel areas in the 8x8 subtile.
@ -101,19 +106,6 @@ SUBTILE_FUNC(8, 8)
SUBTILE_FUNC(16, 8)
SUBTILE_FUNC(32, 8) /* 4 bytes per pixel, 8 pixels wide */
/** \brief Table of subtile upload functions
*
* Indexed by the binary logarithm of the width in bytes.
*/
static GLubyte *(*savageSubtileTab[]) (GLubyte *, GLubyte *, GLuint) = {
NULL,
savageUploadSubtile_2x8,
savageUploadSubtile_4x8,
savageUploadSubtile_8x8,
savageUploadSubtile_16x8,
savageUploadSubtile_32x8
};
/** \brief Upload a complete tile from src (srcStride) to dest
*
* \param tileInfo Pointer to tiling information
@ -138,10 +130,16 @@ static void savageUploadTile (const savageTileInfo *tileInfo,
GLubyte *src, GLuint srcStride, GLubyte *dest) {
GLuint subStride = tileInfo->subWidth * bpp;
GLubyte *srcSRow = src, *srcSTile = src;
GLubyte *(*subtileFunc) (GLubyte *, GLubyte *, GLuint) =
savageSubtileTab[(tileInfo->subWidth == 4 ? 2 : 3) +
((bpp == 1) ? 0 : (bpp == 2) ? 1 : 2)];
GLubyte *(*subtileFunc) (GLubyte *, GLubyte *, GLuint);
GLuint sx, sy;
switch (subStride) {
case 2: subtileFunc = savageUploadSubtile_2x8; break;
case 4: subtileFunc = savageUploadSubtile_4x8; break;
case 8: subtileFunc = savageUploadSubtile_8x8; break;
case 16: subtileFunc = savageUploadSubtile_16x8; break;
case 32: subtileFunc = savageUploadSubtile_32x8; break;
default: assert(0);
}
for (sy = 0; sy < hInSub; ++sy) {
srcSTile = srcSRow;
for (sx = 0; sx < wInSub; ++sx) {
@ -1036,7 +1034,8 @@ static void savageUpdateTex0State_s4( GLcontext *ctx )
if((ctx->Texture.Unit[0].LodBias !=0.0F) ||
(imesa->regs.s4.texCtrl[0].ni.dBias != 0))
{
int bias = (int)(ctx->Texture.Unit[0].LodBias * 32.0);
int bias = (int)(ctx->Texture.Unit[0].LodBias * 32.0) +
SAVAGE4_LOD_OFFSET;
if (bias < -256)
bias = -256;
else if (bias > 255)
@ -1237,7 +1236,8 @@ static void savageUpdateTex1State_s4( GLcontext *ctx )
if((ctx->Texture.Unit[1].LodBias !=0.0F) ||
(imesa->regs.s4.texCtrl[1].ni.dBias != 0))
{
int bias = (int)(ctx->Texture.Unit[1].LodBias * 32.0);
int bias = (int)(ctx->Texture.Unit[1].LodBias * 32.0) +
SAVAGE4_LOD_OFFSET;
if (bias < -256)
bias = -256;
else if (bias > 255)