Use float colors for blend constant
Bug: skia:
Change-Id: Ie2a4b341a5e7762c3e8031fbd0f0d8b1ebae27f1
Reviewed-on: https://skia-review.googlesource.com/c/168268
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
diff --git a/src/gpu/effects/GrCoverageSetOpXP.cpp b/src/gpu/effects/GrCoverageSetOpXP.cpp
index e7ac874..8e1dbbb 100644
--- a/src/gpu/effects/GrCoverageSetOpXP.cpp
+++ b/src/gpu/effects/GrCoverageSetOpXP.cpp
@@ -117,7 +117,7 @@
blendInfo->fDstBlend = kZero_GrBlendCoeff;
break;
}
- blendInfo->fBlendConstant = 0;
+ blendInfo->fBlendConstant = SK_PMColor4fTRANSPARENT;
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
index 89f61ec..aca1e05 100644
--- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp
+++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp
@@ -588,10 +588,10 @@
GrGLSLXferProcessor* createGLSLInstance() const override;
- uint8_t alpha() const { return fAlpha; }
+ float alpha() const { return fAlpha; }
private:
- PDLCDXferProcessor(GrColor blendConstant, uint8_t alpha);
+ PDLCDXferProcessor(const SkPMColor4f& blendConstant, float alpha);
void onGetGLSLProcessorKey(const GrShaderCaps& caps, GrProcessorKeyBuilder* b) const override;
@@ -609,8 +609,8 @@
return true;
}
- GrColor fBlendConstant;
- uint8_t fAlpha;
+ SkPMColor4f fBlendConstant;
+ float fAlpha;
typedef GrXferProcessor INHERITED;
};
@@ -619,7 +619,7 @@
class GLPDLCDXferProcessor : public GrGLSLXferProcessor {
public:
- GLPDLCDXferProcessor(const GrProcessor&) : fLastAlpha(UINT32_MAX) {}
+ GLPDLCDXferProcessor(const GrProcessor&) : fLastAlpha(SK_FloatNaN) {}
~GLPDLCDXferProcessor() override {}
@@ -641,21 +641,21 @@
}
void onSetData(const GrGLSLProgramDataManager& pdm, const GrXferProcessor& xp) override {
- uint32_t alpha = SkToU32(xp.cast<PDLCDXferProcessor>().alpha());
+ float alpha = xp.cast<PDLCDXferProcessor>().alpha();
if (fLastAlpha != alpha) {
- pdm.set1f(fAlphaUniform, alpha / 255.f);
+ pdm.set1f(fAlphaUniform, alpha);
fLastAlpha = alpha;
}
}
GrGLSLUniformHandler::UniformHandle fAlphaUniform;
- uint32_t fLastAlpha;
+ float fLastAlpha;
typedef GrGLSLXferProcessor INHERITED;
};
///////////////////////////////////////////////////////////////////////////////
-PDLCDXferProcessor::PDLCDXferProcessor(GrColor blendConstant, uint8_t alpha)
+PDLCDXferProcessor::PDLCDXferProcessor(const SkPMColor4f& blendConstant, float alpha)
: INHERITED(kPDLCDXferProcessor_ClassID, false, false, GrProcessorAnalysisCoverage::kLCD)
, fBlendConstant(blendConstant)
, fAlpha(alpha) {
@@ -666,14 +666,14 @@
if (SkBlendMode::kSrcOver != mode) {
return nullptr;
}
- GrColor blendConstant;
- if (!color.isConstant(&blendConstant)) {
+ SkPMColor4f blendConstantPM;
+ if (!color.isConstant(&blendConstantPM)) {
return nullptr;
}
- blendConstant = GrUnpremulColor(blendConstant);
- uint8_t alpha = GrColorUnpackA(blendConstant);
- blendConstant |= (0xff << GrColor_SHIFT_A);
- return sk_sp<GrXferProcessor>(new PDLCDXferProcessor(blendConstant, alpha));
+ SkColor4f blendConstantUPM = blendConstantPM.unpremul();
+ float alpha = blendConstantUPM.fA;
+ blendConstantPM = { blendConstantUPM.fR, blendConstantUPM.fG, blendConstantUPM.fG, 1 };
+ return sk_sp<GrXferProcessor>(new PDLCDXferProcessor(blendConstantPM, alpha));
}
PDLCDXferProcessor::~PDLCDXferProcessor() {