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:
Brian Paul 2008-03-20 17:08:07 -06:00
parent 0565e6888a
commit 3b3774b122
2 changed files with 13 additions and 5 deletions

View file

@ -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;
}

View file

@ -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;
}