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");
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");
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;
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);
}
}