Mostly this is about extending the fallback in SkShader::appendStages()
to cover more cases, and making sure subclasses call appendStages() so
they can get the fallback, not onAppendStages() directly.
We still need to watch for SkShader::makeContext() failing in the
fallback itself, so sadly SkShader::appendStages() may still fail.
Change-Id: I2314b234a24bdcecac401a385ce050d7fdf0a83e
Reviewed-on: https://skia-review.googlesource.com/16369
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Bug: skia:
Change-Id: I116bec82783d297e91ef061217b5e61f7ff16a76
Reviewed-on: https://skia-review.googlesource.com/16371
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
We've been transforming the gamut after running the legacy shader,
but now that we have SkColorSpaceXformer, we can transform the
legacy shader into the dst color space instead.
This should be both more correct and faster.
Change-Id: If017048874e6cce46837d3ecbd88dfde503fd03a
Reviewed-on: https://skia-review.googlesource.com/16373
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Many SkShader subclasses are only friends to use makeColorSpace().
Our usual solution to this is to add a method on SkColorSpaceXformer
that calls makeColorSpace() for us, so that only SkColorSpaceXformer
needs to be a friend.
Just a refactor. No image diffs.
Change-Id: Icf952b739edf45f2fb8c0c35e353ef2866f4c5cc
Reviewed-on: https://skia-review.googlesource.com/16370
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Like three gray with alpha blends and taking the max alpha.
Change-Id: I104c84f784979030744127f8f66905ad9d1bdf0e
Reviewed-on: https://skia-review.googlesource.com/15898
Commit-Queue: Ben Wagner <bungeman@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
This CL implements Go bindings for a subset of the functions in the C API.
It implements a Go version of the C demo program in
experimental/c-api-example/skia-c-example.c and the output is identical.
(Checked by hand).
The main purpose is to establish a pattern of calling the Skia C API that
is memory safe and provides a idiomatic Go interface to Skia.
Follow up CLs will cover the entire C API, add documentation and establish
a pattern to distribute the bindings more easily.
BUG=
Change-Id: I96ff7c3715164c533202ce300ab0312b1b07f884
Change-Id: I96ff7c3715164c533202ce300ab0312b1b07f884
Reviewed-on: https://skia-review.googlesource.com/10032
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Stephan Altmueller <stephana@google.com>
When drawing an analytic rrect shadow, the mask filter could pass
the devRect into the drawOp. If we have a small scale that could
make the radii less than SK_ScalarNearlyZero. We might also have
a rect that we outset by a value less than SK_ScalarNearlyZero to
the penumbra border. So the best we can check is that the the two
radii are equal.
Bug: skia:6608
Change-Id: I8bdafe089b302fbc5c9042ff30798d3688e9e781
Reviewed-on: https://skia-review.googlesource.com/16364
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Jim Van Verth <jvanverth@google.com>
This adds perspective to GrNewNonAAFillRectOp, renames it to GrNonAAFillRectOp, and deletes the previous version of that namespace.
Change-Id: I20f35bf019f9c9105e6ec83dda11328451138109
Reviewed-on: https://skia-review.googlesource.com/15634
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Functions in SkPaint and SkCanvas are easier to write
about when all of their parameters are named.
Also, move GlyphCacheProc to private since the only
interface that returns it is already in private.
R=reed@google.com
Change-Id: Iaea46213d5614d564c1c3de99e6f96c5efaec4b1
Reviewed-on: https://skia-review.googlesource.com/16175
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Cary Clark <caryclark@google.com>
Separately we may want to determine why we get NaNs here in flutter.
Bug: skia:6607
Change-Id: Id90fff1ccf487794d55dc011b1a2d176cedb931a
Reviewed-on: https://skia-review.googlesource.com/16342
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
This is an automated CL created by the recipe roller. This CL rolls recipe
changes from upstream projects (e.g. depot_tools) into downstream projects
(e.g. tools/build).
Please review the expectation changes, and LGTM+CQ.
More info is at https://goo.gl/zkKdpD. Use https://goo.gl/noib3a to file a bug.
build:
https://crrev.com/d1cc05b08eb5bd2fe0b71fde4fcc5f5d1d65b5d6 swarming api: fix legacy way to specify isolated (maruel@chromium.org)
Recipe-Tryjob-Bypass-Reason: Autoroller
Bugdroid-Send-Email: False
Change-Id: I0cbbff8ee1124ebaf40a20fbb0f780a6dca6537e
Reviewed-on: https://skia-review.googlesource.com/16320
Reviewed-by: Marc-Antoine Ruel <maruel@google.com>
Reviewed-by: Robbie Iannucci <iannucci@google.com>
Reviewed-by: Ravi Mistry <rmistry@google.com>
Commit-Queue: Ravi Mistry <rmistry@google.com>
Change-Id: I2b26ccd017d9e66ced41a1af04929e2d83a5a2d5
Reviewed-on: https://skia-review.googlesource.com/16343
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Change-Id: I3d25a2aa9ae6dacb52779142cea062c7d9df40f5
Reviewed-on: https://skia-review.googlesource.com/16238
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
GrDefaultPathRenderer was using GrPathUtils::worstCasePointCount, which
clamped the tolerance. Then it built geometry with the unclamped value,
leading to vertex overflow (found by canvas fuzzer). The new rule is if
you use GrPathUtils, your tolerance must come from scaleToleranceToSrc.
Bug: skia:6569
Change-Id: I851519db8e569e570c717033d697f3d4d3d787fb
Reviewed-on: https://skia-review.googlesource.com/16234
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
SkColorFilter::onAppendStages() can't actually fail today.
Let's enforce that. This means the fallback is now used
only for color filters that have not implemented onAppendStages().
Change-Id: Ica3939685694f6186727766b54914b9ba05ca68c
Reviewed-on: https://skia-review.googlesource.com/16231
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Change-Id: Ibde5242dc4f66b720cb8be1e2d771ba88b12b496
Reviewed-on: https://skia-review.googlesource.com/16241
Commit-Queue: Mike Klein <mtklein@chromium.org>
Commit-Queue: Mike Klein <mtklein@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Looks like this was left off the original vulkan Geo shader change.
Bug: skia:
Change-Id: Iec1c09d6d7b347147e4237bad3e6b3eb4684154e
Reviewed-on: https://skia-review.googlesource.com/15813
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Bug: skia:
Change-Id: I9037decfeb9b2ab673434bb3c4b7f55aca186d68
Reviewed-on: https://skia-review.googlesource.com/13872
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Designed for Flutter's threading architecture, with
an eye to being useful to other clients. Under the
hood, uses a new image generator class to lazily wrap
a texture for multiple GrContexts.
Re-land of https://skia-review.googlesource.com/c/14180/
Bug: skia:
Change-Id: I3dd382640629b79b3058f18fee68d043566e43e5
Reviewed-on: https://skia-review.googlesource.com/15895
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Had no external callers, and was poorly named.
Bug: skia:
Change-Id: I5bed6853e9aa3b31fa106a436a73297bf55f0503
Reviewed-on: https://skia-review.googlesource.com/16155
Reviewed-by: Cary Clark <caryclark@google.com>
Commit-Queue: Mike Reed <reed@google.com>
This instructs us on how to encode jpegs when the src
image has alpha. The original behavior is to ignore
the alpha channel. This CL adds the option to blend
the pixels onto opaque black.
Note that kBlendOnBlack and kIgnore are identical
unless the input alpha type is kUnpremul.
Bug: 713862
Bug: skia:1501
Change-Id: I4891c70bb0ccd83f7974c359bd40a2143b5c49ac
Reviewed-on: https://skia-review.googlesource.com/15817
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
The only way it could ostensibly fail is if we get non-XYZ color
spaces, which should just not happen. Assert that doesn't happen
and safely do nothing instead of failing.
This is one of the leaf nodes to getting SkCreateRasterPipelineBlitter
to never fail. Next come SkColorFilter:: and SkShader::appendStages().
Change-Id: I5c7a8c63d0a9837e2e55208e1674796d86f45307
Reviewed-on: https://skia-review.googlesource.com/16002
Commit-Queue: Mike Klein <mtklein@chromium.org>
Reviewed-by: Matt Sarett <msarett@google.com>
Bug: skia:
Change-Id: I5cc7b18263dbe28d5d8d89301111ef240109704a
Reviewed-on: https://skia-review.googlesource.com/15770
Reviewed-by: Jim Van Verth <jvanverth@google.com>
Commit-Queue: Greg Daniel <egdaniel@google.com>
Timing `out/dm --src gm --config srgb -w foo` on my desktop,
- wall time drops from 3.72 -> 2.17 seconds; and
- CPU time drops from 64.9 -> 27.9 seconds.
So again, close to 2x speedup.
(In exchange, the .pngs of our GMs grow from 57M to 73M.)
Change-Id: I6e2e8c8bda6371e857c8db41ca3119402a9056ae
Reviewed-on: https://skia-review.googlesource.com/16000
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Bug: 713862
Change-Id: I45068ed39affe41ffe0f29bf42c5ea1d9b0247ba
Reviewed-on: https://skia-review.googlesource.com/15897
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Mike Klein <mtklein@chromium.org>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Commit-Queue: Matt Sarett <msarett@google.com>
This makes SkColorFilter::appendStages() first try onAppendStages(),
and if it's unimplemented or fails, fall back to filterSpan4f().
This also makes onAppendStages() private to try to ensure that
appendStages() is now its only caller, ensuring everyone goes
through this fallback path.
The fallback uses the color filter transformed into the dst colorspace
using our new SkColorSpaceXformer... that seem ok Matt?
Change-Id: I4751a6859596fa4f7e844e69ef0d986f005b52c7
Reviewed-on: https://skia-review.googlesource.com/16031
Reviewed-by: Mike Reed <reed@google.com>
Reviewed-by: Matt Sarett <msarett@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
Also add some GrMesh::validate() calls earlier to make future debugging easier. Previously this only asserted when the draws executed, now it asserts as soon as the draw is prepared in the op subclass.
Bug: skia:
Change-Id: Ibdd4488b9a9263f0ed337a2c8c6066bc36297001
Reviewed-on: https://skia-review.googlesource.com/16029
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Certain systems experience a leak in the GL driver associated with
stencil buffers. Attempts to avoid the leak (while still using stencil
buffers) dind't succeed. This patch adds a GrContextOption
fAvoidStencilBuffers. This disables certain path rendering modes, as
well as stencil based masking/clipping.
Bug: 713854
Change-Id: Ifa6c0f2bd5ee395547bda9165d6c79d197ae8b8b
Reviewed-on: https://skia-review.googlesource.com/15253
Commit-Queue: Eric Karl <ericrk@chromium.org>
Reviewed-by: Eric Karl <ericrk@chromium.org>
Reviewed-by: Brian Salomon <bsalomon@google.com>
BUG=skia:
Change-Id: Ideba16972b82fc26766349c808ae406e5ea23163
Reviewed-on: https://skia-review.googlesource.com/9418
Reviewed-by: Mike Klein <mtklein@chromium.org>
Commit-Queue: Matt Sarett <msarett@google.com>
These are being/will be used to determine the correct amout of memory to preallocate for ops & clips in the opLists.
Change-Id: I98ebaec8a6e72a43d97101aca5fbc58264964ebd
Reviewed-on: https://skia-review.googlesource.com/15882
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
This should enable deduplication.
Bug: skia:
Change-Id: I2be98f648acd666c420885f08377c256f9102a8f
Reviewed-on: https://skia-review.googlesource.com/14651
Commit-Queue: Eric Boren <borenet@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
This will, hopefully, unblock the roll.
Change-Id: I2e33ccca7161334cdecd881e2699ae0c61ba2a31
Reviewed-on: https://skia-review.googlesource.com/16101
Commit-Queue: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Bug: chromium:719664
Change-Id: I7477c1eb0479d5305233dc6a643280d88029bd17
Reviewed-on: https://skia-review.googlesource.com/15888
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
- explicitly reject already-texture-backed and picture-backed
Needed to add a virtual to image_base and generator to distinguish
generators that can (or cannot) natively "generate" on the gpu (e.g. pictures)
Bug: 646089
Change-Id: I3aea22f89b31009ecbb3bd50d88512e6532f0a0f
Change-Id: I3aea22f89b31009ecbb3bd50d88512e6532f0a0f
Reviewed-on: https://skia-review.googlesource.com/15765
Commit-Queue: Mike Reed <reed@google.com>
Reviewed-by: Leon Scroggins <scroggo@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
Apparently this was not added to Vk when it was added to GL. It may be
the cause of a flutter error they are seeing.
Bug: skia:
Change-Id: I4d4e9d1817b308b6c4f01e83f712eb3437e2ad71
Reviewed-on: https://skia-review.googlesource.com/15887
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Jim Van Verth <jvanverth@google.com>
This adds a new method "checkNext" which is essentially a conditional
nextToken(). This allows for some simplification of the parser code,
but has no other effect.
Bug: skia:
Change-Id: I4e08fd5f2c69cbcb4c31fd936b3a65dc50347191
Reviewed-on: https://skia-review.googlesource.com/15881
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ben Wagner <benjaminwagner@google.com>
Change-Id: Icd40cf5eff3d2156a3ca00d7950059d5b77f48bf
Reviewed-on: https://skia-review.googlesource.com/15890
Reviewed-by: Ben Wagner <bungeman@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>
This reverts commit 83b1b3db36.
Reason for revert: unit test failing and asan leaks
Original change's description:
> Added SkImage::MakeCrossContextFromEncoded
>
> Designed for Flutter's threading architecture, with
> an eye to being useful to other clients. Under the
> hood, uses a new image generator class to lazily wrap
> a texture for multiple GrContexts.
>
> Bug: skia:
> Change-Id: I6c37b12c8ab5bce94b91190e5f0beb91d31ae81b
> Reviewed-on: https://skia-review.googlesource.com/14180
> Commit-Queue: Brian Osman <brianosman@google.com>
> Reviewed-by: Brian Salomon <bsalomon@google.com>
>
TBR=egdaniel@google.com,bsalomon@google.com,robertphillips@google.com,brianosman@google.com
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
Change-Id: I1f0bf580aa0ea2d132e18b64ff610ddac9d073a7
Reviewed-on: https://skia-review.googlesource.com/15892
Reviewed-by: Brian Salomon <bsalomon@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
There has been a supported() function in SkRasterPipelineBlitter.cpp for
a long time that's becoming increasingly misnamed. That blitter ought
to be able to handle all destination formats.
This CL moves that logic outside to the creator of the blitter, changing
it from "can we handle this format?" to "do we want to use this blitter
for this format?".
In other CLs I'm working to make creating a pipeline blitter never fail.
Change-Id: Ie59fb8ec6e63d215d1baef439e464e8f0ab3ae4d
Reviewed-on: https://skia-review.googlesource.com/15842
Reviewed-by: Mike Reed <reed@google.com>
Commit-Queue: Mike Klein <mtklein@chromium.org>