From 22a303ef129452842823872ffdaeda687c5b6de6 Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Sat, 4 May 2024 19:42:14 +0300 Subject: [PATCH] Add VulkanContext implementation for Windows --- Build | 4 ++ source/graphics/vkwin32/vulkancontext.cpp | 37 +++++++++++++++++++ .../graphics/vkwin32/vulkancontext_platform.h | 20 ++++++++++ 3 files changed, 61 insertions(+) create mode 100644 source/graphics/vkwin32/vulkancontext.cpp create mode 100644 source/graphics/vkwin32/vulkancontext_platform.h diff --git a/Build b/Build index 848b240..05bd094 100644 --- a/Build +++ b/Build @@ -150,6 +150,10 @@ package "mspgui" { overlay "wgl"; }; + if_feature "vulkan" + { + overlay "vkwin32"; + }; }; if_arch "darwin" { diff --git a/source/graphics/vkwin32/vulkancontext.cpp b/source/graphics/vkwin32/vulkancontext.cpp new file mode 100644 index 0000000..60361bc --- /dev/null +++ b/source/graphics/vkwin32/vulkancontext.cpp @@ -0,0 +1,37 @@ +#include "vulkancontext.h" +#include +#include "vulkancontext_private.h" +#include "display_private.h" +#include "window_private.h" + +namespace Msp { +namespace Graphics { + +void VulkanContext::add_platform_extensions(std::vector &extensions) const +{ + extensions.push_back("VK_KHR_win32_surface"); +} + +void VulkanContext::init_platform_functions() +{ + VulkanFunctions &f = priv->functions; + + f.vkCreateWin32Surface = get_function("vkCreateWin32SurfaceKHR"); +} + +void VulkanContext::init_surface() +{ + const VulkanFunctions &f = priv->functions; + + VkWin32SurfaceCreateInfoKHR surface_create_info = { }; + surface_create_info.sType = VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR; + surface_create_info.hinstance = static_cast(Application::get_data()); + surface_create_info.hwnd = window.get_private().window; + + VkResult result = f.vkCreateWin32Surface(priv->instance, &surface_create_info, nullptr, &priv->surface); + if(result!=VK_SUCCESS) + throw vulkan_error(result, "vkCreateWin32Surface"); +} + +} // namespace Graphics +} // namespace Msp diff --git a/source/graphics/vkwin32/vulkancontext_platform.h b/source/graphics/vkwin32/vulkancontext_platform.h new file mode 100644 index 0000000..b3a82c0 --- /dev/null +++ b/source/graphics/vkwin32/vulkancontext_platform.h @@ -0,0 +1,20 @@ +#ifndef MSP_GRAPHICS_VULKANCONTEXT_PLATFORM_H_ +#define MSP_GRAPHICS_VULKANCONTEXT_PLATFORM_H_ + +#define VK_USE_PLATFORM_WIN32_KHR +#define WIN32_LEAN_AND_MEAN +#define NOMINMAX +#include + +namespace Msp { +namespace Graphics { + +struct VulkanPlatformFunctions +{ + PFN_vkCreateWin32SurfaceKHR vkCreateWin32Surface = nullptr; +}; + +} // namespace Graphics +} // namespace Msp + +#endif -- 2.45.2