Go to file
Michael Ludwig a195d101f9 New GrClipStack supporting only intersect/difference
Overview doc: https://docs.google.com/document/d/1ddIk74A1rL5Kj5kGcnInOYKVAXs3J2IsSgU5BLit0Ng/edit?usp=sharing

This is the new clip stack that will replace GrClipStackClip. The doc
link in the CL description has a much more detailed overview of what the
strategy of the new clip stack is, but at a very high level:

1. Add a temporary #define that lets SkGpuDevice switch between the old
stack and the new stack. For the new GrClipStack, it extends SkBaseDevice
directly and has to implement all of the device clipping virtuals.
   - If you look from patchset 5 and earlier, the define defaults to on
     so I can test it on the bots, etc. but the plan will be for it to
     default to off when this lands so it's only running on unit tests.
     Then in a follow up, I'll turn it on for our bots but keep it off in
     chrome and android. If everything looks good, chrome can then be
     turned on. There is a more extensive migration plan for android
     because of the expanding clip ops, but that is covered at the end of
     the overview doc.

2. GrClipStack manages save/restore logic of the stack and extends GrClip,
so the cpp file also includes code to apply a GrAppliedClip. At the moment
the apply strategy is as close to that in GrReducedClip and
GrClipStackClip as I could make it. Down the road, I think we can explore
other analytic coverage options and a clip atlas that replaces the unified
SW mask.
   - Once GrClipStack is enabled everywhere, it means GrReducedClip and
     GrClipStackClip can be deleted, so I'm not too worried about sharing
     code between the two. A lot is already shared through the use of
     GrSWMaskHelper and GrStencilMaskHelper.
   - SkClipStack and SkClipStackDevice are still used by the PDF and SVG
     backends, so they aren't necessarily deletable.

3. The GrClipStack only handles intersect and difference ops. It
represents all geometric clip operations as an element. The stack itself
is controlled by the "save record", which tracks aggregate bounds, valid
elements, and the non-geometric clip shader.
   - When a new save record is pushed on the stack, older elements are
     inactive. This means they cannot be modified, since they may need to
     be activated again when the current save is popped off the stack.
     However, they can still affect the clip during application.
   - When a new element is pushed on the stack, older elements may be
     invalidated. This means they don't need to be considered any more
     because they are redundant with the new clip shape (e.g. nested round
     rect clips only have to keep the innermost valid).


