Rename caps bit for matrix comparison rewrites.

This was originally designated for 2x2 matrices only, but this was not
right--all matrix comparisons actually need to be rewritten to fully
work around the bug.

Change-Id: I743d16a65bc55e93361a3dd8753653384583f063
Bug: skia:11308
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/411416
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/gn/sksl_tests.gni b/gn/sksl_tests.gni
index e0fd766..d5c8818 100644
--- a/gn/sksl_tests.gni
+++ b/gn/sksl_tests.gni
@@ -565,7 +565,7 @@
   "/sksl/workarounds/NegatedAtan.sksl",
   "/sksl/workarounds/PowWithConstantExponent.sksl",
   "/sksl/workarounds/RewriteDoWhileLoops.sksl",
-  "/sksl/workarounds/RewriteMatrix2x2Comparisons.sksl",
+  "/sksl/workarounds/RewriteMatrixComparisons.sksl",
   "/sksl/workarounds/RewriteMatrixVectorMultiply.sksl",
   "/sksl/workarounds/TernaryShortCircuit.sksl",
 ]
diff --git a/resources/sksl/workarounds/RewriteMatrix2x2Comparisons.sksl b/resources/sksl/workarounds/RewriteMatrixComparisons.sksl
similarity index 61%
rename from resources/sksl/workarounds/RewriteMatrix2x2Comparisons.sksl
rename to resources/sksl/workarounds/RewriteMatrixComparisons.sksl
index a6af769..f3aedb8 100644
--- a/resources/sksl/workarounds/RewriteMatrix2x2Comparisons.sksl
+++ b/resources/sksl/workarounds/RewriteMatrixComparisons.sksl
@@ -1,9 +1,11 @@
-/*#pragma settings RewriteMatrix2x2Comparisons*/
+/*#pragma settings RewriteMatrixComparisons*/
 
-// This is a clone of MatrixEquality.sksl.
+// This is patterned on MatrixEquality.sksl.
 uniform half4 colorGreen, colorRed;
 uniform half2x2 testHalf2x2;
 uniform float2x2 testFloat2x2;
+uniform half3x3 testHalf3x3;
+uniform float4x2 testFloat4x2;
 
 bool test_equality() {
     bool ok = true;
@@ -11,6 +13,8 @@
     ok = ok && testFloat2x2 == half2x2(5,6,7,8);
     ok = ok && testHalf2x2 != half2x2(123);
     ok = ok && testFloat2x2 != half2x2(456);
+    ok = ok && testHalf3x3 == half3x3(1,2,3,4,5,6,7,8,9);
+    ok = ok && testFloat4x2 != float4x2(1,2,3,4,5,6,7,8);
     return ok;
 }
 
diff --git a/src/gpu/GrShaderCaps.cpp b/src/gpu/GrShaderCaps.cpp
index 3af38a2..74ccc7e 100644
--- a/src/gpu/GrShaderCaps.cpp
+++ b/src/gpu/GrShaderCaps.cpp
@@ -45,7 +45,7 @@
     fMustWriteToFragColor = false;
     fNoDefaultPrecisionForExternalSamplers = false;
     fRewriteMatrixVectorMultiply = false;
-    fRewriteMatrix2x2Comparisons = false;
+    fRewriteMatrixComparisons = false;
     fFlatInterpolationSupport = false;
     fPreferFlatInterpolation = false;
     fNoPerspectiveInterpolationSupport = false;
@@ -130,7 +130,7 @@
     writer->appendBool("Don't add default precision statement for samplerExternalOES",
                        fNoDefaultPrecisionForExternalSamplers);
     writer->appendBool("Rewrite matrix-vector multiply", fRewriteMatrixVectorMultiply);
-    writer->appendBool("Rewrite matrix 2x2 equality comparisons", fRewriteMatrix2x2Comparisons);
+    writer->appendBool("Rewrite matrix equality comparisons", fRewriteMatrixComparisons);
     writer->appendBool("Flat interpolation support", fFlatInterpolationSupport);
     writer->appendBool("Prefer flat interpolation", fPreferFlatInterpolation);
     writer->appendBool("No perspective interpolation support", fNoPerspectiveInterpolationSupport);
