diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-06-22 09:10:45 +0200 |
---|---|---|
committer | ReinUsesLisp <reinuseslisp@airmail.cc> | 2020-06-22 09:10:45 +0200 |
commit | 2f09c7ddd314f03da0fbafacfcae6b0a47a209ae (patch) | |
tree | 72518a91005e5143e11f87e59a8345bb90e116fb /src/video_core/renderer_vulkan/renderer_vulkan.cpp | |
parent | Merge pull request #4122 from lioncash/hide (diff) | |
download | yuzu-2f09c7ddd314f03da0fbafacfcae6b0a47a209ae.tar yuzu-2f09c7ddd314f03da0fbafacfcae6b0a47a209ae.tar.gz yuzu-2f09c7ddd314f03da0fbafacfcae6b0a47a209ae.tar.bz2 yuzu-2f09c7ddd314f03da0fbafacfcae6b0a47a209ae.tar.lz yuzu-2f09c7ddd314f03da0fbafacfcae6b0a47a209ae.tar.xz yuzu-2f09c7ddd314f03da0fbafacfcae6b0a47a209ae.tar.zst yuzu-2f09c7ddd314f03da0fbafacfcae6b0a47a209ae.zip |
Diffstat (limited to 'src/video_core/renderer_vulkan/renderer_vulkan.cpp')
-rw-r--r-- | src/video_core/renderer_vulkan/renderer_vulkan.cpp | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp index cd9673d1f..2d9b18ed9 100644 --- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp +++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp @@ -155,11 +155,31 @@ vk::Instance CreateInstance(Common::DynamicLibrary& library, vk::InstanceDispatc } } - static constexpr std::array layers_data{"VK_LAYER_LUNARG_standard_validation"}; - vk::Span<const char*> layers = layers_data; - if (!enable_layers) { - layers = {}; + std::vector<const char*> layers; + layers.reserve(1); + if (enable_layers) { + layers.push_back("VK_LAYER_KHRONOS_validation"); + } + + const std::optional layer_properties = vk::EnumerateInstanceLayerProperties(dld); + if (!layer_properties) { + LOG_ERROR(Render_Vulkan, "Failed to query layer properties, disabling layers"); + layers.clear(); + } + + for (auto layer_it = layers.begin(); layer_it != layers.end();) { + const char* const layer = *layer_it; + const auto it = std::find_if( + layer_properties->begin(), layer_properties->end(), + [layer](const VkLayerProperties& prop) { return !std::strcmp(layer, prop.layerName); }); + if (it == layer_properties->end()) { + LOG_ERROR(Render_Vulkan, "Layer {} not available, removing it", layer); + layer_it = layers.erase(layer_it); + } else { + ++layer_it; + } } + vk::Instance instance = vk::Instance::Create(layers, extensions, dld); if (!instance) { LOG_ERROR(Render_Vulkan, "Failed to create Vulkan instance"); |