Vulkan: Add possibility to set custom layers
Former-commit-id: f40bed53ba11cc449586ee5bca9bdff0db18a967 [formerly 416333d7d0f3b516c6e0d78b34ff0f060d04a7ab] Former-commit-id: 050ee60750bb94cb007a7a450bdf2852a5d4a3c5
This commit is contained in:
parent
992cd303a7
commit
247efdc2cb
|
|
@ -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,21 +266,29 @@ 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)
|
||||||
{
|
{
|
||||||
VkDeviceQueueCreateInfo createInfo = {
|
auto it = std::find_if(queueCreateInfos.begin(), queueCreateInfos.end(), [queueFamily] (const VkDeviceQueueCreateInfo& createInfo)
|
||||||
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO,
|
{
|
||||||
nullptr,
|
return createInfo.queueFamilyIndex == queueFamily;
|
||||||
0,
|
});
|
||||||
queueFamily,
|
|
||||||
1,
|
|
||||||
&priority
|
|
||||||
};
|
|
||||||
|
|
||||||
queueCreateInfos.emplace_back(createInfo);
|
if (it == queueCreateInfos.end())
|
||||||
|
{
|
||||||
|
VkDeviceQueueCreateInfo createInfo = {
|
||||||
|
VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO, // VkStructureType sType;
|
||||||
|
nullptr, // const void* pNext;
|
||||||
|
0, // VkDeviceQueueCreateFlags flags;
|
||||||
|
queueFamily, // uint32_t queueFamilyIndex;
|
||||||
|
1, // uint32_t queueCount;
|
||||||
|
priorities.data() // const float* pQueuePriorities;
|
||||||
|
};
|
||||||
|
|
||||||
|
queueCreateInfos.emplace_back(createInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -264,10 +296,34 @@ namespace Nz
|
||||||
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))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue