| enable chromium_experimental_subgroup_matrix; |
| |
| struct S { |
| l: subgroup_matrix_left<f32, 8, 8>, |
| r: subgroup_matrix_right<f32, 8, 8>, |
| } |
| |
| struct S_Nested { |
| s: S, |
| } |
| |
| @group(0) @binding(0) |
| var<storage, read_write> buffer: array<f32>; |
| |
| fn foo( |
| m: ptr<function, subgroup_matrix_left<f32, 8, 8>>, |
| m_array: ptr<function, array<subgroup_matrix_left<f32, 8, 8>, 4>>, |
| m_nested_array: ptr<function, array<array<subgroup_matrix_left<f32, 8, 8>, 4>, 4>>, |
| m_struct: ptr<function, S>, |
| m_nested_struct: ptr<function, S_Nested>, |
| ) { |
| subgroupMatrixStore(&buffer, 0, *m, false, 64); |
| subgroupMatrixStore(&buffer, 0, m_array[0], false, 64); |
| subgroupMatrixStore(&buffer, 0, m_nested_array[1][2], false, 64); |
| subgroupMatrixStore(&buffer, 0, m_struct.l, false, 64); |
| subgroupMatrixStore(&buffer, 0, m_nested_struct.s.r, false, 64); |
| } |
| |
| @compute @workgroup_size(64) |
| fn main() { |
| var m: subgroup_matrix_left<f32, 8, 8>; |
| var m_array: array<subgroup_matrix_left<f32, 8, 8>, 4>; |
| var m_nested_array: array<array<subgroup_matrix_left<f32, 8, 8>, 4>, 4>; |
| var m_struct: S; |
| var m_nested_struct: S_Nested; |
| foo(&m, &m_array, &m_nested_array, &m_struct, &m_nested_struct); |
| } |