2023-01-24 14:55:17 +00:00
|
|
|
alias ArrayType = array<vec4<i32>, 4>;
|
2021-06-02 17:23:03 +00:00
|
|
|
|
|
|
|
struct S {
|
2022-03-28 14:31:22 +00:00
|
|
|
arr : ArrayType,
|
2021-06-02 17:23:03 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
var<private> src_private : ArrayType;
|
|
|
|
var<workgroup> src_workgroup : ArrayType;
|
2022-01-19 22:46:57 +00:00
|
|
|
@group(0) @binding(0) var<uniform> src_uniform : S;
|
|
|
|
@group(0) @binding(1) var<storage, read_write> src_storage : S;
|
2021-06-02 17:23:03 +00:00
|
|
|
|
|
|
|
var<workgroup> dst : ArrayType;
|
|
|
|
var<workgroup> dst_nested : array<array<array<i32, 2>, 3>, 4>;
|
|
|
|
|
|
|
|
fn ret_arr() -> ArrayType {
|
|
|
|
return ArrayType();
|
|
|
|
}
|
|
|
|
|
|
|
|
fn ret_struct_arr() -> S {
|
|
|
|
return S();
|
|
|
|
}
|
|
|
|
|
|
|
|
fn foo(src_param : ArrayType) {
|
|
|
|
var src_function : ArrayType;
|
|
|
|
|
2023-02-22 20:04:40 +00:00
|
|
|
// Assign from value constructor.
|
2022-01-20 22:11:07 +00:00
|
|
|
dst = ArrayType(vec4(1), vec4(2), vec4(3), vec4(3));
|
2021-06-02 17:23:03 +00:00
|
|
|
|
|
|
|
// Assign from parameter.
|
|
|
|
dst = src_param;
|
|
|
|
|
|
|
|
// Assign from function call.
|
|
|
|
dst = ret_arr();
|
|
|
|
|
|
|
|
// Assign from constant.
|
|
|
|
let src_let : ArrayType = ArrayType();
|
|
|
|
dst = src_let;
|
|
|
|
|
2022-10-03 14:05:23 +00:00
|
|
|
// Assign from var, various address spaces.
|
2021-06-02 17:23:03 +00:00
|
|
|
dst = src_function;
|
|
|
|
dst = src_private;
|
|
|
|
dst = src_workgroup;
|
|
|
|
|
2022-10-03 14:05:23 +00:00
|
|
|
// Assign from struct.arr, various address spaces.
|
2021-06-02 17:23:03 +00:00
|
|
|
dst = ret_struct_arr().arr;
|
|
|
|
dst = src_uniform.arr;
|
|
|
|
dst = src_storage.arr;
|
|
|
|
|
|
|
|
// Nested assignment.
|
|
|
|
var src_nested : array<array<array<i32, 2>, 3>, 4>;
|
|
|
|
dst_nested = src_nested;
|
|
|
|
}
|