| 773 | |
| 774 | template <vkb::BindingType bindingType> |
| 775 | inline void VulkanSample<bindingType>::extend_instance_create_info_impl(vkb::StructureChainBuilderCpp<vk::InstanceCreateInfo> &scb) const |
| 776 | { |
| 777 | vk::InstanceCreateInfo const *create_info = scb.get_struct<vk::InstanceCreateInfo>(); |
| 778 | assert(create_info); |
| 779 | |
| 780 | #if defined(VKB_DEBUG) || defined(VKB_VALIDATION_LAYERS) |
| 781 | if (contains(create_info->enabledExtensionCount, create_info->ppEnabledExtensionNames, VK_EXT_DEBUG_UTILS_EXTENSION_NAME)) |
| 782 | { |
| 783 | vk::DebugUtilsMessengerCreateInfoEXT debug_utils_messenger_create_info{.messageSeverity = vk::DebugUtilsMessageSeverityFlagBitsEXT::eError | vk::DebugUtilsMessageSeverityFlagBitsEXT::eWarning, |
| 784 | .messageType = vk::DebugUtilsMessageTypeFlagBitsEXT::eValidation | vk::DebugUtilsMessageTypeFlagBitsEXT::ePerformance, |
| 785 | .pfnUserCallback = vkb::core::debug_utils_messenger_callback}; |
| 786 | scb.add_struct(debug_utils_messenger_create_info); |
| 787 | } |
| 788 | else if (contains(create_info->enabledExtensionCount, create_info->ppEnabledExtensionNames, VK_EXT_DEBUG_REPORT_EXTENSION_NAME)) |
| 789 | { |
| 790 | vk::DebugReportCallbackCreateInfoEXT debug_report_callback_create_info{.flags = vk::DebugReportFlagBitsEXT::eError | vk::DebugReportFlagBitsEXT::eWarning | vk::DebugReportFlagBitsEXT::ePerformanceWarning, |
| 791 | .pfnCallback = vkb::core::debug_callback}; |
| 792 | scb.add_struct(debug_report_callback_create_info); |
| 793 | } |
| 794 | #endif |
| 795 | |
| 796 | if (contains(create_info->enabledExtensionCount, create_info->ppEnabledExtensionNames, VK_EXT_LAYER_SETTINGS_EXTENSION_NAME)) |
| 797 | { |
| 798 | std::vector<vk::LayerSettingEXT> requested_layer_settings; |
| 799 | if constexpr (bindingType == vkb::BindingType::Cpp) |
| 800 | { |
| 801 | request_layer_settings(requested_layer_settings, scb); |
| 802 | } |
| 803 | else |
| 804 | { |
| 805 | request_layer_settings(reinterpret_cast<std::vector<VkLayerSettingEXT> &>(requested_layer_settings), |
| 806 | reinterpret_cast<vkb::StructureChainBuilderC<VkInstanceCreateInfo> &>(scb)); |
| 807 | } |
| 808 | |
| 809 | std::vector<vk::LayerSettingEXT> enabled_layer_settings; |
| 810 | for (auto const &layer_setting : requested_layer_settings) |
| 811 | { |
| 812 | enable_layer_setting(layer_setting, create_info->enabledLayerCount, create_info->ppEnabledLayerNames, enabled_layer_settings); |
| 813 | } |
| 814 | |
| 815 | if (!enabled_layer_settings.empty()) |
| 816 | { |
| 817 | // If layer settings are defined, then activate the sample's required layer settings during instance creation |
| 818 | vk::LayerSettingsCreateInfoEXT layer_settings_create_info_ext{.settingCount = static_cast<uint32_t>(enabled_layer_settings.size()), |
| 819 | .pSettings = scb.add_chain_data(enabled_layer_settings).data()}; |
| 820 | scb.add_struct(layer_settings_create_info_ext); |
| 821 | } |
| 822 | } |
| 823 | else if (contains(create_info->enabledExtensionCount, create_info->ppEnabledExtensionNames, VK_EXT_VALIDATION_FEATURES_EXTENSION_NAME)) |
| 824 | { |
| 825 | std::vector<ValidationFeatureEnableType> requested_validation_feature_enables; |
| 826 | request_validation_feature_enables(requested_validation_feature_enables); |
| 827 | |
| 828 | if (!requested_validation_feature_enables.empty()) |
| 829 | { |
| 830 | vk::ValidationFeaturesEXT validation_features_ext{ |
| 831 | .enabledValidationFeatureCount = static_cast<uint32_t>(requested_validation_feature_enables.size()), |
| 832 | .pEnabledValidationFeatures = reinterpret_cast<vk::ValidationFeatureEnableEXT const *>(scb.add_chain_data(requested_validation_feature_enables).data())}; |
nothing calls this directly
no test coverage detected