| #include <metal_stdlib> |
| |
| using namespace metal; |
| |
| template<typename T, size_t N> |
| struct tint_array { |
| const constant T& operator[](size_t i) const constant { return elements[i]; } |
| device T& operator[](size_t i) device { return elements[i]; } |
| const device T& operator[](size_t i) const device { return elements[i]; } |
| thread T& operator[](size_t i) thread { return elements[i]; } |
| const thread T& operator[](size_t i) const thread { return elements[i]; } |
| threadgroup T& operator[](size_t i) threadgroup { return elements[i]; } |
| const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; } |
| T elements[N]; |
| }; |
| |
| struct tint_private_vars_struct { |
| float3 a_Position1; |
| float2 a_UV1; |
| float4 a_Color1; |
| float3 a_Normal1; |
| float a_PosMtxIdx1; |
| float4 v_Color; |
| float2 v_TexCoord; |
| float4 gl_Position; |
| }; |
| |
| int tint_ftoi(float v) { |
| return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f)); |
| } |
| |
| struct Mat4x4_ { |
| /* 0x0000 */ float4 mx; |
| /* 0x0010 */ float4 my; |
| /* 0x0020 */ float4 mz; |
| /* 0x0030 */ float4 mw; |
| }; |
| |
| struct Mat4x3_ { |
| /* 0x0000 */ float4 mx; |
| /* 0x0010 */ float4 my; |
| /* 0x0020 */ float4 mz; |
| }; |
| |
| struct Mat4x2_ { |
| /* 0x0000 */ float4 mx; |
| /* 0x0010 */ float4 my; |
| }; |
| |
| struct ub_SceneParams { |
| /* 0x0000 */ Mat4x4_ u_Projection; |
| }; |
| |
| struct ub_MaterialParams { |
| /* 0x0000 */ tint_array<Mat4x2_, 1> u_TexMtx; |
| /* 0x0020 */ float4 u_Misc0_; |
| }; |
| |
| struct ub_PacketParams { |
| /* 0x0000 */ tint_array<Mat4x3_, 32> u_PosMtx; |
| }; |
| |
| struct VertexOutput { |
| float4 v_Color; |
| float2 v_TexCoord; |
| float4 member; |
| }; |
| |
| float3 Mat4x3GetCol0_(Mat4x3_ m) { |
| Mat4x3_ m1 = {}; |
| m1 = m; |
| Mat4x3_ const x_e2 = m1; |
| Mat4x3_ const x_e5 = m1; |
| Mat4x3_ const x_e8 = m1; |
| return float3(x_e2.mx[0], x_e5.my[0], x_e8.mz[0]); |
| } |
| |
| float3 Mat4x3GetCol1_(Mat4x3_ m2) { |
| Mat4x3_ m3 = {}; |
| m3 = m2; |
| Mat4x3_ const x_e2 = m3; |
| Mat4x3_ const x_e5 = m3; |
| Mat4x3_ const x_e8 = m3; |
| return float3(x_e2.mx[1], x_e5.my[1], x_e8.mz[1]); |
| } |
| |
| float3 Mat4x3GetCol2_(Mat4x3_ m4) { |
| Mat4x3_ m5 = {}; |
| m5 = m4; |
| Mat4x3_ const x_e2 = m5; |
| Mat4x3_ const x_e5 = m5; |
| Mat4x3_ const x_e8 = m5; |
| return float3(x_e2.mx[2], x_e5.my[2], x_e8.mz[2]); |
| } |
| |
| float3 Mat4x3GetCol3_(Mat4x3_ m6) { |
| Mat4x3_ m7 = {}; |
| m7 = m6; |
| Mat4x3_ const x_e2 = m7; |
| Mat4x3_ const x_e5 = m7; |
| Mat4x3_ const x_e8 = m7; |
| return float3(x_e2.mx[3], x_e5.my[3], x_e8.mz[3]); |
| } |
| |
| float4 Mul(Mat4x4_ m8, float4 v) { |
| Mat4x4_ m9 = {}; |
| float4 v1 = 0.0f; |
| m9 = m8; |
| v1 = v; |
| Mat4x4_ const x_e4 = m9; |
| float4 const x_e6 = v1; |
| Mat4x4_ const x_e8 = m9; |
| float4 const x_e10 = v1; |
| Mat4x4_ const x_e12 = m9; |
| float4 const x_e14 = v1; |
| Mat4x4_ const x_e16 = m9; |
| float4 const x_e18 = v1; |
| return float4(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14), dot(x_e16.mw, x_e18)); |
| } |
| |
| float3 Mul1(Mat4x3_ m10, float4 v2) { |
| Mat4x3_ m11 = {}; |
| float4 v3 = 0.0f; |
| m11 = m10; |
| v3 = v2; |
| Mat4x3_ const x_e4 = m11; |
| float4 const x_e6 = v3; |
| Mat4x3_ const x_e8 = m11; |
| float4 const x_e10 = v3; |
| Mat4x3_ const x_e12 = m11; |
| float4 const x_e14 = v3; |
| return float3(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10), dot(x_e12.mz, x_e14)); |
| } |
| |
| float2 Mul2(Mat4x2_ m12, float4 v4) { |
| Mat4x2_ m13 = {}; |
| float4 v5 = 0.0f; |
| m13 = m12; |
| v5 = v4; |
| Mat4x2_ const x_e4 = m13; |
| float4 const x_e6 = v5; |
| Mat4x2_ const x_e8 = m13; |
| float4 const x_e10 = v5; |
| return float2(dot(x_e4.mx, x_e6), dot(x_e8.my, x_e10)); |
| } |
| |
| float4 Mul3(float3 v6, Mat4x3_ m14) { |
| float3 v7 = 0.0f; |
| Mat4x3_ m15 = {}; |
| v7 = v6; |
| m15 = m14; |
| Mat4x3_ const x_e5 = m15; |
| float3 const x_e6 = Mat4x3GetCol0_(x_e5); |
| float3 const x_e7 = v7; |
| Mat4x3_ const x_e10 = m15; |
| float3 const x_e11 = Mat4x3GetCol1_(x_e10); |
| float3 const x_e12 = v7; |
| Mat4x3_ const x_e15 = m15; |
| float3 const x_e16 = Mat4x3GetCol2_(x_e15); |
| float3 const x_e17 = v7; |
| Mat4x3_ const x_e20 = m15; |
| float3 const x_e21 = Mat4x3GetCol3_(x_e20); |
| float3 const x_e22 = v7; |
| return float4(dot(x_e6, x_e7), dot(x_e11, x_e12), dot(x_e16, x_e17), dot(x_e21, x_e22)); |
| } |
| |
| Mat4x4_ x_Mat4x4_(float n) { |
| float n1 = 0.0f; |
| Mat4x4_ o = {}; |
| n1 = n; |
| float const x_e4 = n1; |
| o.mx = float4(x_e4, 0.0f, 0.0f, 0.0f); |
| float const x_e11 = n1; |
| o.my = float4(0.0f, x_e11, 0.0f, 0.0f); |
| float const x_e18 = n1; |
| o.mz = float4(0.0f, 0.0f, x_e18, 0.0f); |
| float const x_e25 = n1; |
| o.mw = float4(0.0f, 0.0f, 0.0f, x_e25); |
| Mat4x4_ const x_e27 = o; |
| return x_e27; |
| } |
| |
| Mat4x4_ x_Mat4x4_1(Mat4x3_ m16) { |
| Mat4x3_ m17 = {}; |
| Mat4x4_ o1 = {}; |
| m17 = m16; |
| Mat4x4_ const x_e4 = x_Mat4x4_(1.0f); |
| o1 = x_e4; |
| Mat4x3_ const x_e7 = m17; |
| o1.mx = x_e7.mx; |
| Mat4x3_ const x_e10 = m17; |
| o1.my = x_e10.my; |
| Mat4x3_ const x_e13 = m17; |
| o1.mz = x_e13.mz; |
| Mat4x4_ const x_e15 = o1; |
| return x_e15; |
| } |
| |
| Mat4x4_ x_Mat4x4_2(Mat4x2_ m18) { |
| Mat4x2_ m19 = {}; |
| Mat4x4_ o2 = {}; |
| m19 = m18; |
| Mat4x4_ const x_e4 = x_Mat4x4_(1.0f); |
| o2 = x_e4; |
| Mat4x2_ const x_e7 = m19; |
| o2.mx = x_e7.mx; |
| Mat4x2_ const x_e10 = m19; |
| o2.my = x_e10.my; |
| Mat4x4_ const x_e12 = o2; |
| return x_e12; |
| } |
| |
| Mat4x3_ x_Mat4x3_(float n2) { |
| float n3 = 0.0f; |
| Mat4x3_ o3 = {}; |
| n3 = n2; |
| float const x_e4 = n3; |
| o3.mx = float4(x_e4, 0.0f, 0.0f, 0.0f); |
| float const x_e11 = n3; |
| o3.my = float4(0.0f, x_e11, 0.0f, 0.0f); |
| float const x_e18 = n3; |
| o3.mz = float4(0.0f, 0.0f, x_e18, 0.0f); |
| Mat4x3_ const x_e21 = o3; |
| return x_e21; |
| } |
| |
| Mat4x3_ x_Mat4x3_1(Mat4x4_ m20) { |
| Mat4x4_ m21 = {}; |
| Mat4x3_ o4 = {}; |
| m21 = m20; |
| Mat4x4_ const x_e4 = m21; |
| o4.mx = x_e4.mx; |
| Mat4x4_ const x_e7 = m21; |
| o4.my = x_e7.my; |
| Mat4x4_ const x_e10 = m21; |
| o4.mz = x_e10.mz; |
| Mat4x3_ const x_e12 = o4; |
| return x_e12; |
| } |
| |
| void main1(thread tint_private_vars_struct* const tint_private_vars, const constant ub_PacketParams* const tint_symbol_5, const constant ub_SceneParams* const tint_symbol_6, const constant ub_MaterialParams* const tint_symbol_7) { |
| Mat4x3_ t_PosMtx = {}; |
| float2 t_TexSpaceCoord = 0.0f; |
| float const x_e15 = (*(tint_private_vars)).a_PosMtxIdx1; |
| Mat4x3_ const x_e18 = (*(tint_symbol_5)).u_PosMtx[tint_ftoi(x_e15)]; |
| t_PosMtx = x_e18; |
| Mat4x3_ const x_e23 = t_PosMtx; |
| Mat4x4_ const x_e24 = x_Mat4x4_1(x_e23); |
| float3 const x_e25 = (*(tint_private_vars)).a_Position1; |
| Mat4x3_ const x_e29 = t_PosMtx; |
| Mat4x4_ const x_e30 = x_Mat4x4_1(x_e29); |
| float3 const x_e31 = (*(tint_private_vars)).a_Position1; |
| float4 const x_e34 = Mul(x_e30, float4(x_e31, 1.0f)); |
| Mat4x4_ const x_e35 = (*(tint_symbol_6)).u_Projection; |
| Mat4x3_ const x_e37 = t_PosMtx; |
| Mat4x4_ const x_e38 = x_Mat4x4_1(x_e37); |
| float3 const x_e39 = (*(tint_private_vars)).a_Position1; |
| Mat4x3_ const x_e43 = t_PosMtx; |
| Mat4x4_ const x_e44 = x_Mat4x4_1(x_e43); |
| float3 const x_e45 = (*(tint_private_vars)).a_Position1; |
| float4 const x_e48 = Mul(x_e44, float4(x_e45, 1.0f)); |
| float4 const x_e49 = Mul(x_e35, x_e48); |
| (*(tint_private_vars)).gl_Position = x_e49; |
| float4 const x_e50 = (*(tint_private_vars)).a_Color1; |
| (*(tint_private_vars)).v_Color = x_e50; |
| float4 const x_e52 = (*(tint_symbol_7)).u_Misc0_; |
| if ((x_e52[0] == 2.0f)) { |
| { |
| float3 const x_e59 = (*(tint_private_vars)).a_Normal1; |
| Mat4x2_ const x_e64 = (*(tint_symbol_7)).u_TexMtx[0]; |
| float3 const x_e65 = (*(tint_private_vars)).a_Normal1; |
| float2 const x_e68 = Mul2(x_e64, float4(x_e65, 1.0f)); |
| (*(tint_private_vars)).v_TexCoord = x_e68.xy; |
| return; |
| } |
| } else { |
| { |
| float2 const x_e73 = (*(tint_private_vars)).a_UV1; |
| Mat4x2_ const x_e79 = (*(tint_symbol_7)).u_TexMtx[0]; |
| float2 const x_e80 = (*(tint_private_vars)).a_UV1; |
| float2 const x_e84 = Mul2(x_e79, float4(x_e80, 1.0f, 1.0f)); |
| (*(tint_private_vars)).v_TexCoord = x_e84.xy; |
| return; |
| } |
| } |
| } |
| |
| struct tint_symbol_2 { |
| float3 a_Position [[attribute(0)]]; |
| float2 a_UV [[attribute(1)]]; |
| float4 a_Color [[attribute(2)]]; |
| float3 a_Normal [[attribute(3)]]; |
| float a_PosMtxIdx [[attribute(4)]]; |
| }; |
| |
| struct tint_symbol_3 { |
| float4 v_Color [[user(locn0)]]; |
| float2 v_TexCoord [[user(locn1)]]; |
| float4 member [[position]]; |
| }; |
| |
| VertexOutput tint_symbol_inner(float3 a_Position, float2 a_UV, float4 a_Color, float3 a_Normal, float a_PosMtxIdx, thread tint_private_vars_struct* const tint_private_vars, const constant ub_PacketParams* const tint_symbol_8, const constant ub_SceneParams* const tint_symbol_9, const constant ub_MaterialParams* const tint_symbol_10) { |
| (*(tint_private_vars)).a_Position1 = a_Position; |
| (*(tint_private_vars)).a_UV1 = a_UV; |
| (*(tint_private_vars)).a_Color1 = a_Color; |
| (*(tint_private_vars)).a_Normal1 = a_Normal; |
| (*(tint_private_vars)).a_PosMtxIdx1 = a_PosMtxIdx; |
| main1(tint_private_vars, tint_symbol_8, tint_symbol_9, tint_symbol_10); |
| float4 const x_e11 = (*(tint_private_vars)).v_Color; |
| float2 const x_e13 = (*(tint_private_vars)).v_TexCoord; |
| float4 const x_e15 = (*(tint_private_vars)).gl_Position; |
| VertexOutput const tint_symbol_4 = {.v_Color=x_e11, .v_TexCoord=x_e13, .member=x_e15}; |
| return tint_symbol_4; |
| } |
| |
| vertex tint_symbol_3 tint_symbol(const constant ub_PacketParams* tint_symbol_11 [[buffer(0)]], const constant ub_SceneParams* tint_symbol_12 [[buffer(1)]], const constant ub_MaterialParams* tint_symbol_13 [[buffer(2)]], tint_symbol_2 tint_symbol_1 [[stage_in]]) { |
| thread tint_private_vars_struct tint_private_vars = {}; |
| VertexOutput const inner_result = tint_symbol_inner(tint_symbol_1.a_Position, tint_symbol_1.a_UV, tint_symbol_1.a_Color, tint_symbol_1.a_Normal, tint_symbol_1.a_PosMtxIdx, &(tint_private_vars), tint_symbol_11, tint_symbol_12, tint_symbol_13); |
| tint_symbol_3 wrapper_result = {}; |
| wrapper_result.v_Color = inner_result.v_Color; |
| wrapper_result.v_TexCoord = inner_result.v_TexCoord; |
| wrapper_result.member = inner_result.member; |
| return wrapper_result; |
| } |
| |