Go to file
John Stiles 23521a8d69 Add Convert factory function to SkSL IRNodes.
SkSL IRNodes now have two different factory functions:

XxxxxStatement::Convert -- this is the equivalent of
    IRGenerator::convertXxxxx. Type coercion is fully supported. Errors
    are reported via ErrorReporter. Failure is handled gracefully by
    returning null.

XxxxxStatement::Make -- this is treated more like `new XxxxxStatement`
    but with optimizations applied. Types must already be correct.
    If the passed-in arguments don't make sense, errors are reported
    via SkASSERT. `Make` is always expected to return an IRNode--
    either exactly what was passed in, or an equivalent simpler form.

(In some rare exceptions, supporting Make was too difficult and is
not handled in this CL. Constructor was the biggest edge case; it
is extremely complicated [skia:11032], and supporting Make would require
duplicating most of its logic. It was too much copy-and-paste for me.)

Rationale for this change:

Originally, when the Inliner or Rehydrator would create an IRNode, it
would just allocate it via `new` or `make_unique` and take it as-is.
No error-checking, no optimization.

I decided to allow those callers to benefit from simple optimizations.
This meant porting logic from the IRGenerator (e.g. `convertIf`, which
removes empty branches) into widely available factory functions.
However, the Inliner and Rehydrator don't need the type coercion, and
we'd rather have them assert/succeed instead of getting a null and
crashing (in the unexpected case that recreating an IRNode causes an
error to be detected).

Change-Id: I6949328e904258a627106524ed4134b524e012b6
Bug: skia:11342
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/377843
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2021-03-03 16:13:41 +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 encapsulate GrSDFTOptions better 2021-03-03 14:27:32 +00:00
bin pull arm64 binary on arm64 Mac/Linux 2021-01-15 19:00:46 +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 [canvaskit] Update all demos to use full version from 0.25.0 2021-03-03 14:38:35 +00:00
dm Revert "Redesign program key construction" 2021-03-03 13:35:22 +00:00
docker [infra] Fix index.d.ts copy in Wasm Docker build 2021-02-23 15:54:11 +00:00
docs/examples Guard legacy matrixtransforms, and expose new one 2021-02-01 22:10:39 +00:00
example Reland "Remove use of legacy display globals." 2020-10-05 19:13:58 +00:00
experimental Flesh out ddlbench's startup boiler-plate 2021-02-26 18:12:01 +00:00
fuzz Activate FuzzDDLThreading 2021-02-25 21:26:07 +00:00
gm Fix downsampled blur with clamp mode. 2021-03-03 14:15:31 +00:00
gn Fix downsampled blur with clamp mode. 2021-03-03 14:15:31 +00:00
include Revert "Redesign program key construction" 2021-03-03 13:35:22 +00:00
infra track flags in a map 2021-03-03 14:22:16 +00:00
modules Treat control codepoints as resolved 2021-03-02 20:38:48 +00:00
platform_tools [SkottieView] call onAnimationEnd listeners after finished repeating 2021-03-02 15:35:03 +00:00
resources Add early_fragment_tests layout qualifier to SkSL 2021-03-02 16:45:03 +00:00
samplecode Make GrGLSLFragmentProcessors be created as std::unique_ptr. 2021-02-23 19:31:01 +00:00
site update release notes 2021-02-26 22:02:24 +00:00
specs Fix CanvasKit generated documentation to work with emscripten 1.39.16. 2020-05-27 12:23:32 +00:00
src Add Convert factory function to SkSL IRNodes. 2021-03-03 16:13:41 +00:00
tests encapsulate GrSDFTOptions better 2021-03-03 14:27:32 +00:00
third_party Roll skcms from 4a4ff5bbefdf to 4e5402c56973 (3 revisions) 2021-02-24 07:02:54 +00:00
tools Revert "Redesign program key construction" 2021-03-03 13:35:22 +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 Update gitignore for goma win_toolchain 2021-02-01 17:25:52 +00:00
.gn Pre-emptive fix for upcoming ANGLE change. 2021-01-08 17:23:52 +00:00
AUTHORS Add UWP support 2021-02-10 19:04:42 +00:00
BUILD.bazel bazel baby steps 2020-09-14 15:18:32 +00:00
BUILD.gn Activate FuzzDDLThreading 2021-02-25 21:26:07 +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 ANGLE from 6b6da203cce0 to 1de8b5a697e7 (8 revisions) 2021-03-03 04:47:29 +00:00
DIR_METADATA Move metadata in OWNERS files to DIR_METADATA files 2021-02-02 23:41:54 +00:00
go.mod [infra] Roll infra dependency 2021-02-25 19:56:00 +00:00
go.sum [infra] Roll infra dependency 2021-02-25 19:56:00 +00:00
LICENSE LICENSE file: clean up 2019-11-22 21:59:03 +00:00
PRESUBMIT.py Reland "[infra] Switch from isolate to RBE-CAS" 2021-02-22 14:41:06 +00:00
public.bzl Support building GrGLInterface factory functions for both EGL and GLX. 2021-02-23 16:37:48 +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 update release notes 2021-02-26 22:02:24 +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.