Texture2D atlasTexture : register(t0); SamplerState _atlasTexture_sampler : register(s0); Texture2D atlasAlpha : register(t3); SamplerState _atlasAlpha_sampler : register(s3); Texture2D mask1Texture : register(t1); SamplerState _mask1Texture_sampler : register(s1); Texture2D mask2Texture : register(t2); SamplerState _mask2Texture_sampler : register(s2); static float2 vUV; static float2 mask1UV; static float2 mask2UV; static float4 fragColor; static float3 vTint; struct SPIRV_Cross_Input { float2 vUV : TEXCOORD0; float2 mask1UV : TEXCOORD1; float2 mask2UV : TEXCOORD2; nointerpolation float3 vTint : TEXCOORD4; }; struct SPIRV_Cross_Output { float4 fragColor : SV_Target0; }; float4 YCoCgToRGB(float4 ycocg, float alpha) { float Y = ycocg.w; float scale = 1.0f / ((31.875f * ycocg.z) + 1.0f); float Co = (ycocg.x - 0.501960813999176025390625f) * scale; float Cg = (ycocg.y - 0.501960813999176025390625f) * scale; float R = (Y + Co) - Cg; float G = Y + Cg; float B = (Y - Co) - Cg; return float4(R, G, B, alpha); } void frag_main() { float4 yCoCg = atlasTexture.Sample(_atlasTexture_sampler, vUV); float alpha = atlasAlpha.Sample(_atlasAlpha_sampler, vUV).x; float mask = 1.0f; if (mask1UV.x > (-1.0f)) { mask = mask1Texture.Sample(_mask1Texture_sampler, mask1UV).x; if (mask2UV.x > (-1.0f)) { mask *= mask2Texture.Sample(_mask2Texture_sampler, mask2UV).x; } } float4 param = yCoCg; float param_1 = alpha; fragColor = YCoCgToRGB(param, param_1) * mask; float3 _127 = fragColor.xyz * vTint; fragColor = float4(_127.x, _127.y, _127.z, fragColor.w); } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { vUV = stage_input.vUV; mask1UV = stage_input.mask1UV; mask2UV = stage_input.mask2UV; vTint = stage_input.vTint; frag_main(); SPIRV_Cross_Output stage_output; stage_output.fragColor = fragColor; return stage_output; }