Mesa (master): st/mesa: fix bug in compute_num_levels()
Brian Paul
brianp at kemper.freedesktop.org
Thu May 6 20:27:15 UTC 2010
Module: Mesa
Branch: master
Commit: 4b59d2ba22fe73a912e4a8764ff6d4d440efc7d3
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=4b59d2ba22fe73a912e4a8764ff6d4d440efc7d3
Author: Brian Paul <brianp at vmware.com>
Date: Thu May 6 13:33:37 2010 -0600
st/mesa: fix bug in compute_num_levels()
Fix more fall-out from the "ignore BaseLevel" change.
This may help with fd.o bug 27991.
---
src/mesa/state_tracker/st_gen_mipmap.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c
index 6b1d51b..8acf616 100644
--- a/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/src/mesa/state_tracker/st_gen_mipmap.c
@@ -79,6 +79,7 @@ st_render_mipmap(struct st_context *st,
struct pipe_sampler_view *psv = st_get_texture_sampler_view(stObj, pipe);
const uint face = _mesa_tex_target_to_face(target);
+ assert(psv->texture == stObj->pt);
assert(target != GL_TEXTURE_3D); /* not done yet */
/* check if we can render in the texture's format */
@@ -261,7 +262,6 @@ compute_num_levels(GLcontext *ctx,
return 1;
}
else {
- const GLuint maxLevels = texObj->MaxLevel - texObj->BaseLevel + 1;
const struct gl_texture_image *baseImage =
_mesa_get_tex_image(ctx, texObj, target, texObj->BaseLevel);
GLuint size, numLevels;
@@ -269,14 +269,16 @@ compute_num_levels(GLcontext *ctx,
size = MAX2(baseImage->Width2, baseImage->Height2);
size = MAX2(size, baseImage->Depth2);
- numLevels = 0;
+ numLevels = texObj->BaseLevel;
while (size > 0) {
numLevels++;
size >>= 1;
}
- numLevels = MIN2(numLevels, maxLevels);
+ numLevels = MIN2(numLevels, texObj->MaxLevel + 1);
+
+ assert(numLevels >= 1);
return numLevels;
}
@@ -300,7 +302,7 @@ st_generate_mipmap(GLcontext *ctx, GLenum target,
if (!pt)
return;
- /* find expected last mipmap level */
+ /* find expected last mipmap level to generate */
lastLevel = compute_num_levels(ctx, texObj, target) - 1;
if (lastLevel == 0)
@@ -339,7 +341,7 @@ st_generate_mipmap(GLcontext *ctx, GLenum target,
pt = stObj->pt;
}
- assert(lastLevel <= pt->last_level);
+ assert(pt->last_level >= lastLevel);
/* Try to generate the mipmap by rendering/texturing. If that fails,
* use the software fallback.
More information about the mesa-commit
mailing list