From 1634311008326c3d988115d1afeb1ad5a19ad7bb Mon Sep 17 00:00:00 2001 From: Lynix Date: Fri, 17 Jun 2016 18:12:38 +0200 Subject: [PATCH] Vulkan/Device: Allow to specify additionnal layers and extensions Former-commit-id: adad0618a4a7a93c246cc97297e69601ee7af24c [formerly e8a833ff02f357280d80910c5f983d379054f82a] Former-commit-id: d2cf201e725836a709b2c633ea5c1c155e9bbc4f --- src/Nazara/Vulkan/Vulkan.cpp | 27 +++++++++++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) 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,