This makes accessing the GPU resource behind an SkImage a lot more typesafe. Additionally, the GrBackendObject is being deprecated so this is the path forward.
I split the controversial stuff off into https://skia-review.googlesource.com/c/skia/+/118575 (Add SkImage::setLayout call).
Change-Id: I297e72770e8fb360fac7c7cd74f050ae759ae133
Reviewed-on: https://skia-review.googlesource.com/118571
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Inherited/outer local matrices are supposed to compose to the right of
(preconcat) other/nested local matrices.
BUG=skia:7781
Change-Id: Icd3c24f226845427be849a8be3d78293aef176b3
Reviewed-on: https://skia-review.googlesource.com/118344
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Keeping related heuristics in sync with actual shader capabilities is somewhat tricky,
and overall fragile.
So how about this: instead of an explicit opt-in mechanism, try to instantiate a legacy
shader context and fall back to raster pipeline on failure (null Context => implicit
opt-in for raster pipeline). Shaders can still choose not to draw by returning both a
null Context and failing appendStages().
BUG=skia:7772
Change-Id: I2e76f51af7064853a6cb851b4c30c82eba3ee828
Reviewed-on: https://skia-review.googlesource.com/118383
Commit-Queue: Florin Malita <fmalita@chromium.org>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Mike Reed <reed@google.com>
Previously, the threaded backend failed to drawBitmapRect (see,
e.g., GM_bitmaprect_s) because it did not intercept the call to
SkDraw::drawBitmap.
Bug: skia:
Change-Id: I7eeaae98e63d726b2b566c4d15f7ea939f59360e
Reviewed-on: https://skia-review.googlesource.com/115983
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Yuqian Li <liyuqian@google.com>
Bug: skia:7769
Change-Id: Ida462aec8ad832f01aec07602d8be5735a9b0ca2
Reviewed-on: https://skia-review.googlesource.com/118582
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Bug: skia:7769
Change-Id: Ibf52ebfe5bb79afd0358278fbd284084a10b076b
Reviewed-on: https://skia-review.googlesource.com/118180
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Currently we try to get Helvetica or the default font and draw a pipe
and look to see if there is any non-gray. We should bring our own font
for this check, since sometimes the system font may not be accessible.
BUG=chromium:822218
Change-Id: I9c4988b0acbb5a59445a0ec7f3fade73678b973e
Reviewed-on: https://skia-review.googlesource.com/117862
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Ben Wagner <bungeman@google.com>
Same change as the 1D one, but now with more dimensions!!
Bug: skia:7769
Change-Id: I152031780ab71ba106d4fa65d52960ec4358274e
Reviewed-on: https://skia-review.googlesource.com/118262
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Bug: skia:7769
Change-Id: I56a67f8a6f19437359ad6e7bf2d57f6e9a7992c9
Reviewed-on: https://skia-review.googlesource.com/118240
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
throw an error instead of asserting for one
for the other, only assert if the values are trusted. That's not ideal,
but I don't see an easy way to insert a fail safety hatch in this code
and if the assert is ignored, no further assert is triggered.
verified that extended tests run without problem on debug and release
R=kjlubick@google.com
Bug: skia:
Change-Id: I5544b6cbef97479854dbecb05baae6b2c41cabc9
Reviewed-on: https://skia-review.googlesource.com/117725
Commit-Queue: Cary Clark <caryclark@skia.org>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
stroke -> Inf -> NaN -> assert.
BUG=skia:7775
Change-Id: I086883bce90d1d473cff87f67e954718ea3181f6
Reviewed-on: https://skia-review.googlesource.com/118145
Commit-Queue: Stephen White <senorblanco@chromium.org>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Allows ApplyGammaTest to pass on Bifrost, which uses fp16 for mediump.
Change-Id: Icd04001939a2cb7e1789132ab035ca498c92112a
Reviewed-on: https://skia-review.googlesource.com/118162
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Performs inset and outset operations on simple polygons and returns
a simple polygon, if possible.
Bug: skia:
Change-Id: I6d468174ad70b5279b736c532e19cbb84ff9f955
Reviewed-on: https://skia-review.googlesource.com/116483
Commit-Queue: Jim Van Verth <jvanverth@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Not sure whether this will fix b/77249109, but we can have a try.
Bug: b/77249109
Change-Id: Ia569cb130758dd0a63bfe2ecb29e61c75716c955
Reviewed-on: https://skia-review.googlesource.com/117460
Commit-Queue: Yuqian Li <liyuqian@google.com>
Reviewed-by: Cary Clark <caryclark@google.com>
Before this change SkScalerContext::getMetrics always calls
generateMetrics to force the subclass to create full metrics. However,
if the SkScalerContext is going to draw from outlines then there is no
reason to do so since it is immediately going to overwrite those metrics
by computing its own from the path. This also puts off other decisions
being made based on the glyph metrics until after the metrics are fully
computed.
The logic in SkScalerContext::getImage is updated to be similar to the
logic in the new SkScalerContext::getMetrics.
Change-Id: I1798c9244277fab85595fb39fc3a85ef7eb33620
Reviewed-on: https://skia-review.googlesource.com/117085
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
This reverts commit 80e1d56e19.
Reason for revert: SkRTree.cpp:57 asserting, probably this?
Original change's description:
> implement SkTDArray with std::vector
>
> It's always worth seeing if we can get away with replacing custom data
> structures with ones from the standard library. Our array-like types
> are all good candidates to replace with std::vector, and it's especially
> easy to start with SkTDArray. Unlike the others, it has no preallocated
> S-variant, which is tricky to make work with std::vector.
>
> SkTDArray also has known integer overflow bugs, leading to out of range
> writes. It'd be _very_ nice to ditch it for a better standard vector.
>
> I removed a bunch of unused or little-used methods, and updated a couple
> call sites that used methods in unusual or dangerous ways.
>
> I've had to tweak GrAAConvexTessellator and SkBaseShadowTessellator just
> a touch to work within the constraints of an std::vector impl. It's not
> intended to be legal to write to the reserved-but-not-counted elements
> of an SkTDArray, but you can get away with it in our old implementation.
> This version now uses setCount() to actually reserve and count them, and
> should have the same performance and use the same amount of memory.
>
> The PathMeasure_explosion GM I added recently to reproduce this bug now
> draws without triggering undefined behavior or ASAN errors, provided you
> have ~40GB of RAM.
>
> Bug: skia:7674
>
> Change-Id: I4eacae18a976cd4a6d218102f8ca5d973d4d7d0e
> Reviewed-on: https://skia-review.googlesource.com/115982
> Reviewed-by: Brian Osman <brianosman@google.com>
> Commit-Queue: Mike Klein <mtklein@chromium.org>
TBR=mtklein@chromium.org,bungeman@google.com,brianosman@google.com
Change-Id: Icffd9f22fe89746a970ff598e1a05c774960bc0e
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:7674
Reviewed-on: https://skia-review.googlesource.com/117901
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Also, clean up Freetype and Mac impls.
Also, sk_get_locale_string returns an error value.
Change-Id: If8dfc101e28a1d782679174fe6f5a28812563af5
Reviewed-on: https://skia-review.googlesource.com/117229
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
It's always worth seeing if we can get away with replacing custom data
structures with ones from the standard library. Our array-like types
are all good candidates to replace with std::vector, and it's especially
easy to start with SkTDArray. Unlike the others, it has no preallocated
S-variant, which is tricky to make work with std::vector.
SkTDArray also has known integer overflow bugs, leading to out of range
writes. It'd be _very_ nice to ditch it for a better standard vector.
I removed a bunch of unused or little-used methods, and updated a couple
call sites that used methods in unusual or dangerous ways.
I've had to tweak GrAAConvexTessellator and SkBaseShadowTessellator just
a touch to work within the constraints of an std::vector impl. It's not
intended to be legal to write to the reserved-but-not-counted elements
of an SkTDArray, but you can get away with it in our old implementation.
This version now uses setCount() to actually reserve and count them, and
should have the same performance and use the same amount of memory.
The PathMeasure_explosion GM I added recently to reproduce this bug now
draws without triggering undefined behavior or ASAN errors, provided you
have ~40GB of RAM.
Bug: skia:7674
Change-Id: I4eacae18a976cd4a6d218102f8ca5d973d4d7d0e
Reviewed-on: https://skia-review.googlesource.com/115982
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Unlike the specVersion parameter on the layers, specVersion on extensions
does not mean what vulkan spec version the extensions work with but just
what version of the extension it is. Thus we don't want to compare it
to the version of the spec we are making.
Bug: skia:
Change-Id: If47c249b4cca0b9a10bfb3b8ce88db6bda1e12ed
Reviewed-on: https://skia-review.googlesource.com/117634
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
fuzzer bug triggers an assert in SkRRect::isValid because
on radius is zero and the other, while small, is not.
The radii are normally both set to zero if one is zero
in SkRRect::setRectRadii. However, subsequently scaleRadii
may set one to zero when normalizing the pair.
Move the clamping code out of setRectRadii so it can be
called from scaleRadii as well.
R=reed@google.com
Bug: skia:
Change-Id: Ib9a86da7212567b2f4b83d99a41cf9ba2c30e9b9
Reviewed-on: https://skia-review.googlesource.com/115701
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Cary Clark <caryclark@google.com>
This reverts commit a466228a61.
Reason for revert: Turned up a vulkan driver bug
Original change's description:
> Delete GPU alpha clip masks
>
> The cost of switching render targets on each draw to make a custom
> clip is enormous. There are virtually no circumstances where this will
> outperform our cached, multi-threaded software mask generator. The
> tried-and-true approach to clipping on-GPU is with analytic FPs. And
> now that we support CCPR clip FPs, there ulitmately should be very few
> clip stacks that even require a mask as long as they don't use
> deprecated SkClipOps.
>
> Bug: skia:
> Change-Id: I79c5558c93c1b99179f1e933d029f69b14ad1ce3
> Reviewed-on: https://skia-review.googlesource.com/116724
> Reviewed-by: Brian Osman <brianosman@google.com>
> Commit-Queue: Chris Dalton <csmartdalton@google.com>
TBR=robertphillips@google.com,brianosman@google.com,csmartdalton@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: skia:
Change-Id: Iba289e00ba2eca7084dc8517491cfb5f6ab6266f
Reviewed-on: https://skia-review.googlesource.com/117420
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
GpuResources now dump optional string values that describe the type and
category of the resource. The type provides a description of the kind
of resource it is (e.g. texture, buffer object, stencil, etc.) and the
category describes what the resource is currently tasked to do (e.g.
path masks, images, scratch, etc.)
This CL also refactors the dump logic in an attempt to consolidate
duplicated code into GrGpuResources.cpp.
Bug: b/74435803
Change-Id: I83cae825f41e6450a21398ab3ecea349c7c61c15
Reviewed-on: https://skia-review.googlesource.com/115989
Commit-Queue: Derek Sollenberger <djsollen@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
These appear to have been added to handle glyph paths with nvpr and no
longer appear to be used.
Change-Id: Id75e2e85ab837a5808e7641873d217c844cd827c
Reviewed-on: https://skia-review.googlesource.com/117103
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Ben Wagner <bungeman@google.com>
This is a reland of 050c86768a
Original change's description:
> GrTessellator: hang fix.
>
> Some edges are not coincident with their own endpoints (because floating
> point). If this happens for an edge which is a right-enclosing-edge
> during the Bentley-Ottman simplify() pass, we end up an infinite loop
> attempting to split the edge, since the edge is never to the right of its
> endpoint.
>
> The easiest fix is to simply remove the right-enclosing-edge splitting
> code. This code was originally added before we had proper
> active-edge-list rewinding, and should no longer be necessary.
>
> BUG=802896
>
> Change-Id: Id9f2942b73f01152af8c0088e8c6b1389891d827
> Reviewed-on: https://skia-review.googlesource.com/116920
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Commit-Queue: Stephen White <senorblanco@chromium.org>
Bug: 802896
Change-Id: I3e48346a8a358ae7d481299a586003e817a519ca
Reviewed-on: https://skia-review.googlesource.com/117121
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Change-Id: Id7238e427e490338d1f610255774c2069cfd4879
Reviewed-on: https://skia-review.googlesource.com/117060
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
This reverts commit 050c86768a.
Reason for revert: layout test diff in Chrome roll?
Original change's description:
> GrTessellator: hang fix.
>
> Some edges are not coincident with their own endpoints (because floating
> point). If this happens for an edge which is a right-enclosing-edge
> during the Bentley-Ottman simplify() pass, we end up an infinite loop
> attempting to split the edge, since the edge is never to the right of its
> endpoint.
>
> The easiest fix is to simply remove the right-enclosing-edge splitting
> code. This code was originally added before we had proper
> active-edge-list rewinding, and should no longer be necessary.
>
> BUG=802896
>
> Change-Id: Id9f2942b73f01152af8c0088e8c6b1389891d827
> Reviewed-on: https://skia-review.googlesource.com/116920
> Reviewed-by: Robert Phillips <robertphillips@google.com>
> Commit-Queue: Stephen White <senorblanco@chromium.org>
TBR=robertphillips@google.com,senorblanco@chromium.org
Change-Id: Icb928db6c052a21c6d327da9492cb991f769186f
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: 802896
Reviewed-on: https://skia-review.googlesource.com/117120
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Some edges are not coincident with their own endpoints (because floating
point). If this happens for an edge which is a right-enclosing-edge
during the Bentley-Ottman simplify() pass, we end up an infinite loop
attempting to split the edge, since the edge is never to the right of its
endpoint.
The easiest fix is to simply remove the right-enclosing-edge splitting
code. This code was originally added before we had proper
active-edge-list rewinding, and should no longer be necessary.
BUG=802896
Change-Id: Id9f2942b73f01152af8c0088e8c6b1389891d827
Reviewed-on: https://skia-review.googlesource.com/116920
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Stephen White <senorblanco@chromium.org>
The cost of switching render targets on each draw to make a custom
clip is enormous. There are virtually no circumstances where this will
outperform our cached, multi-threaded software mask generator. The
tried-and-true approach to clipping on-GPU is with analytic FPs. And
now that we support CCPR clip FPs, there ulitmately should be very few
clip stacks that even require a mask as long as they don't use
deprecated SkClipOps.
Bug: skia:
Change-Id: I79c5558c93c1b99179f1e933d029f69b14ad1ce3
Reviewed-on: https://skia-review.googlesource.com/116724
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Prep for adding new offset routines.
Change-Id: I261c22d9998e5ae4567b697c5f20a31f20777ac1
Reviewed-on: https://skia-review.googlesource.com/116800
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
I believe this is what has been causing the intermittent TSAN crash
Change-Id: Ie7170a3eb0495cebe8b1398a00f98ad099f78944
Reviewed-on: https://skia-review.googlesource.com/116629
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Renames GrCCCoverageProcessor::RenderPass to PrimitiveType and handles
corners as subpasses instead. Various touchups to coverage processors
now that the overhaul is complete. This change should be strictly a
refactor.
Bug: skia:
Change-Id: I52852463330d5ec71fae7e19fadccd9ede8b2c16
Reviewed-on: https://skia-review.googlesource.com/116169
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Change-Id: Id906e139db80e0c3b426a0e2318e77477989cf8d
Reviewed-on: https://skia-review.googlesource.com/116545
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Currently only enabled in Skia dev builds. Has some diffs
in GMs and images, but (hopefully) nothing major.
Bug: skia:
Change-Id: Ifdf5d2804e59f555a3dc84f657e438dd589a2751
Reviewed-on: https://skia-review.googlesource.com/116520
Commit-Queue: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
This reverts commit 107d53971d.
Reason for revert: Ready to rebaseline
Original change's description:
> Revert "Use DAA for small cubics and non-convex paths that fit into a mask"
>
> This reverts commit 1875e05384.
>
> Reason for revert:
>
> I don't think there's anything wrong with this, but it looks like Yuqian is out today and there is a large number of GM, SKP, and SVG images to triage from this. This is just a triage-by-revert... should be fine to reland when you're ready to triage.
>
> Original change's description:
> > Use DAA for small cubics and non-convex paths that fit into a mask
> >
> > I forgot to benchmark svgs and it turns out that DAA is specifically
> > good for the small cubics and small non-convex paths in svgs. This
> > should make our svg performance fast again:
> >
> > 2.84% faster in svgparse_Florida-StateSeal.svg_1
> > 2.90% faster in svgparse_NewYork-StateSeal.svg_1
> > 2.95% faster in svgparse_Seal_of_Texas.svg_1
> > 3.05% faster in car.svg_1
> > 3.53% faster in svgparse_Vermont_state_seal.svg_1
> > 3.68% faster in svgparse_Wyoming-StateSeal.svg_1
> > 4.88% faster in svgparse_Minnesota-StateSeal.svg_1
> > 5.22% faster in svgparse_NewMexico-StateSeal.svg_1
> > 6.49% faster in svgparse_fsm.svg_1
> >
> >
> > Bug: skia:
> > Change-Id: Ia149944443d72c12c3dda178cb5ebc89d6d0bf18
> > Reviewed-on: https://skia-review.googlesource.com/116185
> > Reviewed-by: Cary Clark <caryclark@google.com>
> > Commit-Queue: Yuqian Li <liyuqian@google.com>
>
> TBR=caryclark@google.com,liyuqian@google.com,reed@google.com,caryclark@skia.org
>
> # Not skipping CQ checks because original CL landed > 1 day ago.
>
> Bug: skia:
> Change-Id: I232f34dcea1cdabef768879a261fe6796f3e4a79
> Reviewed-on: https://skia-review.googlesource.com/116400
> Reviewed-by: Mike Klein <mtklein@google.com>
> Commit-Queue: Mike Klein <mtklein@google.com>
TBR=mtklein@google.com,caryclark@google.com,liyuqian@google.com,reed@google.com,caryclark@skia.org
Change-Id: I6a413e3a2f1ce9182f9e209f6e2654a602170378
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:
Reviewed-on: https://skia-review.googlesource.com/116620
Commit-Queue: Yuqian Li <liyuqian@google.com>
Reviewed-by: Yuqian Li <liyuqian@google.com>
Manhattan distance has the nice property that every pixel crossed
anywhere by the curve gets a fractional coverage value, whereas pixels
not touched by the curve will have zero coverage. This arguably looks
better on its own merits, but it also helps the curves blend more
seamlessly with their adjoining edges, which are already using Manhattan
distance.
Bug: skia:
Change-Id: I31cf28171d0b74512c74dca1088e50f0f442b924
Reviewed-on: https://skia-review.googlesource.com/115781
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Begins using the new triangle corner algorithm on curves as well.
Updates the vertex backend to render curves in a single pass.
Simplifies the cubic and quadratic shaders. Removes all code related to
sample locations.
Bug: skia:
Change-Id: I96c6c401be765e96a8fe087deb7f84760e68dcf0
Reviewed-on: https://skia-review.googlesource.com/115746
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Chris Dalton <csmartdalton@google.com>
This includes an optimizer fix for the situation:
int i;
float f = frexp(foo, i);
If we don't read the variable i, it is considered dead and eliminated -
which then causes an error when we try to write the expression
frexmp(foo, i).
Bug: skia:
Change-Id: Iac385e38e215455346fab62e1f4ec46fa65b3c21
Reviewed-on: https://skia-review.googlesource.com/116521
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Change-Id: I8cb6059a175e0ef6bd766e3ad2254c893c11bed3
Reviewed-on: https://skia-review.googlesource.com/116522
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
aarch64 added vector-wise add/mul/min/max instructions.
We can use min and max to implement allTrue() and anyTrue(),
respectively.
(This CL is mostly so I don't forget these intrinsics exist.)
In assembly, these actually compile to two instructions,
the folding operation into a vector register, then a move
from the vector register to a general purpose register.
Change-Id: Ia6a999ac250740de765e871094e911979a8711c7
Reviewed-on: https://skia-review.googlesource.com/116482
Reviewed-by: Chris Dalton <csmartdalton@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
This reverts commit 1875e05384.
Reason for revert:
I don't think there's anything wrong with this, but it looks like Yuqian is out today and there is a large number of GM, SKP, and SVG images to triage from this. This is just a triage-by-revert... should be fine to reland when you're ready to triage.
Original change's description:
> Use DAA for small cubics and non-convex paths that fit into a mask
>
> I forgot to benchmark svgs and it turns out that DAA is specifically
> good for the small cubics and small non-convex paths in svgs. This
> should make our svg performance fast again:
>
> 2.84% faster in svgparse_Florida-StateSeal.svg_1
> 2.90% faster in svgparse_NewYork-StateSeal.svg_1
> 2.95% faster in svgparse_Seal_of_Texas.svg_1
> 3.05% faster in car.svg_1
> 3.53% faster in svgparse_Vermont_state_seal.svg_1
> 3.68% faster in svgparse_Wyoming-StateSeal.svg_1
> 4.88% faster in svgparse_Minnesota-StateSeal.svg_1
> 5.22% faster in svgparse_NewMexico-StateSeal.svg_1
> 6.49% faster in svgparse_fsm.svg_1
>
>
> Bug: skia:
> Change-Id: Ia149944443d72c12c3dda178cb5ebc89d6d0bf18
> Reviewed-on: https://skia-review.googlesource.com/116185
> Reviewed-by: Cary Clark <caryclark@google.com>
> Commit-Queue: Yuqian Li <liyuqian@google.com>
TBR=caryclark@google.com,liyuqian@google.com,reed@google.com,caryclark@skia.org
# Not skipping CQ checks because original CL landed > 1 day ago.
Bug: skia:
Change-Id: I232f34dcea1cdabef768879a261fe6796f3e4a79
Reviewed-on: https://skia-review.googlesource.com/116400
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Mike Klein <mtklein@google.com>
Make GrGLTexture use the version that takes GrMipMapped.
Bug: skia:6718
Change-Id: Id3e801bcb5e781938e610bdea75bd92498117935
Reviewed-on: https://skia-review.googlesource.com/116221
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Bug: skia:
Change-Id: Ieedd05ced376a7604936e9d2729fc20a8669496e
Reviewed-on: https://skia-review.googlesource.com/115531
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
I forgot to benchmark svgs and it turns out that DAA is specifically
good for the small cubics and small non-convex paths in svgs. This
should make our svg performance fast again:
2.84% faster in svgparse_Florida-StateSeal.svg_1
2.90% faster in svgparse_NewYork-StateSeal.svg_1
2.95% faster in svgparse_Seal_of_Texas.svg_1
3.05% faster in car.svg_1
3.53% faster in svgparse_Vermont_state_seal.svg_1
3.68% faster in svgparse_Wyoming-StateSeal.svg_1
4.88% faster in svgparse_Minnesota-StateSeal.svg_1
5.22% faster in svgparse_NewMexico-StateSeal.svg_1
6.49% faster in svgparse_fsm.svg_1
Bug: skia:
Change-Id: Ia149944443d72c12c3dda178cb5ebc89d6d0bf18
Reviewed-on: https://skia-review.googlesource.com/116185
Reviewed-by: Cary Clark <caryclark@google.com>
Commit-Queue: Yuqian Li <liyuqian@google.com>
Chrome is replaying DDLs into FBO 0 which impacts several rendering capabilities. FBO 0-ness of the final destination currently isn't part of SkSurfaceCharacterization so the surface flags aren't being set appropriately for the expected capabilities.
Bug: skia:7748
Change-Id: I0d2bf3f689f8f75990443a0d5959f016d16f5d97
Reviewed-on: https://skia-review.googlesource.com/116188
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
BUG=skia:7624
Change-Id: Id2b7449048591892ff802484d5e3745a7e1402bb
Reviewed-on: https://skia-review.googlesource.com/109521
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Mike Klein <mtklein@google.com>
Reviewed-by: Herb Derby <herb@google.com>
No other code can be using an SkImageFilter() while it's being
destroyed, so there's not a chance of a race per-se here. But, because
we have not acquired fMutex, there is technically a possibility that the
destructor sees an outdated version of fCacheKeys, not necessarily
reflecting the last change(s) made while another core held the mutex.
This is an unlikely case, but it's worth fixing by locking in the
destructor. This will always be uncontended, and so very cheap.
Bug: skia:7666
Change-Id: I9f705bc6e8e99162b90d59b30b8dd51c4f238970
Reviewed-on: https://skia-review.googlesource.com/115929
Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
The Chrome perf regressions (817942, 819185) are
caused by the bad choices to use DAA instead of
AAA for stroking simple curves. (BTW, in my tests,
DAA is still faster than SAA so it's not too much
of a regression.)
We previously only considered the number of line segments,
but not the length of each segment. That leads to our
wrong judgement of the path complexity (the number of
intersections per scan line) when there are many short
line segments.
The change will bring the following performance change
to our nanobench:
8.45% slower in clip_strategy_path_10
8.39% slower in draw_stroke_bezier_quad_square_bevel_10
3.91% slower in chart_aa
3.76% faster in lines
6.29% faster in path_stroke_big_oval
22.81% faster in path_stroke_big_circle
24.44% faster in giantdashline_vert_2
The two slower cases, clip_strategy_path_10
and draw_stroke_bezier_quad_square_bevel_10 are caused by
choosing AAA over DAA. Those two tests do seem to be simple
strokes. I'll later investigate why AAA is slower than DAA
for those two cases.
For now, I think that this change is sufficient to address
those chromium perf regresssions.
Bug: chromium:817942 chromium:819185
Change-Id: I1d13c968b17f257b4ede4c70e552db5016baf1ab
Reviewed-on: https://skia-review.googlesource.com/115583
Commit-Queue: Yuqian Li <liyuqian@google.com>
Reviewed-by: Cary Clark <caryclark@google.com>
The only tangible effect this CL should have is to use __vectorcall on
all Windows builds, including scalar ones. The code generation is a
little better there with __vectorcall than not, so might as well. This
is a baby step towards vector stages with MSVC, but a very baby step
indeed.
Mostly this refactors and regroups a bunch of logic to reflect my
current thoughts. The BUILD.gn changes are essentially no-ops, but they
simplify things and make our flags more similar to how those targets are
built in Chromium.
(And I cleaned up other /arch: uses so this works.)
Change-Id: I73dd39d15cdc7b3d268231a707952bbbfd91496e
Reviewed-on: https://skia-review.googlesource.com/115644
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
The 3x3 inverse grew unstable on small curves with large coordinates,
not to mention being inefficient. This fixes many bad pixels on the
chalkboard.
Also begins scaling curve gradients by the AA bloat, in order to match
triangle edges more closely and visualize curve AA in the ccpr sample.
Bug: skia:
Change-Id: I0f7da2e7599d4d5c458b3dd307185679dc78bb50
Reviewed-on: https://skia-review.googlesource.com/115527
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
This reflects the long-standing restrictions in our clients (webview) and the reality of the gpu target which just uses scissors.
It also removes one of the few callers of canvas::clipRegion, which we'd like to remove.
Bug: skia:
Change-Id: Ie3b3c6e8752f82cddef256f753000f9da4bdbdee
Reviewed-on: https://skia-review.googlesource.com/113260
Reviewed-by: Derek Sollenberger <djsollen@google.com>
Commit-Queue: Mike Reed <reed@google.com>
For DDLs, Ganesh needs to know about External & Rectangle textures prior to instantiation (or PromiseImage fulfillment). These new flags allow the client to provide this information when the lazyProxy is created.
The new texture flags work analogously to the render target flags:
GrSurface and GrSurfaceProxy get a new set of accessors for the new flags
The new flags are set appropriately on a GrGLTexture when it is created
For wrapped texture proxies the flags are just copied off of the GrSurface
For lazy-proxies/promise-images the flags are computed up front and passed to the proxy
The GrSurfaceProxy/GrSurface flags equivalence is verified in GrSurfaceProxy::assign
Change-Id: Ia8e1998aa0a36ce4481bfd9e56be21f990e83148
Reviewed-on: https://skia-review.googlesource.com/114985
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
As per comment in change 114371.
Change-Id: I9724d5df205bb1430ebd3371677cce344372decc
Reviewed-on: https://skia-review.googlesource.com/115610
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Change-Id: I438bfb1a43857aa9e7e29b19e53dd921ec6eab1a
Reviewed-on: https://skia-review.googlesource.com/115604
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Make searching indices unsigned so intermediate middle
doesn't overflow. Verified fix runs test in skia:7675
successfully.
R=reed@google.com
Bug: skia:7675
Change-Id: I76be1d3fee8875ae9eb2b18eb070ef66c8006c03
Reviewed-on: https://skia-review.googlesource.com/114798
Reviewed-by: Cary Clark <caryclark@skia.org>
Commit-Queue: Cary Clark <caryclark@skia.org>
After this change it is only tests that are using the old API.
Bug: skia:
Change-Id: I421ab5efbc604769d2356609d61670c289574f3d
Reviewed-on: https://skia-review.googlesource.com/115300
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Change-Id: Id7b67bc1e4e994f96037266adf7dc159980e4169
Reviewed-on: https://skia-review.googlesource.com/115244
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Herb Derby <herb@google.com>
This allows no need for downcasting for specialized use
of SkScalerContext for the remote case. This allows
cache priming to be used in a single process.
BUG=skia:7515
Change-Id: I963a50e36af9deef5a3414fc8a4c94ccfc38deaf
Reviewed-on: https://skia-review.googlesource.com/115121
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
Working on the last constructor.
Change-Id: Iad80c3fd13be47ac46d9037af522b3b3337426fd
Reviewed-on: https://skia-review.googlesource.com/115243
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Herb Derby <herb@google.com>
This reverts commit 2ac541e66c.
Reason for revert: try a new fix; the old one doesn't work
because the deltas are not sorted. We use masks specifically
because we don't want to sort deltas.
Original change's description:
> Revert "Check the boundary while cumulating deltas in a mask"
>
> This reverts commit d9779bcf93.
>
> Reason for revert: breaks gold
>
> Original change's description:
> > Check the boundary while cumulating deltas in a mask
> >
> > Without the fix,
> >
> > ./out/Debug/dm --config t8888 -m complexclip_bw
> >
> > will trigger the assert.
> >
> > Note that this boundary check is already in place when deltas are
> > cumulated without using a mask.
> >
> > Bug: skia:
> > Change-Id: I68bfe2b7196d440743d3a7535d097bb8ec7689c3
> > Reviewed-on: https://skia-review.googlesource.com/113210
> > Commit-Queue: Yuqian Li <liyuqian@google.com>
> > Reviewed-by: Cary Clark <caryclark@skia.org>
>
> TBR=liyuqian@google.com,reed@google.com,caryclark@skia.org
>
> Change-Id: Ice0e3618b02ef48b0f2a9f0662a12f76078e984a
> No-Presubmit: true
> No-Tree-Checks: true
> No-Try: true
> Bug: skia:
> Reviewed-on: https://skia-review.googlesource.com/113170
> Reviewed-by: Yuqian Li <liyuqian@google.com>
> Commit-Queue: Yuqian Li <liyuqian@google.com>
TBR=liyuqian@google.com,reed@google.com,caryclark@skia.org
Change-Id: Ia7a3608a54bed23827ed014213dcd6248adb271d
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: skia:7731
Reviewed-on: https://skia-review.googlesource.com/113520
Commit-Queue: Yuqian Li <liyuqian@google.com>
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Yuqian Li <liyuqian@google.com>
This should not affect anything for now. But it may prevent some future
problems where someone accidentally changed isRadiusIncreasing implementation,
and getting confused by the unexpected shading behavior.
Bug: skia:
Change-Id: I45e83f4bc9eefbdc1ad1c196a43444e24c782711
Reviewed-on: https://skia-review.googlesource.com/115162
Reviewed-by: Greg Daniel <egdaniel@google.com>
Commit-Queue: Yuqian Li <liyuqian@google.com>
If SkImageInfo flatten and unflatten aren't referenced outside
of one test, perhaps they can be removed altogether.
R=reed@google.com
Bug: skia:6898
Change-Id: Ia6f82b66d4496a628ad95c386d1865793f3e31a9
Reviewed-on: https://skia-review.googlesource.com/115074
Commit-Queue: Cary Clark <caryclark@skia.org>
Reviewed-by: Mike Reed <reed@google.com>
This reverts commit be5947c2f3.
Bug: skia:
Change-Id: I06dc15b31042d7827511d0ac2a7f4262c3f09622
Reviewed-on: https://skia-review.googlesource.com/115079
Reviewed-by: Mike Klein <mtklein@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Allow SkTraceMemoryDump to exclude wrapped objects from dumps. This
helps avoid duplicate dumping when Skia is wrapping an external object
which is already dumped externally.
Bug: 795358
Change-Id: Icbda96b564c81b958d40f74693280ac7d5ba7332
Reviewed-on: https://skia-review.googlesource.com/114681
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Eric Karl <ericrk@chromium.org>
This reverts commit c9a642edf2.
Reason for revert: 1010102 gms broke
Original change's description:
> New read pixels implementation that is simpler but does all conversions on CPU.
>
> Change-Id: Ia548cd24a8544b35a233311706faf48de353b7cf
> Reviewed-on: https://skia-review.googlesource.com/109902
> Commit-Queue: Brian Salomon <bsalomon@google.com>
> Reviewed-by: Robert Phillips <robertphillips@google.com>
TBR=bsalomon@google.com,robertphillips@google.com,brianosman@google.com
Change-Id: I7724a6eef79885ba2a32c1ac871e5b2a9a3c0c12
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/115140
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>