From ee690072f8d02a90c75492c35d604c31829eee91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Wed, 5 May 2021 12:06:30 +0200 Subject: [PATCH] VulkanRenderer: Enable synchronization validation in debug --- src/Nazara/VulkanRenderer/Vulkan.cpp | 39 +++++++++++++++++++++------- 1 file changed, 30 insertions(+), 9 deletions(-) diff --git a/src/Nazara/VulkanRenderer/Vulkan.cpp b/src/Nazara/VulkanRenderer/Vulkan.cpp index 4daa698f4..ba667ff8a 100644 --- a/src/Nazara/VulkanRenderer/Vulkan.cpp +++ b/src/Nazara/VulkanRenderer/Vulkan.cpp @@ -202,17 +202,38 @@ namespace Nz } } - VkInstanceCreateInfo instanceInfo = { - VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO, - nullptr, - createFlags, - &appInfo, - UInt32(enabledLayers.size()), - enabledLayers.data(), - UInt32(enabledExtensions.size()), - enabledExtensions.data() + VkInstanceCreateInfo instanceInfo = { VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO }; + +#ifdef NAZARA_DEBUG + VkValidationFeaturesEXT features = {}; + + std::vector enabledFeatures = { + //VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_EXT, + //VK_VALIDATION_FEATURE_ENABLE_GPU_ASSISTED_RESERVE_BINDING_SLOT_EXT, + VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT }; + if (availableLayers.count("VK_LAYER_KHRONOS_validation")) + { + enabledExtensions.push_back(VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME); + + features.sType = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT; + features.enabledValidationFeatureCount = UInt32(enabledFeatures.size()); + features.pEnabledValidationFeatures = enabledFeatures.data(); + + instanceInfo.pNext = &features; + } +#endif + + instanceInfo.flags = createFlags; + instanceInfo.pApplicationInfo = &appInfo; + + instanceInfo.enabledExtensionCount = UInt32(enabledExtensions.size()); + instanceInfo.ppEnabledExtensionNames = enabledExtensions.data(); + + instanceInfo.enabledLayerCount = UInt32(enabledLayers.size()); + instanceInfo.ppEnabledLayerNames = enabledLayers.data(); + if (!s_instance.Create(instanceInfo)) { NazaraError("Failed to create instance: " + TranslateVulkanError(s_instance.GetLastErrorCode()));