Texture3D lut : register(t2); SamplerState _lut_sampler : register(s2); Texture2D tex1 : register(t0); SamplerState _tex1_sampler : register(s0); Texture2D tex2 : register(t1); SamplerState _tex2_sampler : register(s1); static uint vExtra; static float4 vTint; static float2 vUV; static float4 fragColor; struct SPIRV_Cross_Input { float2 vUV : TEXCOORD0; float4 vTint : TEXCOORD1; nointerpolation uint vExtra : TEXCOORD2; }; struct SPIRV_Cross_Output { float4 fragColor : SV_Target0; }; float3 colorToLut16Index(float3 inputColor) { return (inputColor * 0.9375f) + 0.03125f.xxx; } float4 applySpriteFlags(inout float4 color, float4 tint, uint extra) { if ((vExtra & 4u) != 0u) { color = float4(color.www - color.xyz, color.w); } if ((vExtra & 2u) == 0u) { color *= tint; } else { float alpha = color.w * tint.w; float3 x = (color.xyz * tint.xyz) * 2.0f; float3 y = alpha.xxx - (((color.w.xxx - color.xyz) * 2.0f) * (tint.w.xxx - tint.xyz)); float _107; if (color.x < (0.5f * color.w)) { _107 = x.x; } else { _107 = y.x; } color.x = _107; float _124; if (color.y < (0.5f * color.w)) { _124 = x.y; } else { _124 = y.y; } color.y = _124; float _140; if (color.z < (0.5f * color.w)) { _140 = x.z; } else { _140 = y.z; } color.z = _140; color.w = alpha; } if (all(bool2((extra & 8u) != 0u, color.w > 0.0f))) { float3 param = color.xyz; float3 _175 = lut.SampleLevel(_lut_sampler, colorToLut16Index(param), 0.0f).xyz; color.x = _175.x; color.y = _175.y; color.z = _175.z; } if ((extra & 1u) != 0u) { float4 _187 = color; float3 _194 = dot(_187.xyz, float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)).xxx; color.x = _194.x; color.y = _194.y; color.z = _194.z; } return color; } float4 applySpriteFlags(float4 color) { float4 param = color; float4 param_1 = vTint; uint param_2 = vExtra; float4 _212 = applySpriteFlags(param, param_1, param_2); return _212; } void frag_main() { float4 param = tex1.Sample(_tex1_sampler, vUV); float4 color = applySpriteFlags(param); fragColor = color; } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { vExtra = stage_input.vExtra; vTint = stage_input.vTint; vUV = stage_input.vUV; frag_main(); SPIRV_Cross_Output stage_output; stage_output.fragColor = fragColor; return stage_output; }