Implement dynamic MSAA on OpenGL

This is an initial attempt. We use a few coverage ops that haven't
been updated to handle MSAA yet, and other times we trigger MSAA when
we shouldn't, but it sets the basic functionality in place.

Bug: skia:11396
Change-Id: I8acfe4283bccf5543d4b774692e39427142b3228
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/395996
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/GrOpsTask.cpp b/src/gpu/GrOpsTask.cpp
index 7faa401..b6161e4 100644
--- a/src/gpu/GrOpsTask.cpp
+++ b/src/gpu/GrOpsTask.cpp
@@ -391,8 +391,9 @@
 }
 
 void GrOpsTask::addDrawOp(GrDrawingManager* drawingMgr, GrOp::Owner op,
-                          const GrProcessorSet::Analysis& processorAnalysis,
-                          GrAppliedClip&& clip, const DstProxyView& dstProxyView,
+                          GrDrawOp::FixedFunctionFlags fixedFunctionFlags,
+                          const GrProcessorSet::Analysis& processorAnalysis, GrAppliedClip&& clip,
+                          const DstProxyView& dstProxyView,
                           GrTextureResolveManager textureResolveManager, const GrCaps& caps) {
     auto addDependency = [&](GrSurfaceProxy* p, GrMipmapped mipmapped) {
         this->addSampledTexture(p);
@@ -420,6 +421,16 @@
         fRenderPassXferBarriers |= GrXferBarrierFlags::kBlend;
     }
 
+#ifdef SK_DEBUG
+    // Ensure we can support dynamic msaa if the caller is trying to trigger it.
+    GrRenderTargetProxy* rtProxy = this->target(0)->asRenderTargetProxy();
+    if (rtProxy->numSamples() == 1 &&
+        (fixedFunctionFlags & GrDrawOp::FixedFunctionFlags::kUsesHWAA)) {
+        SkASSERT(caps.supportsDynamicMSAA(rtProxy));
+    }
+#endif
+    fUsesMSAASurface |= (fixedFunctionFlags & GrDrawOp::FixedFunctionFlags::kUsesHWAA);
+
     this->recordOp(std::move(op), processorAnalysis, clip.doesClip() ? &clip : nullptr,
                    &dstProxyView, caps);
 }
@@ -715,6 +726,7 @@
         fClippedContentBounds.join(opsTask->fClippedContentBounds);
         fTotalBounds.join(opsTask->fTotalBounds);
         fRenderPassXferBarriers |= opsTask->fRenderPassXferBarriers;
+        fUsesMSAASurface |= opsTask->fUsesMSAASurface;
         SkDEBUGCODE(fNumClips += opsTask->fNumClips);
     }