Ben Clayton
ed2b97811e
ast: Add Module.Clone()
...
Deep-clones all `Node`s and `Type`s into a new module.
Instead of writing a million standalone tests that'll only ever test the
existing fields of each type, I've opted to write the tests using
wgsl<->ast<->wgsl conversion. This means the tests require the enabling
of TINT_BUILD_WGSL_READER and TINT_BUILD_WGSL_WRITER, but I believe this
is much easier to maintain.
I'm aware there are probably gaps in the tests, and that even full
coverage is likely to rapidly rot, so I've also added
fuzzers/tint_ast_clone_fuzzer.cc - a fuzzer based test that ensures that
all AST modules can be cloned with identical reproduction.
I've run this across 100 cores of a 3990x for 4 hours, fixing the
single issue it detected.
Note: Expressions do not currently clone their `TypeManager` determined
types. This is for two reasons:
(a) This initial CL is mahoosive enough.
(b) I'm uncertain whether we actually want to clone this info, or to
re-run the `TypeDeterminer` after each AST transform. Maybe it should
be optional. Time will tell.
Fixed: tint:307
Change-Id: Id90fab06aaa740c805d12b66f3f11d1f452c6805
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/33300
Commit-Queue: Ben Clayton <bclayton@google.com >
Reviewed-by: dan sinclair <dsinclair@chromium.org >
Reviewed-by: David Neto <dneto@google.com >
2020-12-01 18:04:17 +00:00
Ben Clayton
f1b0e1ee57
ast/type: Remove Type suffix from all types
...
They already exist in a `ast::type` namespace, so `ast::type::BlahType` is just stuttering.
This is more important now that Is<> and As<> use the full type name.
Change-Id: I7c661fe58cdc33ba7e9a95c82c996a799786661f
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34321
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
03ae9a397f
Cleanup: Remove unnecessary namespace prefixes
...
No need to prefix with `ast::` when you're in the ast namespace already.
Change-Id: Iac6cd3a215c05a80ee2035d582500f1d6c882a06
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34320
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
acf7643518
Replace Literal::(Is|As)* with Castable
...
Change-Id: I842483890b369d63c23dba475b6738bffe5cfdbd
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34319
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
aedca4288c
Replace Variable::(Is|As)* with Castable
...
Change-Id: I7a49287af079d53cee095fa2243dd21757546b56
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34318
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
19fe07236e
Replace ConstructorExpression::(Is|As)* with Castable
...
Change-Id: I18e9768fef36b79cb0e65c6eb79fd147013c54f0
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34317
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
d6ae990811
Replace Expression::(Is|As)* with Castable
...
Change-Id: I6ab98ed8b198f1b3b42ce1f09a6c4f992d65fe95
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34316
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
1d8098ae94
Replace Statement::(Is|As)* with Castable
...
Change-Id: I5520752a4b5844be0ecac7921616893d123b246a
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34315
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
4d3ca7f132
Replace StructMemberDecoration::(Is|As) with Castable
...
Change-Id: I158194c60a9fe0ea2126ca31a92ad536c92a6388
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34314
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
8a82dcd977
Replace StructDecoration::IsBlock with Castable
...
Change-Id: I4b053aab610b18f99b72156f92317bc8eaf430b4
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34313
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
731372f0b4
Replace FunctionDecoration::(Is|As)Workgroup with Castable
...
Change-Id: Ia365504fd745579b3bd7bef0b6eda73d3164f539
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34312
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
75828dbaee
Replace FunctionDecoration::(Is|As)Stage with Castable
...
Change-Id: Iecb683c4bee29952d5f08d92533918f65e342158
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34311
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
c24ac2720d
Replace VariableDecoration::(Is|As)Set with Castable
...
Change-Id: I9808e31f3842b70b3df9ed0398583e09e4f2ca42
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34310
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
2c1d7d5be7
Replace VariableDecoration::(Is|As)Location with Castable
...
Change-Id: I3096045fc093f3782401ce8623a18e0bca49b22c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34309
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
0482b54782
Replace VariableDecoration::(Is|As)ConstantId with Castable
...
Change-Id: I3f402fe8925ef7d5c9b3d5b21f2556d7af59a0cd
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34308
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
c0eb9aeafb
Replace VariableDecoration::(Is|As)Builtin with Castable
...
Change-Id: I49d970301c46cfe29d7b22e18abb443daa0c8073
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34307
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
62d81485dd
Replace VariableDecoration::(Is|As)Binding with Castable
...
Change-Id: Ia13ce42054e5f514eb34f6549da10b22129f9026
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34306
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
864579db3d
Replace ArrayDecoration::(Is|As)Stride with Castable
...
Change-Id: I0a346226996c86a6f976b51f69ae4df32806a797
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34305
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
3958f81fd7
Replace TypeDecoration::(Is|As)Access with Castable
...
Change-Id: I06a2f663cf56f8bb9a9b05557aef428b2d69e84c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34304
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
26e944bc4e
ast: Remove non-group DecorationKind enums
...
The following DecorationKinds were sub-types of core decoration types:
kStride, kStage, kWorkgroup, kStructMemberOffset, kAccess, kBinding, kBuiltin, kConstantId, kLocation
These only existed for casting (not for error messages), and are no longer needed, so remove them.
Change-Id: I1e4bb9bf51952c6e86bac984d0d667a071ca80bf
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34303
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
370d20a4c6
ast: Remove the now unused Decoration::IsKind() method
...
And replace the use of`ast::As(Decoration* deco)` with `Castable::As<T>()`.
These were used for dynamic casting, but is now replaced with Castable.
Change-Id: Ie5fe19ad4db4bc4d19f5386d2cfddaaf84b215d0
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34302
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
e319d7f0e9
Derive all ast::Node from Castable
...
The hand-rolled `AsBlah()`, `IsBlah()` methods will be migrated in future changes.
Change-Id: I078c100b561b50018771cc38c1cac4379c393424
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34301
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
11c9de63aa
ast: Add virtual GetKind() instead of kind member
...
Reduces the per-instance size for an extra vtable entry.
Change-Id: Ie087e0b8d8524adf85663ab1224fb0ae1a5e0000
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34300
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
b062bbdce8
Replace TextureType::(Is|As)Sampled with Castable
...
Change-Id: Id997f118a8ce9f4f7c42bed306368d3f204b6607
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34279
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
1a23756294
Replace TextureType::(Is|As)Storage with Castable
...
Change-Id: I627304c0b397605f565ae688f2a2b61132c26b9b
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34278
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
0441bd1756
Replace TextureType::(Is|As)Multisampled with Castable
...
Change-Id: I9a0e2ba4c6b0950134cef4b291cd1ba5cae1198c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34277
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
09b8829d8e
Replace TextureType::(Is|As)Depth with Castable
...
Change-Id: I2f1785cec1880f728fbbf0c75762bc957e34ca0a
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34276
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
16ec1bb626
Replace Type::(Is|As)Void with Castable
...
Change-Id: If8a27c69c91a968a40a982c02b9fcaf9481e60b7
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34275
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
8a083ce9c8
Replace Type::(Is|As)Vector with Castable
...
Change-Id: Ic838aa783a279d0939a972773206fee2e33c4bff
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34274
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
d11ced4765
Replace Type::(Is|As)U32 with Castable
...
Change-Id: I4999d45950fdffe4345cf0abae1b026244abba1d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34273
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
38409c79dc
Replace Type::(Is|As)Texture with Castable
...
Change-Id: I53bbccc3e1e7b88ad8c201997cf7e2e485ad9c81
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34272
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
d734dd0c10
Replace Type::(Is|As)Struct with Castable
...
Change-Id: I0bc5645d65d7b53058bda7b343a991a9614741be
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34271
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
351128a41e
Replace Type::(Is|As)Sampler with Castable
...
Change-Id: Iaa43e607199e25308ecb121c61bb7a37abff197c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34270
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
c52f4214ad
Replace Type::(Is|As)Pointer with Castable
...
Change-Id: Ic1b82f1ddc61355021a80d8e72f645f830363c62
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34269
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
d8457c15f1
Replace Type::(Is|As)Matrix with Castable
...
Change-Id: I861aed231604a8bfba1f4cf3659b4863556fc3c4
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34268
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
9857f81e94
Replace Type::(Is|As)I32 with Castable
...
Change-Id: Id130581f72e762bd398a4c1c509cdbe21739e750
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34267
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
75f39be976
Replace Type::(Is|As)F32 with Castable
...
Change-Id: I75e5a34034360c1d4c96ae0ce293bc6cbfc1c33d
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34266
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
f3639b787f
Replace Type::(Is|As)Bool with Castable
...
Change-Id: I60ed33bd9a54b14bb9b35f3cd999a2604c2c4450
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34265
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
af37c4ae83
Replace Type::(Is|As)Array with Castable
...
Change-Id: I8d9b916f5977121380325d373c4e2f805b691fae
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34264
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
67864267c2
Replace Type::(Is|As)Alias with Castable
...
Change-Id: I10f1d3d0757661a41b44517d55d6f159aced04ce
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34263
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
a8d87788da
Replace Type::(Is|As)AccessControl with Castable
...
Change-Id: I833c92be270236fefd1e77a7a145dede757e93e9
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34262
Reviewed-by: dan sinclair <dsinclair@chromium.org >
2020-11-30 23:30:58 +00:00
Ben Clayton
69aabb51a9
Derive all ast::types from Castable
...
The hand-rolled `AsBlah()`, `IsBlah()` methods will be migrated in future changes.
Change-Id: I46a350a560f9eda8ca15f8ba8c95b17b9b6010b7
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34261
Reviewed-by: dan sinclair <dsinclair@chromium.org >
Commit-Queue: Ben Clayton <bclayton@google.com >
2020-11-30 23:30:58 +00:00
David Neto
21e9204e14
tests: Change name SampledImageCase -> ImageAccessCase
...
Bug: tint:109
Change-Id: I6f5b1d3cf73fa58ae9f4c37d155199649eb37518
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34423
Commit-Queue: David Neto <dneto@google.com >
Auto-Submit: David Neto <dneto@google.com >
Reviewed-by: Ben Clayton <bclayton@google.com >
2020-11-30 23:17:05 +00:00
David Neto
2082beed0f
spirv-reader: Add entry point declaration to handle test
...
Bug: tint:109
Change-Id: I25645944061b8b247eda442b61f4591a9359ec4f
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34422
Commit-Queue: David Neto <dneto@google.com >
Auto-Submit: David Neto <dneto@google.com >
Reviewed-by: Ben Clayton <bclayton@google.com >
2020-11-30 22:53:25 +00:00
Ben Clayton
95feb99a9d
Add Castable template class
...
Implements `As<Blah>()` and `Is<Blah>()` automatically.
There are several benefits to using this over the pattern of hand-rolled `IsBlah()`, `AsBlah()` methods:
(1) We don't have to maintain a whole lot of hand written code.
(2) These allow us to cast from the base type to _any_ derived type in a single cast. The existing hand-rolled methods usually require a couple of intermediary casts to go from the base type to the leaf type.
(3) The use of a template parameter means these casts can be called from other template logic.
Note: Unlike the hand-rolled `AsBlah()` methods, it is safe to call `As<T>()` even if the type does not derive from `T`. If the object does not derive from `T` then `As` will simply return `nullptr`. This allows the calling logic to replace the common pattern of:
```
if (obj.IsBlah()) {
auto* b = obj.AsBlah();
...
}
```
with:
```
if (auto* b = obj.As<Blah>()) {
...
}
```
This halves the number of virtual method calls, and is one line shorter.
Change-Id: I4312e9831d7de6703a97184640864b8050a34177
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34260
Reviewed-by: dan sinclair <dsinclair@chromium.org >
Commit-Queue: Ben Clayton <bclayton@google.com >
2020-11-30 22:50:25 +00:00
David Neto
386755b1ac
spirv-reader: fix SPIR-V types in handle tests
...
Bug: tint:109
Change-Id: Icb4cbe12334c92a86d1c52a0b3569fb22a1cfc7c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34421
Reviewed-by: Ben Clayton <bclayton@google.com >
Commit-Queue: Ben Clayton <bclayton@google.com >
Auto-Submit: David Neto <dneto@google.com >
2020-11-30 22:48:55 +00:00
dan sinclair
eac3c5bf51
Add tricium config.
...
This CL adds a tricium config file for Tint.
Change-Id: I08409df9b6b79bdd3ffecf4f28867674435ae14a
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34360
Auto-Submit: dan sinclair <dsinclair@chromium.org >
Reviewed-by: Ryan Harrison <rharrison@chromium.org >
Commit-Queue: Ryan Harrison <rharrison@chromium.org >
2020-11-30 20:28:50 +00:00
David Neto
aa212ee81f
spirv-reader: sampling depth texture requires unsigned Lod
...
Fixed: tint:378
Change-Id: I835ee7e9fb63dc68db571091f28fd34287c209b0
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34201
Commit-Queue: David Neto <dneto@google.com >
Auto-Submit: David Neto <dneto@google.com >
Reviewed-by: Ben Clayton <bclayton@google.com >
2020-11-27 19:28:53 +00:00
David Neto
29e7e3b78e
spirv-reader: Use better names in handle tests
...
Change-Id: I461cc6fd3b497e7b56b8004266580b4280c7dc42
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34200
Reviewed-by: Ben Clayton <bclayton@google.com >
Commit-Queue: Ben Clayton <bclayton@google.com >
Auto-Submit: David Neto <dneto@google.com >
2020-11-27 18:14:53 +00:00
David Neto
a8b6f87cca
spirv-reader: test texture builtins over arrayed textures
...
Tested:
- textureSample
- textureSampleBias
- textureSampleLevel
- textureSampleGrad
- textureSampleCompare
Fixed: tint:349
Change-Id: Ibb45883b88c8eeec6ba40170f47d78613e150db7
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34102
Commit-Queue: David Neto <dneto@google.com >
Reviewed-by: Ben Clayton <bclayton@google.com >
Auto-Submit: David Neto <dneto@google.com >
2020-11-27 17:00:03 +00:00