radeonsi: handle index buffer alloc failures
authorMarek Olšák <marek.olsak@amd.com>
Thu, 10 Sep 2015 15:42:31 +0000 (17:42 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Thu, 24 Sep 2015 17:51:42 +0000 (19:51 +0200)
Cc: 11.0 <mesa-stable@lists.freedesktop.org>
Acked-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
src/gallium/drivers/radeonsi/si_state_draw.c

index 8cb98d7317c1b1cd5624adbe33b8b70f46965e43..b4c59f805e5adf04b0b9e0d79a1e0ef37f6e4dd6 100644 (file)
@@ -782,6 +782,10 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
 
                        u_upload_alloc(sctx->b.uploader, start_offset, count * 2,
                                       &out_offset, &out_buffer, &ptr);
+                       if (!out_buffer) {
+                               pipe_resource_reference(&ib.buffer, NULL);
+                               return;
+                       }
 
                        util_shorten_ubyte_elts_to_userptr(&sctx->b.b, &ib, 0,
                                                           ib.offset + start_offset,
@@ -802,6 +806,8 @@ void si_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *info)
                        u_upload_data(sctx->b.uploader, start_offset, count * ib.index_size,
                                      (char*)ib.user_buffer + start_offset,
                                      &ib.offset, &ib.buffer);
+                       if (!ib.buffer)
+                               return;
                        /* info->start will be added by the drawing code */
                        ib.offset -= start_offset;
                }