#include "api.h" #define MAX_BUFFER_SIZE 1024 * 1024 * 1024 // 1GB static void pool_buffer_grow(sg_buffer buffer, uint32_t stripe, uint32_t count, void* data) { size_t size = sg_query_buffer_size(buffer); if(size == MAX_BUFFER_SIZE) return sg_update_buffer(buffer, &(sg_range) { data, MAX_BUFFER_SIZE }); if(size < stripe * count) { sg_buffer_desc desc = sg_query_buffer_desc(buffer); while(desc.size < stripe * count) desc.size = fmaxf(MAX_BUFFER_SIZE, size * 2); sg_uninit_buffer(buffer); sg_init_buffer(buffer, &desc); } sg_update_buffer(buffer, &(sg_range) { data, stripe * count }); } static void pool_view_grow(sg_view view, uint32_t stripe, uint32_t count, void* data) { sg_buffer buffer = sg_query_view_buffer(view); size_t size = sg_query_buffer_size(buffer); if(size == MAX_BUFFER_SIZE) return sg_update_buffer(buffer, &(sg_range) { data, MAX_BUFFER_SIZE }); if(size < stripe * count) { sg_buffer_desc desc = sg_query_buffer_desc(buffer); while(desc.size < stripe * count) desc.size = fmaxf(MAX_BUFFER_SIZE, size * 2); sg_uninit_buffer(buffer); sg_init_buffer(buffer, &desc); } sg_update_buffer(buffer, &(sg_range) { data, stripe * count }); }