Skip to content

Commit 62df3bd

Browse files
author
Jonah Williams
authored
[Impeller] fail CI if validations are enabled but not available. (flutter#51378)
Fixes flutter#145041 Will test this by unsetting the VVL configuration
1 parent d048b9a commit 62df3bd

File tree

6 files changed

+25
-4
lines changed

6 files changed

+25
-4
lines changed

impeller/playground/backend/vulkan/playground_impl_vk.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,9 @@ PlaygroundImplVK::PlaygroundImplVK(PlaygroundSwitches switches)
8888
context_settings.shader_libraries_data = ShaderLibraryMappingsForPlayground();
8989
context_settings.cache_directory = fml::paths::GetCachesDirectory();
9090
context_settings.enable_validation = switches_.enable_vulkan_validation;
91+
context_settings.fatal_missing_validations =
92+
switches_.enable_vulkan_validation;
93+
;
9194

9295
auto context_vk = ContextVK::Create(std::move(context_settings));
9396
if (!context_vk || !context_vk->IsValid()) {

impeller/renderer/backend/vulkan/capabilities_vk.cc

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ namespace impeller {
1414

1515
static constexpr const char* kInstanceLayer = "ImpellerInstance";
1616

17-
CapabilitiesVK::CapabilitiesVK(bool enable_validations) {
17+
CapabilitiesVK::CapabilitiesVK(bool enable_validations,
18+
bool fatal_missing_validations) {
1819
auto extensions = vk::enumerateInstanceExtensionProperties();
1920
auto layers = vk::enumerateInstanceLayerProperties();
2021

@@ -45,6 +46,9 @@ CapabilitiesVK::CapabilitiesVK(bool enable_validations) {
4546
<< "Requested Impeller context creation with validations but the "
4647
"validation layers could not be found. Expect no Vulkan validation "
4748
"checks!";
49+
if (fatal_missing_validations) {
50+
FML_LOG(FATAL) << "Validation missing. Exiting.";
51+
}
4852
}
4953
if (validations_enabled_) {
5054
FML_LOG(INFO) << "Vulkan validations are enabled.";

impeller/renderer/backend/vulkan/capabilities_vk.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,8 @@ enum class OptionalDeviceExtensionVK : uint32_t {
113113
class CapabilitiesVK final : public Capabilities,
114114
public BackendCast<CapabilitiesVK, Capabilities> {
115115
public:
116-
explicit CapabilitiesVK(bool enable_validations);
116+
explicit CapabilitiesVK(bool enable_validations,
117+
bool fatal_missing_validations = false);
117118

118119
~CapabilitiesVK();
119120

impeller/renderer/backend/vulkan/context_vk.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,8 +168,8 @@ void ContextVK::Setup(Settings settings) {
168168
enable_validation = true;
169169
#endif
170170

171-
auto caps =
172-
std::shared_ptr<CapabilitiesVK>(new CapabilitiesVK(enable_validation));
171+
auto caps = std::shared_ptr<CapabilitiesVK>(new CapabilitiesVK(
172+
enable_validation, settings.fatal_missing_validations));
173173

174174
if (!caps->IsValid()) {
175175
VALIDATION_LOG << "Could not determine device capabilities.";

impeller/renderer/backend/vulkan/context_vk.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ class ContextVK final : public Context,
4949
fml::UniqueFD cache_directory;
5050
bool enable_validation = false;
5151
bool enable_gpu_tracing = false;
52+
/// If validations are requested but cannot be enabled, log a fatal error.
53+
bool fatal_missing_validations = false;
5254

5355
Settings() = default;
5456

impeller/renderer/backend/vulkan/context_vk_unittests.cc

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,17 @@ TEST(ContextVKTest, WarmUpFunctionCreatesRenderPass) {
222222
"vkCreateRenderPass") != functions->end());
223223
}
224224

225+
TEST(ContextVKTest, FatalMissingValidations) {
226+
EXPECT_DEATH(const std::shared_ptr<ContextVK> context =
227+
MockVulkanContextBuilder()
228+
.SetSettingsCallback([](ContextVK::Settings& settings) {
229+
settings.enable_validation = true;
230+
settings.fatal_missing_validations = true;
231+
})
232+
.Build(),
233+
"");
234+
}
235+
225236
TEST(ContextVKTest, HasDefaultColorFormat) {
226237
std::shared_ptr<ContextVK> context = MockVulkanContextBuilder().Build();
227238

0 commit comments

Comments
 (0)