gallium: Reallocate pipe_texture in st_TexImage if the texture object was used.
Fixes problems with interleaved glTexImage and rendering calls.
This commit is contained in:
@@ -90,6 +90,8 @@ update_textures(struct st_context *st)
|
||||
}
|
||||
|
||||
st->state.num_textures = su + 1;
|
||||
|
||||
stObj->teximage_realloc = TRUE;
|
||||
}
|
||||
|
||||
pt = st_get_stobj_texture(stObj);
|
||||
|
@@ -556,15 +556,17 @@ st_TexImage(GLcontext * ctx,
|
||||
* waiting on any outstanding fences.
|
||||
*/
|
||||
if (stObj->pt &&
|
||||
/*stObj->pt->first_level == level &&*/
|
||||
(stObj->teximage_realloc ||
|
||||
(/*stObj->pt->first_level == level &&*/
|
||||
stObj->pt->last_level == level &&
|
||||
stObj->pt->target != PIPE_TEXTURE_CUBE &&
|
||||
!st_texture_match_image(stObj->pt, &stImage->base,
|
||||
stImage->face, stImage->level)) {
|
||||
stImage->face, stImage->level)))) {
|
||||
|
||||
DBG("release it\n");
|
||||
pipe_texture_release(&stObj->pt);
|
||||
assert(!stObj->pt);
|
||||
stObj->teximage_realloc = FALSE;
|
||||
}
|
||||
|
||||
if (!stObj->pt) {
|
||||
|
@@ -68,9 +68,7 @@ struct st_texture_object
|
||||
*/
|
||||
struct pipe_texture *pt;
|
||||
|
||||
GLboolean imageOverride;
|
||||
GLint depthOverride;
|
||||
GLuint pitchOverride;
|
||||
GLboolean teximage_realloc;
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user