1#pragma clang diagnostic ignored "-Wmissing-prototypes" 2 3#include <metal_stdlib> 4#include <simd/simd.h> 5 6using namespace metal; 7 8struct storage_block 9{ 10 uint4 baz; 11 int2 quux; 12}; 13 14struct constant_block 15{ 16 float4 foo; 17 int bar; 18}; 19 20#ifndef SPIRV_CROSS_CONSTANT_ID_0 21#define SPIRV_CROSS_CONSTANT_ID_0 3 22#endif 23constant int arraySize = SPIRV_CROSS_CONSTANT_ID_0; 24 25static inline __attribute__((always_inline)) 26void doWork(device storage_block* (&storage)[2], constant constant_block* (&constants)[4], thread const array<texture2d<int>, 3> images) 27{ 28 storage[0]->baz = uint4(constants[3]->foo); 29 storage[1]->quux = images[2].read(uint2(int2(constants[1]->bar))).xy; 30} 31 32vertex void main0(device storage_block* storage_0 [[buffer(0)]], device storage_block* storage_1 [[buffer(1)]], constant constant_block* constants_0 [[buffer(2)]], constant constant_block* constants_1 [[buffer(3)]], constant constant_block* constants_2 [[buffer(4)]], constant constant_block* constants_3 [[buffer(5)]], array<texture2d<int>, 3> images [[texture(0)]]) 33{ 34 device storage_block* storage[] = 35 { 36 storage_0, 37 storage_1, 38 }; 39 40 constant constant_block* constants[] = 41 { 42 constants_0, 43 constants_1, 44 constants_2, 45 constants_3, 46 }; 47 48 doWork(storage, constants, images); 49} 50 51