meta: use _mesa_prepare_mipmap_level() in the mipmap generation code

See previous commit for more information.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
This commit is contained in:
Brian Paul
2011-12-15 07:36:49 -07:00
parent d77b963245
commit cf79e22509
+12 -35
View File
@@ -2943,43 +2943,20 @@ _mesa_meta_GenerateMipmap(struct gl_context *ctx, GLenum target,
break;
}
/* Set MaxLevel large enough to hold the new level when we allocate it */
/* Allocate storage for the destination mipmap image(s) */
/* Set MaxLevel large enough to hold the new level when we allocate it */
_mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, dstLevel);
/* Create empty dest image */
if (target == GL_TEXTURE_1D) {
_mesa_TexImage1D(target, dstLevel, srcImage->InternalFormat,
dstWidth, border,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
}
else if (target == GL_TEXTURE_3D) {
_mesa_TexImage3D(target, dstLevel, srcImage->InternalFormat,
dstWidth, dstHeight, dstDepth, border,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
}
else {
/* 2D or cube */
_mesa_TexImage2D(faceTarget, dstLevel, srcImage->InternalFormat,
dstWidth, dstHeight, border,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
if (target == GL_TEXTURE_CUBE_MAP) {
/* If texturing from a cube, we need to make sure all src faces
* have been defined (even if we're not sampling from them.)
* Otherwise the texture object will be 'incomplete' and
* texturing from it will not be allowed.
*/
GLuint face;
for (face = 0; face < 6; face++) {
if (!texObj->Image[face][srcLevel] ||
texObj->Image[face][srcLevel]->Width != srcWidth) {
_mesa_TexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face,
srcLevel, srcImage->InternalFormat,
srcWidth, srcHeight, border,
GL_RGBA, GL_UNSIGNED_BYTE, NULL);
}
}
}
if (!_mesa_prepare_mipmap_level(ctx, texObj, dstLevel,
dstWidth, dstHeight, dstDepth,
srcImage->Border,
srcImage->InternalFormat,
srcImage->TexFormat)) {
/* All done. We either ran out of memory or we would go beyond the
* last valid level of an immutable texture if we continued.
*/
break;
}
/* limit minification to src level */