MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-Samples / enable_layer_setting

Function enable_layer_setting

framework/vulkan_sample.h:718–763  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

716}
717
718inline bool enable_layer_setting(vk::LayerSettingEXT const &requested_layer_setting,
719 uint32_t enabled_layers_count,
720 char const *const *enabled_layers,
721 std::vector<vk::LayerSettingEXT> &enabled_layer_settings)
722{
723 // We are checking if the layer is available.
724 // Vulkan does not provide a reflection API for layer settings. Layer settings are described in each layer JSON manifest.
725 bool is_available = std::any_of(
726 enabled_layers, enabled_layers + enabled_layers_count, [&requested_layer_setting](auto const &enabled_layer) { return strcmp(enabled_layer, requested_layer_setting.pLayerName) == 0; });
727
728#if defined(PLATFORM__MACOS)
729 // On Apple the MoltenVK driver configuration layer is implicitly enabled and available, and cannot be explicitly added or checked via enabled_layers.
730 if (!is_available && strcmp(requested_layer_setting.pLayerName, "MoltenVK") == 0)
731 {
732 // Check for VK_EXT_layer_settings extension in the driver which indicates MoltenVK vs. KosmicKrisp (note: VK_MVK_moltenvk extension is deprecated).
733 std::vector<vk::ExtensionProperties> available_instance_extensions = vk::enumerateInstanceExtensionProperties();
734 if (std::ranges::any_of(available_instance_extensions,
735 [](vk::ExtensionProperties const &extension) { return strcmp(extension.extensionName, VK_EXT_LAYER_SETTINGS_EXTENSION_NAME) == 0; }))
736 {
737 is_available = true;
738 }
739 }
740#endif
741
742 if (!is_available)
743 {
744 LOGW("Layer: {} not found. Disabling layer setting: {}", requested_layer_setting.pLayerName, requested_layer_setting.pSettingName);
745 return false;
746 }
747
748 bool is_already_enabled = std::ranges::any_of(enabled_layer_settings,
749 [&requested_layer_setting](vk::LayerSettingEXT const &enabled_layer_setting) {
750 return (strcmp(requested_layer_setting.pLayerName, enabled_layer_setting.pLayerName) == 0) &&
751 (strcmp(requested_layer_setting.pSettingName, enabled_layer_setting.pSettingName) == 0);
752 });
753
754 if (is_already_enabled)
755 {
756 LOGW("Ignoring duplicated layer setting {} in layer {}.", requested_layer_setting.pSettingName, requested_layer_setting.pLayerName);
757 return false;
758 }
759
760 LOGI("Enabling layer setting {} in layer {}.", requested_layer_setting.pSettingName, requested_layer_setting.pLayerName);
761 enabled_layer_settings.push_back(requested_layer_setting);
762 return true;
763}
764
765inline bool enable_layer_setting(VkLayerSettingEXT const &requested_layer_setting,
766 uint32_t enabled_layers_count,

Callers 1

Calls

no outgoing calls

Tested by

no test coverage detected