Commit Graph

44 Commits

Author SHA1 Message Date
bungeman
d23a395d51 Revert of Move DstCoordTexture to GrXP, rename and remove the word "copy" 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
2015-05-22 15:22:48 -07:00
bsalomon
bb106b5f6e Move DstCoordTexture to GrXP, rename and remove the word "copy" from dstcopytexture names.
Review URL: https://codereview.chromium.org/1132093004
2015-05-22 14:32:10 -07:00
cdalton
9a70920db2 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:

Review URL: https://codereview.chromium.org/1124373002
2015-05-22 11:36:57 -07:00
bsalomon
4b91f768b3 rename GrDrawTargetCaps to GrCaps
Review URL: https://codereview.chromium.org/1133123009
2015-05-19 09:29:46 -07:00
bsalomon
f7cc87719e Add function for logging blend info on XP.
Review URL: https://codereview.chromium.org/1132373003
2015-05-11 11:21:14 -07:00
egdaniel
c19cdc254c Only discard for XP dstCopies if we have a coverage value.
TBR=bsalomon@google.com

BUG=skia:

Review URL: https://codereview.chromium.org/1125283005
2015-05-10 08:45:18 -07:00
cdalton
8917d62ef4 Implement support for KHR_blend_equation_advanced
Uses KHR(or NV)_blend_equation_advanced to implement custom Xfer modes
in hardware.

BUG=skia:

Review URL: https://codereview.chromium.org/1037123003
2015-05-06 13:40:21 -07:00
egdaniel
99bc9fdfb5 Remove canTweakAlphaForCoverage from XP's since batch reads flag.
BUG=skia:

Review URL: https://codereview.chromium.org/1127693002
2015-05-04 12:58:16 -07:00
cdalton
9954bc38c4 Use texture barriers to read directly from the RT
Updates GrXferProcessor to read directly from the RT texture when
texture barriers are supported and it needs to know the dst color.
Also adds the notion of an Xfer barrier and uses it to issue texture
barriers when the XP will read the RT.

BUG=skia:

Review URL: https://codereview.chromium.org/1040303002
2015-04-29 14:17:00 -07:00
jvanverth
e9c0fc616d Pull out shader-specific caps into GrShaderCaps and GrGLSLCaps
BUG=skia:

Review URL: https://codereview.chromium.org/1116713002
2015-04-29 11:18:05 -07:00
jvanverth
cfc18867d9 Use GLSLCaps for creating processor keys and GLSL-specific programs
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
2015-04-28 08:48:20 -07:00
cdalton
f4f2b44222 Add onGetBlendInfo to GrXferProcessor
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
2015-04-23 09:40:23 -07:00
egdaniel
0bdeec9640 Remove canApplyCoverage from XP and all related functions in gpu code.
BUG=skia:

Review URL: https://codereview.chromium.org/919683002
2015-02-23 12:12:54 -08:00
egdaniel
3ad6570e94 Use dst copies in porter duffer XP to correctly render certain blends.
BUG=skia:

Committed: https://skia.googlesource.com/skia/+/997c6358d94e188b1a7b89a4f86e24cbe0f5a164

Review URL: https://codereview.chromium.org/914003003
2015-02-17 11:15:47 -08:00
egdaniel
b197b8ff31 Use SkXfermode as public facing enum for GrPorterDuffXP
BUG=skia:

Review URL: https://codereview.chromium.org/926593005
2015-02-17 07:34:43 -08:00
egdaniel
f7c2d55872 Determine whether we can tweakAlphaForCoverage during Pipeline/XP creation.
BUG=skia:

Review URL: https://codereview.chromium.org/927623002
2015-02-13 12:11:00 -08:00
egdaniel
2b816bacc0 Revert of Use dst copies in porter duffer XP to correctly render certain 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
2015-02-13 11:07:54 -08:00
egdaniel
997c6358d9 Use dst copies in porter duffer XP to correctly render certain blends.
BUG=skia:

Review URL: https://codereview.chromium.org/914003003
2015-02-13 10:23:19 -08:00
egdaniel
e36914cb20 Pass in ProcOptInfos into willNeedDstCopy on XPs
BUG=skia:

