From: Samuel Pitoiset Date: Fri, 10 Jul 2020 14:04:26 +0000 (+0200) Subject: radv: destroy the base object if VkCreateRenderPass*() failed X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2e5968023f7ffb44524958cf40ef8665b70af681;p=mesa.git radv: destroy the base object if VkCreateRenderPass*() failed Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- diff --git a/src/amd/vulkan/radv_pass.c b/src/amd/vulkan/radv_pass.c index 0c1ab154cb6..e3606adbcd5 100644 --- a/src/amd/vulkan/radv_pass.c +++ b/src/amd/vulkan/radv_pass.c @@ -300,6 +300,16 @@ radv_num_subpass_attachments(const VkSubpassDescription *desc) (desc->pDepthStencilAttachment != NULL); } +static void +radv_destroy_render_pass(struct radv_device *device, + const VkAllocationCallbacks *pAllocator, + struct radv_render_pass *pass) +{ + vk_object_base_finish(&pass->base); + vk_free2(&device->vk.alloc, pAllocator, pass->subpass_attachments); + vk_free2(&device->vk.alloc, pAllocator, pass); +} + VkResult radv_CreateRenderPass( VkDevice _device, const VkRenderPassCreateInfo* pCreateInfo, @@ -370,7 +380,7 @@ VkResult radv_CreateRenderPass( subpass_attachment_count * sizeof(struct radv_subpass_attachment), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (pass->subpass_attachments == NULL) { - vk_free2(&device->vk.alloc, pAllocator, pass); + radv_destroy_render_pass(device, pAllocator, pass); return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY); } } else @@ -553,7 +563,7 @@ VkResult radv_CreateRenderPass2( subpass_attachment_count * sizeof(struct radv_subpass_attachment), 8, VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); if (pass->subpass_attachments == NULL) { - vk_free2(&device->vk.alloc, pAllocator, pass); + radv_destroy_render_pass(device, pAllocator, pass); return vk_error(device->instance, VK_ERROR_OUT_OF_HOST_MEMORY); } } else @@ -690,9 +700,7 @@ void radv_DestroyRenderPass( if (!_pass) return; - vk_object_base_finish(&pass->base); - vk_free2(&device->vk.alloc, pAllocator, pass->subpass_attachments); - vk_free2(&device->vk.alloc, pAllocator, pass); + radv_destroy_render_pass(device, pAllocator, pass); } void radv_GetRenderAreaGranularity(