From 795f01e18772aaa051eeac8431ffbde95c68e366 Mon Sep 17 00:00:00 2001 From: Ian Elliott Date: Tue, 7 Jun 2022 17:52:52 -0600 Subject: Disable KHR_no_error temporarily Speculatively fix crash in Skia on ANGLE that has been happening Test: Add logcat statements and run applications Bug: 220069903 Change-Id: I01b9896a6feb8be524849dafbc1df9526fc98754 --- include/platform/FrontendFeatures.h | 5 +++++ include/platform/frontend_features.json | 8 ++++++++ src/libANGLE/Display.cpp | 4 ++-- src/libANGLE/renderer/vulkan/DisplayVk.cpp | 5 +++++ src/libANGLE/renderer/vulkan/DisplayVk.h | 2 ++ src/libANGLE/renderer/vulkan/RendererVk.cpp | 11 +++++++++++ src/libANGLE/renderer/vulkan/RendererVk.h | 2 ++ util/angle_features_autogen.cpp | 1 + util/angle_features_autogen.h | 1 + 9 files changed, 37 insertions(+), 2 deletions(-) diff --git a/include/platform/FrontendFeatures.h b/include/platform/FrontendFeatures.h index 6500c9c6b4..0a046f93da 100644 --- a/include/platform/FrontendFeatures.h +++ b/include/platform/FrontendFeatures.h @@ -81,6 +81,11 @@ struct FrontendFeatures : FeatureSetBase "enableProgramBinaryForCapture", FeatureCategory::FrontendFeatures, "Even if FrameCapture is enabled, enable GL_OES_get_program_binary", &members, "http://anglebug.com/5658"}; + + FeatureInfo forceGlErrorChecking = { + "forceGlErrorChecking", FeatureCategory::FrontendFeatures, + "Force GL error checking (i.e. prevent applications from disabling error checking", + &members, "https://issuetracker.google.com/220069903"}; }; inline FrontendFeatures::FrontendFeatures() = default; diff --git a/include/platform/frontend_features.json b/include/platform/frontend_features.json index b391a4494a..e9d0b9a428 100644 --- a/include/platform/frontend_features.json +++ b/include/platform/frontend_features.json @@ -100,6 +100,14 @@ "Even if FrameCapture is enabled, enable GL_OES_get_program_binary" ], "issue": "http://anglebug.com/5658" + }, + { + "name": "force_gl_error_checking", + "category": "Features", + "description": [ + "Force GL error checking (i.e. prevent applications from disabling error checking" + ], + "issue": "https://issuetracker.google.com/220069903" } ] } diff --git a/src/libANGLE/Display.cpp b/src/libANGLE/Display.cpp index 9b6fcc2ee4..fba434e6e8 100644 --- a/src/libANGLE/Display.cpp +++ b/src/libANGLE/Display.cpp @@ -2004,8 +2004,8 @@ void Display::initDisplayExtensions() mDisplayExtensions = mImplementation->getExtensions(); // Some extensions are always available because they are implemented in the EGL layer. - mDisplayExtensions.createContext = true; - mDisplayExtensions.createContextNoError = true; + mDisplayExtensions.createContext = true; + mDisplayExtensions.createContextNoError = !mFrontendFeatures.forceGlErrorChecking.enabled; mDisplayExtensions.createContextWebGLCompatibility = true; mDisplayExtensions.createContextBindGeneratesResource = true; mDisplayExtensions.createContextClientArrays = true; diff --git a/src/libANGLE/renderer/vulkan/DisplayVk.cpp b/src/libANGLE/renderer/vulkan/DisplayVk.cpp index 2f5a4846ef..0a6ffe0122 100644 --- a/src/libANGLE/renderer/vulkan/DisplayVk.cpp +++ b/src/libANGLE/renderer/vulkan/DisplayVk.cpp @@ -404,6 +404,11 @@ egl::Error DisplayVk::getEGLError(EGLint errorCode) return egl::Error(errorCode, 0, std::move(errorString)); } +void DisplayVk::initializeFrontendFeatures(angle::FrontendFeatures *features) const +{ + mRenderer->initializeFrontendFeatures(features); +} + void DisplayVk::populateFeatureList(angle::FeatureList *features) { mRenderer->getFeatures().populateFeatureList(features); diff --git a/src/libANGLE/renderer/vulkan/DisplayVk.h b/src/libANGLE/renderer/vulkan/DisplayVk.h index a4ae8d51f5..9abd263ada 100644 --- a/src/libANGLE/renderer/vulkan/DisplayVk.h +++ b/src/libANGLE/renderer/vulkan/DisplayVk.h @@ -168,6 +168,8 @@ class DisplayVk : public DisplayImpl, public vk::Context // TODO(jmadill): Remove this once refactor is done. http://anglebug.com/3041 egl::Error getEGLError(EGLint errorCode); + void initializeFrontendFeatures(angle::FrontendFeatures *features) const override; + void populateFeatureList(angle::FeatureList *features) override; ShareGroupImpl *createShareGroup() override; diff --git a/src/libANGLE/renderer/vulkan/RendererVk.cpp b/src/libANGLE/renderer/vulkan/RendererVk.cpp index cfa1476310..5ca545e07a 100644 --- a/src/libANGLE/renderer/vulkan/RendererVk.cpp +++ b/src/libANGLE/renderer/vulkan/RendererVk.cpp @@ -3416,6 +3416,17 @@ const gl::Limitations &RendererVk::getNativeLimitations() const return mNativeLimitations; } +void RendererVk::initializeFrontendFeatures(angle::FrontendFeatures *features) const +{ + bool isSwiftShader = + IsSwiftshader(mPhysicalDeviceProperties.vendorID, mPhysicalDeviceProperties.deviceID); + + // Hopefully-temporary work-around for a crash on SwiftShader. An Android process is turning + // off GL error checking, and then asking ANGLE to write past the end of a buffer. + // https://issuetracker.google.com/issues/220069903 + ANGLE_FEATURE_CONDITION(features, forceGlErrorChecking, (IsAndroid() && isSwiftShader)); +} + angle::Result RendererVk::getPipelineCacheSize(DisplayVk *displayVk, size_t *pipelineCacheSizeOut) { VkResult result = mPipelineCache.getCacheData(mDevice, pipelineCacheSizeOut, nullptr); diff --git a/src/libANGLE/renderer/vulkan/RendererVk.h b/src/libANGLE/renderer/vulkan/RendererVk.h index 49c2f52208..766b165618 100644 --- a/src/libANGLE/renderer/vulkan/RendererVk.h +++ b/src/libANGLE/renderer/vulkan/RendererVk.h @@ -38,6 +38,7 @@ namespace angle { class Library; +struct FrontendFeatures; } // namespace angle namespace egl @@ -173,6 +174,7 @@ class RendererVk : angle::NonCopyable const gl::TextureCapsMap &getNativeTextureCaps() const; const gl::Extensions &getNativeExtensions() const; const gl::Limitations &getNativeLimitations() const; + void initializeFrontendFeatures(angle::FrontendFeatures *features) const; uint32_t getQueueFamilyIndex() const { return mCurrentQueueFamilyIndex; } const VkQueueFamilyProperties &getQueueFamilyProperties() const diff --git a/util/angle_features_autogen.cpp b/util/angle_features_autogen.cpp index d222eecb20..2e971039c1 100644 --- a/util/angle_features_autogen.cpp +++ b/util/angle_features_autogen.cpp @@ -122,6 +122,7 @@ constexpr PackedEnumMap kFeatureNames = {{ {Feature::ForceFallbackFormat, "forceFallbackFormat"}, {Feature::ForceFragmentShaderPrecisionHighpToMediump, "forceFragmentShaderPrecisionHighpToMediump"}, + {Feature::ForceGlErrorChecking, "forceGlErrorChecking"}, {Feature::ForceInitShaderVariables, "forceInitShaderVariables"}, {Feature::ForceMaxUniformBufferSize16KB, "forceMaxUniformBufferSize16KB"}, {Feature::ForceNearestFiltering, "forceNearestFiltering"}, diff --git a/util/angle_features_autogen.h b/util/angle_features_autogen.h index a0205f5d9c..d744213160 100644 --- a/util/angle_features_autogen.h +++ b/util/angle_features_autogen.h @@ -115,6 +115,7 @@ enum class Feature ForceDriverUniformOverSpecConst, ForceFallbackFormat, ForceFragmentShaderPrecisionHighpToMediump, + ForceGlErrorChecking, ForceInitShaderVariables, ForceMaxUniformBufferSize16KB, ForceNearestFiltering, -- cgit v1.2.3