Replace uniform with storage buffer for instances

Signed-off-by: Piotr Krygier <piotrkrygier@everyonecancode@xyz>
This commit is contained in:
Piotr Krygier
2026-02-10 19:07:40 +01:00
parent ff527767b9
commit de597ebc5d
3 changed files with 16 additions and 12 deletions
+11 -4
View File
@@ -119,7 +119,12 @@ static rse_err_t create_instance_buffers(struct graphics_context_t* context)
buffer_size = sizeof(struct instance_data_t) * MAX_INSTANCE_NUMBER;
STATUS_CHECK(
buffer_create_uniform(context, &context->render_targets[RENDER_TARGET_3D].instance_buffer, buffer_size));
create_buffer(context,
buffer_size,
VK_BUFFER_USAGE_STORAGE_BUFFER_BIT,
VMA_MEMORY_USAGE_AUTO_PREFER_HOST,
VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT,
&context->render_targets[RENDER_TARGET_3D].instance_buffer));
/* TODO: Move creation to somewhere else? */
STATUS_CHECK(create_buffer(context,
CMD_BUFFER_SIZE,
@@ -435,10 +440,12 @@ void destroy_buffers(struct graphics_context_t* context)
destroy_buffer(context, &context->render_targets[RENDER_TARGET_3D].vertex_buffer);
destroy_buffer(context, &context->render_targets[RENDER_TARGET_3D].index_buffer);
destroy_buffer(context, &context->render_targets[RENDER_TARGET_3D].draw_indirect_command_buffer);
destroy_buffer(context, &context->render_targets[RENDER_TARGET_3D].instance_buffer);
for (iter = 0U; iter < context->uniform_buffers.vulkan_buffers_count; ++iter)
{
vmaDestroyBuffer(context->vulkan_handles.allocator, context->uniform_buffers.vulkan_buffers[iter].buffer, context->uniform_buffers.vulkan_buffers[iter].allocation);
for (iter = 0U; iter < context->uniform_buffers.vulkan_buffers_count; ++iter) {
vmaDestroyBuffer(context->vulkan_handles.allocator,
context->uniform_buffers.vulkan_buffers[iter].buffer,
context->uniform_buffers.vulkan_buffers[iter].allocation);
}
context->uniform_buffers.vulkan_buffers_count = 0;