You've already forked flecs_tests
36 lines
1.3 KiB
C
36 lines
1.3 KiB
C
#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 });
|
|
} |