Vulkan: Add possibility to set custom layers

Former-commit-id: f40bed53ba11cc449586ee5bca9bdff0db18a967 [formerly 416333d7d0f3b516c6e0d78b34ff0f060d04a7ab]
Former-commit-id: 050ee60750bb94cb007a7a450bdf2852a5d4a3c5
This commit is contained in:
Lynix 2016-07-08 18:01:45 +02:00
parent 992cd303a7
commit 247efdc2cb
1 changed files with 68 additions and 12 deletions

View File

@ -59,6 +59,7 @@ namespace Nz
s_initializationParameters.GetStringParameter("VkAppInfo_OverrideApplicationName", &appName); s_initializationParameters.GetStringParameter("VkAppInfo_OverrideApplicationName", &appName);
s_initializationParameters.GetStringParameter("VkAppInfo_OverrideEngineName", &engineName); s_initializationParameters.GetStringParameter("VkAppInfo_OverrideEngineName", &engineName);
bool bParam;
int iParam; int iParam;
if (s_initializationParameters.GetIntegerParameter("VkAppInfo_OverrideAPIVersion", &iParam)) if (s_initializationParameters.GetIntegerParameter("VkAppInfo_OverrideAPIVersion", &iParam))
@ -88,7 +89,29 @@ namespace Nz
std::vector<const char*> enabledLayers; std::vector<const char*> enabledLayers;
std::vector<const char*> enabledExtensions; std::vector<const char*> enabledExtensions;
bool bParam; if (!s_initializationParameters.GetBooleanParameter("VkInstanceInfo_OverrideEnabledLayers", &bParam) || !bParam)
{
//< Nazara default layers goes here
}
std::vector<String> additionalLayers; // Just to keep the String alive
if (s_initializationParameters.GetIntegerParameter("VkInstanceInfo_EnabledLayerCount", &iParam))
{
additionalLayers.reserve(iParam);
for (int i = 0; i < iParam; ++i)
{
Nz::String parameterName = "VkInstanceInfo_EnabledLayer" + String::Number(i);
Nz::String layer;
if (s_initializationParameters.GetStringParameter(parameterName, &layer))
{
additionalLayers.emplace_back(std::move(layer));
enabledLayers.push_back(additionalLayers.back().GetConstBuffer());
}
else
NazaraWarning("Parameter " + parameterName + " expected");
}
}
if (!s_initializationParameters.GetBooleanParameter("VkInstanceInfo_OverrideEnabledExtensions", &bParam) || !bParam) if (!s_initializationParameters.GetBooleanParameter("VkInstanceInfo_OverrideEnabledExtensions", &bParam) || !bParam)
{ {
enabledExtensions.push_back("VK_KHR_surface"); enabledExtensions.push_back("VK_KHR_surface");
@ -121,6 +144,7 @@ namespace Nz
std::vector<String> additionalExtensions; // Just to keep the String alive std::vector<String> additionalExtensions; // Just to keep the String alive
if (s_initializationParameters.GetIntegerParameter("VkInstanceInfo_EnabledExtensionCount", &iParam)) if (s_initializationParameters.GetIntegerParameter("VkInstanceInfo_EnabledExtensionCount", &iParam))
{ {
additionalExtensions.reserve(iParam);
for (int i = 0; i < iParam; ++i) for (int i = 0; i < iParam; ++i)
{ {
Nz::String parameterName = "VkInstanceInfo_EnabledExtension" + String::Number(i); Nz::String parameterName = "VkInstanceInfo_EnabledExtension" + String::Number(i);
@ -242,32 +266,64 @@ namespace Nz
} }
std::array<UInt32, 3> usedQueueFamilies = {graphicsQueueNodeIndex, presentQueueNodeIndex, transfertQueueNodeFamily}; std::array<UInt32, 3> usedQueueFamilies = {graphicsQueueNodeIndex, presentQueueNodeIndex, transfertQueueNodeFamily};
float priority = 1.f; std::array<float, 3> priorities = {1.f, 1.f, 1.f};
std::vector<VkDeviceQueueCreateInfo> queueCreateInfos; std::vector<VkDeviceQueueCreateInfo> queueCreateInfos;
for (UInt32 queueFamily : usedQueueFamilies) for (UInt32 queueFamily : usedQueueFamilies)
{
auto it = std::find_if(queueCreateInfos.begin(), queueCreateInfos.end(), [queueFamily] (const VkDeviceQueueCreateInfo& createInfo)
{
return createInfo.queueFamilyIndex == queueFamily;
});
if (it == queueCreateInfos.end())
{ {
VkDeviceQueueCreateInfo createInfo = { VkDeviceQueueCreateInfo createInfo = {
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // VkStructureType sType;
nullptr, nullptr, // const void* pNext;
0, 0, // VkDeviceQueueCreateFlags flags;
queueFamily, queueFamily, // uint32_t queueFamilyIndex;
1, 1, // uint32_t queueCount;
&priority priorities.data() // const float* pQueuePriorities;
}; };
queueCreateInfos.emplace_back(createInfo); queueCreateInfos.emplace_back(createInfo);
} }
}
std::vector<const char*> enabledLayers; std::vector<const char*> enabledLayers;
std::vector<const char*> enabledExtensions; std::vector<const char*> enabledExtensions;
bool bParam; bool bParam;
int iParam;
if (!s_initializationParameters.GetBooleanParameter("VkDeviceInfo_OverrideEnabledLayers", &bParam) || !bParam)
{
//< Nazara default layers goes here
}
std::vector<String> additionalLayers; // Just to keep the String alive
if (s_initializationParameters.GetIntegerParameter("VkDeviceInfo_EnabledLayerCount", &iParam))
{
additionalLayers.reserve(iParam);
for (int i = 0; i < iParam; ++i)
{
Nz::String parameterName = "VkDeviceInfo_EnabledLayer" + String::Number(i);
Nz::String layer;
if (s_initializationParameters.GetStringParameter(parameterName, &layer))
{
additionalLayers.emplace_back(std::move(layer));
enabledLayers.push_back(additionalLayers.back().GetConstBuffer());
}
else
NazaraWarning("Parameter " + parameterName + " expected");
}
}
if (!s_initializationParameters.GetBooleanParameter("VkDeviceInfo_OverrideEnabledExtensions", &bParam) || !bParam) if (!s_initializationParameters.GetBooleanParameter("VkDeviceInfo_OverrideEnabledExtensions", &bParam) || !bParam)
enabledExtensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME); enabledExtensions.push_back(VK_KHR_SWAPCHAIN_EXTENSION_NAME);
int iParam;
std::vector<String> additionalExtensions; // Just to keep the String alive std::vector<String> additionalExtensions; // Just to keep the String alive
if (s_initializationParameters.GetIntegerParameter("VkDeviceInfo_EnabledExtensionCount", &iParam)) if (s_initializationParameters.GetIntegerParameter("VkDeviceInfo_EnabledExtensionCount", &iParam))
{ {