Skip to content

Commit b17138e

Browse files
committed
Merge branch 'sync-validation-feature' of https://github.com/TP-David/VulkanSceneGraph into TP-David-sync-validation-feature
2 parents fbd391a + 7357403 commit b17138e

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

include/vsg/vk/Instance.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ namespace vsg
4141
/// return names of layers that are supported from the desired list.
4242
extern VSG_DECLSPEC Names validateInstanceLayerNames(const Names& names);
4343

44+
/// return true if the specified layer name exists in the list.
45+
extern VSG_DECLSPEC bool containsInstanceLayerName(const Names& names, const char* layerName);
46+
4447
/// Instance encapsulates the VkInstance.
4548
class VSG_DECLSPEC Instance : public Inherit<Object, Instance>
4649
{

src/vsg/vk/Instance.cpp

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,16 @@ Names vsg::validateInstanceLayerNames(const Names& names)
9191
return validatedNames;
9292
}
9393

94+
bool vsg::containsInstanceLayerName(const Names& names, const char* layerName)
95+
{
96+
if (!layerName) return false;
97+
98+
auto cmpFunc = [&](const char* name) {
99+
return strcmp(name, layerName) == 0;
100+
};
101+
return std::find_if(names.begin(), names.end(), cmpFunc) != names.end();
102+
}
103+
94104
static VKAPI_ATTR VkBool32 VKAPI_CALL debugUtilsMessengerCallback(
95105
VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
96106
VkDebugUtilsMessageTypeFlagsEXT /*messageType*/,
@@ -143,7 +153,20 @@ Instance::Instance(Names instanceExtensions, Names layers, uint32_t vulkanApiVer
143153
createInfo.enabledLayerCount = static_cast<uint32_t>(layers.size());
144154
createInfo.ppEnabledLayerNames = layers.empty() ? nullptr : layers.data();
145155

146-
createInfo.pNext = nullptr;
156+
// enable synchronization validation feature if requested
157+
VkValidationFeatureEnableEXT validationFeature = VK_VALIDATION_FEATURE_ENABLE_SYNCHRONIZATION_VALIDATION_EXT;
158+
VkValidationFeaturesEXT validationFeatures{};
159+
if (containsInstanceLayerName(layers, "VK_LAYER_KHRONOS_synchronization2"))
160+
{
161+
validationFeatures.sType = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT;
162+
validationFeatures.enabledValidationFeatureCount = 1;
163+
validationFeatures.pEnabledValidationFeatures = &validationFeature;
164+
createInfo.pNext = &validationFeatures;
165+
}
166+
else
167+
{
168+
createInfo.pNext = nullptr;
169+
}
147170

148171
VkInstance instance;
149172
VkResult result = vkCreateInstance(&createInfo, allocator, &instance);

0 commit comments

Comments
 (0)