|
|
@ -155,11 +155,31 @@ vk::Instance CreateInstance(Common::DynamicLibrary& library, vk::InstanceDispatc
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
static constexpr std::array layers_data{"VK_LAYER_LUNARG_standard_validation"};
|
|
|
|
std::vector<const char*> layers;
|
|
|
|
vk::Span<const char*> layers = layers_data;
|
|
|
|
layers.reserve(1);
|
|
|
|
if (!enable_layers) {
|
|
|
|
if (enable_layers) {
|
|
|
|
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);
|
|
|
|
vk::Instance instance = vk::Instance::Create(layers, extensions, dld);
|
|
|
|
if (!instance) {
|
|
|
|
if (!instance) {
|
|
|
|
LOG_ERROR(Render_Vulkan, "Failed to create Vulkan instance");
|
|
|
|
LOG_ERROR(Render_Vulkan, "Failed to create Vulkan instance");
|
|
|
|