Revert "Reland "Reland "Implement sample mask and sample locations support in Vulkan"""

This reverts commit 8a0f50944ba8cd46cdcda42523856afa1b05f252.

Reason for revert: Concerns about layout tests and bugs on Adreno

Original change's description:
> Reland "Reland "Implement sample mask and sample locations support in Vulkan""
> 
> This is a reland of 97e917a25fa8568ccc90a2da671e375e727fa7e8, this
> time with MSAA CCPR disabled.
> 
> Original change's description:
> > Reland "Implement sample mask and sample locations support in Vulkan"
> >
> > This is a reland of 8b915a0c27652d5932ff4013ba98c57baf553c3c
> >
> > Original change's description:
> > > Implement sample mask and sample locations support in Vulkan
> > >
> > > Change-Id: I372695ec5360def42a8a997675993264740b0da4
> > > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252038
> > > Commit-Queue: Chris Dalton <csmartdalton@google.com>
> > > Reviewed-by: Chris Dalton <csmartdalton@google.com>
> >
> > TBR=ethannicholas@google.com
> >
> > Change-Id: I20de36719db52ad4dfc5290101d48a8fd9601c11
> > Reviewed-on: https://skia-review.googlesource.com/c/skia/+/252936
> > Reviewed-by: Chris Dalton <csmartdalton@google.com>
> > Commit-Queue: Chris Dalton <csmartdalton@google.com>
> 
> TBR=ethannicholas@google.com
> 
> Change-Id: Ie0861dc20df1fa622cb26ed78369d29976e3be10
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/254608
> Reviewed-by: Chris Dalton <csmartdalton@google.com>
> Commit-Queue: Chris Dalton <csmartdalton@google.com>

TBR=csmartdalton@google.com,ethannicholas@google.com

