Texture2D<float4> tex1 : register(t0);
SamplerState _tex1_sampler : register(s0);
Texture2D<float4> tex2 : register(t1);
SamplerState _tex2_sampler : register(s1);

static float2 vUV;
static float4 vTint;
static uint vExtra;
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;
};

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 = tex1.Sample(_tex1_sampler, vUV);
    float alpha = tex2.Sample(_tex2_sampler, vUV).x;
    float4 param = yCoCg;
    float param_1 = alpha;
    float4 color = YCoCgToRGB(param, param_1);
    color *= vTint;
    if (vExtra != 0u)
    {
        float3 _110 = dot(color.xyz, float3(0.2989999949932098388671875f, 0.58700001239776611328125f, 0.114000000059604644775390625f)).xxx;
        color = float4(_110.x, _110.y, _110.z, color.w);
    }
    fragColor = color;
}

SPIRV_Cross_Output main(SPIRV_Cross_Input stage_input)
{
    vUV = stage_input.vUV;
    vTint = stage_input.vTint;
    vExtra = stage_input.vExtra;
    frag_main();
    SPIRV_Cross_Output stage_output;
    stage_output.fragColor = fragColor;
    return stage_output;
}
