- char *ptr = (char*)pipe_buffer_map(screen,
- svga_render->vbuf,
- PIPE_BUFFER_USAGE_CPU_WRITE |
- PIPE_BUFFER_USAGE_FLUSH_EXPLICIT);
- 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_RANGE |
+ PIPE_TRANSFER_UNSYNCHRONIZED,
+ &svga_render->vbuf_transfer);
+ if (ptr) {
+ svga_render->vbuf_ptr = ptr;
+ return ptr + svga_render->vbuf_offset;
+ }
+ else {
+ svga_render->vbuf_ptr = NULL;
+ svga_render->vbuf_transfer = NULL;
+ return NULL;
+ }
+ }
+ else {
+ /* we probably ran out of memory when allocating the vertex buffer */
+ return NULL;
+ }