swapchain: Enabled to use user allocator. 46/178946/1
authorjoonbum.ko <joonbum.ko@samsung.com>
Tue, 15 May 2018 02:42:27 +0000 (11:42 +0900)
committerjoonbum.ko <joonbum.ko@samsung.com>
Tue, 15 May 2018 02:42:27 +0000 (11:42 +0900)
Change-Id: I224292a562bc391114a1391b7dcbff6bd5bf6e50
Signed-off-by: joonbum.ko <joonbum.ko@samsung.com>
src/wsi/swapchain.c

index fb68bb7..18aef02 100644 (file)
@@ -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);
        }
 }