aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/effects/GrPorterDuffXferProcessor.cpp
Commit message (Collapse)AuthorAge
* Add mixed samples support to XPsGravatar cdalton2015-06-08
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1164973002
* Apply coverage in XP base class when using dst readsGravatar cdalton2015-06-08
| | | | | | | | | | Moves the coverage logic into GrGLXferProcessor for XPs that perform dst reads. XPs that don't use a dst read are still responsible to handle coverage on their own. BUG=skia: Review URL: https://codereview.chromium.org/1170553002
* Update XPF invariant info to not account for conflationGravatar cdalton2015-06-02
| | | | | | | | | | Renames getInvariantOutput to getInvariantBlendedColor on GrXPFactory and redefines it to not account for coverage conflation. This is the information that all the callsites actually wanted to know. BUG=skia: Review URL: https://codereview.chromium.org/1161273005
* Implement Porter Duff XP with a blend tableGravatar cdalton2015-05-27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Removes the runtime logic used by PorterDuffXferProcessor to decide blend coeffs and shader outputs, and instead uses a compile-time constant table of pre-selected blend formulas. Separates out the dst read fallback into its own XP. Introduces a new blend strategy for srcCoeff=0 that can apply coverage with a reverse subtract blend equation instead of dual source blending. Adds new macros in GrBlend.h to analyze blend formulas both runtime. Removes kSetCoverageDrawing_OptFlag and GrSimplifyBlend as they are no longer used. Adds a GM that verifies all xfermodes, including arithmetic, with the color/coverage invariants used by Porter Duff. Adds a unit test that verifies each Porter Duff formula with every color/coverage invariant. Major changes: * Uses a reverse subtract blend equation for coverage when srcCoeff=0 (clear, dst-out [Sa=1], dst-in, modulate). Platforms that don't support dual source blending no longer require a dst copy for dst-in and modulate. * Sets BlendInfo::fWriteColor to false when the blend does not modify the dst. GrGLGpu will now use glColorMask instead of blending for these modes (dst, dst-in [Sa=1], modulate ignored for [Sc=1]). * Converts all SA blend coeffs to One for opaque inputs, and ISA to Zero if there is also no coverage. (We keep ISA around when there is coverage because we use it to tweak alpha for coverage.) * Abandons solid white optimizations for the sake of simplicity (screen was the only mode that previous had solid white opts). Minor differences: * Inconsequential differences in opt flags (e.g. we now return kCanTweakAlphaForCoverage_OptFlag even when there is no coverage). * Src coeffs when the shader outputs 0. * IS2C vs IS2A when the secondary output is scalar. BUG=skia: Committed: https://skia.googlesource.com/skia/+/9a70920db22b6309c671f8e5d519bb95570e4414 Review URL: https://codereview.chromium.org/1124373002
* Move DstCoordTexture to GrXP, rename and remove the word "copy" from ↵Gravatar bsalomon2015-05-26
| | | | | | | | dstcopytexture names. Committed: https://skia.googlesource.com/skia/+/bb106b5f6ee18f7453b63f3a95f421b60a957f39 Review URL: https://codereview.chromium.org/1132093004
* Revert of Implement Porter Duff XP with a blend table (patchset #12 ↵Gravatar bungeman2015-05-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | id:220001 of https://codereview.chromium.org/1124373002/) Reason for revert: Blocking DEPS roll into Chromium. Crashing virtual/gpu/fast/canvas/canvas-composite-*.html tests with the assert ../../third_party/skia/src/gpu/gl/builders/GrGLFragmentShaderBuilder.cpp:281: failed assertion "k110_GrGLSLGeneration != gpu->glslGeneration() || fOutputs.empty()" Original issue's description: > Implement Porter Duff XP with a blend table > > Removes the runtime logic used by PorterDuffXferProcessor to decide > blend coeffs and shader outputs, and instead uses a compile-time > constant table of pre-selected blend formulas. > > Introduces a new blend strategy for srcCoeff=0 that can apply coverage > with a reverse subtract blend equation instead of dual source > blending. > > Adds new macros in GrBlend.h to analyze blend formulas both runtime. > > Removes kSetCoverageDrawing_OptFlag and GrSimplifyBlend as they are no > longer used. > > Adds a GM that verifies all xfermodes, including arithmetic, with the > color/coverage invariants used by Porter Duff. > > Adds a unit test that verifies each Porter Duff formula with every > color/coverage invariant. > > Major changes: > > * Uses a reverse subtract blend equation for coverage when srcCoeff=0 > (clear, dst-out [Sa=1], dst-in, modulate). Platforms that don't > support dual source blending no longer require a dst copy for > dst-in and modulate. > > * Sets BlendInfo::fWriteColor to false when the blend does not modify > the dst. GrGLGpu will now use glColorMask instead of blending for > these modes (dst, dst-in [Sa=1], modulate ignored for [Sc=1]). > > * Converts all SA blend coeffs to One for opaque inputs, and ISA to > Zero if there is also no coverage. (We keep ISA around when there > is coverage because we use it to tweak alpha for coverage.) > > * Abandons solid white optimizations for the sake of simplicity > (screen was the only mode that previous had solid white opts). > > Minor differences: > > * Inconsequential differences in opt flags (e.g. we now return > kCanTweakAlphaForCoverage_OptFlag even when there is no coverage). > > * Src coeffs when the shader outputs 0. > > * IS2C vs IS2A when the secondary output is scalar. > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/9a70920db22b6309c671f8e5d519bb95570e4414 TBR=egdaniel@google.com,bsalomon@google.com,cdalton@nvidia.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/1153993002
* Revert of Fix LCD coverage regression in GrPorterDuffXPFactory (patchset #3 ↵Gravatar bungeman2015-05-22
| | | | | | | | | | | | | | | | | | | | | | | | | id:40001 of https://codereview.chromium.org/1149883004/) Reason for revert: Reverting this fix to revert https://codereview.chromium.org/1124373002 Original issue's description: > Fix LCD coverage regression in GrPorterDuffXPFactory > > Fixes GrPorterDuffXPFactory to not use the blend table when getting > info about the LCD coverage XP. > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/3e2d59ef36e1b9a63e524cf1b27d5f7bcfb5ff0b TBR=bsalomon@google.com,egdaniel@google.com,cdalton@nvidia.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/1153803005
* Revert of Move DstCoordTexture to GrXP, rename and remove the word "copy" ↵Gravatar bungeman2015-05-22
| | | | | | | | | | | | | | | | | | | | | | | | | from dstcopytexture names. (patchset #6 id:100001 of https://codereview.chromium.org/1132093004/) Reason for revert: This is asserting on GTX660 bots with '!dst'. This may just be catching an existing issue. https://build.chromium.org/p/client.skia/builders/Test-Ubuntu-GCC-ShuttleA-GPU-GTX660-x86_64-Debug/builds/622/steps/dm/logs/stdio https://build.chromium.org/p/client.skia/builders/Test-Win7-MSVC-ShuttleA-GPU-HD2000-x86-Debug-ANGLE/builds/209/steps/dm/logs/stdio https://build.chromium.org/p/client.skia/builders/Test-Win8-MSVC-ShuttleA-GPU-GTX660-x86_64-Debug/builds/318/steps/dm/logs/stdio Original issue's description: > Move DstCoordTexture to GrXP, rename and remove the word "copy" from dstcopytexture names. > > Committed: https://skia.googlesource.com/skia/+/bb106b5f6ee18f7453b63f3a95f421b60a957f39 TBR=egdaniel@google.com,bsalomon@google.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true Review URL: https://codereview.chromium.org/1158453004
* Move DstCoordTexture to GrXP, rename and remove the word "copy" from ↵Gravatar bsalomon2015-05-22
| | | | | | dstcopytexture names. Review URL: https://codereview.chromium.org/1132093004
* Fix LCD coverage regression in GrPorterDuffXPFactoryGravatar cdalton2015-05-22
| | | | | | | | | Fixes GrPorterDuffXPFactory to not use the blend table when getting info about the LCD coverage XP. BUG=skia: Review URL: https://codereview.chromium.org/1149883004
* Implement Porter Duff XP with a blend tableGravatar cdalton2015-05-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Removes the runtime logic used by PorterDuffXferProcessor to decide blend coeffs and shader outputs, and instead uses a compile-time constant table of pre-selected blend formulas. Introduces a new blend strategy for srcCoeff=0 that can apply coverage with a reverse subtract blend equation instead of dual source blending. Adds new macros in GrBlend.h to analyze blend formulas both runtime. Removes kSetCoverageDrawing_OptFlag and GrSimplifyBlend as they are no longer used. Adds a GM that verifies all xfermodes, including arithmetic, with the color/coverage invariants used by Porter Duff. Adds a unit test that verifies each Porter Duff formula with every color/coverage invariant. Major changes: * Uses a reverse subtract blend equation for coverage when srcCoeff=0 (clear, dst-out [Sa=1], dst-in, modulate). Platforms that don't support dual source blending no longer require a dst copy for dst-in and modulate. * Sets BlendInfo::fWriteColor to false when the blend does not modify the dst. GrGLGpu will now use glColorMask instead of blending for these modes (dst, dst-in [Sa=1], modulate ignored for [Sc=1]). * Converts all SA blend coeffs to One for opaque inputs, and ISA to Zero if there is also no coverage. (We keep ISA around when there is coverage because we use it to tweak alpha for coverage.) * Abandons solid white optimizations for the sake of simplicity (screen was the only mode that previous had solid white opts). Minor differences: * Inconsequential differences in opt flags (e.g. we now return kCanTweakAlphaForCoverage_OptFlag even when there is no coverage). * Src coeffs when the shader outputs 0. * IS2C vs IS2A when the secondary output is scalar. BUG=skia: Review URL: https://codereview.chromium.org/1124373002
* rename GrDrawTargetCaps.h to GrCaps.h and move to includeGravatar bsalomon2015-05-22
| | | | Review URL: https://codereview.chromium.org/1135113005
* rename GrDrawTargetCaps to GrCapsGravatar bsalomon2015-05-19
| | | | Review URL: https://codereview.chromium.org/1133123009
* Fix valgrind bug in Porter Duff LCD.Gravatar egdaniel2015-05-12
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1135283002
* Make Porter Duff LCD XP its own XferProcessorGravatar egdaniel2015-05-12
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1134093003
* Only discard for XP dstCopies if we have a coverage value.Gravatar egdaniel2015-05-10
| | | | | | | | TBR=bsalomon@google.com BUG=skia: Review URL: https://codereview.chromium.org/1125283005
* Remove coverage multiplies when it is known to be fully opaque.Gravatar egdaniel2015-05-08
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1132883002
* Remove canTweakAlphaForCoverage from XP's since batch reads flag.Gravatar egdaniel2015-05-04
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1127693002
* Make XPFragmentBuilder only Builder with access to DstCopy.Gravatar egdaniel2015-04-29
| | | | | | | | Plus a bunch of renaming. BUG=skia: Review URL: https://codereview.chromium.org/1110033004
* Pull out shader-specific caps into GrShaderCaps and GrGLSLCapsGravatar jvanverth2015-04-29
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/1116713002
* Use GLSLCaps for creating processor keys and GLSL-specific programsGravatar jvanverth2015-04-28
| | | | | | | | | Effectively all this does is future-proof any GLSL-specific code, as GLSLCaps is just a typedef of GLCaps. BUG=skia: Review URL: https://codereview.chromium.org/1109863004
* Add onGetBlendInfo to GrXferProcessorGravatar cdalton2015-04-23
| | | | | | | | | | | | | | Adds an onGetBlendInfo method for GrXferProcessor subclasses to override instead of overriding getBlendInfo directly. This gives the base class a chance to initialize the struct with default values before passing it on. As the BlendInfo struct grows, this will keep things simple and less error prone. BUG=skia: NOTREECHECKS=true NOTRY=true Review URL: https://codereview.chromium.org/1049143002
* C++11 override should now be supported by all of {bots,Chrome,Android,Mozilla}Gravatar mtklein2015-03-25
| | | | | | | | | NOPRESUBMIT=true BUG=skia: DOCS_PREVIEW= https://skia.org/?cl=1037793002 Review URL: https://codereview.chromium.org/1037793002
* Use dst copies in porter duffer XP to correctly render certain blends.Gravatar egdaniel2015-02-17
| | | | | | | | BUG=skia: Committed: https://skia.googlesource.com/skia/+/997c6358d94e188b1a7b89a4f86e24cbe0f5a164 Review URL: https://codereview.chromium.org/914003003
* Use SkXfermode as public facing enum for GrPorterDuffXPGravatar egdaniel2015-02-17
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/926593005
* Determine whether we can tweakAlphaForCoverage during Pipeline/XP creation.Gravatar egdaniel2015-02-13
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/927623002
* Revert of Use dst copies in porter duffer XP to correctly render certain ↵Gravatar egdaniel2015-02-13
| | | | | | | | | | | | | | | | | | | | | | blends. (patchset #4 id:60001 of https://codereview.chromium.org/914003003/) Reason for revert: Failing GLProgramTest passing in stupid coeffs Original issue's description: > Use dst copies in porter duffer XP to correctly render certain blends. > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/997c6358d94e188b1a7b89a4f86e24cbe0f5a164 TBR=bsalomon@google.com,joshualitt@google.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/923153003
* Use dst copies in porter duffer XP to correctly render certain blends.Gravatar egdaniel2015-02-13
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/914003003
* Pass in ProcOptInfos into willNeedDstCopy on XPsGravatar egdaniel2015-02-13
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/912413002
* Move GrXferProcessor subclasses into cpp filesGravatar egdaniel2015-02-09
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/860383007
* Revert of Revert of Move DstCopy on gpu into the GrXferProcessor. (patchset ↵Gravatar bsalomon2015-02-06
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #1 id:1 of https://codereview.chromium.org/901663007/) Reason for revert: The revert didn't help the 10.9 bot. Unreverting by reverting the revert (which is basically relanding the original patch which itself was a revert of a revert). Revert. Original issue's description: > Revert of Move DstCopy on gpu into the GrXferProcessor. (patchset #11 id:200001 of https://codereview.chromium.org/885923002/) > > Reason for revert: > Testing to see if reverting fixes 10.9 bots. > > Original issue's description: > > Move DstCopy on gpu into the GrXferProcessor. > > > > BUG=skia: > > > > Committed: https://skia.googlesource.com/skia/+/74a11753604768bf461b80cabb66060e8564d82c > > > > Committed: https://skia.googlesource.com/skia/+/5e1378d0e075a323144ba14e0a4cbcca35eccc69 > > TBR=joshualitt@google.com,egdaniel@google.com > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/21b2c53218ab25f4268e3992e51d916076a2a7ee TBR=joshualitt@google.com,egdaniel@google.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/873723009
* Revert of Move DstCopy on gpu into the GrXferProcessor. (patchset #11 ↵Gravatar bsalomon2015-02-05
| | | | | | | | | | | | | | | | | | | | | | | | id:200001 of https://codereview.chromium.org/885923002/) Reason for revert: Testing to see if reverting fixes 10.9 bots. Original issue's description: > Move DstCopy on gpu into the GrXferProcessor. > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/74a11753604768bf461b80cabb66060e8564d82c > > Committed: https://skia.googlesource.com/skia/+/5e1378d0e075a323144ba14e0a4cbcca35eccc69 TBR=joshualitt@google.com,egdaniel@google.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/901663007
* Move DstCopy on gpu into the GrXferProcessor.Gravatar egdaniel2015-02-05
| | | | | | | | BUG=skia: Committed: https://skia.googlesource.com/skia/+/74a11753604768bf461b80cabb66060e8564d82c Review URL: https://codereview.chromium.org/885923002
* Revert "Move DstCopy on gpu into the GrXferProcessor."Gravatar egdaniel2015-02-04
| | | | | | | | | | | | | | This reverts commit 74a11753604768bf461b80cabb66060e8564d82c. TBR=joshualitt@google.com,bsalomon@google.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Committed: https://skia.googlesource.com/skia/+/3e9dfdb3784c0cbfecf7589a74aa9aff7ef40abd Review URL: https://codereview.chromium.org/896163003
* Revert of Revert "Move DstCopy on gpu into the GrXferProcessor." (patchset ↵Gravatar egdaniel2015-02-04
| | | | | | | | | | | | | | | | | | | | | | | | | | | | #1 id:1 of https://codereview.chromium.org/896163003/) Reason for revert: failed on my manual revert Original issue's description: > Revert "Move DstCopy on gpu into the GrXferProcessor." > > This reverts commit 74a11753604768bf461b80cabb66060e8564d82c. > > TBR=joshualitt@google.com,bsalomon@google.com > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/3e9dfdb3784c0cbfecf7589a74aa9aff7ef40abd TBR= NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/900913002
* Revert "Move DstCopy on gpu into the GrXferProcessor."Gravatar egdaniel2015-02-04
| | | | | | | | | | | | This reverts commit 74a11753604768bf461b80cabb66060e8564d82c. TBR=joshualitt@google.com,bsalomon@google.com NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/896163003
* Move DstCopy on gpu into the GrXferProcessor.Gravatar egdaniel2015-02-03
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/885923002
* Remove willReadDst from GrFragmentProcessor.Gravatar egdaniel2015-01-20
| | | | | | | | | | Since only XP's can read dst now, there is no reason to have this query on GrFP. This also triggered a chain reaction of cleaning up/removing unnecessary code elsewhere. BUG=skia: Review URL: https://codereview.chromium.org/851143003
* Fix up all the easy virtual ... SK_OVERRIDE cases.Gravatar mtklein2015-01-09
| | | | | | | | | | | | This fixes every case where virtual and SK_OVERRIDE were on the same line, which should be the bulk of cases. We'll have to manually clean up the rest over time unless I level up in regexes. for f in (find . -type f); perl -p -i -e 's/virtual (.*)SK_OVERRIDE/\1SK_OVERRIDE/g' $f; end BUG=skia: Review URL: https://codereview.chromium.org/806653007
* Add XP to handle the cases where we disable color write.Gravatar egdaniel2014-12-22
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/787233003
* Add an InvariantOutput for the XPF.Gravatar egdaniel2014-12-18
| | | | | | | | | | | The Invariant output holds information about final post blended color and other general information like will it blend with dst. Having this new struct allowed me to also remove some functions that were previously querying subsets of the invariant output. BUG=skia: Review URL: https://codereview.chromium.org/814933002
* Add Coverage Drawing XPGravatar egdaniel2014-12-17
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/808813002
* This change will ultimately pull uniform color, and to a much lesser degree ↵Gravatar joshualitt2014-12-15
| | | | | | | | uniform coverage, into GPs. There are still some loose ends because drawstate has the ability to override the GP, but fixing these cleanly will have to wait until we have deferred geometry in place and can make attribute / uniform decisions on the fly. BUG=skia: Review URL: https://codereview.chromium.org/746423007
* Add xp optimization for RGB coverage.Gravatar egdaniel2014-12-15
| | | | | | | | | | | | | This is needed since clearColorStages is being changed to ignore color input. For RGB coverage, we want to clear all the color stages (since we know the final output color), but we don't want to ignore the color input since it is needed. In future we will change this so the XP stores the color internally and thus can tell the GP to simiply ignore color. BUG=skia: Review URL: https://codereview.chromium.org/791933006
* Create xfer processor backend.Gravatar egdaniel2014-12-11
| | | | | | | | | | | | | This includes: -Having an actual XP stage at the end of the gl pipeline. -All Blending work is handled by XP until actually setting GL blend states -GLPrograms test to test XP BUG=skia: Committed: https://skia.googlesource.com/skia/+/4dffc940c430eec66d4707490eace19c9b3f7904 Review URL: https://codereview.chromium.org/764643004
* Revert of Create xfer processor backend. (patchset #6 id:100001 of ↵Gravatar joshualitt2014-12-10
| | | | | | | | | | | | | | | | | | | | | | | | | | https://codereview.chromium.org/764643004/) Reason for revert: CL breaks windows DM Original issue's description: > Create xfer processor backend. > > This includes: > -Having an actual XP stage at the end of the gl pipeline. > -All Blending work is handled by XP until actually setting GL blend states > -GLPrograms test to test XP > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/4dffc940c430eec66d4707490eace19c9b3f7904 TBR=bsalomon@google.com,joshualitt@chromium.org,egdaniel@google.com NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/789343002
* Revert of Fix to set correct output type when blending when we've read dst ↵Gravatar joshualitt2014-12-10
| | | | | | | | | | | | | | | | | | | | | (patchset #4 id:60001 of https://codereview.chromium.org/791143002/) Reason for revert: Breaks DM on windows Original issue's description: > Fix to set correct output type when blending when we've read dst > > BUG=skia: > > Committed: https://skia.googlesource.com/skia/+/733fc2054044377e914559fa4f46db66ab7d9cea TBR=bsalomon@google.com,egdaniel@google.com NOTREECHECKS=true NOTRY=true BUG=skia: Review URL: https://codereview.chromium.org/795783002
* Fix to set correct output type when blending when we've read dstGravatar egdaniel2014-12-10
| | | | | | BUG=skia: Review URL: https://codereview.chromium.org/791143002
* Create xfer processor backend.Gravatar egdaniel2014-12-10
| | | | | | | | | | | This includes: -Having an actual XP stage at the end of the gl pipeline. -All Blending work is handled by XP until actually setting GL blend states -GLPrograms test to test XP BUG=skia: Review URL: https://codereview.chromium.org/764643004
* Make all blending up to GrOptDrawState be handled by the xp/xp factory.Gravatar egdaniel2014-12-09
| | | | | | | | | | | | In this cl the blending information is extracted for the xp and stored in the ODS which is then used as it currently is. In the follow up cl, an XP backend will be added and at that point all blending work will take place inside XP's. BUG=skia: Committed: https://skia.googlesource.com/skia/+/7c66342a399b529634bed0fabfaa562db2c0dbd4 Review URL: https://codereview.chromium.org/759713002