dxgi: Translate VkResults to HRESULTs.
Signed-off-by: Józef Kucia <jkucia@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
3e9064a561
commit
9461ca5c9a
|
@ -847,6 +847,21 @@ struct dxgi_vk_funcs
|
||||||
PFN_vkDestroyFence p_vkDestroyFence;
|
PFN_vkDestroyFence p_vkDestroyFence;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static HRESULT hresult_from_vk_result(VkResult vr)
|
||||||
|
{
|
||||||
|
switch (vr)
|
||||||
|
{
|
||||||
|
case VK_SUCCESS:
|
||||||
|
return S_OK;
|
||||||
|
case VK_ERROR_OUT_OF_HOST_MEMORY:
|
||||||
|
case VK_ERROR_OUT_OF_DEVICE_MEMORY:
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
default:
|
||||||
|
FIXME("Unhandled VkResult %d.\n", vr);
|
||||||
|
return E_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct d3d12_swapchain
|
struct d3d12_swapchain
|
||||||
{
|
{
|
||||||
IDXGISwapChain3 IDXGISwapChain3_iface;
|
IDXGISwapChain3 IDXGISwapChain3_iface;
|
||||||
|
@ -1187,18 +1202,18 @@ static HRESULT d3d12_swapchain_acquire_next_image(struct d3d12_swapchain *swapch
|
||||||
VK_NULL_HANDLE, vk_fence, &swapchain->current_buffer_index)) < 0)
|
VK_NULL_HANDLE, vk_fence, &swapchain->current_buffer_index)) < 0)
|
||||||
{
|
{
|
||||||
ERR("Failed to acquire next Vulkan image, vr %d.\n", vr);
|
ERR("Failed to acquire next Vulkan image, vr %d.\n", vr);
|
||||||
return E_FAIL;
|
return hresult_from_vk_result(vr);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((vr = vk_funcs->p_vkWaitForFences(vk_device, 1, &vk_fence, VK_TRUE, UINT64_MAX)) < 0)
|
if ((vr = vk_funcs->p_vkWaitForFences(vk_device, 1, &vk_fence, VK_TRUE, UINT64_MAX)) != VK_SUCCESS)
|
||||||
{
|
{
|
||||||
ERR("Failed to wait for fences, vr %d.\n", vr);
|
ERR("Failed to wait for fence, vr %d.\n", vr);
|
||||||
return E_FAIL;
|
return hresult_from_vk_result(vr);
|
||||||
}
|
}
|
||||||
if ((vr = vk_funcs->p_vkResetFences(vk_device, 1, &vk_fence)) < 0)
|
if ((vr = vk_funcs->p_vkResetFences(vk_device, 1, &vk_fence)) < 0)
|
||||||
{
|
{
|
||||||
ERR("Failed to reset fence, vr %d.\n", vr);
|
ERR("Failed to reset fence, vr %d.\n", vr);
|
||||||
return E_FAIL;
|
return hresult_from_vk_result(vr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
@ -1574,7 +1589,7 @@ static HRESULT select_vk_format(const struct dxgi_vk_funcs *vk_funcs,
|
||||||
{
|
{
|
||||||
WARN("Failed to enumerate supported surface formats, vr %d.\n", vr);
|
WARN("Failed to enumerate supported surface formats, vr %d.\n", vr);
|
||||||
heap_free(formats);
|
heap_free(formats);
|
||||||
return DXGI_ERROR_INVALID_CALL;
|
return hresult_from_vk_result(vr);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < format_count; ++i)
|
for (i = 0; i < format_count; ++i)
|
||||||
|
@ -1612,11 +1627,11 @@ static HRESULT d3d12_swapchain_init(struct d3d12_swapchain *swapchain, IWineDXGI
|
||||||
VkFenceCreateInfo fence_desc;
|
VkFenceCreateInfo fence_desc;
|
||||||
uint32_t queue_family_index;
|
uint32_t queue_family_index;
|
||||||
VkInstance vk_instance;
|
VkInstance vk_instance;
|
||||||
HRESULT hr = E_FAIL;
|
|
||||||
VkBool32 supported;
|
VkBool32 supported;
|
||||||
VkDevice vk_device;
|
VkDevice vk_device;
|
||||||
VkFormat vk_format;
|
VkFormat vk_format;
|
||||||
VkResult vr;
|
VkResult vr;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
swapchain->IDXGISwapChain3_iface.lpVtbl = &d3d12_swapchain_vtbl;
|
swapchain->IDXGISwapChain3_iface.lpVtbl = &d3d12_swapchain_vtbl;
|
||||||
swapchain->refcount = 1;
|
swapchain->refcount = 1;
|
||||||
|
@ -1674,6 +1689,7 @@ static HRESULT d3d12_swapchain_init(struct d3d12_swapchain *swapchain, IWineDXGI
|
||||||
if ((vr = vk_funcs->p_vkCreateWin32SurfaceKHR(vk_instance, &surface_desc, NULL, &vk_surface)) < 0)
|
if ((vr = vk_funcs->p_vkCreateWin32SurfaceKHR(vk_instance, &surface_desc, NULL, &vk_surface)) < 0)
|
||||||
{
|
{
|
||||||
WARN("Failed to create Vulkan surface, vr %d.\n", vr);
|
WARN("Failed to create Vulkan surface, vr %d.\n", vr);
|
||||||
|
hr = hresult_from_vk_result(vr);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1682,17 +1698,18 @@ static HRESULT d3d12_swapchain_init(struct d3d12_swapchain *swapchain, IWineDXGI
|
||||||
queue_family_index, vk_surface, &supported)) < 0 || !supported)
|
queue_family_index, vk_surface, &supported)) < 0 || !supported)
|
||||||
{
|
{
|
||||||
FIXME("Queue family does not support presentation, vr %d.\n", vr);
|
FIXME("Queue family does not support presentation, vr %d.\n", vr);
|
||||||
|
hr = DXGI_ERROR_UNSUPPORTED;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FAILED(hr = select_vk_format(vk_funcs, vk_physical_device, vk_surface, swapchain_desc, &vk_format)))
|
if (FAILED(hr = select_vk_format(vk_funcs, vk_physical_device, vk_surface, swapchain_desc, &vk_format)))
|
||||||
goto fail;
|
goto fail;
|
||||||
hr = E_FAIL;
|
|
||||||
|
|
||||||
if ((vr = vk_funcs->p_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(vk_physical_device,
|
if ((vr = vk_funcs->p_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(vk_physical_device,
|
||||||
vk_surface, &surface_caps)) < 0)
|
vk_surface, &surface_caps)) < 0)
|
||||||
{
|
{
|
||||||
WARN("Failed to get surface capabilities, vr %d.\n", vr);
|
WARN("Failed to get surface capabilities, vr %d.\n", vr);
|
||||||
|
hr = hresult_from_vk_result(vr);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1701,6 +1718,7 @@ static HRESULT d3d12_swapchain_init(struct d3d12_swapchain *swapchain, IWineDXGI
|
||||||
{
|
{
|
||||||
WARN("Buffer count %u is not supported (%u-%u).\n", swapchain_desc->BufferCount,
|
WARN("Buffer count %u is not supported (%u-%u).\n", swapchain_desc->BufferCount,
|
||||||
surface_caps.minImageCount, surface_caps.maxImageCount);
|
surface_caps.minImageCount, surface_caps.maxImageCount);
|
||||||
|
hr = DXGI_ERROR_UNSUPPORTED;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1718,6 +1736,7 @@ static HRESULT d3d12_swapchain_init(struct d3d12_swapchain *swapchain, IWineDXGI
|
||||||
if (!(surface_caps.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR))
|
if (!(surface_caps.supportedCompositeAlpha & VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR))
|
||||||
{
|
{
|
||||||
FIXME("Unsupported alpha mode.\n");
|
FIXME("Unsupported alpha mode.\n");
|
||||||
|
hr = DXGI_ERROR_UNSUPPORTED;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1743,6 +1762,7 @@ static HRESULT d3d12_swapchain_init(struct d3d12_swapchain *swapchain, IWineDXGI
|
||||||
if ((vr = vk_funcs->p_vkCreateSwapchainKHR(vk_device, &vk_swapchain_desc, NULL, &vk_swapchain)) < 0)
|
if ((vr = vk_funcs->p_vkCreateSwapchainKHR(vk_device, &vk_swapchain_desc, NULL, &vk_swapchain)) < 0)
|
||||||
{
|
{
|
||||||
WARN("Failed to create Vulkan swapchain, vr %d.\n", vr);
|
WARN("Failed to create Vulkan swapchain, vr %d.\n", vr);
|
||||||
|
hr = hresult_from_vk_result(vr);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1752,21 +1772,27 @@ static HRESULT d3d12_swapchain_init(struct d3d12_swapchain *swapchain, IWineDXGI
|
||||||
if ((vr = vk_funcs->p_vkCreateFence(vk_device, &fence_desc, NULL, &vk_fence)) < 0)
|
if ((vr = vk_funcs->p_vkCreateFence(vk_device, &fence_desc, NULL, &vk_fence)) < 0)
|
||||||
{
|
{
|
||||||
WARN("Failed to create Vulkan fence, vr %d.\n", vr);
|
WARN("Failed to create Vulkan fence, vr %d.\n", vr);
|
||||||
|
hr = hresult_from_vk_result(vr);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((vr = vk_funcs->p_vkGetSwapchainImagesKHR(vk_device, vk_swapchain, &image_count, NULL)) < 0)
|
if ((vr = vk_funcs->p_vkGetSwapchainImagesKHR(vk_device, vk_swapchain, &image_count, NULL)) < 0)
|
||||||
{
|
{
|
||||||
WARN("Failed to get Vulkan swapchain images, vr %d.\n", vr);
|
WARN("Failed to get Vulkan swapchain images, vr %d.\n", vr);
|
||||||
|
hr = hresult_from_vk_result(vr);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
if (image_count != swapchain_desc->BufferCount)
|
if (image_count != swapchain_desc->BufferCount)
|
||||||
FIXME("Got %u swapchain images, expected %u.\n", image_count, swapchain_desc->BufferCount);
|
FIXME("Got %u swapchain images, expected %u.\n", image_count, swapchain_desc->BufferCount);
|
||||||
if (image_count > ARRAY_SIZE(vk_images))
|
if (image_count > ARRAY_SIZE(vk_images))
|
||||||
|
{
|
||||||
|
hr = E_FAIL;
|
||||||
goto fail;
|
goto fail;
|
||||||
|
}
|
||||||
if ((vr = vk_funcs->p_vkGetSwapchainImagesKHR(vk_device, vk_swapchain, &image_count, vk_images)) < 0)
|
if ((vr = vk_funcs->p_vkGetSwapchainImagesKHR(vk_device, vk_swapchain, &image_count, vk_images)) < 0)
|
||||||
{
|
{
|
||||||
WARN("Failed to get Vulkan swapchain images, vr %d.\n", vr);
|
WARN("Failed to get Vulkan swapchain images, vr %d.\n", vr);
|
||||||
|
hr = hresult_from_vk_result(vr);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue