aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-06-11 15:27:45 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-06-11 15:27:45 +0000
commit6c9d9b962f2e8ed3d56791072ae9e5971511d7f4 (patch)
tree719b132d3f8be984c45da4ba972d266857f3b2d3
parent7b621341ad50b83d4dcf92b292048d4d499dbac4 (diff)
parent795f01e18772aaa051eeac8431ffbde95c68e366 (diff)
downloadangle-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.h5
-rw-r--r--include/platform/frontend_features.json8
-rw-r--r--src/libANGLE/Display.cpp4
-rw-r--r--src/libANGLE/renderer/vulkan/DisplayVk.cpp5
-rw-r--r--src/libANGLE/renderer/vulkan/DisplayVk.h2
-rw-r--r--src/libANGLE/renderer/vulkan/RendererVk.cpp11
-rw-r--r--src/libANGLE/renderer/vulkan/RendererVk.h2
-rw-r--r--util/angle_features_autogen.cpp1
-rw-r--r--util/angle_features_autogen.h1
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,