From 726261aa05c1fc73436e2a65a06648df901c5d28 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Wed, 13 Nov 2019 12:14:02 +1100 Subject: [PATCH] vulkan: NULL check destruction of vulkan resources If the element fails to start up, any number of vulkan resources could have not been created. --- ext/vulkan/vkfullscreenrender.c | 28 ++++++++++++++++------------ ext/vulkan/vkimageidentity.c | 12 +++++++----- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/ext/vulkan/vkfullscreenrender.c b/ext/vulkan/vkfullscreenrender.c index c5216eb..7062dc7 100644 --- a/ext/vulkan/vkfullscreenrender.c +++ b/ext/vulkan/vkfullscreenrender.c @@ -767,21 +767,25 @@ gst_vulkan_full_screen_render_stop (GstBaseTransform * bt) else last_fence = gst_vulkan_fence_new_always_signalled (render->device); - gst_vulkan_trash_list_add (render->trash_list, - gst_vulkan_trash_new_free_pipeline (last_fence, - render->graphics_pipeline)); + if (render->graphics_pipeline) + gst_vulkan_trash_list_add (render->trash_list, + gst_vulkan_trash_new_free_pipeline (last_fence, + render->graphics_pipeline)); render->graphics_pipeline = VK_NULL_HANDLE; - gst_vulkan_trash_list_add (render->trash_list, - gst_vulkan_trash_new_free_pipeline_layout (last_fence, - render->pipeline_layout)); + if (render->pipeline_layout) + gst_vulkan_trash_list_add (render->trash_list, + gst_vulkan_trash_new_free_pipeline_layout (last_fence, + render->pipeline_layout)); render->pipeline_layout = VK_NULL_HANDLE; - gst_vulkan_trash_list_add (render->trash_list, - gst_vulkan_trash_new_free_render_pass (last_fence, - render->render_pass)); + if (render->render_pass) + gst_vulkan_trash_list_add (render->trash_list, + gst_vulkan_trash_new_free_render_pass (last_fence, + render->render_pass)); render->render_pass = VK_NULL_HANDLE; - gst_vulkan_trash_list_add (render->trash_list, - gst_vulkan_trash_new_mini_object_unref (last_fence, - (GstMiniObject *) render->descriptor_set_layout)); + if (render->descriptor_set_layout) + gst_vulkan_trash_list_add (render->trash_list, + gst_vulkan_trash_new_mini_object_unref (last_fence, + (GstMiniObject *) render->descriptor_set_layout)); render->descriptor_set_layout = NULL; gst_vulkan_fence_unref (last_fence); diff --git a/ext/vulkan/vkimageidentity.c b/ext/vulkan/vkimageidentity.c index aea0e51..0844640 100644 --- a/ext/vulkan/vkimageidentity.c +++ b/ext/vulkan/vkimageidentity.c @@ -420,12 +420,14 @@ gst_vulkan_image_identity_stop (GstBaseTransform * bt) else last_fence = gst_vulkan_fence_new_always_signalled (render->device); - gst_vulkan_trash_list_add (render->trash_list, - gst_vulkan_trash_new_object_unref (last_fence, - (GstObject *) vk_identity->descriptor_pool)); + if (vk_identity->descriptor_pool) + gst_vulkan_trash_list_add (render->trash_list, + gst_vulkan_trash_new_object_unref (last_fence, + (GstObject *) vk_identity->descriptor_pool)); vk_identity->descriptor_pool = NULL; - gst_vulkan_trash_list_add (render->trash_list, - gst_vulkan_trash_new_free_sampler (last_fence, vk_identity->sampler)); + if (vk_identity->sampler) + gst_vulkan_trash_list_add (render->trash_list, + gst_vulkan_trash_new_free_sampler (last_fence, vk_identity->sampler)); vk_identity->sampler = VK_NULL_HANDLE; gst_vulkan_fence_unref (last_fence); -- 2.7.4