Bug: skia:10205
Change-Id: I68ccfd414033aa9014b102efaee3ad50a806f793
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/308283
Commit-Queue: Michael Ludwig <michaelludwig@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
Reviewed-by: Brian Salomon <bsalomon@google.com>
2020-09-15 19:27:11 +00:00
animations first cut at a checkbox 2009-10-21 19:41:10 +00:00
bazel bazel baby steps 2020-09-14 15:18:32 +00:00
bench SkSL optimization now happens in convertProgram rather than being a 2020-09-14 16:34:47 +00:00
bin bin/try: automatically set 'git cl issue' when not found 2020-06-25 17:44:01 +00:00
build/fuchsia [fuchsia] Fix fidlc command. 2020-06-10 03:29:24 +00:00
build_overrides Port to ANGLE's GN files 2020-09-11 15:22:34 +00:00
client_utils/android Replace 'typedef xxxxx INHERITED' with 'using INHERITED = xxxx;'. 2020-09-03 03:41:26 +00:00
demos.skia.org Add path rendering performance demo to demos.skia.org 2020-08-11 19:57:08 +00:00
dm Reland "Add idea of DataType to SkYUVAPixmapInfo." 2020-09-03 18:05:17 +00:00
docker [canvaskit,pathkit] Update to emsdk 2.0 2020-08-20 14:55:50 +00:00
docs/examples Only expose isConvex on path publicly. 2020-08-28 16:56:29 +00:00
example Clean up GrContext references in the src/gpu 2020-07-16 14:14:08 +00:00
experimental New version of SkImage::MakeFromYUVAPixmaps() 2020-09-15 16:13:50 +00:00
fuzz [fuzz] Make libfuzzer defines backwards compatible for roll 2020-09-14 17:43:00 +00:00
gm New version of SkImage::MakeFromYUVAPixmaps() 2020-09-15 16:13:50 +00:00
gn New GrClipStack supporting only intersect/difference 2020-09-15 19:27:11 +00:00
include New version of SkImage::MakeFromYUVAPixmaps() 2020-09-15 16:13:50 +00:00
infra Generate SkSL golden output files from test inputs during the build. 2020-09-14 14:54:12 +00:00
modules Fix cube map demo 2020-09-15 17:50:10 +00:00
platform_tools add SurfaceView support for skottie on android 2020-08-21 13:24:30 +00:00
resources [skottie] Add support for invert/YIQ 2020-09-11 14:55:44 +00:00
samplecode Add support for plumbing GrDstSampleType through Ops and Pipeline creation. 2020-09-11 14:42:34 +00:00
site Fix cube map demo 2020-09-15 17:50:10 +00:00
specs Fix CanvasKit generated documentation to work with emscripten 1.39.16. 2020-05-27 12:23:32 +00:00
src New GrClipStack supporting only intersect/difference 2020-09-15 19:27:11 +00:00
tests New GrClipStack supporting only intersect/difference 2020-09-15 19:27:11 +00:00
third_party Roll skcms from b1f9041ffe31 to 069b8f699b59 (1 revision) 2020-09-14 17:25:17 +00:00
tools New version of SkImage::MakeFromYUVAPixmaps() 2020-09-15 16:13:50 +00:00
.bazelignore bazel baby steps 2020-09-14 15:18:32 +00:00
.clang-format Disable BinPackParameters in .clang-format 2020-03-27 14:32:40 +00:00
.clang-tidy Disable ClangTidy namespace comments for short blocks. 2020-08-24 14:01:22 +00:00
.gitignore bazel baby steps 2020-09-14 15:18:32 +00:00
.gn Basic standalone GN configs. 2016-07-21 12:25:45 -07:00
AUTHORS Search ICU data on Windows relative to the current module. 2020-08-20 14:51:42 +00:00
BUILD.bazel bazel baby steps 2020-09-14 15:18:32 +00:00
BUILD.gn [fuzz] Add libfuzzer binaries to BUILD.gn 2020-09-15 14:52:02 +00:00
codereview.settings Make uploading to Gerrit the default for Skia 2016-11-09 19:07:56 +00:00
CONTRIBUTING Fix references to https://sites.google.com/site/skiadocs/. 2015-02-03 13:12:54 -02:00
CQ_COMMITTERS Moved committer list to chrome-infra-auth and deleted it from the repo 2015-09-02 13:37:54 -07:00
DEPS Roll Chromium from 2ab7a04e4589 to 2c970cbe2fff (351 revisions) 2020-09-15 04:57:31 +00:00
go.mod Update Go Deps 2020-07-25 05:33:32 +00:00
go.sum Update Go Deps 2020-07-25 05:33:32 +00:00
LICENSE LICENSE file: clean up 2019-11-22 21:59:03 +00:00
OWNERS add OWNERS file 2017-12-01 19:50:19 +00:00
PRESUBMIT.py Generate SkSL golden output files from test inputs during the build. 2020-09-14 14:54:12 +00:00
public.bzl remove unused (and bit-rotting) Lua support 2020-09-09 14:33:32 +00:00
README Fix references to https://sites.google.com/site/skiadocs/. 2015-02-03 13:12:54 -02:00
README.chromium Update README.chromium. 2015-06-11 13:19:24 -07:00
RELEASE_NOTES.txt New version of SkImage::MakeFromYUVAPixmaps() 2020-09-15 16:13:50 +00:00
whitespace.txt Whitespace change to re-trigger Mac/iOS tests 2020-02-23 20:55:01 +00:00
WORKSPACE.bazel bazel baby steps 2020-09-14 15:18:32 +00:00

Skia is a complete 2D graphic library for drawing Text, Geometries, and Images.

See full details, and build instructions, at https://skia.org.