mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
svga: don't crash/assert if we fail to allocate a vertex buffer
v2: check if pipe_buffer_map() returns NULL, and return NULL from svga_vbuf_render_map_vertices(). Per Jose's suggestion. Reviewed-by: José Fonseca <jfonseca@vmware.com>
This commit is contained in:
parent
aa66130682
commit
871dc64869
1 changed files with 20 additions and 9 deletions
|
|
@ -96,7 +96,9 @@ svga_vbuf_render_allocate_vertices( struct vbuf_render *render,
|
|||
PIPE_BIND_VERTEX_BUFFER,
|
||||
PIPE_USAGE_STREAM,
|
||||
svga_render->vbuf_size);
|
||||
assert(svga_render->vbuf);
|
||||
/* The buffer allocation may fail if we run out of memory.
|
||||
* The draw module's vbuf code should handle that without crashing.
|
||||
*/
|
||||
}
|
||||
|
||||
svga->swtnl.new_vdecl = TRUE;
|
||||
|
|
@ -119,14 +121,23 @@ svga_vbuf_render_map_vertices( struct vbuf_render *render )
|
|||
struct svga_vbuf_render *svga_render = svga_vbuf_render(render);
|
||||
struct svga_context *svga = svga_render->svga;
|
||||
|
||||
char *ptr = (char*)pipe_buffer_map(&svga->pipe,
|
||||
svga_render->vbuf,
|
||||
PIPE_TRANSFER_WRITE |
|
||||
PIPE_TRANSFER_FLUSH_EXPLICIT |
|
||||
PIPE_TRANSFER_DISCARD |
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED,
|
||||
&svga_render->vbuf_transfer);
|
||||
return ptr + svga_render->vbuf_offset;
|
||||
if (svga_render->vbuf) {
|
||||
char *ptr = (char*)pipe_buffer_map(&svga->pipe,
|
||||
svga_render->vbuf,
|
||||
PIPE_TRANSFER_WRITE |
|
||||
PIPE_TRANSFER_FLUSH_EXPLICIT |
|
||||
PIPE_TRANSFER_DISCARD |
|
||||
PIPE_TRANSFER_UNSYNCHRONIZED,
|
||||
&svga_render->vbuf_transfer);
|
||||
if (ptr)
|
||||
return ptr + svga_render->vbuf_offset;
|
||||
else
|
||||
return NULL;
|
||||
}
|
||||
else {
|
||||
/* we probably ran out of memory when allocating the vertex buffer */
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue