Texture2D tex1 : register(t0); SamplerState _tex1_sampler : register(s0); Texture2D tex2 : register(t1); SamplerState _tex2_sampler : register(s1); static float2 vRelativePosition; static float2 vRectSize; static float2 vUV; static uint vExtra; static float vFalloff; static float vOpacity; static float4 fragColor; struct SPIRV_Cross_Input { float2 vUV : TEXCOORD0; float vOpacity : TEXCOORD1; nointerpolation uint vExtra : TEXCOORD2; nointerpolation float vFalloff : TEXCOORD3; float2 vRelativePosition : TEXCOORD4; nointerpolation float2 vRectSize : TEXCOORD5; }; 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); } float getDist() { float2 d = abs(vRelativePosition) - vRectSize; return length(max(d, 0.0f.xx)); } void frag_main() { float4 color = tex1.Sample(_tex1_sampler, vUV); bool debug = (vExtra & 512u) != 0u; bool yCoCg = (vExtra & 256u) != 0u; if (yCoCg) { float4 param = color; float param_1 = tex2.Sample(_tex2_sampler, vUV).x; color = YCoCgToRGB(param, param_1); } float d = getDist() / vFalloff; float a = 1.0f - min(1.0f, d); color *= (vOpacity * a); fragColor = color; } SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input) { vRelativePosition = stage_input.vRelativePosition; vRectSize = stage_input.vRectSize; vUV = stage_input.vUV; vExtra = stage_input.vExtra; vFalloff = stage_input.vFalloff; vOpacity = stage_input.vOpacity; frag_main(); SPIRV_Cross_Output stage_output; stage_output.fragColor = fragColor; return stage_output; }