From d24982c5f1b7622041f44d32169c7e14f45e2ef1 Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Mon, 10 Oct 2016 17:11:58 +0200 Subject: [PATCH] libs/vkd3d: Destroy Vulkan render passes and framebuffers on command allocator reset. --- libs/vkd3d/command.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libs/vkd3d/command.c b/libs/vkd3d/command.c index a4375707..66c835a5 100644 --- a/libs/vkd3d/command.c +++ b/libs/vkd3d/command.c @@ -747,6 +747,7 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_allocator_Reset(ID3D12CommandAllo const struct vkd3d_vk_device_procs *vk_procs; struct d3d12_command_list *list; struct d3d12_device *device; + unsigned int i; VkResult vr; TRACE("iface %p.\n", iface); @@ -765,6 +766,18 @@ static HRESULT STDMETHODCALLTYPE d3d12_command_allocator_Reset(ID3D12CommandAllo device = allocator->device; vk_procs = &device->vk_procs; + for (i = 0; i < allocator->framebuffer_count; ++i) + { + VK_CALL(vkDestroyFramebuffer(device->vk_device, allocator->framebuffers[i], NULL)); + } + allocator->framebuffer_count = 0; + + for (i = 0; i < allocator->pass_count; ++i) + { + VK_CALL(vkDestroyRenderPass(device->vk_device, allocator->passes[i], NULL)); + } + allocator->pass_count = 0; + if ((vr = VK_CALL(vkResetCommandPool(device->vk_device, allocator->vk_command_pool, VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)))) {