[Impeller] Add validation forbidding SamplerAddressMode::kDecal on the OpenGLES backend (#43094)
Fixes uncontrolled crash when kDecal is used (as seen on
https://github.com/flutter/engine/pull/43087).
diff --git a/impeller/renderer/backend/gles/context_gles.cc b/impeller/renderer/backend/gles/context_gles.cc
index 8da1154..47e7256 100644
--- a/impeller/renderer/backend/gles/context_gles.cc
+++ b/impeller/renderer/backend/gles/context_gles.cc
@@ -75,6 +75,7 @@
.SetSupportsComputeSubgroups(false)
.SetSupportsReadFromResolve(false)
.SetSupportsReadFromOnscreenTexture(false)
+ .SetSupportsDecalTileMode(false)
.Build();
}
diff --git a/impeller/renderer/backend/gles/sampler_library_gles.cc b/impeller/renderer/backend/gles/sampler_library_gles.cc
index bea4a4d..7f4cd3d 100644
--- a/impeller/renderer/backend/gles/sampler_library_gles.cc
+++ b/impeller/renderer/backend/gles/sampler_library_gles.cc
@@ -5,6 +5,8 @@
#include "impeller/renderer/backend/gles/sampler_library_gles.h"
#include "impeller/base/config.h"
+#include "impeller/base/validation.h"
+#include "impeller/core/formats.h"
#include "impeller/renderer/backend/gles/sampler_gles.h"
namespace impeller {
@@ -17,6 +19,17 @@
// |SamplerLibrary|
std::shared_ptr<const Sampler> SamplerLibraryGLES::GetSampler(
SamplerDescriptor descriptor) {
+ // TODO(bdero): Change this validation once optional support for kDecal is
+ // added to the OpenGLES backend:
+ // https://github.com/flutter/flutter/issues/129358
+ if (descriptor.width_address_mode == SamplerAddressMode::kDecal ||
+ descriptor.height_address_mode == SamplerAddressMode::kDecal ||
+ descriptor.depth_address_mode == SamplerAddressMode::kDecal) {
+ VALIDATION_LOG << "SamplerAddressMode::kDecal is not supported by the "
+ "OpenGLES backend.";
+ return nullptr;
+ }
+
auto found = samplers_.find(descriptor);
if (found != samplers_.end()) {
return found->second;