From 8a0dbcda4f5b38b51e76f678558fe12d4e1cac9f Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Wed, 12 Jul 2023 22:06:50 -0700 Subject: [PATCH] [Impeller] Remove unactionable error logs and use structure chains for instance creation. I didn't know this when I wrote it initially but structure chains will throw a compile time error if a chain member violates the Vulkan spec. pNext chaining is easy to mess up otherwise and we should use structure chains where possible. We are already doing this during pipeline construction. --- .../renderer/backend/vulkan/context_vk.cc | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/impeller/renderer/backend/vulkan/context_vk.cc b/impeller/renderer/backend/vulkan/context_vk.cc index 56e06ff165cae..54332291e670d 100644 --- a/impeller/renderer/backend/vulkan/context_vk.cc +++ b/impeller/renderer/backend/vulkan/context_vk.cc @@ -185,28 +185,21 @@ void ContextVK::Setup(Settings settings) { application_info.setPEngineName("Impeller"); application_info.setPApplicationName("Impeller"); + vk::StructureChain + instance_chain; + + if (!caps->AreValidationsEnabled()) { + instance_chain.unlink(); + } + std::vector enabled_validations = { vk::ValidationFeatureEnableEXT::eSynchronizationValidation, }; - vk::ValidationFeaturesEXT validation; + auto validation = instance_chain.get(); validation.setEnabledValidationFeatures(enabled_validations); - vk::InstanceCreateInfo instance_info; - if (caps->AreValidationsEnabled()) { - std::stringstream ss; - ss << "Enabling validation layers, features: ["; - for (const auto& validation : enabled_validations) { - ss << vk::to_string(validation) << " "; - } - ss << "]"; - FML_LOG(ERROR) << ss.str(); -#if !defined(IMPELLER_ENABLE_VULKAN_VALIDATION_LAYERS) && FML_OS_ANDROID - FML_LOG(ERROR) << "Vulkan validation layers turned on but the gn argument " - "`--enable-vulkan-validation-layers` is missing."; -#endif - instance_info.pNext = &validation; - } + auto instance_info = instance_chain.get(); instance_info.setPEnabledLayerNames(enabled_layers_c); instance_info.setPEnabledExtensionNames(enabled_extensions_c); instance_info.setPApplicationInfo(&application_info);