Review URL: https://codereview.chromium.org/912413002
2015-02-13 09:00:33 -08:00
bsalomon
50785a3d10 Revert of Revert of Move DstCopy on gpu into the GrXferProcessor. (patchset #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
2015-02-06 07:02:37 -08:00
bsalomon
21b2c53218 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:

Review URL: https://codereview.chromium.org/901663007
2015-02-05 14:18:05 -08:00
egdaniel
5e1378d0e0 Move DstCopy on gpu into the GrXferProcessor.
BUG=skia:

Committed: https://skia.googlesource.com/skia/+/74a11753604768bf461b80cabb66060e8564d82c

Review URL: https://codereview.chromium.org/885923002
2015-02-05 11:11:13 -08:00
egdaniel
4dce32c466 Revert "Move DstCopy on gpu into the GrXferProcessor."
This reverts commit 74a1175360.

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
2015-02-04 06:25:28 -08:00
egdaniel
7adb355594 Revert of Revert "Move DstCopy on gpu into the GrXferProcessor." (patchset #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 74a1175360.
>
> 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
2015-02-04 06:20:25 -08:00
egdaniel
3e9dfdb378 Revert "Move DstCopy on gpu into the GrXferProcessor."
This reverts commit 74a1175360.

TBR=joshualitt@google.com,bsalomon@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Review URL: https://codereview.chromium.org/896163003
2015-02-04 06:14:22 -08:00
egdaniel
74a1175360 Move DstCopy on gpu into the GrXferProcessor.
BUG=skia:

Review URL: https://codereview.chromium.org/885923002
2015-02-03 15:02:43 -08:00
egdaniel
71e236c03e Remove willReadDst from GrFragmentProcessor.
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
2015-01-20 06:34:51 -08:00
egdaniel
080e673b10 Add XP to handle the cases where we disable color write.
BUG=skia:

Review URL: https://codereview.chromium.org/787233003
2014-12-22 07:35:52 -08:00
egdaniel
9e4ecdc9f8 Add an InvariantOutput for the XPF.
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
2014-12-18 12:44:55 -08:00
egdaniel
8750924a14 Add Coverage Drawing XP
BUG=skia:

Review URL: https://codereview.chromium.org/808813002
2014-12-17 13:37:13 -08:00
joshualitt
9b98932ada This change will ultimately pull uniform color, and to a much lesser degree 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
2014-12-15 14:16:27 -08:00
egdaniel
54160f3286 Add xp optimization for RGB coverage.
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
2014-12-15 12:38:53 -08:00
joshualitt
56995b5cc0 Remove GP from drawstate, revision of invariant output for GP
BUG=skia:

Committed: https://skia.googlesource.com/skia/+/c6bc58eded89b0c0a36b8e20e193c200f297a0da

Review URL: https://codereview.chromium.org/791743003
2014-12-11 15:44:02 -08:00
egdaniel
c230414861 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

Review URL: https://codereview.chromium.org/764643004
2014-12-11 13:15:14 -08:00
joshualitt
294738268d Revert of Create xfer processor backend. (patchset #6 id:100001 of 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
2014-12-10 15:03:01 -08:00
joshualitt
8c0f615fdd Revert of Remove GP from drawstate, revision of invariant output for GP (patchset #9 id:160001 of https://codereview.chromium.org/791743003/)
Reason for revert:
breaks mac

Original issue's description:
> Remove GP from drawstate, revision of invariant output for GP
>
> BUG=skia:
>
> Committed: https://skia.googlesource.com/skia/+/c6bc58eded89b0c0a36b8e20e193c200f297a0da

TBR=bsalomon@google.com,egdaniel@google.com,joshualitt@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Review URL: https://codereview.chromium.org/794843002
2014-12-10 14:12:22 -08:00
joshualitt
c6bc58eded Remove GP from drawstate, revision of invariant output for GP
BUG=skia:

Review URL: https://codereview.chromium.org/791743003
2014-12-10 13:48:57 -08:00
egdaniel
4dffc940c4 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:

Review URL: https://codereview.chromium.org/764643004
2014-12-10 07:43:50 -08:00
egdaniel
9513143efa Make all blending up to GrOptDrawState be handled by the xp/xp factory.
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
2014-12-09 11:15:44 -08:00
egdaniel
8d95ffa497 Revert of Make all blending up to GrOptDrawState be handled by the xp/xp factory. (patchset #7 id:140001 of https://codereview.chromium.org/759713002/)
Reason for revert:
break many gm's

Original issue's description:
> Make all blending up to GrOptDrawState be handled by the xp/xp factory.
>
> 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

TBR=bsalomon@google.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Review URL: https://codereview.chromium.org/766653008
2014-12-08 13:26:43 -08:00
egdaniel
7c66342a39 Make all blending up to GrOptDrawState be handled by the xp/xp factory.
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:

Review URL: https://codereview.chromium.org/759713002
2014-12-08 11:20:40 -08:00
egdaniel
915187b71d Check XpFactory equality in DrawState
BUG=skia:

Review URL: https://codereview.chromium.org/767873006
2014-12-05 12:58:28 -08:00
egdaniel
c016fb8f9f Use static XPF for porter duff xp factories.
BUG=skia:

Review URL: https://codereview.chromium.org/776843004
2014-12-03 11:41:55 -08:00
egdaniel
378092f3d1 Add XferProcessor factory in GrPaint and GrDrawState.
In this CL the XP should have zero effect on the actual rendering pipeline.

BUG=skia:

Review URL: https://codereview.chromium.org/751283002
2014-12-03 10:40:13 -08:00