diff options
author | Brian Paul <[email protected]> | 2010-12-06 11:01:19 -0700 |
---|---|---|
committer | Brian Paul <[email protected]> | 2010-12-06 11:01:21 -0700 |
commit | cae2bb76c1147d48f75ddd7a058a48d11e72ba03 (patch) | |
tree | 9c65072a0397a846338232de1ddee721b1a93fc6 /src/mesa/state_tracker | |
parent | c1095f0b0c636832acdfeb5dbf5595cb9b8bf513 (diff) |
st/mesa: fix mipmap generation bug
In st_finalize_texture() we were looking at the st_texture_object::
lastLevel field instead of the pipe_resource::last_level field to
determine which resource to store the mipmap in.
Then, in st_generate_mipmap() we need to call st_finalize_texture() to
make sure the destination resource is properly allocated.
These changes fix the broken piglit fbo-generatemipmap-formats test.
Diffstat (limited to 'src/mesa/state_tracker')
-rw-r--r-- | src/mesa/state_tracker/st_cb_texture.c | 3 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_gen_mipmap.c | 6 |
2 files changed, 8 insertions, 1 deletions
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index d0fb6301b08..866426a7549 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -1855,8 +1855,9 @@ st_finalize_texture(struct gl_context *ctx, * will match. */ if (firstImage->pt && + stObj->pt && firstImage->pt != stObj->pt && - firstImage->pt->last_level >= stObj->lastLevel) { + firstImage->pt->last_level >= stObj->pt->last_level) { pipe_resource_reference(&stObj->pt, firstImage->pt); pipe_sampler_view_reference(&stObj->sampler_view, NULL); } diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c index 2472c0bcf11..c5f6008a222 100644 --- a/src/mesa/state_tracker/st_gen_mipmap.c +++ b/src/mesa/state_tracker/st_gen_mipmap.c @@ -370,6 +370,12 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target, pt = stObj->pt; } + else { + /* Make sure that the base texture image data is present in the + * texture buffer. + */ + st_finalize_texture(ctx, st->pipe, texObj); + } assert(pt->last_level >= lastLevel); |