ccpr: Add an MSAA atlas mode

Adds the option to use a multisampled (or mixed sampled) atlas, and
uses the sample mask and stencil buffer instead of coverage counts.

Bug: skia:
Change-Id: I9fb76d17895ae25208124f6c27e37977ac31b5eb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/227428
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
diff --git a/src/gpu/ccpr/GrGSCoverageProcessor.cpp b/src/gpu/ccpr/GrGSCoverageProcessor.cpp
index 9ae1856..1398d5b 100644
--- a/src/gpu/ccpr/GrGSCoverageProcessor.cpp
+++ b/src/gpu/ccpr/GrGSCoverageProcessor.cpp
@@ -42,7 +42,11 @@
         SkASSERT(!args.fFPCoordTransformHandler->nextCoordTransform());
 
         // Fragment shader.
-        fShader->emitFragmentCode(proc, args.fFragBuilder, args.fOutputColor, args.fOutputCoverage);
+        GrGLSLFPFragmentBuilder* f = args.fFragBuilder;
+        f->codeAppendf("half coverage;");
+        fShader->emitFragmentCoverageCode(f, "coverage");
+        f->codeAppendf("%s = half4(coverage);", args.fOutputColor);
+        f->codeAppendf("%s = half4(1);", args.fOutputCoverage);
     }
 
     void emitGeometryShader(
@@ -66,7 +70,7 @@
         }
 
         SkString emitVertexFn;
-        SkSTArray<2, GrShaderVar> emitArgs;
+        SkSTArray<3, GrShaderVar> emitArgs;
         const char* corner = emitArgs.emplace_back("corner", kFloat2_GrSLType).c_str();
         const char* bloatdir = emitArgs.emplace_back("bloatdir", kFloat2_GrSLType).c_str();
         const char* inputCoverage = nullptr;
@@ -419,8 +423,6 @@
                 {"x_or_y_values", kFloat3_GrVertexAttribType, kFloat3_GrSLType};
         GR_STATIC_ASSERT(sizeof(TriPointInstance) ==
                          2 * GrVertexAttribTypeSize(kFloat3_GrVertexAttribType));
-        GR_STATIC_ASSERT(offsetof(TriPointInstance, fY) ==
-                         GrVertexAttribTypeSize(kFloat3_GrVertexAttribType));
     }
 
     this->setVertexAttributes(&fInputXOrYValues, 1);