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);