96492648d4
MSL generally emits the aliases, which means we cannot always place the master type first, unlike GLSL and HLSL. The logic fix is just to reorder after we have tagged types with packing information, rather than doing it in the parser fixup.
54 lines
1.5 KiB
Plaintext
54 lines
1.5 KiB
Plaintext
#include <metal_stdlib>
|
|
#include <simd/simd.h>
|
|
|
|
using namespace metal;
|
|
|
|
struct Sub
|
|
{
|
|
float f[2];
|
|
float2 f2[2];
|
|
float3 f3[2];
|
|
float4 f4[2];
|
|
};
|
|
|
|
struct Sub_1
|
|
{
|
|
float4 f[2];
|
|
float4 f2[2];
|
|
float3 f3[2];
|
|
float4 f4[2];
|
|
};
|
|
|
|
struct SSBO
|
|
{
|
|
Sub_1 sub[2];
|
|
};
|
|
|
|
kernel void main0(device SSBO& _27 [[buffer(0)]], uint3 gl_WorkGroupID [[threadgroup_position_in_grid]], uint3 gl_GlobalInvocationID [[thread_position_in_grid]])
|
|
{
|
|
Sub foo;
|
|
foo.f[0] = _27.sub[gl_WorkGroupID.x].f[0].x;
|
|
foo.f[1] = _27.sub[gl_WorkGroupID.x].f[1].x;
|
|
foo.f2[0] = _27.sub[gl_WorkGroupID.x].f2[0].xy;
|
|
foo.f2[1] = _27.sub[gl_WorkGroupID.x].f2[1].xy;
|
|
foo.f3[0] = _27.sub[gl_WorkGroupID.x].f3[0];
|
|
foo.f3[1] = _27.sub[gl_WorkGroupID.x].f3[1];
|
|
foo.f4[0] = _27.sub[gl_WorkGroupID.x].f4[0];
|
|
foo.f4[1] = _27.sub[gl_WorkGroupID.x].f4[1];
|
|
foo.f[gl_GlobalInvocationID.x] += 1.0;
|
|
foo.f2[gl_GlobalInvocationID.x] += float2(2.0);
|
|
foo.f3[gl_GlobalInvocationID.x] += float3(3.0);
|
|
foo.f4[gl_GlobalInvocationID.x] += float4(4.0);
|
|
_27.sub[gl_WorkGroupID.x].f[0].x = foo.f[0];
|
|
_27.sub[gl_WorkGroupID.x].f[1].x = foo.f[1];
|
|
_27.sub[gl_WorkGroupID.x].f2[0].xy = foo.f2[0];
|
|
_27.sub[gl_WorkGroupID.x].f2[1].xy = foo.f2[1];
|
|
_27.sub[gl_WorkGroupID.x].f3[0] = foo.f3[0];
|
|
_27.sub[gl_WorkGroupID.x].f3[1] = foo.f3[1];
|
|
_27.sub[gl_WorkGroupID.x].f4[0] = foo.f4[0];
|
|
_27.sub[gl_WorkGroupID.x].f4[1] = foo.f4[1];
|
|
_27.sub[0].f[0].x += 5.0;
|
|
_27.sub[0].f2[1].xy += float2(5.0);
|
|
}
|
|
|