@@ -180,7 +180,7 @@
         SkASSERT(!fMustWriteToFragColor);
         SkASSERT(!fNoDefaultPrecisionForExternalSamplers);
         SkASSERT(!fRewriteMatrixVectorMultiply);
-        SkASSERT(!fRewriteMatrix2x2Comparisons);
+        SkASSERT(!fRewriteMatrixComparisons);
     }
     if (!options.fEnableExperimentalHardwareTessellation) {
         fMaxTessellationSegments = 0;
diff --git a/src/gpu/GrShaderCaps.h b/src/gpu/GrShaderCaps.h
index 721d0ca..1e08f90 100644
--- a/src/gpu/GrShaderCaps.h
+++ b/src/gpu/GrShaderCaps.h
@@ -176,8 +176,8 @@
         return fRewriteMatrixVectorMultiply;
     }
 
-    // Rewrites 2x2 matrix equality comparisons to avoid an Adreno driver bug. (skia:11308)
-    bool rewriteMatrix2x2Comparisons() const { return fRewriteMatrix2x2Comparisons; }
+    // Rewrites matrix equality comparisons to avoid an Adreno driver bug. (skia:11308)
+    bool rewriteMatrixComparisons() const { return fRewriteMatrixComparisons; }
 
     // ANGLE disallows do loops altogether, and we're seeing crashes on Tegra3 with do loops in at
     // least some cases.
@@ -323,7 +323,7 @@
     bool fMustWriteToFragColor                        : 1;
     bool fNoDefaultPrecisionForExternalSamplers       : 1;
     bool fRewriteMatrixVectorMultiply                 : 1;
-    bool fRewriteMatrix2x2Comparisons                 : 1;
+    bool fRewriteMatrixComparisons                    : 1;
     bool fColorSpaceMathNeedsFloat                    : 1;
     bool fCanUseDoLoops                               : 1;
     bool fCanUseFastMath                              : 1;
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 233a4b9..0c62e6e 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -3812,7 +3812,7 @@
         shaderCaps->fInBlendModesFailRandomlyForAllZeroVec = true;
     }
 
-    // The Adreno 5xx and 6xx produce incorrect results when comparing a pair of 2x2 matrices.
+    // The Adreno 5xx and 6xx produce incorrect results when comparing a pair of matrices.
     if (ctxInfo.renderer() == GrGLRenderer::kAdreno530 ||
         ctxInfo.renderer() == GrGLRenderer::kAdreno5xx_other ||
         ctxInfo.renderer() == GrGLRenderer::kAdreno615 ||
@@ -3820,7 +3820,7 @@
         ctxInfo.renderer() == GrGLRenderer::kAdreno630 ||
         ctxInfo.renderer() == GrGLRenderer::kAdreno640 ||
         ctxInfo.renderer() == GrGLRenderer::kAdreno6xx_other) {
-        shaderCaps->fRewriteMatrix2x2Comparisons = true;
+        shaderCaps->fRewriteMatrixComparisons = true;
     }
 
     // We've seen Adreno 3xx devices produce incorrect (flipped) values for gl_FragCoord, in some
diff --git a/src/sksl/SkSLMain.cpp b/src/sksl/SkSLMain.cpp
index 27a723a..22879c3 100644
--- a/src/sksl/SkSLMain.cpp
+++ b/src/sksl/SkSLMain.cpp
@@ -188,9 +188,9 @@
                     static auto s_rewriteMatVecMulCaps = Factory::RewriteMatrixVectorMultiply();
                     *caps = s_rewriteMatVecMulCaps.get();
                 }
-                if (settingsText.consumeSuffix(" RewriteMatrix2x2Comparisons")) {
-                    static auto s_rewriteMat2x2Eq = Factory::RewriteMatrix2x2Comparisons();
-                    *caps = s_rewriteMat2x2Eq.get();
+                if (settingsText.consumeSuffix(" RewriteMatrixComparisons")) {
+                    static auto s_rewriteMatrixComparisons = Factory::RewriteMatrixComparisons();
+                    *caps = s_rewriteMatrixComparisons.get();
                 }
                 if (settingsText.consumeSuffix(" ShaderDerivativeExtensionString")) {
                     static auto s_derivativeCaps = Factory::ShaderDerivativeExtensionString();
diff --git a/src/sksl/SkSLUtil.h b/src/sksl/SkSLUtil.h
index 6020346..f310beb 100644
--- a/src/sksl/SkSLUtil.h
+++ b/src/sksl/SkSLUtil.h
@@ -282,9 +282,9 @@
         return fRewriteMatrixVectorMultiply;
     }
 
-    bool fRewriteMatrix2x2Comparisons = false;
-    bool rewriteMatrix2x2Comparisons() const {
-        return fRewriteMatrix2x2Comparisons;
+    bool fRewriteMatrixComparisons = false;
+    bool rewriteMatrixComparisons() const {
+        return fRewriteMatrixComparisons;
     }
 };
 
@@ -439,9 +439,9 @@
         return result;
     }
 
-    static ShaderCapsPointer RewriteMatrix2x2Comparisons() {
+    static ShaderCapsPointer RewriteMatrixComparisons() {
         ShaderCapsPointer result = MakeShaderCaps();
-        result->fRewriteMatrix2x2Comparisons = true;
+        result->fRewriteMatrixComparisons = true;
         result->fUsesPrecisionModifiers = true;
         return result;
     }
diff --git a/tests/sksl/workarounds/RewriteMatrix2x2Comparisons.glsl b/tests/sksl/workarounds/RewriteMatrixComparisons.glsl
similarity index 68%
rename from tests/sksl/workarounds/RewriteMatrix2x2Comparisons.glsl
rename to tests/sksl/workarounds/RewriteMatrixComparisons.glsl
index 219a725..fe8f635 100644
--- a/tests/sksl/workarounds/RewriteMatrix2x2Comparisons.glsl
+++ b/tests/sksl/workarounds/RewriteMatrixComparisons.glsl
@@ -6,11 +6,15 @@
 uniform mediump vec4 colorRed;
 uniform mediump mat2 testHalf2x2;
 uniform highp mat2 testFloat2x2;
+uniform mediump mat3 testHalf3x3;
+uniform highp mat4x2 testFloat4x2;
 mediump vec4 main() {
     bool _0_ok = true;
     _0_ok = _0_ok && testHalf2x2 == mat2(1.0, 2.0, 3.0, 4.0);
     _0_ok = _0_ok && testFloat2x2 == mat2(5.0, 6.0, 7.0, 8.0);
     _0_ok = _0_ok && testHalf2x2 != mat2(123.0);
     _0_ok = _0_ok && testFloat2x2 != mat2(456.0);
+    _0_ok = _0_ok && testHalf3x3 == mat3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0);
+    _0_ok = _0_ok && testFloat4x2 != mat4x2(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
     return _0_ok ? colorGreen : colorRed;
 }
diff --git a/tests/sksl/workarounds/RewriteMatrix2x2ComparisonsStandaloneSettings.glsl b/tests/sksl/workarounds/RewriteMatrixComparisonsStandaloneSettings.glsl
similarity index 65%
rename from tests/sksl/workarounds/RewriteMatrix2x2ComparisonsStandaloneSettings.glsl
rename to tests/sksl/workarounds/RewriteMatrixComparisonsStandaloneSettings.glsl
index 749b695..877d28d 100644
--- a/tests/sksl/workarounds/RewriteMatrix2x2ComparisonsStandaloneSettings.glsl
+++ b/tests/sksl/workarounds/RewriteMatrixComparisonsStandaloneSettings.glsl
@@ -4,11 +4,15 @@
 uniform vec4 colorRed;
 uniform mat2 testHalf2x2;
 uniform mat2 testFloat2x2;
+uniform mat3 testHalf3x3;
+uniform mat4x2 testFloat4x2;
 vec4 main() {
     bool _0_ok = true;
     _0_ok = _0_ok && testHalf2x2 == mat2(1.0, 2.0, 3.0, 4.0);
     _0_ok = _0_ok && testFloat2x2 == mat2(5.0, 6.0, 7.0, 8.0);
     _0_ok = _0_ok && testHalf2x2 != mat2(123.0);
     _0_ok = _0_ok && testFloat2x2 != mat2(456.0);
+    _0_ok = _0_ok && testHalf3x3 == mat3(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0);
+    _0_ok = _0_ok && testFloat4x2 != mat4x2(1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0);
     return _0_ok ? colorGreen : colorRed;
 }