| #pragma clang diagnostic ignored "-Wmissing-prototypes" |
| |
| #include <metal_stdlib> |
| #include <simd/simd.h> |
| |
| using namespace metal; |
| |
| struct storage_block |
| { |
| uint4 baz; |
| int2 quux; |
| }; |
| |
| struct constant_block |
| { |
| float4 foo; |
| int bar; |
| }; |
| |
| #ifndef SPIRV_CROSS_CONSTANT_ID_0 |
| #define SPIRV_CROSS_CONSTANT_ID_0 3 |
| #endif |
| constant int arraySize = SPIRV_CROSS_CONSTANT_ID_0; |
| |
| void doWork(device storage_block* (&storage)[2], constant constant_block* (&constants)[4], thread const array<texture2d<int>, 3> images) |
| { |
| storage[0]->baz = uint4(constants[3]->foo); |
| storage[1]->quux = images[2].read(uint2(int2(constants[1]->bar))).xy; |
| } |
| |
| vertex void main0(constant constant_block* constants_0 [[buffer(4)]], constant constant_block* constants_1 [[buffer(5)]], constant constant_block* constants_2 [[buffer(6)]], constant constant_block* constants_3 [[buffer(7)]], device storage_block* storage_0 [[buffer(8)]], device storage_block* storage_1 [[buffer(9)]], array<texture2d<int>, 3> images [[texture(0)]]) |
| { |
| constant constant_block* constants[] = |
| { |
| constants_0, |
| constants_1, |
| constants_2, |
| constants_3, |
| }; |
| |
| device storage_block* storage[] = |
| { |
| storage_0, |
| storage_1, |
| }; |
| |
| doWork(storage, constants, images); |
| } |
| |