diff --git a/src/mesa/main/mipmap.c b/src/mesa/main/mipmap.c index fc36d408f91..1ed82c52ab6 100644 --- a/src/mesa/main/mipmap.c +++ b/src/mesa/main/mipmap.c @@ -42,6 +42,30 @@ #include "util/format_r11g11b10f.h" +/** + * Compute the expected number of mipmap levels in the texture given + * the width/height/depth of the base image and the GL_TEXTURE_BASE_LEVEL/ + * GL_TEXTURE_MAX_LEVEL settings. This will tell us how many mipmap + * levels should be generated. + */ +unsigned +_mesa_compute_num_levels(struct gl_context *ctx, + struct gl_texture_object *texObj, + GLenum target) +{ + const struct gl_texture_image *baseImage; + GLuint numLevels; + + baseImage = _mesa_get_tex_image(ctx, texObj, target, texObj->BaseLevel); + + numLevels = texObj->BaseLevel + baseImage->MaxNumLevels; + numLevels = MIN2(numLevels, (GLuint) texObj->MaxLevel + 1); + if (texObj->Immutable) + numLevels = MIN2(numLevels, texObj->NumLevels); + assert(numLevels >= 1); + + return numLevels; +} static GLint bytes_per_pixel(GLenum datatype, GLuint comps) diff --git a/src/mesa/main/mipmap.h b/src/mesa/main/mipmap.h index d11c7fada37..1f108f7e5d8 100644 --- a/src/mesa/main/mipmap.h +++ b/src/mesa/main/mipmap.h @@ -28,6 +28,10 @@ #include "mtypes.h" +unsigned +_mesa_compute_num_levels(struct gl_context *ctx, + struct gl_texture_object *texObj, + GLenum target); extern void _mesa_generate_mipmap_level(GLenum target, diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c index 16b914a8845..f2aa8005a03 100644 --- a/src/mesa/state_tracker/st_gen_mipmap.c +++ b/src/mesa/state_tracker/st_gen_mipmap.c @@ -44,32 +44,6 @@ #include "st_cb_texture.h" -/** - * Compute the expected number of mipmap levels in the texture given - * the width/height/depth of the base image and the GL_TEXTURE_BASE_LEVEL/ - * GL_TEXTURE_MAX_LEVEL settings. This will tell us how many mipmap - * levels should be generated. - */ -static GLuint -compute_num_levels(struct gl_context *ctx, - struct gl_texture_object *texObj, - GLenum target) -{ - const struct gl_texture_image *baseImage; - GLuint numLevels; - - baseImage = _mesa_get_tex_image(ctx, texObj, target, texObj->BaseLevel); - - numLevels = texObj->BaseLevel + baseImage->MaxNumLevels; - numLevels = MIN2(numLevels, (GLuint) texObj->MaxLevel + 1); - if (texObj->Immutable) - numLevels = MIN2(numLevels, texObj->NumLevels); - assert(numLevels >= 1); - - return numLevels; -} - - /** * Called via ctx->Driver.GenerateMipmap(). */ @@ -92,7 +66,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target, assert(pt->nr_samples < 2); /* find expected last mipmap level to generate*/ - lastLevel = compute_num_levels(ctx, texObj, target) - 1; + lastLevel = _mesa_compute_num_levels(ctx, texObj, target) - 1; if (lastLevel == 0) return;