Commit Graph

65 Commits

Author SHA1 Message Date
Ethan Nicholas
1d3e0e0054 Revert "Revert "moved BinaryExpression's data into IRNode""
This reverts commit b61c3a9a01.

Change-Id: I4689e1f4977fab3233ff492cee06fbc301b5c689
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317386
Reviewed-by: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
2020-09-16 20:01:13 +00:00
Ethan Nicholas
b61c3a9a01 Revert "moved BinaryExpression's data into IRNode"
This reverts commit efc8797880.

Reason for revert: breakage due to std::max initializer list

Original change's description:
> moved BinaryExpression's data into IRNode
> 
> This is another step in the process of merging the various IRNodes' data
> into the base class.
> 
> Change-Id: Ide39c240e6178e23bb6fe317dd56addf2ffefcbb
> Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317102
> Commit-Queue: John Stiles <johnstiles@google.com>
> Reviewed-by: John Stiles <johnstiles@google.com>

TBR=brianosman@google.com,ethannicholas@google.com,johnstiles@google.com

Change-Id: Ib8ef629ffa0ff8bb0aeddfa4f42b824e79ce72b6
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317384
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
2020-09-16 18:33:29 +00:00
Ethan Nicholas
efc8797880 moved BinaryExpression's data into IRNode
This is another step in the process of merging the various IRNodes' data
into the base class.

Change-Id: Ide39c240e6178e23bb6fe317dd56addf2ffefcbb
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/317102
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
2020-09-16 17:10:17 +00:00
Brian Osman
9eb848ae82 Give SwitchCase it's own Statement::Kind value
Disambiguates Switch from SwitchCase, and makes is() and as() work.

Change-Id: I9b9b71dabd730247b20ec9b6df02b87e4978d534
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/316577
Commit-Queue: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: Brian Osman <brianosman@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2020-09-11 20:46:44 +00:00
Ethan Nicholas
30d3022f72 Moved SkSL type into IRNode, now accessed via a method
This change doesn't accomplish anything by itself, but is a necessary
prerequisite for followup changes to node handling. Eventually all data
is going to be stored within IRNode itself, and the subclasses will not
add any fields; this is just the first step in that process.

Change-Id: If2bea4c62bd8f680e9d9f39248bb9679332b245b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315867
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: Ethan Nicholas <ethannicholas@google.com>
2020-09-11 17:08:04 +00:00
John Stiles
98c1f820d2 Add a new statement type 'InlineMarker' to indicate inlined functions.
This will be leveraged in followup CLs to avoid recursive inlining death
spirals.

Change-Id: Icf99c88c4acaaa766e0dc0971830329e24d70509
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315861
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
2020-09-09 19:55:27 +00:00
Ethan Nicholas
e659214bc6 Revamped handling of SkSL node kinds
Moved the actual field into the base class, changed all of the enums
into non-overlapping enum classes, and finally renamed Type::Kind to
fix the ambiguity there.

Change-Id: I4e6c24d2dbbc7b1d12b7b7bf12e77c651eea7ed9
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/315318
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-09-08 15:00:10 +00:00
John Stiles
810c8cf519 Use an unordered map for intrinsics in the IR generator.
Several small tweaks:
- Replace std::pair<> with a struct (IRIntrinsic) so we can use names
  (fIntrinsic/fAlreadyIncluded) instead of .first and .second.
- Replace std::map<String, std::pair<...>> with a name (IRIntrinsicMap).
- Replace map with unordered_map, since we don't rely on order anywhere.

Change-Id: I508eb3cde5bd4fddcc0b3d02d6ce21d33f9a5421
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313523
Auto-Submit: John Stiles <johnstiles@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
2020-08-27 13:30:58 +00:00
John Stiles
f621e234fc Fix cases of variable shadowing in SkSL.
Change-Id: I83aec4a2f65fe34b79ecc292131feb4027ce4bd4
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/313139
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-08-25 18:23:52 +00:00
John Stiles
3dc0da6c6d Add as<ProgramElementSubclass> to downcast ProgramElements more safely.
The as<T>() function asserts that the ProgramElement is of the correct
kind before performing the downcast, and is also generally easier to
read as function calls flow naturally from left-to-right, and C-style
casts don't.

This CL updates several downcasts throughout SkSL to the as<T>
syntax, but is not intended to exhaustively replace them all (although
that would be ideal). In places where we SkASSERTed the element's
fKind immediately before a cast, the assert has been removed because it
would be redundant with the behavior of as<T>().

Change-Id: I89a487aeaf56e56c720479fee0c2633377a202f1
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/312020
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-20 13:48:52 +00:00
John Stiles
17c5b70242 Add as<SymbolSubclass> to downcast Symbols more safely.
The as<T>() function asserts that the Symbol is of the correct kind
before performing the downcast, and is also generally easier to read
as function calls flow naturally from left-to-right, and C-style casts
don't.

This CL updates several Symbol downcasts in SkSL to the as<T>
syntax, but is not intended to exhaustively replace them all (although
that would be ideal). In places where we SkASSERTed the expression's
fKind immediately before a cast, the assert has been removed because it
would be redundant with the behavior of as<T>().

Change-Id: I33cb2b9657dc410241dbc96be85c4ce182a1b391
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311436
Commit-Queue: John Stiles <johnstiles@google.com>
Commit-Queue: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
2020-08-19 14:21:40 +00:00
John Stiles
26f9850a5a Add as<StatementSubclass> to downcast Statements more safely.
The as<T>() function asserts that the Statement is of the correct kind
before performing the downcast, and is also generally easier to read
as function calls flow naturally from left-to-right, and C-style casts
don't.

This CL updates several Statement downcasts in SkSL to the as<T>
syntax, but is not intended to exhaustively replace them all (although
that would be ideal). In places where we SkASSERTed the expression's
fKind immediately before a cast, the assert has been removed because it
would be redundant with the behavior of as<T>().

Change-Id: If92a1740d49c7670ded80cdbbfde67a7d5f73740
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311216
Commit-Queue: John Stiles <johnstiles@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-18 14:39:07 +00:00
John Stiles
81365aff6e Add as<ExpressionSubclass>() to downcast Expressions more safely.
The as<T>() function asserts that the Expression is of the correct kind
before performing the downcast, and is also generally easier to read
as function calls flow naturally from left-to-right, and C-style casts
don't.

This CL updates several Expression downcasts in SkSL to the as<T>
syntax, but is not intended to exhaustively replace them all (although
that would be ideal). In places where we SkASSERTed the expression's
fKind immediately before a cast, the assert has been removed because it
would be redundant with the behavior of as<T>().

Change-Id: I67e7de2697aee4d9d09e6594a9abc5f2ecacc887
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/311114
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: John Stiles <johnstiles@google.com>
Auto-Submit: John Stiles <johnstiles@google.com>
2020-08-18 14:04:15 +00:00
Ethan Nicholas
7154b74e05 Fixed nondeterminism in SkSL dehydration
Change-Id: Iaaad8178cab2559055589edc96e99d9784a40e53
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/307222
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
2020-07-31 18:34:23 +00:00
Ethan Nicholas
c18bb51735 SkSL include files are now stored in a binary format
This speeds up compiler construction, because we no longer have to parse
and process a bunch of SkSL source code during startup.

Change-Id: I6d6bd9b5ce78b1661be691708ab84bf399c6df8b
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/305717
Reviewed-by: Brian Osman <brianosman@google.com>
Commit-Queue: Ethan Nicholas <ethannicholas@google.com>
2020-07-31 13:48:25 +00:00