diff --git a/src/vulkan/wsi/wsi_common.c b/src/vulkan/wsi/wsi_common.c index 10f98844098..a2ba2021fb9 100644 --- a/src/vulkan/wsi/wsi_common.c +++ b/src/vulkan/wsi/wsi_common.c @@ -512,6 +512,11 @@ wsi_destroy_image(const struct wsi_swapchain *chain, { const struct wsi_device *wsi = chain->wsi; + for (int p = 0; p < image->num_planes; p++) { + if (image->fds[p] >= 0) + close(image->fds[p]); + } + if (image->buffer.blit_cmd_buffers) { for (uint32_t i = 0; i < wsi->queue_family_count; i++) { wsi->FreeCommandBuffers(chain->device, chain->cmd_pools[i], diff --git a/src/vulkan/wsi/wsi_common_display.c b/src/vulkan/wsi/wsi_common_display.c index 3c9f3b1c32b..410dc4220c2 100644 --- a/src/vulkan/wsi/wsi_common_display.c +++ b/src/vulkan/wsi/wsi_common_display.c @@ -1136,10 +1136,6 @@ fail_handle: for (unsigned int i = 0; i < image->base.num_planes; i++) { if (image->buffer[i]) wsi_display_destroy_buffer(wsi, image->buffer[i]); - if (image->base.fds[i] != -1) { - close(image->base.fds[i]); - image->base.fds[i] = -1; - } } wsi_destroy_image(&chain->base, &image->base); diff --git a/src/vulkan/wsi/wsi_common_drm.c b/src/vulkan/wsi/wsi_common_drm.c index 72af5b2c820..9b00ed2218a 100644 --- a/src/vulkan/wsi/wsi_common_drm.c +++ b/src/vulkan/wsi/wsi_common_drm.c @@ -393,12 +393,8 @@ wsi_create_native_image_mem(const struct wsi_swapchain *chain, image->fds[p] = fd; } else { image->fds[p] = os_dupfd_cloexec(fd); - if (image->fds[p] == -1) { - for (uint32_t i = 0; i < p; i++) - close(image->fds[i]); - + if (image->fds[p] == -1) return VK_ERROR_OUT_OF_HOST_MEMORY; - } } } } else { diff --git a/src/vulkan/wsi/wsi_common_private.h b/src/vulkan/wsi/wsi_common_private.h index af190ce501b..c6e575cd518 100644 --- a/src/vulkan/wsi/wsi_common_private.h +++ b/src/vulkan/wsi/wsi_common_private.h @@ -182,6 +182,9 @@ VkResult wsi_create_image(const struct wsi_swapchain *chain, const struct wsi_image_info *info, struct wsi_image *image); +void +wsi_image_init(struct wsi_image *image); + void wsi_destroy_image(const struct wsi_swapchain *chain, struct wsi_image *image); diff --git a/src/vulkan/wsi/wsi_common_wayland.c b/src/vulkan/wsi/wsi_common_wayland.c index 0678556105e..ac2d918d127 100644 --- a/src/vulkan/wsi/wsi_common_wayland.c +++ b/src/vulkan/wsi/wsi_common_wayland.c @@ -1167,6 +1167,7 @@ wsi_wl_image_init(struct wsi_wl_swapchain *chain, image->base.drm_modifier >> 32, image->base.drm_modifier & 0xffffffff); close(image->base.fds[i]); + image->base.fds[i] = -1; } image->buffer =