From 595f8a26de729f310e0e348a8a2882f1d494370e Mon Sep 17 00:00:00 2001 From: Jayden Grubb Date: Mon, 31 Mar 2025 22:35:44 +1000 Subject: [PATCH] Add get_surface_extension to WaylandSystemDriver --- engine/src/drivers/linux/wayland/system_driver.cpp | 13 +++++++++++++ engine/src/drivers/linux/wayland/system_driver.h | 2 ++ engine/src/drivers/vulkan/render_driver.cpp | 7 ++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/engine/src/drivers/linux/wayland/system_driver.cpp b/engine/src/drivers/linux/wayland/system_driver.cpp index 16024b4..e9689b3 100644 --- a/engine/src/drivers/linux/wayland/system_driver.cpp +++ b/engine/src/drivers/linux/wayland/system_driver.cpp @@ -8,6 +8,11 @@ #include "drivers/linux/wayland/system_driver.h" +#ifdef NOVA_VULKAN +#include +#include +#endif + #include using namespace Nova; @@ -20,4 +25,12 @@ WaylandSystemDriver::~WaylandSystemDriver() { NOVA_AUTO_TRACE(); } +const char* WaylandSystemDriver::get_surface_extension() const { +#ifdef NOVA_VULKAN + return VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME; +#else + return nullptr; +#endif +} + #endif // NOVA_WAYLAND diff --git a/engine/src/drivers/linux/wayland/system_driver.h b/engine/src/drivers/linux/wayland/system_driver.h index 86ebc78..ad3c3e3 100644 --- a/engine/src/drivers/linux/wayland/system_driver.h +++ b/engine/src/drivers/linux/wayland/system_driver.h @@ -15,6 +15,8 @@ namespace Nova { public: WaylandSystemDriver(); ~WaylandSystemDriver() override; + + [[nodiscard]] const char* get_surface_extension() const override; }; } // namespace Nova diff --git a/engine/src/drivers/vulkan/render_driver.cpp b/engine/src/drivers/vulkan/render_driver.cpp index e580225..2836adc 100644 --- a/engine/src/drivers/vulkan/render_driver.cpp +++ b/engine/src/drivers/vulkan/render_driver.cpp @@ -118,8 +118,13 @@ void VulkanRenderDriver::_check_extensions() { u32 count; std::unordered_map requested; // + const auto surface_extension = System::get_driver()->get_surface_extension(); + if (!surface_extension) { + throw std::runtime_error("Could not determine required surface extension"); + } + requested[VK_KHR_SURFACE_EXTENSION_NAME] = true; - requested[System::get_driver()->get_surface_extension()] = true; + requested[surface_extension] = true; // Add optional extensions requested[VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME] = false;