From 94a2063987c31fd8c84ad0a049221b7c84787ba8 Mon Sep 17 00:00:00 2001 From: Pierre-Eric Pelloux-Prayer Date: Fri, 13 Aug 2021 17:16:19 +0200 Subject: [PATCH] vbo/dlist: limit allocation sizes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Marek Olšák Part-of: --- src/mesa/vbo/vbo_save_api.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/mesa/vbo/vbo_save_api.c b/src/mesa/vbo/vbo_save_api.c index 645806b1d5d..6f9bc222828 100644 --- a/src/mesa/vbo/vbo_save_api.c +++ b/src/mesa/vbo/vbo_save_api.c @@ -368,10 +368,30 @@ update_vao(struct gl_context *ctx, } +static void wrap_filled_vertex(struct gl_context *ctx); +static void compile_vertex_list(struct gl_context *ctx); + static void realloc_storage(struct gl_context *ctx, int prim_count, int vertex_count) { struct vbo_save_context *save = &vbo_context(ctx)->save; + const int ten_MB = 10 * 1024 * 1024; + + /* Limit how much memory we allocate. */ + if (save->prim_store->used > 0 && + vertex_count > 0 && + vertex_count * save->vertex_size > ten_MB) { + wrap_filled_vertex(ctx); + vertex_count = ten_MB / save->vertex_size; + } + + if (prim_count > 0 && + prim_count * sizeof(struct _mesa_prim) > ten_MB) { + if (save->prim_store->used > 0) + compile_vertex_list(ctx); + prim_count = ten_MB / sizeof(struct _mesa_prim); + } + if (vertex_count >= 0) save->vertex_store = realloc_vertex_store(save->vertex_store, save->vertex_size, vertex_count);