From 7592608fcc09aa9240dffc4dd313dd41952d732c Mon Sep 17 00:00:00 2001 From: "joonbum.ko" Date: Tue, 15 May 2018 11:42:27 +0900 Subject: [PATCH] swapchain: Enabled to use user allocator. Change-Id: I224292a562bc391114a1391b7dcbff6bd5bf6e50 Signed-off-by: joonbum.ko --- src/wsi/swapchain.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/wsi/swapchain.c b/src/wsi/swapchain.c index fb68bb7..18aef02 100644 --- a/src/wsi/swapchain.c +++ b/src/wsi/swapchain.c @@ -116,7 +116,8 @@ vk_CreateSwapchainKHR(VkDevice device, return VK_ERROR_EXTENSION_NOT_PRESENT; } - allocator = vk_get_allocator(device, allocator); + if (allocator == VK_NULL_HANDLE) + allocator = vk_get_allocator(device, allocator); chain = vk_alloc(allocator, sizeof(vk_swapchain_t), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); VK_CHECK(chain, return VK_ERROR_OUT_OF_HOST_MEMORY, "vk_alloc() failed.\n"); @@ -135,7 +136,7 @@ vk_CreateSwapchainKHR(VkDevice device, error = chain->get_buffers(device, chain, &buffers, &chain->buffer_count); VK_CHECK(error == VK_SUCCESS, goto done, "swapchain backend get buffers failed.\n"); - chain->buffers = vk_alloc(chain->allocator, chain->buffer_count * sizeof(vk_buffer_t), + chain->buffers = vk_alloc(allocator, chain->buffer_count * sizeof(vk_buffer_t), VK_SYSTEM_ALLOCATION_SCOPE_OBJECT); VK_CHECK(chain->buffers, goto error_mem_alloc, "vk_alloc() failed.\n"); @@ -160,7 +161,7 @@ vk_CreateSwapchainKHR(VkDevice device, chain->buffers[i].tbm = buffers[i]; icd->create_presentable_image(device, chain->buffers[i].tbm, &image_info, - chain->allocator, &chain->buffers[i].image); + allocator, &chain->buffers[i].image); } goto done; @@ -204,19 +205,26 @@ vk_DestroySwapchainKHR(VkDevice device, PFN_vkGetDeviceProcAddr icd_gdpa = (PFN_vkGetDeviceProcAddr)icd->get_proc_addr(NULL, "vkGetDeviceProcAddr"); if (chain != VK_NULL_HANDLE) { + if (allocator == VK_NULL_HANDLE) { + if (chain->allocator == VK_NULL_HANDLE) + allocator = vk_get_allocator(NULL, NULL); + else + allocator = chain->allocator; + } + if (icd_gdpa != VK_NULL_HANDLE) { PFN_vkDestroyImage destroy_image = (PFN_vkDestroyImage)icd_gdpa(device, "vkDestroyImage"); if (destroy_image != VK_NULL_HANDLE) { uint32_t i; for (i = 0; i < chain->buffer_count; i++) - destroy_image(device, chain->buffers[i].image, chain->allocator); + destroy_image(device, chain->buffers[i].image, allocator); } } chain->deinit(device, chain); - vk_free(chain->allocator, chain->buffers); - vk_free(chain->allocator, chain); + vk_free(allocator, chain->buffers); + vk_free(allocator, chain); } } -- 2.7.4