blob: 356ca0e3699e772ffff74b725be4f7cf2bfea05e [file] [log] [blame]
Ben Clayton9dc48bc2023-01-24 14:55:17 +00001alias ArrayType = array<vec4<i32>, 4>;
James Price94ac0782021-06-02 17:23:03 +00002
James Price94ac0782021-06-02 17:23:03 +00003struct S {
James Price3b671cb2022-03-28 14:31:22 +00004 arr : ArrayType,
James Price94ac0782021-06-02 17:23:03 +00005};
6
7var<private> src_private : ArrayType;
8var<workgroup> src_workgroup : ArrayType;
Ben Clayton01e4b6f2022-01-19 22:46:57 +00009@group(0) @binding(0) var<uniform> src_uniform : S;
10@group(0) @binding(1) var<storage, read_write> src_storage : S;
James Price94ac0782021-06-02 17:23:03 +000011
12var<workgroup> dst : ArrayType;
13var<workgroup> dst_nested : array<array<array<i32, 2>, 3>, 4>;
14
15fn ret_arr() -> ArrayType {
16 return ArrayType();
17}
18
19fn ret_struct_arr() -> S {
20 return S();
21}
22
23fn foo(src_param : ArrayType) {
24 var src_function : ArrayType;
25
Ben Clayton54a104e2023-02-22 20:04:40 +000026 // Assign from value constructor.
James Pricef6e5cc02022-01-20 22:11:07 +000027 dst = ArrayType(vec4(1), vec4(2), vec4(3), vec4(3));
James Price94ac0782021-06-02 17:23:03 +000028
29 // Assign from parameter.
30 dst = src_param;
31
32 // Assign from function call.
33 dst = ret_arr();
34
35 // Assign from constant.
36 let src_let : ArrayType = ArrayType();
37 dst = src_let;
38
dan sinclairff7cf212022-10-03 14:05:23 +000039 // Assign from var, various address spaces.
James Price94ac0782021-06-02 17:23:03 +000040 dst = src_function;
41 dst = src_private;
42 dst = src_workgroup;
43
dan sinclairff7cf212022-10-03 14:05:23 +000044 // Assign from struct.arr, various address spaces.
James Price94ac0782021-06-02 17:23:03 +000045 dst = ret_struct_arr().arr;
46 dst = src_uniform.arr;
47 dst = src_storage.arr;
48
49 // Nested assignment.
50 var src_nested : array<array<array<i32, 2>, 3>, 4>;
51 dst_nested = src_nested;
52}
dan sinclaira01fd242023-12-05 20:23:42 +000053
54@compute @workgroup_size(1)
55fn main() {
56 let val = ArrayType();
57 foo(val);
58}