diff options
author | 2015-11-20 15:12:59 -0800 | |
---|---|---|
committer | 2015-11-20 15:12:59 -0800 | |
commit | f234272cbdcbcd46be462317e75cd138999c9fe9 (patch) | |
tree | fa3de6c2762df48a7e05c1fdd1244df802ad953b /src/gpu/effects/GrPorterDuffXferProcessor.cpp | |
parent | 1c9ce610501b7b864617356aeda12cd0caebe066 (diff) |
Revert of Make specialized SrcOver XPFactory (patchset #3 id:40001 of https://codereview.chromium.org/1455273006/ )
Reason for revert:
breaking some builds
Original issue's description:
> Make specialized SrcOver XPFactory
>
> BUG=skia:
>
> Committed: https://skia.googlesource.com/skia/+/a7006d45217d128a94fa53cb4b827cca79bc7049
TBR=bsalomon@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:
Review URL: https://codereview.chromium.org/1464933003
Diffstat (limited to 'src/gpu/effects/GrPorterDuffXferProcessor.cpp')
-rw-r--r-- | src/gpu/effects/GrPorterDuffXferProcessor.cpp | 139 |
1 files changed, 29 insertions, 110 deletions
diff --git a/src/gpu/effects/GrPorterDuffXferProcessor.cpp b/src/gpu/effects/GrPorterDuffXferProcessor.cpp index f0682f480c..4245caafed 100644 --- a/src/gpu/effects/GrPorterDuffXferProcessor.cpp +++ b/src/gpu/effects/GrPorterDuffXferProcessor.cpp @@ -691,30 +691,30 @@ PDLCDXferProcessor::onGetOptimizations(const GrProcOptInfo& colorPOI, /////////////////////////////////////////////////////////////////////////////// -GrPDXPFactory::GrPDXPFactory(SkXfermode::Mode xfermode) +GrPorterDuffXPFactory::GrPorterDuffXPFactory(SkXfermode::Mode xfermode) : fXfermode(xfermode) { SkASSERT(fXfermode <= SkXfermode::kLastCoeffMode); - this->initClassID<GrPDXPFactory>(); + this->initClassID<GrPorterDuffXPFactory>(); } -const GrXPFactory* GrPDXPFactory::Create(SkXfermode::Mode xfermode) { - static const GrPDXPFactory gClearPDXPF(SkXfermode::kClear_Mode); - static const GrPDXPFactory gSrcPDXPF(SkXfermode::kSrc_Mode); - static const GrPDXPFactory gDstPDXPF(SkXfermode::kDst_Mode); - static const GrPDXPFactory gSrcOverPDXPF(SkXfermode::kSrcOver_Mode); - static const GrPDXPFactory gDstOverPDXPF(SkXfermode::kDstOver_Mode); - static const GrPDXPFactory gSrcInPDXPF(SkXfermode::kSrcIn_Mode); - static const GrPDXPFactory gDstInPDXPF(SkXfermode::kDstIn_Mode); - static const GrPDXPFactory gSrcOutPDXPF(SkXfermode::kSrcOut_Mode); - static const GrPDXPFactory gDstOutPDXPF(SkXfermode::kDstOut_Mode); - static const GrPDXPFactory gSrcATopPDXPF(SkXfermode::kSrcATop_Mode); - static const GrPDXPFactory gDstATopPDXPF(SkXfermode::kDstATop_Mode); - static const GrPDXPFactory gXorPDXPF(SkXfermode::kXor_Mode); - static const GrPDXPFactory gPlusPDXPF(SkXfermode::kPlus_Mode); - static const GrPDXPFactory gModulatePDXPF(SkXfermode::kModulate_Mode); - static const GrPDXPFactory gScreenPDXPF(SkXfermode::kScreen_Mode); - - static const GrPDXPFactory* gFactories[] = { +GrXPFactory* GrPorterDuffXPFactory::Create(SkXfermode::Mode xfermode) { + static GrPorterDuffXPFactory gClearPDXPF(SkXfermode::kClear_Mode); + static GrPorterDuffXPFactory gSrcPDXPF(SkXfermode::kSrc_Mode); + static GrPorterDuffXPFactory gDstPDXPF(SkXfermode::kDst_Mode); + static GrPorterDuffXPFactory gSrcOverPDXPF(SkXfermode::kSrcOver_Mode); + static GrPorterDuffXPFactory gDstOverPDXPF(SkXfermode::kDstOver_Mode); + static GrPorterDuffXPFactory gSrcInPDXPF(SkXfermode::kSrcIn_Mode); + static GrPorterDuffXPFactory gDstInPDXPF(SkXfermode::kDstIn_Mode); + static GrPorterDuffXPFactory gSrcOutPDXPF(SkXfermode::kSrcOut_Mode); + static GrPorterDuffXPFactory gDstOutPDXPF(SkXfermode::kDstOut_Mode); + static GrPorterDuffXPFactory gSrcATopPDXPF(SkXfermode::kSrcATop_Mode); + static GrPorterDuffXPFactory gDstATopPDXPF(SkXfermode::kDstATop_Mode); + static GrPorterDuffXPFactory gXorPDXPF(SkXfermode::kXor_Mode); + static GrPorterDuffXPFactory gPlusPDXPF(SkXfermode::kPlus_Mode); + static GrPorterDuffXPFactory gModulatePDXPF(SkXfermode::kModulate_Mode); + static GrPorterDuffXPFactory gScreenPDXPF(SkXfermode::kScreen_Mode); + + static GrPorterDuffXPFactory* gFactories[] = { &gClearPDXPF, &gSrcPDXPF, &gDstPDXPF, &gSrcOverPDXPF, &gDstOverPDXPF, &gSrcInPDXPF, &gDstInPDXPF, &gSrcOutPDXPF, &gDstOutPDXPF, &gSrcATopPDXPF, &gDstATopPDXPF, &gXorPDXPF, &gPlusPDXPF, &gModulatePDXPF, &gScreenPDXPF @@ -728,7 +728,7 @@ const GrXPFactory* GrPDXPFactory::Create(SkXfermode::Mode xfermode) { } GrXferProcessor* -GrPDXPFactory::onCreateXferProcessor(const GrCaps& caps, +GrPorterDuffXPFactory::onCreateXferProcessor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& covPOI, bool hasMixedSamples, @@ -757,7 +757,7 @@ GrPDXPFactory::onCreateXferProcessor(const GrCaps& caps, return new PorterDuffXferProcessor(blendFormula); } -void GrPDXPFactory::getInvariantBlendedColor(const GrProcOptInfo& colorPOI, +void GrPorterDuffXPFactory::getInvariantBlendedColor(const GrProcOptInfo& colorPOI, InvariantBlendedColor* blendedColor) const { // Find the blended color info based on the formula that does not have coverage. BlendFormula colorFormula = gBlendTable[colorPOI.isOpaque()][0][fXfermode]; @@ -788,7 +788,7 @@ void GrPDXPFactory::getInvariantBlendedColor(const GrProcOptInfo& colorPOI, } } -bool GrPDXPFactory::willReadDstColor(const GrCaps& caps, +bool GrPorterDuffXPFactory::willReadDstColor(const GrCaps& caps, const GrProcOptInfo& colorPOI, const GrProcOptInfo& covPOI, bool hasMixedSamples) const { @@ -812,16 +812,16 @@ bool GrPDXPFactory::willReadDstColor(const GrCaps& caps, return get_blend_formula(colorPOI, covPOI, hasMixedSamples, fXfermode).hasSecondaryOutput(); } -GR_DEFINE_XP_FACTORY_TEST(GrPDXPFactory); +GR_DEFINE_XP_FACTORY_TEST(GrPorterDuffXPFactory); -const GrXPFactory* GrPDXPFactory::TestCreate(GrProcessorTestData* d) { +const GrXPFactory* GrPorterDuffXPFactory::TestCreate(GrProcessorTestData* d) { SkXfermode::Mode mode = SkXfermode::Mode(d->fRandom->nextULessThan(SkXfermode::kLastCoeffMode)); - return GrPDXPFactory::Create(mode); + return GrPorterDuffXPFactory::Create(mode); } -void GrPDXPFactory::TestGetXPOutputTypes(const GrXferProcessor* xp, - int* outPrimary, - int* outSecondary) { +void GrPorterDuffXPFactory::TestGetXPOutputTypes(const GrXferProcessor* xp, + int* outPrimary, + int* outSecondary) { if (!!strcmp(xp->name(), "Porter Duff")) { *outPrimary = *outSecondary = -1; return; @@ -830,84 +830,3 @@ void GrPDXPFactory::TestGetXPOutputTypes(const GrXferProcessor* xp, *outPrimary = blendFormula.fPrimaryOutputType; *outSecondary = blendFormula.fSecondaryOutputType; } - -//////////////////////////////////////////////////////////////////////////////// - -GrSrcOverPDXPFactory::GrSrcOverPDXPFactory() { - this->initClassID<GrSrcOverPDXPFactory>(); -} - -GrXferProcessor* -GrSrcOverPDXPFactory::onCreateXferProcessor(const GrCaps& caps, - const GrProcOptInfo& colorPOI, - const GrProcOptInfo& covPOI, - bool hasMixedSamples, - const DstTexture* dstTexture) const { - BlendFormula blendFormula; - if (covPOI.isFourChannelOutput()) { - if (kRGBA_GrColorComponentFlags == colorPOI.validFlags() && - !caps.shaderCaps()->dualSourceBlendingSupport() && - !caps.shaderCaps()->dstReadInShaderSupport()) { - // If we don't have dual source blending or in shader dst reads, we fall back to this - // trick for rendering SrcOver LCD text instead of doing a dst copy. - SkASSERT(!dstTexture || !dstTexture->texture()); - return PDLCDXferProcessor::Create(SkXfermode::kSrcOver_Mode, colorPOI); - } - blendFormula = get_lcd_blend_formula(covPOI, SkXfermode::kSrcOver_Mode); - } else { - blendFormula = get_blend_formula(colorPOI, covPOI, hasMixedSamples, - SkXfermode::kSrcOver_Mode); - } - - if (blendFormula.hasSecondaryOutput() && !caps.shaderCaps()->dualSourceBlendingSupport()) { - return new ShaderPDXferProcessor(dstTexture, hasMixedSamples, SkXfermode::kSrcOver_Mode); - } - - SkASSERT(!dstTexture || !dstTexture->texture()); - return new PorterDuffXferProcessor(blendFormula); -} - -void GrSrcOverPDXPFactory::getInvariantBlendedColor(const GrProcOptInfo& colorPOI, - InvariantBlendedColor* blendedColor) const { - if (!colorPOI.isOpaque()) { - blendedColor->fWillBlendWithDst = true; - blendedColor->fKnownColorFlags = kNone_GrColorComponentFlags; - return; - } - - blendedColor->fWillBlendWithDst = false; - - blendedColor->fKnownColor = colorPOI.color(); - blendedColor->fKnownColorFlags = colorPOI.validFlags(); -} - -bool GrSrcOverPDXPFactory::willReadDstColor(const GrCaps& caps, - const GrProcOptInfo& colorPOI, - const GrProcOptInfo& covPOI, - bool hasMixedSamples) const { - if (caps.shaderCaps()->dualSourceBlendingSupport()) { - return false; - } - - // When we have four channel coverage we always need to read the dst in order to correctly - // blend. The one exception is when we are using srcover mode and we know the input color into - // the XP. - if (covPOI.isFourChannelOutput()) { - if (kRGBA_GrColorComponentFlags == colorPOI.validFlags() && - !caps.shaderCaps()->dstReadInShaderSupport()) { - return false; - } - return get_lcd_blend_formula(covPOI, SkXfermode::kSrcOver_Mode).hasSecondaryOutput(); - } - // We fallback on the shader XP when the blend formula would use dual source blending but we - // don't have support for it. - return get_blend_formula(colorPOI, covPOI, - hasMixedSamples, SkXfermode::kSrcOver_Mode).hasSecondaryOutput(); -} - -GR_DEFINE_XP_FACTORY_TEST(GrSrcOverPDXPFactory); - -const GrXPFactory* GrSrcOverPDXPFactory::TestCreate(GrProcessorTestData* d) { - return SkRef(&GrPorterDuffXPFactory::gSrcOverPDXPFactory); -} - |