dawn-cmake/test/shader_io
Ben Clayton 8a96c78931 transform: Fixes for DecomposeMemoryAccess
CloneContext::Replace(T* what, T* with) is bug-prone, as complex transforms may want to clone `what` multiple times, or not at all. In both cases, this will likely result in an ICE as either the replacement will be reachable multiple times, or not at all.

The CTS test: webgpu:shader,execution,robust_access:linear_memory:storageClass="storage";storageMode="read_write";access="read";atomic=true;baseType="i32"
Was triggering this brokenness with DecomposeMemoryAccess's use of CloneContext::Replace(T*, T*).

Switch the usage of CloneContext::Replace(T*, T*) to the new function form.

As std::function is copyable, it cannot hold a captured std::unique_ptr.
This prevented the Replace() lambdas from capturing the necessary `BufferAccess` data, as this held a `std::unique_ptr<Offset>`.
To fix this, use a `BlockAllocator` for Offsets, and use raw pointers instead.

Because the function passed to Replace() is called just before the node is cloned, insertion of new functions will occur just before the currently evaluated module-scope entity.
This allows us to remove the "insert_after" arguments to LoadFunc(), StoreFunc(), and AtomicFunc().
We can also kill the icky InsertGlobal() and TypeDeclOf() helpers.

Bug: tint:993
Change-Id: I60972bc13a2fa819a163ee2671f61e82d0e68d2a
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/58222
Kokoro: Kokoro <noreply+kokoro@google.com>
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
2021-07-15 20:29:09 +00:00
..
compute_input_builtins.wgsl validation: compute shader must include 'workgroup_size' in its attributes 2021-06-29 18:39:44 +00:00
compute_input_builtins.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
compute_input_builtins.wgsl.expected.msl writer/msl: Emit builtins as parameters 2021-06-04 14:40:28 +00:00
compute_input_builtins.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
compute_input_builtins.wgsl.expected.wgsl validation: compute shader must include 'workgroup_size' in its attributes 2021-06-29 18:39:44 +00:00
compute_input_builtins_struct.wgsl validation: compute shader must include 'workgroup_size' in its attributes 2021-06-29 18:39:44 +00:00
compute_input_builtins_struct.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
compute_input_builtins_struct.wgsl.expected.msl writer/msl: Emit builtins as parameters 2021-06-04 14:40:28 +00:00
compute_input_builtins_struct.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
compute_input_builtins_struct.wgsl.expected.wgsl validation: compute shader must include 'workgroup_size' in its attributes 2021-06-29 18:39:44 +00:00
compute_input_mixed.wgsl validation: compute shader must include 'workgroup_size' in its attributes 2021-06-29 18:39:44 +00:00
compute_input_mixed.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
compute_input_mixed.wgsl.expected.msl writer/msl: Emit builtins as parameters 2021-06-04 14:40:28 +00:00
compute_input_mixed.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
compute_input_mixed.wgsl.expected.wgsl validation: compute shader must include 'workgroup_size' in its attributes 2021-06-29 18:39:44 +00:00
fragment_input_builtins.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_builtins.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
fragment_input_builtins.wgsl.expected.msl writer/msl: Emit builtins as parameters 2021-06-04 14:40:28 +00:00
fragment_input_builtins.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_builtins.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_builtins_struct.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_builtins_struct.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
fragment_input_builtins_struct.wgsl.expected.msl writer/msl: Emit builtins as parameters 2021-06-04 14:40:28 +00:00
fragment_input_builtins_struct.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_builtins_struct.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_locations.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_locations.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
fragment_input_locations.wgsl.expected.msl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_locations.wgsl.expected.spvasm writer/spirv: Add Flat decoration to integers 2021-06-29 13:36:05 +00:00
fragment_input_locations.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_locations_struct.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_locations_struct.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
fragment_input_locations_struct.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
fragment_input_locations_struct.wgsl.expected.spvasm writer/spirv: Add Flat decoration to integers 2021-06-29 13:36:05 +00:00
fragment_input_locations_struct.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_mixed.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_input_mixed.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
fragment_input_mixed.wgsl.expected.msl writer/msl: Emit builtins as parameters 2021-06-04 14:40:28 +00:00
fragment_input_mixed.wgsl.expected.spvasm writer/spirv: Add Flat decoration to integers 2021-06-29 13:36:05 +00:00
fragment_input_mixed.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_builtins.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_builtins.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
fragment_output_builtins.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
fragment_output_builtins.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_builtins.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_builtins_struct.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_builtins_struct.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
fragment_output_builtins_struct.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
fragment_output_builtins_struct.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_builtins_struct.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_locations.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_locations.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
fragment_output_locations.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
fragment_output_locations.wgsl.expected.spvasm writer/spirv: Do not add Flat to fragment outputs 2021-06-29 18:05:25 +00:00
fragment_output_locations.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_locations_struct.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_locations_struct.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
fragment_output_locations_struct.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
fragment_output_locations_struct.wgsl.expected.spvasm writer/spirv: Do not add Flat to fragment outputs 2021-06-29 18:05:25 +00:00
fragment_output_locations_struct.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_mixed.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
fragment_output_mixed.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
fragment_output_mixed.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
fragment_output_mixed.wgsl.expected.spvasm writer/spirv: Do not add Flat to fragment outputs 2021-06-29 18:05:25 +00:00
fragment_output_mixed.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
interpolate_input_parameters.wgsl writer/wgsl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_input_parameters.wgsl.expected.hlsl writer/hlsl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_input_parameters.wgsl.expected.msl writer/msl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_input_parameters.wgsl.expected.spvasm writer/spirv: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_input_parameters.wgsl.expected.wgsl writer/wgsl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_input_struct.wgsl writer/wgsl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_input_struct.wgsl.expected.hlsl writer/hlsl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_input_struct.wgsl.expected.msl writer/msl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_input_struct.wgsl.expected.spvasm writer/spirv: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_input_struct.wgsl.expected.wgsl writer/wgsl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_integers.wgsl writer/spirv: Do not add Flat to fragment outputs 2021-06-29 18:05:25 +00:00
interpolate_integers.wgsl.expected.hlsl writer/hlsl: Zero initialize with (T) 0 2021-07-02 19:27:42 +00:00
interpolate_integers.wgsl.expected.msl writer/spirv: Do not add Flat to fragment outputs 2021-06-29 18:05:25 +00:00
interpolate_integers.wgsl.expected.spvasm writer/spirv: Do not add Flat to fragment outputs 2021-06-29 18:05:25 +00:00
interpolate_integers.wgsl.expected.wgsl writer/spirv: Do not add Flat to fragment outputs 2021-06-29 18:05:25 +00:00
interpolate_return_struct.wgsl writer/wgsl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_return_struct.wgsl.expected.hlsl writer/hlsl: Zero initialize with (T) 0 2021-07-02 19:27:42 +00:00
interpolate_return_struct.wgsl.expected.msl writer/msl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_return_struct.wgsl.expected.spvasm writer/spirv: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
interpolate_return_struct.wgsl.expected.wgsl writer/wgsl: Implement interpolate attributes 2021-06-28 23:04:43 +00:00
invariant.wgsl wgsl: Implement invariant attribute 2021-07-12 12:28:52 +00:00
invariant.wgsl.expected.hlsl writer/hlsl: Implement invariant attribute 2021-07-13 12:29:26 +00:00
invariant.wgsl.expected.msl writer/msl: Implement invariant attribute 2021-07-12 16:11:41 +00:00
invariant.wgsl.expected.spvasm writer/spirv: Implement invariant attribute 2021-07-12 14:48:20 +00:00
invariant.wgsl.expected.wgsl wgsl: Implement invariant attribute 2021-07-12 12:28:52 +00:00
invariant_struct_member.wgsl wgsl: Implement invariant attribute 2021-07-12 12:28:52 +00:00
invariant_struct_member.wgsl.expected.hlsl writer/hlsl: Implement invariant attribute 2021-07-13 12:29:26 +00:00
invariant_struct_member.wgsl.expected.msl writer/msl: Implement invariant attribute 2021-07-12 16:11:41 +00:00
invariant_struct_member.wgsl.expected.spvasm writer/spirv: Implement invariant attribute 2021-07-12 14:48:20 +00:00
invariant_struct_member.wgsl.expected.wgsl wgsl: Implement invariant attribute 2021-07-12 12:28:52 +00:00
shared_struct_different_stages.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
shared_struct_different_stages.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
shared_struct_different_stages.wgsl.expected.msl writer/msl: Emit builtins as parameters 2021-06-04 14:40:28 +00:00
shared_struct_different_stages.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
shared_struct_different_stages.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
shared_struct_helper_function.wgsl test: Add missing stage attributes to IO test 2021-06-19 01:12:45 +00:00
shared_struct_helper_function.wgsl.expected.hlsl test: Add missing stage attributes to IO test 2021-06-19 01:12:45 +00:00
shared_struct_helper_function.wgsl.expected.msl test: Add missing stage attributes to IO test 2021-06-19 01:12:45 +00:00
shared_struct_helper_function.wgsl.expected.spvasm writer/spirv: Add Flat decoration to integers 2021-06-29 13:36:05 +00:00
shared_struct_helper_function.wgsl.expected.wgsl test: Add missing stage attributes to IO test 2021-06-19 01:12:45 +00:00
shared_struct_storage_buffer.wgsl wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
shared_struct_storage_buffer.wgsl.expected.hlsl transform: Fixes for DecomposeMemoryAccess 2021-07-15 20:29:09 +00:00
shared_struct_storage_buffer.wgsl.expected.msl writer/msl: Use UniqueIdentifier() for padding field names 2021-06-30 16:01:40 +00:00
shared_struct_storage_buffer.wgsl.expected.spvasm writer/spirv: Add Flat decoration to integers 2021-06-29 13:36:05 +00:00
shared_struct_storage_buffer.wgsl.expected.wgsl wgsl: Deprecate [[access]] decorations 2021-06-04 20:41:47 +00:00
vertex_input_builtins.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_builtins.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
vertex_input_builtins.wgsl.expected.msl writer/msl: Emit builtins as parameters 2021-06-04 14:40:28 +00:00
vertex_input_builtins.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_builtins.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_builtins_struct.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_builtins_struct.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
vertex_input_builtins_struct.wgsl.expected.msl writer/msl: Emit builtins as parameters 2021-06-04 14:40:28 +00:00
vertex_input_builtins_struct.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_builtins_struct.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_locations.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_locations.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
vertex_input_locations.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
vertex_input_locations.wgsl.expected.spvasm writer/spirv: Do not add Flat to fragment outputs 2021-06-29 18:05:25 +00:00
vertex_input_locations.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_locations_struct.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_locations_struct.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
vertex_input_locations_struct.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
vertex_input_locations_struct.wgsl.expected.spvasm writer/spirv: Do not add Flat to fragment outputs 2021-06-29 18:05:25 +00:00
vertex_input_locations_struct.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_mixed.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_input_mixed.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
vertex_input_mixed.wgsl.expected.msl writer/msl: Emit builtins as parameters 2021-06-04 14:40:28 +00:00
vertex_input_mixed.wgsl.expected.spvasm writer/spirv: Do not add Flat to fragment outputs 2021-06-29 18:05:25 +00:00
vertex_input_mixed.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_output_builtins.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_output_builtins.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
vertex_output_builtins.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
vertex_output_builtins.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_output_builtins.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_output_builtins_struct.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_output_builtins_struct.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
vertex_output_builtins_struct.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
vertex_output_builtins_struct.wgsl.expected.spvasm test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_output_builtins_struct.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_output_locations_struct.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00
vertex_output_locations_struct.wgsl.expected.hlsl writer/hlsl: Simplify emission logic, clean up output 2021-06-16 09:19:36 +00:00
vertex_output_locations_struct.wgsl.expected.msl writer/msl: Emit field designators for structures 2021-06-03 18:12:15 +00:00
vertex_output_locations_struct.wgsl.expected.spvasm writer/spirv: Add Flat decoration to integers 2021-06-29 13:36:05 +00:00
vertex_output_locations_struct.wgsl.expected.wgsl test: Add E2E test coverage for shader IO 2021-06-03 09:38:34 +00:00