Mesa (master): svga: don't crash/ assert if we fail to allocate a vertex buffer
Brian Paul
brianp at kemper.freedesktop.org
Fri Nov 11 14:11:52 UTC 2011
Module: Mesa
Branch: master
Commit: 871dc64869fa371debf03735e215a12cf2ec1742
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=871dc64869fa371debf03735e215a12cf2ec1742
Author: Brian Paul <brianp at vmware.com>
Date: Thu Nov 10 09:54:26 2011 -0700
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 at vmware.com>
---
src/gallium/drivers/svga/svga_swtnl_backend.c | 29 +++++++++++++++++-------
1 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/src/gallium/drivers/svga/svga_swtnl_backend.c b/src/gallium/drivers/svga/svga_swtnl_backend.c
index 15b1bb5..e149d21 100644
--- a/src/gallium/drivers/svga/svga_swtnl_backend.c
+++ b/src/gallium/drivers/svga/svga_swtnl_backend.c
@@ -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
More information about the mesa-commit
mailing list