mesa: choose texture format in core mesa, not drivers

Call the ctx->Driver.ChooseTextureFormat() function from core Mesa's
_mesa_[Copy]TexImage functions instead of in the driver functions.
One less thing for drivers to do.
This commit is contained in:
Brian Paul
2009-10-25 18:06:18 -06:00
parent 355b5bde50
commit 11caea687e
12 changed files with 54 additions and 64 deletions

View File

@@ -330,10 +330,6 @@ intelTexImage(GLcontext * ctx,
&postConvHeight); &postConvHeight);
} }
/* choose the texture format */
texImage->TexFormat = intelChooseTextureFormat(ctx, internalFormat,
format, type);
if (_mesa_is_format_compressed(texImage->TexFormat)) { if (_mesa_is_format_compressed(texImage->TexFormat)) {
texelBytes = 0; texelBytes = 0;
} }
@@ -787,8 +783,6 @@ intelSetTexBuffer2(__DRIcontext *pDRICtx, GLint target,
intelImage->face = target_to_face(target); intelImage->face = target_to_face(target);
intelImage->level = level; intelImage->level = level;
texImage->TexFormat = intelChooseTextureFormat(&intel->ctx, internalFormat,
type, format);
texImage->RowStride = rb->region->pitch; texImage->RowStride = rb->region->pitch;
intel_miptree_reference(&intelImage->mt, intelObj->mt); intel_miptree_reference(&intelImage->mt, intelObj->mt);

View File

@@ -835,9 +835,7 @@ void r200SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
_mesa_init_teximage_fields(radeon->glCtx, target, texImage, _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
rb->base.Width, rb->base.Height, 1, 0, rb->cpp); rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
texImage->RowStride = rb->pitch / rb->cpp; texImage->RowStride = rb->pitch / rb->cpp;
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
internalFormat,
type, format, 0);
rImage->bo = rb->bo; rImage->bo = rb->bo;
radeon_bo_ref(rImage->bo); radeon_bo_ref(rImage->bo);
t->bo = rb->bo; t->bo = rb->bo;

View File

@@ -444,9 +444,6 @@ void r300SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
_mesa_init_teximage_fields(radeon->glCtx, target, texImage, _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
rb->base.Width, rb->base.Height, 1, 0, rb->cpp); rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
texImage->RowStride = rb->pitch / rb->cpp; texImage->RowStride = rb->pitch / rb->cpp;
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
internalFormat,
type, format, 0);
rImage->bo = rb->bo; rImage->bo = rb->bo;
radeon_bo_ref(rImage->bo); radeon_bo_ref(rImage->bo);
t->bo = rb->bo; t->bo = rb->bo;

View File

@@ -907,9 +907,7 @@ void r600SetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_fo
_mesa_init_teximage_fields(radeon->glCtx, target, texImage, _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
rb->base.Width, rb->base.Height, 1, 0, rb->cpp); rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
texImage->RowStride = rb->pitch / rb->cpp; texImage->RowStride = rb->pitch / rb->cpp;
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
internalFormat,
type, format, 0);
rImage->bo = rb->bo; rImage->bo = rb->bo;
radeon_bo_ref(rImage->bo); radeon_bo_ref(rImage->bo);
t->bo = rb->bo; t->bo = rb->bo;

View File

@@ -385,6 +385,9 @@ restart:
texImage->TexFormat); texImage->TexFormat);
return GL_FALSE; return GL_FALSE;
} }
/* XXX why is the tex format being set here?
* I think this can be removed.
*/
texImage->TexFormat = radeonChooseTextureFormat(ctx, texImage->InternalFormat, 0, texImage->TexFormat = radeonChooseTextureFormat(ctx, texImage->InternalFormat, 0,
_mesa_get_format_datatype(texImage->TexFormat), _mesa_get_format_datatype(texImage->TexFormat),
1); 1);

View File

@@ -709,9 +709,7 @@ void radeonSetTexBuffer2(__DRIcontext *pDRICtx, GLint target, GLint glx_texture_
_mesa_init_teximage_fields(radeon->glCtx, target, texImage, _mesa_init_teximage_fields(radeon->glCtx, target, texImage,
rb->base.Width, rb->base.Height, 1, 0, rb->cpp); rb->base.Width, rb->base.Height, 1, 0, rb->cpp);
texImage->RowStride = rb->pitch / rb->cpp; texImage->RowStride = rb->pitch / rb->cpp;
texImage->TexFormat = radeonChooseTextureFormat(radeon->glCtx,
internalFormat,
type, format, 0);
rImage->bo = rb->bo; rImage->bo = rb->bo;
radeon_bo_ref(rImage->bo); radeon_bo_ref(rImage->bo);
t->bo = rb->bo; t->bo = rb->bo;

View File

@@ -538,9 +538,6 @@ static void radeon_teximage(
&postConvHeight); &postConvHeight);
} }
/* Choose and fill in the texture format for this image */
texImage->TexFormat = radeonChooseTextureFormat(ctx, internalFormat, format, type, 0);
if (_mesa_is_format_compressed(texImage->TexFormat)) { if (_mesa_is_format_compressed(texImage->TexFormat)) {
texelBytes = 0; texelBytes = 0;
} else { } else {

View File

@@ -1396,11 +1396,6 @@ tdfxTexImage2D(GLcontext *ctx, GLenum target, GLint level,
} }
#endif #endif
/* choose the texture format */
assert(ctx->Driver.ChooseTextureFormat);
texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx,
internalFormat, format, type);
assert(texImage->TexFormat);
mesaFormat = texImage->TexFormat; mesaFormat = texImage->TexFormat;
mml->glideFormat = fxGlideFormat(mesaFormat); mml->glideFormat = fxGlideFormat(mesaFormat);
ti->info.format = mml->glideFormat; ti->info.format = mml->glideFormat;
@@ -1618,12 +1613,6 @@ tdfxCompressedTexImage2D (GLcontext *ctx, GLenum target,
mml->height = height * mml->hScale; mml->height = height * mml->hScale;
/* choose the texture format */
assert(ctx->Driver.ChooseTextureFormat);
texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx,
internalFormat, -1/*format*/, -1/*type*/);
assert(texImage->TexFormat);
/* Determine the appropriate Glide texel format, /* Determine the appropriate Glide texel format,
* given the user's internal texture format hint. * given the user's internal texture format hint.
*/ */

View File

@@ -1384,11 +1384,6 @@ fxDDTexImage2D(GLcontext * ctx, GLenum target, GLint level,
} }
#endif #endif
/* choose the texture format */
assert(ctx->Driver.ChooseTextureFormat);
texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx,
internalFormat, format, type);
assert(texImage->TexFormat);
texelBytes = _mesa_get_format_bytes(texImage->TexFormat->MesaFormat); texelBytes = _mesa_get_format_bytes(texImage->TexFormat->MesaFormat);
/*if (!fxMesa->HaveTexFmt) assert(texelBytes == 1 || texelBytes == 2);*/ /*if (!fxMesa->HaveTexFmt) assert(texelBytes == 1 || texelBytes == 2);*/
@@ -1648,13 +1643,6 @@ fxDDCompressedTexImage2D (GLcontext *ctx, GLenum target,
mml->width = width * mml->wScale; mml->width = width * mml->wScale;
mml->height = height * mml->hScale; mml->height = height * mml->hScale;
/* choose the texture format */
assert(ctx->Driver.ChooseTextureFormat);
texImage->TexFormat = (*ctx->Driver.ChooseTextureFormat)(ctx,
internalFormat, -1/*format*/, -1/*type*/);
assert(texImage->TexFormat);
/* Determine the appropriate Glide texel format, /* Determine the appropriate Glide texel format,
* given the user's internal texture format hint. * given the user's internal texture format hint.
*/ */

View File

@@ -2195,6 +2195,12 @@ _mesa_TexImage1D( GLenum target, GLint level, GLint internalFormat,
postConvWidth, 1, 1, postConvWidth, 1, 1,
border, internalFormat); border, internalFormat);
/* Choose actual texture format */
texImage->TexFormat =
ctx->Driver.ChooseTextureFormat(ctx, internalFormat,
format, type);
ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
/* Give the texture to the driver. <pixels> may be null. */ /* Give the texture to the driver. <pixels> may be null. */
ASSERT(ctx->Driver.TexImage1D); ASSERT(ctx->Driver.TexImage1D);
ctx->Driver.TexImage1D(ctx, target, level, internalFormat, ctx->Driver.TexImage1D(ctx, target, level, internalFormat,
@@ -2311,6 +2317,12 @@ _mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
postConvWidth, postConvHeight, 1, postConvWidth, postConvHeight, 1,
border, internalFormat); border, internalFormat);
/* Choose actual texture format */
texImage->TexFormat =
ctx->Driver.ChooseTextureFormat(ctx, internalFormat,
format, type);
ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
/* Give the texture to the driver. <pixels> may be null. */ /* Give the texture to the driver. <pixels> may be null. */
ASSERT(ctx->Driver.TexImage2D); ASSERT(ctx->Driver.TexImage2D);
ctx->Driver.TexImage2D(ctx, target, level, internalFormat, ctx->Driver.TexImage2D(ctx, target, level, internalFormat,
@@ -2423,6 +2435,12 @@ _mesa_TexImage3D( GLenum target, GLint level, GLint internalFormat,
width, height, depth, width, height, depth,
border, internalFormat); border, internalFormat);
/* Choose actual texture format */
texImage->TexFormat =
ctx->Driver.ChooseTextureFormat(ctx, internalFormat,
format, type);
ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
/* Give the texture to the driver. <pixels> may be null. */ /* Give the texture to the driver. <pixels> may be null. */
ASSERT(ctx->Driver.TexImage3D); ASSERT(ctx->Driver.TexImage3D);
ctx->Driver.TexImage3D(ctx, target, level, internalFormat, ctx->Driver.TexImage3D(ctx, target, level, internalFormat,
@@ -2735,6 +2753,12 @@ _mesa_CopyTexImage1D( GLenum target, GLint level,
_mesa_init_teximage_fields(ctx, target, texImage, postConvWidth, 1, 1, _mesa_init_teximage_fields(ctx, target, texImage, postConvWidth, 1, 1,
border, internalFormat); border, internalFormat);
/* Choose actual texture format */
texImage->TexFormat =
ctx->Driver.ChooseTextureFormat(ctx, internalFormat,
GL_NONE, GL_NONE);
ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
ASSERT(ctx->Driver.CopyTexImage1D); ASSERT(ctx->Driver.CopyTexImage1D);
ctx->Driver.CopyTexImage1D(ctx, target, level, internalFormat, ctx->Driver.CopyTexImage1D(ctx, target, level, internalFormat,
x, y, width, border); x, y, width, border);
@@ -2812,6 +2836,12 @@ _mesa_CopyTexImage2D( GLenum target, GLint level, GLenum internalFormat,
postConvWidth, postConvHeight, 1, postConvWidth, postConvHeight, 1,
border, internalFormat); border, internalFormat);
/* Choose actual texture format */
texImage->TexFormat =
ctx->Driver.ChooseTextureFormat(ctx, internalFormat,
GL_NONE, GL_NONE);
ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
ASSERT(ctx->Driver.CopyTexImage2D); ASSERT(ctx->Driver.CopyTexImage2D);
ctx->Driver.CopyTexImage2D(ctx, target, level, internalFormat, ctx->Driver.CopyTexImage2D(ctx, target, level, internalFormat,
x, y, width, height, border); x, y, width, height, border);
@@ -3290,6 +3320,12 @@ _mesa_CompressedTexImage1DARB(GLenum target, GLint level,
_mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1, _mesa_init_teximage_fields(ctx, target, texImage, width, 1, 1,
border, internalFormat); border, internalFormat);
/* Choose actual texture format */
texImage->TexFormat =
ctx->Driver.ChooseTextureFormat(ctx, internalFormat,
GL_NONE, GL_NONE);
ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
ASSERT(ctx->Driver.CompressedTexImage1D); ASSERT(ctx->Driver.CompressedTexImage1D);
ctx->Driver.CompressedTexImage1D(ctx, target, level, ctx->Driver.CompressedTexImage1D(ctx, target, level,
internalFormat, width, border, internalFormat, width, border,
@@ -3396,6 +3432,12 @@ _mesa_CompressedTexImage2DARB(GLenum target, GLint level,
_mesa_init_teximage_fields(ctx, target, texImage, width, height, 1, _mesa_init_teximage_fields(ctx, target, texImage, width, height, 1,
border, internalFormat); border, internalFormat);
/* Choose actual texture format */
texImage->TexFormat =
ctx->Driver.ChooseTextureFormat(ctx, internalFormat,
GL_NONE, GL_NONE);
ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
ASSERT(ctx->Driver.CompressedTexImage2D); ASSERT(ctx->Driver.CompressedTexImage2D);
ctx->Driver.CompressedTexImage2D(ctx, target, level, ctx->Driver.CompressedTexImage2D(ctx, target, level,
internalFormat, width, height, internalFormat, width, height,
@@ -3501,6 +3543,12 @@ _mesa_CompressedTexImage3DARB(GLenum target, GLint level,
width, height, depth, width, height, depth,
border, internalFormat); border, internalFormat);
/* Choose actual texture format */
texImage->TexFormat =
ctx->Driver.ChooseTextureFormat(ctx, internalFormat,
GL_NONE, GL_NONE);
ASSERT(texImage->TexFormat != MESA_FORMAT_NONE);
ASSERT(ctx->Driver.CompressedTexImage3D); ASSERT(ctx->Driver.CompressedTexImage3D);
ctx->Driver.CompressedTexImage3D(ctx, target, level, ctx->Driver.CompressedTexImage3D(ctx, target, level,
internalFormat, internalFormat,

View File

@@ -3250,10 +3250,6 @@ _mesa_store_teximage1d(GLcontext *ctx, GLenum target, GLint level,
GLuint sizeInBytes; GLuint sizeInBytes;
(void) border; (void) border;
texImage->TexFormat
= ctx->Driver.ChooseTextureFormat(ctx, internalFormat, format, type);
ASSERT(texImage->TexFormat);
/* allocate memory */ /* allocate memory */
sizeInBytes = texture_size(texImage); sizeInBytes = texture_size(texImage);
texImage->Data = _mesa_alloc_texmemory(sizeInBytes); texImage->Data = _mesa_alloc_texmemory(sizeInBytes);
@@ -3311,10 +3307,6 @@ _mesa_store_teximage2d(GLcontext *ctx, GLenum target, GLint level,
GLuint sizeInBytes; GLuint sizeInBytes;
(void) border; (void) border;
texImage->TexFormat
= ctx->Driver.ChooseTextureFormat(ctx, internalFormat, format, type);
ASSERT(texImage->TexFormat);
/* allocate memory */ /* allocate memory */
sizeInBytes = texture_size(texImage); sizeInBytes = texture_size(texImage);
texImage->Data = _mesa_alloc_texmemory(sizeInBytes); texImage->Data = _mesa_alloc_texmemory(sizeInBytes);
@@ -3368,10 +3360,6 @@ _mesa_store_teximage3d(GLcontext *ctx, GLenum target, GLint level,
GLuint sizeInBytes; GLuint sizeInBytes;
(void) border; (void) border;
texImage->TexFormat
= ctx->Driver.ChooseTextureFormat(ctx, internalFormat, format, type);
ASSERT(texImage->TexFormat);
/* allocate memory */ /* allocate memory */
sizeInBytes = texture_size(texImage); sizeInBytes = texture_size(texImage);
texImage->Data = _mesa_alloc_texmemory(sizeInBytes); texImage->Data = _mesa_alloc_texmemory(sizeInBytes);
@@ -3570,10 +3558,6 @@ _mesa_store_compressed_teximage2d(GLcontext *ctx, GLenum target, GLint level,
ASSERT(texImage->Depth == 1); ASSERT(texImage->Depth == 1);
ASSERT(texImage->Data == NULL); /* was freed in glCompressedTexImage2DARB */ ASSERT(texImage->Data == NULL); /* was freed in glCompressedTexImage2DARB */
texImage->TexFormat
= ctx->Driver.ChooseTextureFormat(ctx, internalFormat, 0, 0);
ASSERT(texImage->TexFormat);
/* allocate storage */ /* allocate storage */
texImage->Data = _mesa_alloc_texmemory(imageSize); texImage->Data = _mesa_alloc_texmemory(imageSize);
if (!texImage->Data) { if (!texImage->Data) {

View File

@@ -555,10 +555,6 @@ st_TexImage(GLcontext * ctx,
} }
#endif #endif
/* choose the texture format */
texImage->TexFormat = st_ChooseTextureFormat(ctx, internalFormat,
format, type);
_mesa_set_fetch_functions(texImage, dims); _mesa_set_fetch_functions(texImage, dims);
if (_mesa_is_format_compressed(texImage->TexFormat)) { if (_mesa_is_format_compressed(texImage->TexFormat)) {