vulkan: Keep vertex buffer around until cleanup

Don't just free it while the command buffer using it is still pending.
This commit is contained in:
Benjamin Otte
2017-01-06 17:16:38 +01:00
parent 639b5ffb9b
commit 5a6ead8760

View File

@@ -35,6 +35,7 @@ struct _GskVulkanRender
VkRenderPass render_pass;
GskVulkanPipelineLayout *layout;
GskVulkanUploader *uploader;
GskVulkanBuffer *vertex_buffer;
GHashTable *descriptor_set_indexes;
VkDescriptorPool descriptor_pool;
@@ -466,7 +467,6 @@ void
gsk_vulkan_render_draw (GskVulkanRender *self,
VkSampler sampler)
{
GskVulkanBuffer *buffer;
VkCommandBuffer command_buffer;
GSList *l;
guint i;
@@ -475,7 +475,7 @@ gsk_vulkan_render_draw (GskVulkanRender *self,
command_buffer = gsk_vulkan_command_pool_get_buffer (self->command_pool);
buffer = gsk_vulkan_render_collect_vertex_data (self);
self->vertex_buffer = gsk_vulkan_render_collect_vertex_data (self);
vkCmdSetViewport (command_buffer,
0,
@@ -521,7 +521,7 @@ gsk_vulkan_render_draw (GskVulkanRender *self,
for (l = self->render_passes; l; l = l->next)
{
gsk_vulkan_render_pass_draw (l->data, self, buffer, self->layout, command_buffer);
gsk_vulkan_render_pass_draw (l->data, self, self->vertex_buffer, self->layout, command_buffer);
}
vkCmdEndRenderPass (command_buffer);
@@ -529,8 +529,6 @@ gsk_vulkan_render_draw (GskVulkanRender *self,
gsk_vulkan_command_pool_submit_buffer (self->command_pool, command_buffer, self->fence);
gsk_vulkan_buffer_free (buffer);
if (GSK_RENDER_MODE_CHECK (SYNC))
{
GSK_VK_CHECK (vkWaitForFences, gdk_vulkan_context_get_device (self->vulkan),
@@ -569,6 +567,8 @@ gsk_vulkan_render_cleanup (GskVulkanRender *self)
gsk_vulkan_command_pool_reset (self->command_pool);
g_clear_pointer (&self->vertex_buffer, gsk_vulkan_buffer_free);
g_hash_table_remove_all (self->descriptor_set_indexes);
GSK_VK_CHECK (vkResetDescriptorPool, device,
self->descriptor_pool,