mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-28 19:50:06 +01:00
[wsi] Change interface for surface creation
This temporarily breaks Win32 swap chains, but we're fine with that since this will take some refactoring.
This commit is contained in:
parent
bd87e19de1
commit
1754b73ade
@ -410,7 +410,8 @@ namespace dxvk::vk {
|
|||||||
|
|
||||||
|
|
||||||
VkResult Presenter::createSurface() {
|
VkResult Presenter::createSurface() {
|
||||||
VkResult status = wsi::createSurface(m_window, m_vki, &m_surface);
|
/* TODO fix */
|
||||||
|
VkResult status = wsi::createSurface(m_window, nullptr, m_vki->instance(), &m_surface);
|
||||||
|
|
||||||
if (status != VK_SUCCESS)
|
if (status != VK_SUCCESS)
|
||||||
return status;
|
return status;
|
||||||
|
@ -143,12 +143,13 @@ namespace dxvk::wsi {
|
|||||||
|
|
||||||
|
|
||||||
VkResult createSurface(
|
VkResult createSurface(
|
||||||
HWND hWindow,
|
HWND hWindow,
|
||||||
const Rc<vk::InstanceFn>& vki,
|
PFN_vkGetInstanceProcAddr pfnVkGetInstanceProcAddr,
|
||||||
VkSurfaceKHR* pSurface) {
|
VkInstance instance,
|
||||||
|
VkSurfaceKHR* pSurface) {
|
||||||
SDL_Window* window = fromHwnd(hWindow);
|
SDL_Window* window = fromHwnd(hWindow);
|
||||||
|
|
||||||
return SDL_Vulkan_CreateSurface(window, vki->instance(), pSurface)
|
return SDL_Vulkan_CreateSurface(window, instance, pSurface)
|
||||||
? VK_SUCCESS
|
? VK_SUCCESS
|
||||||
: VK_ERROR_OUT_OF_HOST_MEMORY;
|
: VK_ERROR_OUT_OF_HOST_MEMORY;
|
||||||
}
|
}
|
||||||
|
@ -276,17 +276,23 @@ namespace dxvk::wsi {
|
|||||||
|
|
||||||
VkResult createSurface(
|
VkResult createSurface(
|
||||||
HWND hWindow,
|
HWND hWindow,
|
||||||
const Rc<vk::InstanceFn>& vki,
|
PFN_vkGetInstanceProcAddr pfnVkGetInstanceProcAddr,
|
||||||
|
VkInstance instance,
|
||||||
VkSurfaceKHR* pSurface) {
|
VkSurfaceKHR* pSurface) {
|
||||||
HINSTANCE hInstance = reinterpret_cast<HINSTANCE>(
|
HINSTANCE hInstance = reinterpret_cast<HINSTANCE>(
|
||||||
GetWindowLongPtr(hWindow, GWLP_HINSTANCE));
|
GetWindowLongPtr(hWindow, GWLP_HINSTANCE));
|
||||||
|
|
||||||
|
auto pfnVkCreateWin32SurfaceKHR = reinterpret_cast<PFN_vkCreateWin32SurfaceKHR>(
|
||||||
|
pfnVkGetInstanceProcAddr(instance, "vkCreateWin32SurfaceKHR"));
|
||||||
|
|
||||||
|
if (!pfnVkCreateWin32SurfaceKHR)
|
||||||
|
return VK_ERROR_FEATURE_NOT_PRESENT;
|
||||||
|
|
||||||
VkWin32SurfaceCreateInfoKHR info = { VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR };
|
VkWin32SurfaceCreateInfoKHR info = { VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR };
|
||||||
info.hinstance = hInstance;
|
info.hinstance = hInstance;
|
||||||
info.hwnd = hWindow;
|
info.hwnd = hWindow;
|
||||||
|
|
||||||
return vki->vkCreateWin32SurfaceKHR(
|
return (*pfnVkCreateWin32SurfaceKHR)(instance, &info, nullptr, pSurface);
|
||||||
vki->instance(), &info, nullptr, pSurface);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -115,12 +115,14 @@ namespace dxvk::wsi {
|
|||||||
* \brief Create a surface for a window
|
* \brief Create a surface for a window
|
||||||
*
|
*
|
||||||
* \param [in] hWindow The window
|
* \param [in] hWindow The window
|
||||||
* \param [in] vki The instance
|
* \param [in] pfnVkGetInstanceProcAddr \c vkGetInstanceProcAddr pointer
|
||||||
|
* \param [in] instance Vulkan instance
|
||||||
* \param [out] pSurface The surface
|
* \param [out] pSurface The surface
|
||||||
*/
|
*/
|
||||||
VkResult createSurface(
|
VkResult createSurface(
|
||||||
HWND hWindow,
|
HWND hWindow,
|
||||||
const Rc<vk::InstanceFn>& vki,
|
PFN_vkGetInstanceProcAddr pfnVkGetInstanceProcAddr,
|
||||||
|
VkInstance instance,
|
||||||
VkSurfaceKHR* pSurface);
|
VkSurfaceKHR* pSurface);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user