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.
This commit is contained in:
Brian Paul 2010-12-06 11:01:19 -07:00
parent c1095f0b0c
commit cae2bb76c1
2 changed files with 8 additions and 1 deletions

View file

@ -1855,8 +1855,9 @@ st_finalize_texture(struct gl_context *ctx,
* will match. * will match.
*/ */
if (firstImage->pt && if (firstImage->pt &&
stObj->pt &&
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_resource_reference(&stObj->pt, firstImage->pt);
pipe_sampler_view_reference(&stObj->sampler_view, NULL); pipe_sampler_view_reference(&stObj->sampler_view, NULL);
} }

View file

@ -370,6 +370,12 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
pt = stObj->pt; 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); assert(pt->last_level >= lastLevel);