diff options
author | Samuel Pitoiset <[email protected]> | 2020-07-10 16:04:26 +0200 |
---|---|---|
committer | Samuel Pitoiset <[email protected]> | 2020-07-15 13:53:21 +0200 |
commit | 2e5968023f7ffb44524958cf40ef8665b70af681 (patch) | |
tree | fe293ca428d5266b3e1edcc63f785c5c68f0a26d /src | |
parent | 0eec81d01928636665c818f2635bad06c4d4bf4f (diff) |
radv: destroy the base object if VkCreateRenderPass*() failed
Signed-off-by: Samuel Pitoiset <[email protected]>
Reviewed-by: Bas Nieuwenhuizen <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5868>
Diffstat (limited to 'src')
-rw-r--r-- | src/amd/vulkan/radv_pass.c | 18 |
1 files changed, 13 insertions, 5 deletions
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( |