Change-Id: I8c9d8850c2b5bfe4d1516b9eaa2f724f478e6c8c
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/254624
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
diff --git a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
index bae50e9..6a07445 100644
--- a/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
+++ b/src/gpu/glsl/GrGLSLFragmentShaderBuilder.cpp
@@ -294,8 +294,7 @@
 
     if (CustomFeatures::kSampleLocations & fProgramBuilder->processorFeatures()) {
         const SkTArray<SkPoint>& sampleLocations = fProgramBuilder->getSampleLocations();
-        this->definitions().appendf("const float2 _sampleOffsets[%i] = float2[%i](",
-                                    sampleLocations.count(), sampleLocations.count());
+        this->definitions().append("const float2 _sampleOffsets[] = float2[](");
         for (int i = 0; i < sampleLocations.count(); ++i) {
             SkPoint offset = sampleLocations[i] - SkPoint::Make(.5f, .5f);
             if (kBottomLeft_GrSurfaceOrigin == this->getSurfaceOrigin()) {
diff --git a/src/gpu/vk/GrVkCaps.cpp b/src/gpu/vk/GrVkCaps.cpp
index 35ffea6..a99f7f4 100644
--- a/src/gpu/vk/GrVkCaps.cpp
+++ b/src/gpu/vk/GrVkCaps.cpp
@@ -441,10 +441,6 @@
     // GrCaps workarounds
     ////////////////////////////////////////////////////////////////////////////
 
-    // Temporarily disable the MSAA implementation of CCPR while we work out a crash on Win10
-    // GTX660 and incorrect rendring on Adreno.
-    fDriverBlacklistMSAACCPR = true;
-
     if (kARM_VkVendor == properties.vendorID) {
         fInstanceAttribSupport = false;
         fAvoidWritePixelsFastPath = true; // bugs.skia.org/8064
@@ -477,10 +473,6 @@
     static const uint32_t kMaxVertexAttributes = 64;
     fMaxVertexAttributes = SkTMin(properties.limits.maxVertexInputAttributes, kMaxVertexAttributes);
 
-    if (properties.limits.standardSampleLocations) {
-        fSampleLocationsSupport = true;
-    }
-
     if (extensions.hasExtension(VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME, 1)) {
         // We "disable" multisample by colocating all samples at pixel center.
         fMultisampleDisableSupport = true;
@@ -556,7 +548,7 @@
     // to be true with Vulkan as well.
     shaderCaps->fPreferFlatInterpolation = kQualcomm_VkVendor != properties.vendorID;
 
-    shaderCaps->fSampleMaskSupport = true;
+    // GrShaderCaps
 
     shaderCaps->fShaderDerivativeSupport = true;
 
diff --git a/src/gpu/vk/GrVkGpu.cpp b/src/gpu/vk/GrVkGpu.cpp
index ef1a2b2..e8305ab 100644
--- a/src/gpu/vk/GrVkGpu.cpp
+++ b/src/gpu/vk/GrVkGpu.cpp
@@ -1833,59 +1833,6 @@
     return GrBackendTexture(dimensions.width(), dimensions.height(), info);
 }
 
-void GrVkGpu::querySampleLocations(GrRenderTarget* renderTarget,
-                                   SkTArray<SkPoint>* sampleLocations) {
-    // In Vulkan, sampleLocationsSupport() means that the platform uses the standard sample
-    // locations defined by the spec.
-    SkASSERT(this->caps()->sampleLocationsSupport());
-    static SkPoint kStandardSampleLocations_1[1] = {
-        {0.5f, 0.5f}};
-    static SkPoint kStandardSampleLocations_2[2] = {
-        {0.75f, 0.75f}, {0.25f, 0.25f}};
-    static SkPoint kStandardSampleLocations_4[4] = {
-        {0.375f, 0.125f}, {0.875f, 0.375f}, {0.125f, 0.625f}, {0.625f, 0.875f}};
-    static SkPoint kStandardSampleLocations_8[8] = {
-        {0.5625f, 0.3125f}, {0.4375f, 0.6875f}, {0.8125f, 0.5625f}, {0.3125f, 0.1875f},
-        {0.1875f, 0.8125f}, {0.0625f, 0.4375f}, {0.6875f, 0.9375f}, {0.9375f, 0.0625f}};
-    static SkPoint kStandardSampleLocations_16[16] = {
-        {0.5625f, 0.5625f}, {0.4375f, 0.3125f}, {0.3125f, 0.625f}, {0.75f, 0.4375f},
-        {0.1875f, 0.375f}, {0.625f, 0.8125f}, {0.8125f, 0.6875f}, {0.6875f, 0.1875f},
-        {0.375f, 0.875f}, {0.5f, 0.0625f}, {0.25f, 0.125f}, {0.125f, 0.75f},
-        {0.0f, 0.5f}, {0.9375f, 0.25f}, {0.875f, 0.9375f}, {0.0625f, 0.0f}};
-
-    int numSamples = renderTarget->numSamples();
-    if (1 == numSamples) {
-        SkASSERT(this->caps()->mixedSamplesSupport());
-        if (auto* stencil = renderTarget->renderTargetPriv().getStencilAttachment()) {
-            numSamples = stencil->numSamples();
-        }
-    }
-    SkASSERT(numSamples > 1);
-    SkASSERT(!renderTarget->renderTargetPriv().getStencilAttachment() ||
-             numSamples == renderTarget->renderTargetPriv().getStencilAttachment()->numSamples());
-
-    switch (numSamples) {
-        case 1:
-            sampleLocations->push_back_n(1, kStandardSampleLocations_1);
-            break;
-        case 2:
-            sampleLocations->push_back_n(2, kStandardSampleLocations_2);
-            break;
-        case 4:
-            sampleLocations->push_back_n(4, kStandardSampleLocations_4);
-            break;
-        case 8:
-            sampleLocations->push_back_n(8, kStandardSampleLocations_8);
-            break;
-        case 16:
-            sampleLocations->push_back_n(16, kStandardSampleLocations_16);
-            break;
-        default:
-            SK_ABORT("Invalid vulkan sample count.");
-            break;
-    }
-}
-
 void GrVkGpu::deleteBackendTexture(const GrBackendTexture& tex) {
     SkASSERT(GrBackendApi::kVulkan == tex.fBackend);
 
diff --git a/src/gpu/vk/GrVkGpu.h b/src/gpu/vk/GrVkGpu.h
index 42087fc..d25fabe 100644
--- a/src/gpu/vk/GrVkGpu.h
+++ b/src/gpu/vk/GrVkGpu.h
@@ -75,7 +75,10 @@
         kSkip_SyncQueue
     };
 
-    void querySampleLocations(GrRenderTarget*, SkTArray<SkPoint>*) override;
+    void querySampleLocations(GrRenderTarget*, SkTArray<SkPoint>*) override {
+        SkASSERT(!this->caps()->sampleLocationsSupport());
+        SK_ABORT("Sample locations not yet implemented for Vulkan.");
+    }
 
     void xferBarrier(GrRenderTarget*, GrXferBarrierType) override {}
 
diff --git a/src/sksl/SkSLIRGenerator.cpp b/src/sksl/SkSLIRGenerator.cpp
index 2e78b99..b7c4f17 100644
--- a/src/sksl/SkSLIRGenerator.cpp
+++ b/src/sksl/SkSLIRGenerator.cpp
@@ -1166,6 +1166,9 @@
                 case SK_HEIGHT_BUILTIN:
                     fInputs.fRTHeight = true;
                     break;
+                case SK_SAMPLEMASK_BUILTIN:
+                    fUsesSampleMask = true;
+                    break;
 #ifndef SKSL_STANDALONE
                 case SK_FRAGCOORD_BUILTIN:
                     fInputs.fFlipY = true;
@@ -2422,6 +2425,25 @@
     }
 }
 
+void IRGenerator::removeSampleMask(std::vector<std::unique_ptr<ProgramElement>>* out) {
+    for (const auto& e : *out) {
+        switch (e->fKind) {
+            case ProgramElement::kVar_Kind: {
+                VarDeclarations& vd = (VarDeclarations&) *e;
+                for (auto iter = vd.fVars.begin(); iter != vd.fVars.end(); ++iter) {
+                    SkASSERT((*iter)->fKind == Statement::kVarDeclaration_Kind);
+                    const auto& v = (VarDeclaration&) **iter;
+                    if (v.fVar->fName == "sk_SampleMask") {
+                        vd.fVars.erase(iter);
+                        return;
+                    }
+                }
+            }
+            default: break;
+        }
+    }
+}
+
 void IRGenerator::convertProgram(Program::Kind kind,
                                  const char* text,
                                  size_t length,
@@ -2487,6 +2509,9 @@
                 ABORT("unsupported declaration: %s\n", decl.description().c_str());
         }
     }
+    if (!fUsesSampleMask) {
+        this->removeSampleMask(out);
+    }
 }
 
 
