diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-06-11 15:27:45 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-06-11 15:27:45 +0000 |
commit | 6c9d9b962f2e8ed3d56791072ae9e5971511d7f4 (patch) | |
tree | 719b132d3f8be984c45da4ba972d266857f3b2d3 | |
parent | 7b621341ad50b83d4dcf92b292048d4d499dbac4 (diff) | |
parent | 795f01e18772aaa051eeac8431ffbde95c68e366 (diff) | |
download | angle-android13-frc-ipsec-release.tar.gz |
Snap for 8712302 from 795f01e18772aaa051eeac8431ffbde95c68e366 to tm-frc-ipsec-releaset_frc_ips_330443010android13-frc-ipsec-release
Change-Id: I8362117fbe239993035db7eb9627c16c2f531b56
-rw-r--r-- | include/platform/FrontendFeatures.h | 5 | ||||
-rw-r--r-- | include/platform/frontend_features.json | 8 | ||||
-rw-r--r-- | src/libANGLE/Display.cpp | 4 | ||||
-rw-r--r-- | src/libANGLE/renderer/vulkan/DisplayVk.cpp | 5 | ||||
-rw-r--r-- | src/libANGLE/renderer/vulkan/DisplayVk.h | 2 | ||||
-rw-r--r-- | src/libANGLE/renderer/vulkan/RendererVk.cpp | 11 | ||||
-rw-r--r-- | src/libANGLE/renderer/vulkan/RendererVk.h | 2 | ||||
-rw-r--r-- | util/angle_features_autogen.cpp | 1 | ||||
-rw-r--r-- | 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<Feature, const char *> 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, |