diff --git a/src/Nazara/Vulkan/Vulkan.cpp b/src/Nazara/Vulkan/Vulkan.cpp index d8062907b..f97cc635f 100644 --- a/src/Nazara/Vulkan/Vulkan.cpp +++ b/src/Nazara/Vulkan/Vulkan.cpp @@ -219,8 +219,31 @@ namespace Nz queueCreateInfos.emplace_back(createInfo); } - std::array enabledExtensions = {VK_KHR_SWAPCHAIN_EXTENSION_NAME}; - std::array enabledLayers; + + std::vector enabledLayers; + std::vector enabledExtensions; + + bool bParam; + if (!s_initializationParameters.GetBooleanParameter("VkDeviceInfo_OverrideEnabledExtensions", &bParam) || !bParam) + enabledExtensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME); + + int iParam; + std::vector additionalExtensions; // Just to keep the String alive + if (s_initializationParameters.GetIntegerParameter("VkDeviceInfo_EnabledExtensionCount", &iParam)) + { + for (int i = 0; i < iParam; ++i) + { + Nz::String parameterName = "VkDeviceInfo_EnabledExtension" + String::Number(i); + Nz::String extension; + if (s_initializationParameters.GetStringParameter(parameterName, &extension)) + { + additionalExtensions.emplace_back(std::move(extension)); + enabledExtensions.push_back(additionalExtensions.back().GetConstBuffer()); + } + else + NazaraWarning("Parameter " + parameterName + " expected"); + } + } VkDeviceCreateInfo createInfo = { VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO,