vkd3d: Avoid oldSwapchain.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
This commit is contained in:
Hans-Kristian Arntzen 2021-06-02 17:36:45 +02:00
parent 582138b063
commit 6f5f55c84a
1 changed files with 10 additions and 3 deletions

View File

@ -1426,6 +1426,16 @@ static HRESULT d3d12_swapchain_create_vulkan_swapchain(struct d3d12_swapchain *s
return DXGI_ERROR_UNSUPPORTED;
}
/* Having a pending acquired image while using oldSwapchain seems to cause strange deadlocks
* on Wine + NV Linux.
* Using oldSwapchain does not buy us anything and can only lead to weirdness, so just destroy
* the swapchain up front. */
if (swapchain->vk_swapchain)
{
vk_procs->vkDestroySwapchainKHR(swapchain->command_queue->device->vk_device, swapchain->vk_swapchain, NULL);
swapchain->vk_swapchain = VK_NULL_HANDLE;
}
if (width && height)
{
vk_swapchain_desc.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
@ -1456,9 +1466,6 @@ static HRESULT d3d12_swapchain_create_vulkan_swapchain(struct d3d12_swapchain *s
else
vk_swapchain = VK_NULL_HANDLE;
if (swapchain->vk_swapchain)
vk_procs->vkDestroySwapchainKHR(swapchain->command_queue->device->vk_device, swapchain->vk_swapchain, NULL);
swapchain->vk_swapchain = vk_swapchain;
swapchain->vk_swapchain_width = width;
swapchain->vk_swapchain_height = height;