mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-13 23:26:24 +00:00
writer/msl: Wrap each array type in a struct
This allows them to be used in various places that WGSL allows, such as function return types and parameters, and as the type of the RHS of an assignment. Fixed: tint:814 Fixed: tint:820 Change-Id: Idb6a901b9a34e96bb9733cc158191e7b3bafaa0e Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/52844 Auto-Submit: James Price <jrprice@google.com> Kokoro: Kokoro <noreply+kokoro@google.com> Commit-Queue: James Price <jrprice@google.com> Reviewed-by: Ben Clayton <bclayton@google.com>
This commit is contained in:
committed by
Tint LUCI CQ
parent
5c0820c76b
commit
94ac078990
53
test/array/assign_to_function_var.wgsl
Normal file
53
test/array/assign_to_function_var.wgsl
Normal file
@@ -0,0 +1,53 @@
|
||||
type ArrayType = [[stride(16)]] array<i32, 4>;
|
||||
|
||||
[[block]]
|
||||
struct S {
|
||||
arr : ArrayType;
|
||||
};
|
||||
|
||||
var<private> src_private : ArrayType;
|
||||
var<workgroup> src_workgroup : ArrayType;
|
||||
[[group(0), binding(0)]] var<uniform> src_uniform : S;
|
||||
[[group(0), binding(1)]] var<storage> src_storage : [[access(read_write)]] S;
|
||||
|
||||
fn ret_arr() -> ArrayType {
|
||||
return ArrayType();
|
||||
}
|
||||
|
||||
fn ret_struct_arr() -> S {
|
||||
return S();
|
||||
}
|
||||
|
||||
fn foo(src_param : ArrayType) {
|
||||
var src_function : ArrayType;
|
||||
|
||||
var dst : ArrayType;
|
||||
|
||||
// Assign from type constructor.
|
||||
dst = ArrayType(1, 2, 3, 3);
|
||||
|
||||
// Assign from parameter.
|
||||
dst = src_param;
|
||||
|
||||
// Assign from function call.
|
||||
dst = ret_arr();
|
||||
|
||||
// Assign from constant.
|
||||
let src_let : ArrayType = ArrayType();
|
||||
dst = src_let;
|
||||
|
||||
// Assign from var, various storage classes.
|
||||
dst = src_function;
|
||||
dst = src_private;
|
||||
dst = src_workgroup;
|
||||
|
||||
// Assign from struct.arr, various storage classes.
|
||||
dst = ret_struct_arr().arr;
|
||||
dst = src_uniform.arr;
|
||||
dst = src_storage.arr;
|
||||
|
||||
// Nested assignment.
|
||||
var dst_nested : array<array<array<i32, 2>, 3>, 4>;
|
||||
var src_nested : array<array<array<i32, 2>, 3>, 4>;
|
||||
dst_nested = src_nested;
|
||||
}
|
||||
Reference in New Issue
Block a user