diff options
author | Brian Paul <[email protected]> | 2010-05-04 10:30:52 -0600 |
---|---|---|
committer | Brian Paul <[email protected]> | 2010-05-04 10:32:02 -0600 |
commit | 2b53f4a9c674e9b02df8a06759e7a2340f257081 (patch) | |
tree | e8af7d3bd29b3f9e03d92cfd421548a17de7135a /src/mesa | |
parent | c2b47a75577c881ab88b0715791d24d9a9f8ee7e (diff) |
st/mesa: return success/fail from guess_and_alloc_texture()
Before we looked at stObj->pt to see if we may have run out of memory,
but that's not a good indicator. This fixes the spurious GL_OUT_OF_MEMORY
errors that could arise before.
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/state_tracker/st_cb_texture.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index ed8eb2929a6..b66630f9a6a 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -255,8 +255,10 @@ get_texture_dims(GLenum target) * * We use the given st_texture_image as a clue to determine the size of the * mipmap image at level=0. + * + * \return GL_TRUE for success, GL_FALSE if out of memory. */ -static void +static GLboolean guess_and_alloc_texture(struct st_context *st, struct st_texture_object *stObj, const struct st_texture_image *stImage) @@ -287,7 +289,8 @@ guess_and_alloc_texture(struct st_context *st, (dims >= 3 && depth == 1) ) { /* we can't determine the image size at level=0 */ stObj->width0 = stObj->height0 = stObj->depth0 = 0; - return; + /* this is not an out of memory error */ + return GL_TRUE; } } @@ -349,7 +352,9 @@ guess_and_alloc_texture(struct st_context *st, depth, bindings); - DBG("%s - success\n", __FUNCTION__); + DBG("%s returning %d\n", __FUNCTION__, (stObj->pt != NULL)); + + return stObj->pt != NULL; } @@ -597,14 +602,12 @@ st_TexImage(GLcontext * ctx, } if (!stObj->pt) { - guess_and_alloc_texture(st, stObj, stImage); - if (!stObj->pt) { + if (!guess_and_alloc_texture(st, stObj, stImage)) { /* Probably out of memory. * Try flushing any pending rendering, then retry. */ st_finish(st); - guess_and_alloc_texture(st, stObj, stImage); - if (!stObj->pt) { + if (!guess_and_alloc_texture(st, stObj, stImage)) { _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage"); return; } |