| #include <metal_stdlib> |
| #include <simd/simd.h> |
| |
| using namespace metal; |
| |
| struct A |
| { |
| float v; |
| char _m0_final_padding[12]; |
| }; |
| |
| struct B |
| { |
| float2 v; |
| char _m0_final_padding[8]; |
| }; |
| |
| struct C |
| { |
| float3 v; |
| }; |
| |
| struct D |
| { |
| float4 v; |
| }; |
| |
| struct E |
| { |
| float4 a; |
| float2 b; |
| char _m0_final_padding[8]; |
| }; |
| |
| struct SSBO |
| { |
| A a[2][4]; |
| B b[2][4]; |
| C c[2][4]; |
| D d[2][4]; |
| float2x4 e[2][4]; |
| E f[1]; |
| }; |
| |
| constant uint3 gl_WorkGroupSize [[maybe_unused]] = uint3(1u); |
| |
| kernel void main0(device SSBO& _32 [[buffer(0)]]) |
| { |
| _32.f[0].a = float4(2.0); |
| float2x2 tmp = float2x2(_32.e[0][1][0].xy, _32.e[0][1][1].xy); |
| (device float2&)_32.e[1][2][0] = tmp[0]; |
| (device float2&)_32.e[1][2][1] = tmp[1]; |
| } |
| |