summaryrefslogtreecommitdiffstats
path: root/src/mesa/state_tracker
diff options
context:
space:
mode:
authorBrian Paul <[email protected]>2010-05-04 10:30:52 -0600
committerBrian Paul <[email protected]>2010-05-04 10:32:02 -0600
commit2b53f4a9c674e9b02df8a06759e7a2340f257081 (patch)
treee8af7d3bd29b3f9e03d92cfd421548a17de7135a /src/mesa/state_tracker
parentc2b47a75577c881ab88b0715791d24d9a9f8ee7e (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/state_tracker')
-rw-r--r--src/mesa/state_tracker/st_cb_texture.c17
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;
}