1#include <metal_stdlib> 2#include <simd/simd.h> 3 4using namespace metal; 5 6struct SSBO 7{ 8 float4 ssbo; 9}; 10 11struct SSBOs 12{ 13 float4 ssbo; 14}; 15 16struct Push 17{ 18 float4 push; 19}; 20 21struct UBO 22{ 23 float4 ubo; 24}; 25 26struct UBOs 27{ 28 float4 ubo; 29}; 30 31struct spvDescriptorSetBuffer0 32{ 33 texture2d<float> uTexture [[id(0)]]; 34 sampler uTextureSmplr [[id(1)]]; 35 array<texture2d<float>, 2> uTextures [[id(2)]]; 36 array<sampler, 2> uTexturesSmplr [[id(4)]]; 37 constant UBO* m_90 [[id(6)]]; 38}; 39 40struct spvDescriptorSetBuffer1 41{ 42 array<texture2d<float>, 4> uTexture2 [[id(0)]]; 43 array<sampler, 2> uSampler [[id(4)]]; 44 device SSBO* m_60 [[id(6)]]; 45 const device SSBOs* ssbos [[id(7)]][2]; 46}; 47 48struct spvDescriptorSetBuffer2 49{ 50 constant UBOs* ubos [[id(0)]][4]; 51}; 52 53struct main0_out 54{ 55 float4 FragColor [[color(0)]]; 56}; 57 58struct main0_in 59{ 60 float2 vUV [[user(locn0)]]; 61}; 62 63fragment main0_out main0(main0_in in [[stage_in]], constant spvDescriptorSetBuffer0& spvDescriptorSet0 [[buffer(0)]], constant spvDescriptorSetBuffer1& spvDescriptorSet1 [[buffer(1)]], constant spvDescriptorSetBuffer2& spvDescriptorSet2 [[buffer(2)]], constant Push& registers [[buffer(3)]]) 64{ 65 main0_out out = {}; 66 out.FragColor = ((((((spvDescriptorSet0.uTexture.sample(spvDescriptorSet0.uTextureSmplr, in.vUV) + spvDescriptorSet1.uTexture2[2].sample(spvDescriptorSet1.uSampler[1], in.vUV)) + spvDescriptorSet0.uTextures[1].sample(spvDescriptorSet0.uTexturesSmplr[1], in.vUV)) + (*spvDescriptorSet1.m_60).ssbo) + spvDescriptorSet1.ssbos[0]->ssbo) + registers.push) + (*spvDescriptorSet0.m_90).ubo) + spvDescriptorSet2.ubos[0]->ubo; 67 out.FragColor += (*spvDescriptorSet0.m_90).ubo; 68 out.FragColor += (*spvDescriptorSet1.m_60).ssbo; 69 out.FragColor += spvDescriptorSet2.ubos[1]->ubo; 70 out.FragColor += registers.push; 71 return out; 72} 73 74