diff --git a/include/Nazara/Vulkan/Vulkan.hpp b/include/Nazara/Vulkan/Vulkan.hpp index 97a58d7ee..d5667ce95 100644 --- a/include/Nazara/Vulkan/Vulkan.hpp +++ b/include/Nazara/Vulkan/Vulkan.hpp @@ -23,7 +23,7 @@ namespace Nz Vulkan() = delete; ~Vulkan() = delete; - static Vk::Device& CreateDevice(VkPhysicalDevice gpu, const Vk::Surface& surface, UInt32* presentableFamilyQueue); + static Vk::DeviceHandle CreateDevice(VkPhysicalDevice gpu, const Vk::Surface& surface, UInt32* presentableFamilyQueue); static Vk::Instance& GetInstance(); @@ -31,7 +31,7 @@ namespace Nz static bool IsInitialized(); - static Vk::Device& SelectDevice(VkPhysicalDevice gpu, const Vk::Surface& surface, UInt32* presentableFamilyQueue); + static Vk::DeviceHandle SelectDevice(VkPhysicalDevice gpu, const Vk::Surface& surface, UInt32* presentableFamilyQueue); static void SetParameters(const ParameterList& parameters); diff --git a/src/Nazara/Vulkan/Vulkan.cpp b/src/Nazara/Vulkan/Vulkan.cpp index 4f8fd7c51..d8062907b 100644 --- a/src/Nazara/Vulkan/Vulkan.cpp +++ b/src/Nazara/Vulkan/Vulkan.cpp @@ -158,7 +158,7 @@ namespace Nz return s_moduleReferenceCounter != 0; } - Vk::Device& Vulkan::CreateDevice(VkPhysicalDevice gpu, const Vk::Surface& surface, UInt32* presentableFamilyQueue) + Vk::DeviceHandle Vulkan::CreateDevice(VkPhysicalDevice gpu, const Vk::Surface& surface, UInt32* presentableFamilyQueue) { Nz::ErrorFlags errFlags(ErrorFlag_ThrowException, true); @@ -230,8 +230,8 @@ namespace Nz queueCreateInfos.data(), UInt32(enabledLayers.size()), enabledLayers.data(), - UInt32(enabledLayers.size()), - enabledLayers.data(), + UInt32(enabledExtensions.size()), + enabledExtensions.data(), nullptr }; @@ -243,10 +243,10 @@ namespace Nz *presentableFamilyQueue = presentQueueNodeIndex; - return device; + return device.CreateHandle(); } - Vk::Device& Vulkan::SelectDevice(VkPhysicalDevice gpu, const Vk::Surface& surface, UInt32* presentableFamilyQueue) + Vk::DeviceHandle Vulkan::SelectDevice(VkPhysicalDevice gpu, const Vk::Surface& surface, UInt32* presentableFamilyQueue) { // First, try to find a device compatible with that surface for (Vk::Device& device : s_devices) @@ -276,7 +276,6 @@ namespace Nz // No device had support for that surface, create one return CreateDevice(gpu, surface, presentableFamilyQueue); - } void Vulkan::SetParameters(const ParameterList& parameters) @@ -298,6 +297,7 @@ namespace Nz s_moduleReferenceCounter = 0; // Uninitialize module here + s_devices.clear(); s_instance.Destroy(); Vk::Loader::Uninitialize();