Implement multisample "disable" in Vulkan
Emulates multisample disable by colocating all samples at pixel
center. Multisample disable will be required in order for us to
integrate mixed samples.
Change-Id: I52b67e22c979584b5d001e737a08eef07bd7ffe2
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/253282
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
diff --git a/src/gpu/GrPipeline.cpp b/src/gpu/GrPipeline.cpp
index a246c85..c03a8dd 100644
--- a/src/gpu/GrPipeline.cpp
+++ b/src/gpu/GrPipeline.cpp
@@ -99,7 +99,15 @@
}
}
-uint32_t GrPipeline::getBlendInfoKey() const {
+void GrPipeline::genKey(GrProcessorKeyBuilder* b, const GrCaps& caps) const {
+ // kSnapVerticesToPixelCenters is implemented in a shader.
+ InputFlags ignoredFlags = InputFlags::kSnapVerticesToPixelCenters;
+ if (!caps.multisampleDisableSupport()) {
+ // Ganesh will omit kHWAntialias regardless multisampleDisableSupport.
+ ignoredFlags |= InputFlags::kHWAntialias;
+ }
+ b->add32((uint32_t)fFlags & ~(uint32_t)ignoredFlags);
+
const GrXferProcessor::BlendInfo& blendInfo = this->getXferProcessor().getBlendInfo();
static const uint32_t kBlendWriteShift = 1;
@@ -107,10 +115,10 @@
GR_STATIC_ASSERT(kLast_GrBlendCoeff < (1 << kBlendCoeffShift));
GR_STATIC_ASSERT(kFirstAdvancedGrBlendEquation - 1 < 4);
- uint32_t key = blendInfo.fWriteColor;
- key |= (blendInfo.fSrcBlend << kBlendWriteShift);
- key |= (blendInfo.fDstBlend << (kBlendWriteShift + kBlendCoeffShift));
- key |= (blendInfo.fEquation << (kBlendWriteShift + 2 * kBlendCoeffShift));
+ uint32_t blendKey = blendInfo.fWriteColor;
+ blendKey |= (blendInfo.fSrcBlend << kBlendWriteShift);
+ blendKey |= (blendInfo.fDstBlend << (kBlendWriteShift + kBlendCoeffShift));
+ blendKey |= (blendInfo.fEquation << (kBlendWriteShift + 2 * kBlendCoeffShift));
- return key;
+ b->add32(blendKey);
}