diff options
Diffstat (limited to 'src/mesa/drivers/dri/r300/r300_texstate.c')
-rw-r--r-- | src/mesa/drivers/dri/r300/r300_texstate.c | 105 |
1 files changed, 22 insertions, 83 deletions
diff --git a/src/mesa/drivers/dri/r300/r300_texstate.c b/src/mesa/drivers/dri/r300/r300_texstate.c index b76e3490de..c4a1bf01b4 100644 --- a/src/mesa/drivers/dri/r300/r300_texstate.c +++ b/src/mesa/drivers/dri/r300/r300_texstate.c @@ -47,64 +47,14 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #include "r300_tex.h" #include "r300_reg.h" -#define R200_TXFORMAT_A8 R200_TXFORMAT_I8 -#define R200_TXFORMAT_L8 R200_TXFORMAT_I8 -#define R200_TXFORMAT_AL88 R200_TXFORMAT_AI88 -#define R200_TXFORMAT_YCBCR R200_TXFORMAT_YVYU422 -#define R200_TXFORMAT_YCBCR_REV R200_TXFORMAT_VYUY422 -#define R200_TXFORMAT_RGB_DXT1 R200_TXFORMAT_DXT1 -#define R200_TXFORMAT_RGBA_DXT1 R200_TXFORMAT_DXT1 -#define R200_TXFORMAT_RGBA_DXT3 R200_TXFORMAT_DXT23 -#define R200_TXFORMAT_RGBA_DXT5 R200_TXFORMAT_DXT45 - -#define _COLOR(f) \ - [ MESA_FORMAT_ ## f ] = { R200_TXFORMAT_ ## f, 0 } -#define _COLOR_REV(f) \ - [ MESA_FORMAT_ ## f ## _REV ] = { R200_TXFORMAT_ ## f, 0 } -#define _ALPHA(f) \ - [ MESA_FORMAT_ ## f ] = { R200_TXFORMAT_ ## f | R200_TXFORMAT_ALPHA_IN_MAP, 0 } -#define _ALPHA_REV(f) \ - [ MESA_FORMAT_ ## f ## _REV ] = { R200_TXFORMAT_ ## f | R200_TXFORMAT_ALPHA_IN_MAP, 0 } -#define _YUV(f) \ - [ MESA_FORMAT_ ## f ] = { R200_TXFORMAT_ ## f, R200_YUV_TO_RGB } -#define _INVALID(f) \ - [ MESA_FORMAT_ ## f ] = { 0xffffffff, 0 } -#define VALID_FORMAT(f) ( ((f) <= MESA_FORMAT_RGBA_DXT5 \ - || ((f) >= MESA_FORMAT_RGBA_FLOAT32 && (f) <= MESA_FORMAT_INTENSITY_FLOAT16)) \ - && tx_table[f].flag ) - -#define _ASSIGN(entry, format) \ - [ MESA_FORMAT_ ## entry ] = { format, 0, 1} -static const struct { - GLuint format, filter; -} tx_table0[] = { - _ALPHA(RGBA8888), - _ALPHA_REV(RGBA8888), - _ALPHA(ARGB8888), - _ALPHA_REV(ARGB8888), - _INVALID(RGB888), - _COLOR(RGB565), - _COLOR_REV(RGB565), - _ALPHA(ARGB4444), - _ALPHA_REV(ARGB4444), - _ALPHA(ARGB1555), - _ALPHA_REV(ARGB1555), - _ALPHA(AL88), - _ALPHA_REV(AL88), - _ALPHA(A8), - _COLOR(L8), - _ALPHA(I8), - _INVALID(CI8), - _YUV(YCBCR), - _YUV(YCBCR_REV), - _INVALID(RGB_FXT1), - _INVALID(RGBA_FXT1), - _COLOR(RGB_DXT1), - _ALPHA(RGBA_DXT1), - _ALPHA(RGBA_DXT3), - _ALPHA(RGBA_DXT5), - }; +#define VALID_FORMAT(f) ( ((f) <= MESA_FORMAT_RGBA_DXT5 \ + || ((f) >= MESA_FORMAT_RGBA_FLOAT32 && \ + (f) <= MESA_FORMAT_INTENSITY_FLOAT16)) \ + && tx_table[f].flag ) + +#define _ASSIGN(entry, format) \ + [ MESA_FORMAT_ ## entry ] = { format, 0, 1} static const struct { GLuint format, filter, flag; @@ -156,9 +106,6 @@ static const struct { _ASSIGN(INTENSITY_FLOAT16, R300_EASY_TX_FORMAT(X, X, X, X, FL_I16)), }; -#undef _COLOR -#undef _ALPHA -#undef _INVALID #undef _ASSIGN @@ -186,18 +133,12 @@ static void r300SetTexImages(r300ContextPtr rmesa, /* Set the hardware texture format */ - - t->format &= ~(R200_TXFORMAT_FORMAT_MASK | - R200_TXFORMAT_ALPHA_IN_MAP); - if (VALID_FORMAT(baseImage->TexFormat->MesaFormat) && tx_table[baseImage->TexFormat->MesaFormat].flag) { t->format = tx_table[baseImage->TexFormat->MesaFormat].format; -#if 1 t->filter |= tx_table[baseImage->TexFormat->MesaFormat].filter; -#endif } else { _mesa_problem(NULL, "unexpected texture format in %s", __FUNCTION__); @@ -208,7 +149,6 @@ static void r300SetTexImages(r300ContextPtr rmesa, /* Compute which mipmap levels we really want to send to the hardware. */ - driCalculateTextureFirstLastLevel((driTextureObject *) t); log2Width = tObj->Image[0][t->base.firstLevel]->WidthLog2; log2Height = tObj->Image[0][t->base.firstLevel]->HeightLog2; @@ -223,7 +163,7 @@ static void r300SetTexImages(r300ContextPtr rmesa, * memory organized as a rectangle of width BLIT_WIDTH_BYTES. */ curOffset = 0; - blitWidth = BLIT_WIDTH_BYTES; + blitWidth = R300_BLIT_WIDTH_BYTES; t->tile_bits = 0; /* figure out if this texture is suitable for tiling. */ @@ -311,16 +251,16 @@ static void r300SetTexImages(r300ContextPtr rmesa, t->image[0][i].width = MIN2(size / texelBytes, blitWidth); t->image[0][i].height = (size / texelBytes) / t->image[0][i].width; } else { - t->image[0][i].x = curOffset % BLIT_WIDTH_BYTES; - t->image[0][i].y = curOffset / BLIT_WIDTH_BYTES; - t->image[0][i].width = MIN2(size, BLIT_WIDTH_BYTES); + t->image[0][i].x = curOffset % R300_BLIT_WIDTH_BYTES; + t->image[0][i].y = curOffset / R300_BLIT_WIDTH_BYTES; + t->image[0][i].width = MIN2(size, R300_BLIT_WIDTH_BYTES); t->image[0][i].height = size / t->image[0][i].width; } #if 0 /* for debugging only and only applicable to non-rectangle targets */ assert(size % t->image[0][i].width == 0); assert(t->image[0][i].x == 0 - || (size < BLIT_WIDTH_BYTES + || (size < R300_BLIT_WIDTH_BYTES && t->image[0][i].height == 1)); #endif @@ -367,7 +307,7 @@ static void r300SetTexImages(r300ContextPtr rmesa, t->format |= ((log2Width << R200_TXFORMAT_WIDTH_SHIFT) | (log2Height << R200_TXFORMAT_HEIGHT_SHIFT)); #endif - +#if 0 t->format_x &= ~(R200_DEPTH_LOG2_MASK | R200_TEXCOORD_MASK); if (tObj->Target == GL_TEXTURE_3D) { t->format_x |= (log2Depth << R200_DEPTH_LOG2_SHIFT); @@ -386,6 +326,11 @@ static void r300SetTexImages(r300ContextPtr rmesa, (log2Width << R200_FACE_WIDTH_4_SHIFT) | (log2Height << R200_FACE_HEIGHT_4_SHIFT)); } +#endif + if (tObj->Target == GL_TEXTURE_CUBE_MAP) { + ASSERT(log2Width == log2Height); + t->format |= R300_TX_FORMAT_CUBIC_MAP; + } t->size = (((tObj->Image[0][t->base.firstLevel]->Width - 1) << R300_TX_WIDTHMASK_SHIFT) |((tObj->Image[0][t->base.firstLevel]->Height - 1) << R300_TX_HEIGHTMASK_SHIFT)) @@ -452,11 +397,12 @@ static GLboolean enable_tex_3d(GLcontext * ctx, int unit) /* Need to load the 3d images associated with this unit. */ +#if 0 if (t->format & R200_TXFORMAT_NON_POWER2) { t->format &= ~R200_TXFORMAT_NON_POWER2; t->base.dirty_images[0] = ~0; } - +#endif ASSERT(tObj->Target == GL_TEXTURE_3D); /* R100 & R200 do not support mipmaps for 3D textures. @@ -487,12 +433,13 @@ static GLboolean enable_tex_cube(GLcontext * ctx, int unit) /* Need to load the 2d images associated with this unit. */ +#if 0 if (t->format & R200_TXFORMAT_NON_POWER2) { t->format &= ~R200_TXFORMAT_NON_POWER2; for (face = 0; face < 6; face++) t->base.dirty_images[face] = ~0; } - +#endif ASSERT(tObj->Target == GL_TEXTURE_CUBE_MAP); if (t->base.dirty_images[0] || t->base.dirty_images[1] || @@ -571,10 +518,6 @@ static GLboolean update_tex_common(GLcontext * ctx, int unit) driUpdateTextureLRU((driTextureObject *) t); /* XXX: should be locked! */ } -#if R200_MERGED - FALLBACK(&rmesa->radeon, RADEON_FALLBACK_BORDER_MODE, t->border_fallback); -#endif - return !t->border_fallback; } @@ -618,8 +561,4 @@ void r300UpdateTextureState(GLcontext * ctx) r300UpdateTextureUnit(ctx, 6) && r300UpdateTextureUnit(ctx, 7) ); - -#if R200_MERGED - FALLBACK(&rmesa->radeon, RADEON_FALLBACK_TEXTURE, !ok); -#endif } |