mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
gallium: catch some out of memory conditions in the texture image code.
st_finalize_texture()'s return code now indicates success/fail instead of presence of texture border (which we discard earlier).
This commit is contained in:
parent
0565e6888a
commit
3b3774b122
2 changed files with 13 additions and 5 deletions
|
|
@ -64,7 +64,10 @@ update_textures(struct st_context *st)
|
|||
GLboolean flush, retval;
|
||||
|
||||
retval = st_finalize_texture(st->ctx, st->pipe, texObj, &flush);
|
||||
/* XXX retval indicates whether there's a texture border */
|
||||
if (!retval) {
|
||||
/* out of mem */
|
||||
continue;
|
||||
}
|
||||
|
||||
st->state.num_textures = unit + 1;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -564,7 +564,8 @@ st_TexImage(GLcontext * ctx,
|
|||
if (!stObj->pt) {
|
||||
guess_and_alloc_texture(ctx->st, stObj, stImage);
|
||||
if (!stObj->pt) {
|
||||
DBG("guess_and_alloc_texture: failed\n");
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1379,7 +1380,7 @@ copy_image_data_to_texture(struct st_context *st,
|
|||
/**
|
||||
* Called during state validation. When this function is finished,
|
||||
* the texture object should be ready for rendering.
|
||||
* \return GL_FALSE if a texture border is present, GL_TRUE otherwise
|
||||
* \return GL_TRUE for success, GL_FALSE for failure (out of mem)
|
||||
*/
|
||||
GLboolean
|
||||
st_finalize_texture(GLcontext *ctx,
|
||||
|
|
@ -1405,6 +1406,7 @@ st_finalize_texture(GLcontext *ctx,
|
|||
calculate_first_last_level(stObj);
|
||||
firstImage = st_texture_image(stObj->base.Image[0][stObj->base.BaseLevel]);
|
||||
|
||||
#if 0
|
||||
/* Fallback case:
|
||||
*/
|
||||
if (firstImage->base.Border) {
|
||||
|
|
@ -1413,7 +1415,7 @@ st_finalize_texture(GLcontext *ctx,
|
|||
}
|
||||
return GL_FALSE;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* If both firstImage and stObj point to a texture which can contain
|
||||
* all active images, favour firstImage. Note that because of the
|
||||
|
|
@ -1466,6 +1468,10 @@ st_finalize_texture(GLcontext *ctx,
|
|||
firstImage->base.Height,
|
||||
firstImage->base.Depth,
|
||||
comp_byte);
|
||||
if (!stObj->pt) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Pull in any images not in the object's texture:
|
||||
|
|
@ -1486,7 +1492,6 @@ st_finalize_texture(GLcontext *ctx,
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue