Skip to content

Commit fdcd393

Browse files
committed
Hotfix: disable validation on instance creation failure
It appears that `VK_LAYER_KHRONOS_validation` may be reported as present when queried, but instance creation fails with `vk::ErrorLayerNotPresent`. This change catches that exception and then attempts to create the instance without any layers.
1 parent e5a7d11 commit fdcd393

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

lib/vk/src/vk.cpp

+10-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ vk::UniqueInstance create_instance(std::vector<char const*> extensions, std::uin
2020
if (std::find_if(available_layers.begin(), available_layers.end(), layer_search) != available_layers.end()) {
2121
extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
2222
} else {
23+
logger::warn("[Device] Validation layer requested but not found");
2324
out_flags &= ~Vulkan::eValidation;
2425
}
2526
}
@@ -40,8 +41,15 @@ vk::UniqueInstance create_instance(std::vector<char const*> extensions, std::uin
4041
ici.enabledLayerCount = 1;
4142
ici.ppEnabledLayerNames = layers;
4243
}
43-
auto ret = vk::createInstanceUnique(ici);
44-
if (ret) { VULKAN_HPP_DEFAULT_DISPATCHER.init(ret.get()); }
44+
auto ret = vk::UniqueInstance{};
45+
try {
46+
ret = vk::createInstanceUnique(ici);
47+
} catch (vk::LayerNotPresentError const& e) {
48+
logger::error("[Vulkan Instance] {}", e.what());
49+
ici.enabledLayerCount = 0;
50+
ret = vk::createInstanceUnique(ici);
51+
}
52+
VULKAN_HPP_DEFAULT_DISPATCHER.init(ret.get());
4553
return ret;
4654
}
4755

0 commit comments

Comments
 (0)