diff --git a/src/sksl/SkSLIRGenerator.h b/src/sksl/SkSLIRGenerator.h
index 6ca6248..abb787c 100644
--- a/src/sksl/SkSLIRGenerator.h
+++ b/src/sksl/SkSLIRGenerator.h
@@ -169,6 +169,7 @@
     Variable* fRTAdjustInterfaceBlock;
     int fRTAdjustFieldIndex;
     bool fStarted = false;
+    bool fUsesSampleMask = false;
 
     friend class AutoSymbolTable;
     friend class AutoLoopLevel;
diff --git a/src/sksl/SkSLSPIRVCodeGenerator.cpp b/src/sksl/SkSLSPIRVCodeGenerator.cpp
index 858d8ca..ce5d73b 100644
--- a/src/sksl/SkSLSPIRVCodeGenerator.cpp
+++ b/src/sksl/SkSLSPIRVCodeGenerator.cpp
@@ -2713,22 +2713,6 @@
     }
 }
 
-bool is_dead(const Variable& var) {
-    if (var.fReadCount || var.fWriteCount) {
-        return false;
-    }
-    // not entirely sure what the rules are for when it's safe to elide interface variables, but it
-    // causes various problems to elide some of them even when dead. But it also causes problems
-    // *not* to elide sk_SampleMask when it's not being used.
-    if (!(var.fModifiers.fFlags & (Modifiers::kIn_Flag |
-                                   Modifiers::kOut_Flag |
-                                   Modifiers::kUniform_Flag |
-                                   Modifiers::kBuffer_Flag))) {
-        return true;
-    }
-    return var.fModifiers.fLayout.fBuiltin == SK_SAMPLEMASK_BUILTIN;
-}
-
 #define BUILTIN_IGNORE 9999
 void SPIRVCodeGenerator::writeGlobalVars(Program::Kind kind, const VarDeclarations& decl,
                                          OutputStream& out) {
@@ -2753,7 +2737,13 @@
             SkASSERT(!fProgram.fSettings.fFragColorIsInOut);
             continue;
         }
-        if (is_dead(*var)) {
+        if (!var->fReadCount && !var->fWriteCount &&
+                !(var->fModifiers.fFlags & (Modifiers::kIn_Flag |
+                                            Modifiers::kOut_Flag |
+                                            Modifiers::kUniform_Flag |
+                                            Modifiers::kBuffer_Flag))) {
+            // variable is dead and not an input / output var (the Vulkan debug layers complain if
+            // we elide an interface var, even if it's dead)
             continue;
         }
         SpvStorageClass_ storageClass;
@@ -3171,8 +3161,7 @@
             SpvId id = this->writeInterfaceBlock(intf);
             if (((intf.fVariable.fModifiers.fFlags & Modifiers::kIn_Flag) ||
                 (intf.fVariable.fModifiers.fFlags & Modifiers::kOut_Flag)) &&
-                intf.fVariable.fModifiers.fLayout.fBuiltin == -1 &&
-                !is_dead(intf.fVariable)) {
+                intf.fVariable.fModifiers.fLayout.fBuiltin == -1) {
                 interfaceVars.insert(id);
             }
         }
@@ -3201,7 +3190,7 @@
         const Variable* var = entry.first;
         if (var->fStorage == Variable::kGlobal_Storage &&
             ((var->fModifiers.fFlags & Modifiers::kIn_Flag) ||
-             (var->fModifiers.fFlags & Modifiers::kOut_Flag)) && !is_dead(*var)) {
+             (var->fModifiers.fFlags & Modifiers::kOut_Flag))) {
             interfaceVars.insert(entry.second);
         }
     }