mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-07 02:48:06 +02:00
st/mesa: do proper error checking for u_upload_alloc() calls
We weren't properly checking the return value of these calls (and calls to u_upload_data()) to detect OOM errors. Note: This is a candidate for the 9.0 branch. Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
68a097596e
commit
8c3f9ea073
5 changed files with 26 additions and 17 deletions
|
|
@ -350,9 +350,8 @@ setup_bitmap_vertex_data(struct st_context *st, bool normalized,
|
|||
tBot = (GLfloat) height;
|
||||
}
|
||||
|
||||
u_upload_alloc(st->uploader, 0, 4 * sizeof(vertices[0]), vbuf_offset, vbuf,
|
||||
(void**)&vertices);
|
||||
if (!vbuf) {
|
||||
if (u_upload_alloc(st->uploader, 0, 4 * sizeof(vertices[0]),
|
||||
vbuf_offset, vbuf, (void **) &vertices) != PIPE_OK) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -141,9 +141,8 @@ draw_quad(struct st_context *st,
|
|||
GLuint i, offset;
|
||||
float (*vertices)[2][4]; /**< vertex pos + color */
|
||||
|
||||
u_upload_alloc(st->uploader, 0, 4 * sizeof(vertices[0]), &offset, &vbuf,
|
||||
(void**)&vertices);
|
||||
if (!vbuf) {
|
||||
if (u_upload_alloc(st->uploader, 0, 4 * sizeof(vertices[0]),
|
||||
&offset, &vbuf, (void **) &vertices) != PIPE_OK) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -568,9 +568,8 @@ draw_quad(struct gl_context *ctx, GLfloat x0, GLfloat y0, GLfloat z,
|
|||
struct pipe_resource *buf = NULL;
|
||||
unsigned offset;
|
||||
|
||||
u_upload_alloc(st->uploader, 0, 4 * sizeof(verts[0]), &offset, &buf,
|
||||
(void**)&verts);
|
||||
if (!buf) {
|
||||
if (u_upload_alloc(st->uploader, 0, 4 * sizeof(verts[0]), &offset,
|
||||
&buf, (void **) &verts) != PIPE_OK) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -148,10 +148,9 @@ st_DrawTex(struct gl_context *ctx, GLfloat x, GLfloat y, GLfloat z,
|
|||
GLfloat *vbuf = NULL;
|
||||
GLuint attr;
|
||||
|
||||
u_upload_alloc(st->uploader, 0,
|
||||
numAttribs * 4 * 4 * sizeof(GLfloat),
|
||||
&offset, &vbuffer, (void**)&vbuf);
|
||||
if (!vbuffer) {
|
||||
if (u_upload_alloc(st->uploader, 0,
|
||||
numAttribs * 4 * 4 * sizeof(GLfloat),
|
||||
&offset, &vbuffer, (void **) &vbuf) != PIPE_OK) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,7 +84,12 @@ all_varyings_in_vbos(const struct gl_client_array *arrays[])
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
/**
|
||||
* Basically, translate Mesa's index buffer information into
|
||||
* a pipe_index_buffer object.
|
||||
* \return TRUE or FALSE for success/failure
|
||||
*/
|
||||
static boolean
|
||||
setup_index_buffer(struct st_context *st,
|
||||
const struct _mesa_index_buffer *ib,
|
||||
struct pipe_index_buffer *ibuffer)
|
||||
|
|
@ -100,8 +105,12 @@ setup_index_buffer(struct st_context *st,
|
|||
ibuffer->offset = pointer_to_offset(ib->ptr);
|
||||
}
|
||||
else if (st->indexbuf_uploader) {
|
||||
u_upload_data(st->indexbuf_uploader, 0, ib->count * ibuffer->index_size,
|
||||
ib->ptr, &ibuffer->offset, &ibuffer->buffer);
|
||||
if (u_upload_data(st->indexbuf_uploader, 0,
|
||||
ib->count * ibuffer->index_size, ib->ptr,
|
||||
&ibuffer->offset, &ibuffer->buffer) != PIPE_OK) {
|
||||
/* out of memory */
|
||||
return FALSE;
|
||||
}
|
||||
u_upload_unmap(st->indexbuf_uploader);
|
||||
}
|
||||
else {
|
||||
|
|
@ -110,6 +119,7 @@ setup_index_buffer(struct st_context *st,
|
|||
}
|
||||
|
||||
cso_set_index_buffer(st->cso_context, ibuffer);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -220,7 +230,10 @@ st_draw_vbo(struct gl_context *ctx,
|
|||
vbo_get_minmax_indices(ctx, prims, ib, &min_index, &max_index,
|
||||
nr_prims);
|
||||
|
||||
setup_index_buffer(st, ib, &ibuffer);
|
||||
if (!setup_index_buffer(st, ib, &ibuffer)) {
|
||||
/* out of memory */
|
||||
return;
|
||||
}
|
||||
|
||||
info.indexed = TRUE;
|
||||
if (min_index != ~0 && max_index != ~0) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue