Commit Graph

948 Commits

Author SHA1 Message Date
reed
9fa60daad4 Simplify flattening to just write enough to call the factory/public-constructor for the class. We want to *not* rely on private constructors, and not rely on calling through the inheritance hierarchy for either flattening or unflattening(CreateProc).
Refactoring pattern:

1. guard the existing constructor(readbuffer) with the legacy build-flag
2. If you are a instancable subclass, implement CreateProc(readbuffer) to create a new instances from the buffer params (or return NULL).

If you're a shader subclass
1. You must read/write the local matrix if your class accepts that in its factory/constructor, else ignore it.

R=robertphillips@google.com, mtklein@google.com, senorblanco@google.com, senorblanco@chromium.org, sugoi@chromium.org

Author: reed@google.com

Review URL: https://codereview.chromium.org/395603002
2014-08-21 07:59:51 -07:00
senorblanco
673d9732bf Check all scratch texture allocations for image filters.
BUG=403677
R=bsalomon@google.com
NOTREECHECKS=true

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/473283002
2014-08-15 10:48:43 -07:00
reed
5b1b2dbe76 remove SkStippleMaskFilter - no external clients
TBR=

Author: reed@google.com

Review URL: https://codereview.chromium.org/462013002
2014-08-12 05:50:10 -07:00
joshualitt
5acfea789d 2D kernel initial wiring for Guassian
BUG=skia:
R=senorblanco@chromium.org, bsalomon@chromium.org, bsalomon@google.com

Author: joshualitt@chromium.org

Review URL: https://codereview.chromium.org/418223009
2014-08-11 13:55:34 -07:00
reed
addf2edf3d add localMatrix to gradient Descriptor
this consolidation will also help transisition to new flattening pattern, where we want to
have a flatten/unflatten method on all of the common gradient params (i.e. Descriptor).

BUG=skia:
R=egdaniel@google.com

Author: reed@google.com

Review URL: https://codereview.chromium.org/461643002
2014-08-11 08:28:24 -07:00
senorblanco
3d822c29d4 Intersect SkPictureImageFilter bounds against clip bounds.
Intersect SkPictureImageFilter bounds against clip bounds
to avoid unnecessary processing. This is how the other
filters work (via applyCropRect()), but SkPictureImageFilter
maintains its own crop.

BUG=skia:
R=bsalomon@google.com

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/428263003
2014-07-30 14:49:31 -07:00
kkinnunen
7510b224e5 Rename GrGLUniformManager to GrGLProgramDataManager
Rename GrGLUniformManager to GrGLProgramDataManager in anticipation that the
class would be used to manage shader resources that are not uniforms.

This is needed in order to implement NVPR on GLES.

R=bsalomon@google.com

Author: kkinnunen@nvidia.com

Review URL: https://codereview.chromium.org/365853002
2014-07-30 00:04:16 -07:00
joshualitt
5ae5fc59b2 Adding repeat mode to texture domain
BUG=skia:
R=bsalomon@chromium.org, senorblanco@chromium.org, bsalomon@google.com, junov@chromium.org

Author: joshualitt@chromium.org

Review URL: https://codereview.chromium.org/422123003
2014-07-29 12:59:27 -07:00
bungeman
d6aeb6dc8f Fix thread unsafe mutex initialization.
BUG=skia:2779
R=robertphillips@google.com, mtklein@google.com, reed@android.com, bsalomon@google.com

Author: bungeman@google.com

Review URL: https://codereview.chromium.org/419113002
2014-07-25 11:52:48 -07:00
senorblanco
bc9845bb60 Remove the single-sigma version of SkDropShadowImageFilter::Create().
It's no longer used in Chrome.

BUG=skia:
R=bsalomon@google.com

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/407203002
2014-07-22 12:49:25 -07:00
joshualitt
ac9779234e Initial change to move 2D kernel to its own file.
BUG=skia:
R=bsalomon@chromium.org, senorblanco@chromium.org, bsalomon@google.com

Author: joshualitt@chromium.org

Review URL: https://codereview.chromium.org/379253003
2014-07-22 09:52:12 -07:00
bsalomon
63e99f7a03 Allow GrGLEffects to produce variable length keys.
R=robertphillips@google.com, jvanverth@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/385713005
2014-07-21 08:03:14 -07:00
dominikg
1bd6f7de52 Remove use of SK_SUPPORT_LEGACY_LAYERRASTERIZER_API.
Mozilla have removed any uses of the legacy API from their Moz2D code.
Since they were the last users we know of, we can remove the legacy API.

BUG=skia:2187
R=scroggo@google.com, reed@google.com

Author: dominikg@chromium.org

Review URL: https://codereview.chromium.org/402613003
2014-07-21 02:43:20 -07:00
robertphillips
e8464994bb Make SkPictureShader and SkPictureImageFilter use const SkPictures
R=mtklein@google.com, reed@google.com
TBR=reed@google.com

Author: robertphillips@google.com

Review URL: https://codereview.chromium.org/390023002
2014-07-14 07:53:27 -07:00
bsalomon
848faf00ec This moves us towards variable length effect keys. The overall program key now allows for it. After the header it stores an array of offsets to effect keys. This allows us to grab the effect keys to pass to effects when they generate code. It also ensures that we can't get a collision by sets of keys that are different lengths but are the same when appended together.
R=robertphillips@google.com, jvanverth@google.com, egdaniel@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/356513003
2014-07-11 10:01:02 -07:00
mtklein
1c577cd3ee Always initialize SkDashPathEffect fields.
SkDashPathEffect is flattened into a hash key as part of the old-and-busted
SkPicture paint deduping code.  If all its fields aren't intialized, this hash
will be based on uninitialized data.  This means the hash won't be
deterministic, and worse, Valgrind and MSAN will make us feel bad.

An alternative to this is to have SkDashPath::CalcDashParameters always
guarantee it writes something to all its output parameters, even when the dash
intervals make no sense.  I like it being dumb and its users defensive, but
could go either way.

BUG=391001
R=reed@google.com, mtklein@google.com

Author: mtklein@chromium.org

Review URL: https://codereview.chromium.org/379813004
2014-07-09 09:54:11 -07:00
bsalomon
83d081ae1d Goodbye GrEffectRef.
Also, reworked some var names and comments around SkShader::asNewEffect.

R=robertphillips@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/374923002
2014-07-08 09:56:11 -07:00
senorblanco
9ea3d57fde Clean up SkImageFilter constructors.
Now that all creation of SkImageFilters goes through
factory Create() methods, there's no real reason for the
convenience constructors. Some SkImageFilter subclasses
which actually have zero DAG-able inputs were passing NULL
to the superclass constructor. This actually means 1 input,
with a NULL value, not zero inputs. This becomes more
relevant for the upcoming cache infrastructure, where this
indicates that the filter will use its src input, where in
fact some of these filters do not (they are image generators
only).

Limiting SkImageFilter to a single constructor resolves this
ambiguity.

Along the way, I removed all of the default parameters to
the constructors, since the Create methods always call them
with the full argument list.

BUG=skia:
R=reed@google.com

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/376953003
2014-07-08 09:16:22 -07:00
bsalomon
55fad7af61 Remove GrEffect::CreateEffectRef and GrEffect::AutoEffectRef.
R=robertphillips@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/371103003
2014-07-08 07:34:21 -07:00
bsalomon
97b9ab72cd Make GrDrawState and GrPaint take GrEffect* instead of GrEffectRef*.
Make Sk-effect virtuals produce GrEffect* rather than GrEffectRef*

Make GrEffectRef a typedef for GrEffect.

Committed: https://skia.googlesource.com/skia/+/2011fe9cdfa63b83489a146cea6a724cede352c8

