Vulkan/Device: Allow to specify additionnal layers and extensions

Former-commit-id: adad0618a4a7a93c246cc97297e69601ee7af24c [formerly e8a833ff02f357280d80910c5f983d379054f82a]
Former-commit-id: d2cf201e725836a709b2c633ea5c1c155e9bbc4f
This commit is contained in:
Lynix 2016-06-17 18:12:38 +02:00
parent e332f2f77e
commit 1634311008
1 changed files with 25 additions and 2 deletions

View File

@ -219,8 +219,31 @@ namespace Nz
queueCreateInfos.emplace_back(createInfo);
}
std::array<const char*, 1> enabledExtensions = {VK_KHR_SWAPCHAIN_EXTENSION_NAME};
std::array<const char*, 0> enabledLayers;
std::vector<const char*> enabledLayers;
std::vector<const char*> enabledExtensions;
bool bParam;
if (!s_initializationParameters.GetBooleanParameter("VkDeviceInfo_OverrideEnabledExtensions", &bParam) || !bParam)
enabledExtensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
int iParam;
std::vector<String> 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,