Source code
Revision control
Copy as Markdown
Other Tools
From f5bb199386a6b42ba05e9e70e2fa842174382854 Mon Sep 17 00:00:00 2001
From: Ashley Hale <ahale@mozilla.com>
Date: Wed, 1 Mar 2023 18:03:04 -0800
Subject: [PATCH] Disable ClearView with scissor on Skylake iGPU because of
observed bugs with edge corruption. (#27)
---
include/platform/autogen/FeaturesD3D_autogen.h | 6 ++++++
include/platform/d3d_features.json | 8 ++++++++
src/libANGLE/renderer/d3d/d3d11/Clear11.cpp | 5 +++++
src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp | 4 ++++
util/autogen/angle_features_autogen.cpp | 1 +
util/autogen/angle_features_autogen.h | 1 +
6 files changed, 25 insertions(+)
diff --git a/include/platform/autogen/FeaturesD3D_autogen.h b/include/platform/autogen/FeaturesD3D_autogen.h
index 6305080..4141d6b 100644
--- a/include/platform/autogen/FeaturesD3D_autogen.h
+++ b/include/platform/autogen/FeaturesD3D_autogen.h
@@ -104,6 +104,12 @@ struct FeaturesD3D : FeatureSetBase
&members,
};
+ FeatureInfo scissoredClearArtifacts = {
+ "scissoredClearArtifacts",
+ FeatureCategory::D3DWorkarounds,
+ &members,
+ };
+
FeatureInfo useSystemMemoryForConstantBuffers = {
"useSystemMemoryForConstantBuffers",
FeatureCategory::D3DWorkarounds,
diff --git a/include/platform/d3d_features.json b/include/platform/d3d_features.json
index 7eb7385..60117c7 100644
--- a/include/platform/d3d_features.json
+++ b/include/platform/d3d_features.json
@@ -114,6 +114,14 @@
],
},
+ {
+ "name": "scissored_clear_artifacts",
+ "category": "Workarounds",
+ "description": [
+ "On Skylake, calling ClearView with a scissor rect that is not a multiple of 8x4 pixels causes corruption of pixels in the 8x4 pixel tiles along the edge which resembles a square wave"
+ ],
+ },
{
"name": "use_system_memory_for_constant_buffers",
"category": "Workarounds",
diff --git a/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp b/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp
index f3c5ae5..7d7553b 100644
--- a/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/Clear11.cpp
@@ -462,6 +462,11 @@ angle::Result Clear11::clearFramebuffer(const gl::Context *context,
}
}
+ if (needScissoredClear && mRenderer->getFeatures().scissoredClearArtifacts.enabled)
+ {
+ canClearView = false;
+ }
+
if ((!canClearView && needScissoredClear) || clearParams.colorType != GL_FLOAT ||
(formatInfo.redBits > 0 && !r) || (formatInfo.greenBits > 0 && !g) ||
(formatInfo.blueBits > 0 && !b) || (formatInfo.alphaBits > 0 && !a))
diff --git a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
index 6fae418..63bbe58 100644
--- a/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
+++ b/src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp
@@ -2175,6 +2175,10 @@ void InitializeFeatures(const Renderer11DeviceCaps &deviceCaps,
ANGLE_FEATURE_CONDITION(features, preAddTexelFetchOffsets, isIntel);
ANGLE_FEATURE_CONDITION(features, useSystemMemoryForConstantBuffers, isIntel);
+ // ClearView on Skylake seems to incorrectly clear with unaligned rects (edge has saw tooth
+ // pattern instead of straight).
+ ANGLE_FEATURE_CONDITION(features, scissoredClearArtifacts, isIntel && isSkylake);
+
ANGLE_FEATURE_CONDITION(features, callClearTwice,
isIntel && isSkylake && capsVersion >= angle::VersionTriple(16, 0, 0) &&
capsVersion < angle::VersionTriple(16, 4771, 0));
diff --git a/util/autogen/angle_features_autogen.cpp b/util/autogen/angle_features_autogen.cpp
index e75541b..d8ad61d 100644
--- a/util/autogen/angle_features_autogen.cpp
+++ b/util/autogen/angle_features_autogen.cpp
@@ -321,6 +321,7 @@ constexpr PackedEnumMap<Feature, const char *> kFeatureNames = {{
{Feature::RoundOutputAfterDithering, "roundOutputAfterDithering"},
{Feature::SanitizeAMDGPURendererString, "sanitizeAMDGPURendererString"},
{Feature::ScalarizeVecAndMatConstructorArgs, "scalarizeVecAndMatConstructorArgs"},
+ {Feature::ScissoredClearArtifacts, "scissoredClearArtifacts"},
{Feature::SelectViewInGeometryShader, "selectViewInGeometryShader"},
{Feature::SetDataFasterThanImageUpload, "setDataFasterThanImageUpload"},
{Feature::SetDataFasterThanImageUploadOn128bitFormats, "setDataFasterThanImageUploadOn128bitFormats"},
diff --git a/util/autogen/angle_features_autogen.h b/util/autogen/angle_features_autogen.h
index 3ecac9d..770e468 100644
--- a/util/autogen/angle_features_autogen.h
+++ b/util/autogen/angle_features_autogen.h
@@ -321,6 +321,7 @@ enum class Feature
RoundOutputAfterDithering,
SanitizeAMDGPURendererString,
ScalarizeVecAndMatConstructorArgs,
+ ScissoredClearArtifacts,
SelectViewInGeometryShader,
SetDataFasterThanImageUpload,
SetDataFasterThanImageUploadOn128bitFormats,
--
2.43.0