R=robertphillips@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/377503004
2014-07-08 06:52:35 -07:00
reed
969842ac9c Revert of Make GrDrawState and GrPaint take GrEffect* instead of GrEffectRef*. (https://codereview.chromium.org/377503004/)
Reason for revert:
broke linux builders

Original issue's description:
> Make GrDrawState and GrPaint take GrEffect* instead of GrEffectRef*.
>
> Make Sk-effect virtuals produce GrEffect* rather than GrEffectRef*
>
> Make GrEffectRef a typedef for GrEffect.
>
> Committed: https://skia.googlesource.com/skia/+/2011fe9cdfa63b83489a146cea6a724cede352c8

R=robertphillips@google.com, bsalomon@google.com
TBR=bsalomon@google.com, robertphillips@google.com
NOTREECHECKS=true
NOTRY=true

Author: reed@google.com

Review URL: https://codereview.chromium.org/372053003
2014-07-07 15:17:49 -07:00
bsalomon
2011fe9cdf Make GrDrawState and GrPaint take GrEffect* instead of GrEffectRef*.
Make Sk-effect virtuals produce GrEffect* rather than GrEffectRef*

Make GrEffectRef a typedef for GrEffect.

R=robertphillips@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/377503004
2014-07-07 15:11:31 -07:00
senorblanco
3df05015ef Fix SkColorFilterImageFilter matrix optimization.
The order of matrices passed to multiplication was wrong (apparently,
this optimization was only being tested with matrices which commute).

See Chrome bug http://crbug.com/378362

R=sugoi@chromium.org

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/371523002
2014-07-03 11:13:09 -07:00
sugoi
c197c8a47e Adding 64 bit checks
Added a few more checks to avoid overflowing 32 bit sizes while computing convolutions.

I also changed a dangerously misleading INHERITED typedef.

BUG=389570
R=senorblanco@google.com, senorblanco@chromium.org

Author: sugoi@chromium.org

Review URL: https://codereview.chromium.org/361403006
2014-07-03 10:44:26 -07:00
reed
e1085e0381 move SkChecksum and SkEmptyShader to private
TBR=reed@google.com

Author: reed@chromium.org

Review URL: https://codereview.chromium.org/366133002
2014-07-03 07:26:01 -07:00
senorblanco
ca6a7c2945 Make perlin noise do CTM-correct scaling.
When drawing perlin noise, generate noise at the resolution determined
by CTM, not by the resolution at construction time. This required moving
the generation of PaintingData to getContext() and asNewEffect() for the
raster and GPU paths, respectively.

It also required adjusting the matrices used during rendering
to be translate-only.

R=sugoi@chromium.org, bsalomon@google.com

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/358903002
2014-06-27 13:35:52 -07:00
senorblanco
7bf1068473 Remove SkBicubicImageFilter, and all related tests.
Now that we have SkResizeImageFilter, and the bicubic
resizing is part of skia proper, there's no need for a
specialized image filter.

BUG=skia:
R=bsalomon@google.com

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/357793002
2014-06-25 14:39:06 -07:00
bsalomon
22900008fb Make GrGLShaderBuilder::fragmentPosition() return a vec4, with 1.0 as the zw components when in the y-flip case. This works around an Adreno driver bug.
Revert "Stop referencing gl_FragCoord z and w components."

This reverts commit 160a52ba21.

R=jvanverth@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/354663002
2014-06-24 11:16:52 -07:00
bsalomon
160a52ba21 Stop referencing gl_FragCoord z and w components.
This fixes an Adreno driver bug where GL programs fail to link if the FS refers to these components of gl_FragCoord.

R=jvanverth@google.com

Author: bsalomon@google.com

Review URL: https://codereview.chromium.org/345083002
2014-06-20 07:25:14 -07:00
reed
9f0147143f Revert of remove guarded code - there are no more callers (https://codereview.chromium.org/343783002/)
Reason for revert:
webkit still uses getTotalClip -- need to find where they define the guard.

../../skia/ext/skia_utils_mac.mm:400:42: error: no member named 'getTotalClip' in 'SkCanvas'
      const SkRegion& clipRgn = canvas_->getTotalClip();
                                ~~~~~~~  ^

Original issue's description:
> remove guarded code - there are no more callers
>
> BUG=skia:
>
> Committed: https://skia.googlesource.com/skia/+/c5d5cf9489977aa6fba077d1dc242029fbb4859e

R=scroggo@google.com, reed@google.com
TBR=reed@google.com, scroggo@google.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:

Author: reed@chromium.org

Review URL: https://codereview.chromium.org/342843002
2014-06-18 15:51:20 -07:00
reed
c5d5cf9489 remove guarded code - there are no more callers
BUG=skia:
R=scroggo@google.com

Author: reed@google.com

Review URL: https://codereview.chromium.org/343783002
2014-06-18 14:41:26 -07:00
humper
4a24cd8ff4 Fifth attempt to land faster rect blur. Remove unnecessary conditionals from the shader.
approved over in https://codereview.chromium.org/331863006/; reuploading
because it had the wrong base url

BUG=skia:2095
R=bsalomon@google.com
TBR=bsalomon

Author: humper@google.com

Review URL: https://codereview.chromium.org/341543005
2014-06-17 13:39:31 -07:00
senorblanco
f3b50276a4 Perlin noise cleanup.
Remove Simplex noise implementation and now-redundant base classes.

BUG=skia:
R=sugoi@chromium.org, sugoi@google.com, reed@google.com

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/336043002
2014-06-16 10:49:58 -07:00
rs.prinja
39e58adb99 Randomize seed for SkDiscretePathEffect::filterPath()
Fix for https://code.google.com/p/skia/issues/detail?id=2581. Randomizes
the seed in SkDiscretePathEffect::filterPath(). Prior to this we were
using the path length as a seed.

Now, if we have two different paths with identical contents and we
apply an SkDiscretePathEffect to each, we obtain two different random
paths. Previously, we would obtain two overlapping paths (identical
path contents leading to the same seed).

BUG=skia:
R=reed@google.com, scroggo@google.com

Author: rs.prinja@samsung.com

Review URL: https://codereview.chromium.org/311803002
2014-06-12 22:55:08 -07:00
scroggo
e07c1ab408 Revert of third try at landing improved blur rect; this time with more correctness (https://codereview.chromium.org/331443003/)
Reason for revert:
Failing layout test: https://storage.googleapis.com/chromium-layout-test-archives/WebKit_Linux/32762/layout-test-results/virtual/gpu/fast/canvas/canvas-draw-canvas-on-canvas-shadow-pretty-diff.html

Original issue's description:
> third try at landing improved blur rect; this time with more correctness
>
> BUG=skia:2095
> R=bsalomon@google.com
> TBR=bsalomon
>
> Committed: https://skia.googlesource.com/skia/+/72abfc2b4e7caead660f6b6a05e60d05eaf1a66f

R=bsalomon@google.com, reed@google.com, humper@google.com
TBR=bsalomon@google.com, humper@google.com, reed@google.com
NOTREECHECKS=true
NOTRY=true
BUG=skia:2095

Author: scroggo@google.com

Review URL: https://codereview.chromium.org/333763002
2014-06-12 12:10:24 -07:00
senorblanco
ce6a354e12 Fix tiled perlin noise.
It turns out that the perlin implementation we inherited from WebKit
does not actually generate tileable noise (see Chromium bug
http://crbug.com/383495).

The main problem is that when generating coordinates for gradient
interpolation, it was attempting to wrap both x and (x + 1)
simultaneously at the tile boundary (that is, either both or neither
are wrapped). This obviously won't work, since along the tile seams,
(x + 1) should be wrapped, but x should not. The same is true in y.

This patch fixes both the CPU and GPU paths, renames some variables to
more closely match the spec, and modifies the perlin noise GM to
actually test tiling. (Note that the clipping the GM was doing was
removed, since it's superfluous: it used to be necessary for image
filters, but isn't anymore, and this isn't an image filter GM anyway.)

R=sugoi@google.com, sugoi
TBR=senorblanco

Author: senorblanco@chromium.org

Review URL: https://codereview.chromium.org/332523006
2014-06-12 11:24:20 -07:00
humper
72abfc2b4e third try at landing improved blur rect; this time with more correctness
BUG=skia:2095
R=bsalomon@google.com
TBR=bsalomon

Author: humper@google.com

Review URL: https://codereview.chromium.org/331443003
2014-06-11 12:42:49 -07:00
reed
b0b1aa04ed Revert of second try at landing improved blur rect (https://codereview.chromium.org/325703002/)
Reason for revert:
broke some fast/canvas layout tests

Original issue's description:
> second try at landing improved blur rect
>
> BUG=skia:2095
> TBR=bsalomon
>
> Committed: https://skia.googlesource.com/skia/+/e9ea0d6b7d59ac3b7e257281e545b24bcc0d2a76

R=bsalomon@google.com, reed@chromium.org, humper@google.com
TBR=bsalomon@google.com, humper@google.com, reed@chromium.org
NOTREECHECKS=true
NOTRY=true
BUG=skia:2095

Author: reed@google.com

Review URL: https://codereview.chromium.org/322423002
2014-06-11 07:26:23 -07:00
egdaniel
a22ea18823 Move Dashing filterPath to a dashing utils file
From inside GrContext, we have a need to create an SkPath an original path and
some dashing info. We do not have access to the original path effect so we need
a way to make the FilterPath function accessible outside of the effect. So I moved
the core filterPath code (and all need helper functions) out of SkDashPathEffect
and created a SkDashPath in utils to store these helper functions.

BUG=skia:

Committed: https://skia.googlesource.com/skia/+/576dcdc793a762ec63fbecdbfd5768066b548fe5

Author: egdaniel@google.com

Review URL: https://codereview.chromium.org/314623004
2014-06-11 06:51:51 -07:00
dandov
9de5b514d3 SkShader::asNewEffect Refactoring
The new signature is:

	bool asNewEffect(GrContext* context, const SkPaint& paint, GrColor* grColor, GrEffectRef** grEffect, const SkMatrix* localMatrixOrNull) const;

It will fix the hack for skcolorshader by modifying the GrColor parameter in SkGr::SkPaint2GrPaintShader.

BUG=skia:2646
R=jvanverth@google.com, bsalomon@google.com

Author: dandov@google.com

Review URL: https://codereview.chromium.org/318923005
2014-06-10 14:38:28 -07:00
reed
6c22573edb hide SkBitmap::setConfig
patch from issue 325733002

TBR=scroggo

Author: reed@chromium.org

Review URL: https://codereview.chromium.org/322963002
2014-06-09 19:52:07 -07:00
humper
e9ea0d6b7d second try at landing improved blur rect
BUG=skia:2095
R=bsalomon@google.com
TBR=bsalomon

Author: humper@google.com

Review URL: https://codereview.chromium.org/325703002
2014-06-09 14:35:21 -07:00
egdaniel
8405ef9854 Fix Assert for gpu ConicalTwoPointGradient edgecase to be correct bounds.
BUG=skia:
R=bsalomon@google.com

Author: egdaniel@google.com

Review URL: https://codereview.chromium.org/311373003
2014-06-09 11:57:28 -07:00
jvanverth
d78a2fac37 Rollback of fe689c46 and all subsequent changes
BUG=skia:
R=humper@google.com
TBR=humper@google.com
NOTRY=True
NOTREECHECKS=True

Author: jvanverth@google.com

Review URL: https://codereview.chromium.org/324463005
2014-06-06 13:40:36 -07:00
humper
9ab6c00f6c remove extra debug prints
BUG=skia:
TBR=jvanverth
NOTRY=True
NOTREECHECKS=True

Author: humper@google.com

Review URL: https://codereview.chromium.org/314423002
2014-06-06 13:28:04 -07:00
humper
39dd491efe fix 10.6 shader tests
BUG=skia:
TBR=jvanverth
NOTRY=True
NOTREECHECKS=True

Author: humper@google.com

Review URL: https://codereview.chromium.org/324543002
2014-06-06 12:55:23 -07:00
humper
e10a4ff45a repair math error introduced by windows build fix
BUG=skia:
TBR=jvanverth
NOTRY=True
NOTREECHECKS=True

Author: humper@google.com

Review URL: https://codereview.chromium.org/320593003
2014-06-06 12:21:03 -07:00
humper
1afc04d877 one channel texture fix for blur shader
BUG=skia:
R=bsalomon@google.com
TBR=bsalomon
NOTRY=True
NOTREECHECKS=True

Author: humper@google.com

Review URL: https://codereview.chromium.org/319543007
2014-06-06 11:55:24 -07:00
humper
7bf666a00f fix blur test
BUG=skia:
TBR=jvanverth
NOTRY=True
NOTREECHECKS=True

Author: humper@google.com

Review URL: https://codereview.chromium.org/323583002
2014-06-06 11:22:50 -07:00
humper
fe689c46a7 Faster GPU rect blur that doesn't require computing vertical and horizontal
scanlines on the CPU first.  Should make extremely large drop shadows fast
again.

BUG=skia:
R=bsalomon@google.com

Author: humper@google.com

Review URL: https://codereview.chromium.org/316273004
2014-06-06 09:48:40 -07:00