cbuffer _UniformBuffer : register(b0, space0)
{
    float4 _10_testInputs : packoffset(c0);
    float4 _10_colorGreen : packoffset(c1);
    float4 _10_colorRed : packoffset(c2);
};


static float4 sk_FragColor;

struct SPIRV_Cross_Output
{
    float4 sk_FragColor : SV_Target0;
};

float4 main(float2 _24)
{
    float4 v = _10_testInputs;
    float4 _35 = float4(_10_testInputs.x, 1.0f, 1.0f, 1.0f);
    v = _35;
    float2 _36 = _35.xy;
    float _37 = _36.x;
    v = float4(_37, _36.y, 1.0f, 1.0f);
    v = float4(_37, 1.0f, 1.0f, 1.0f);
    v = float4(0.0f, 1.0f, 1.0f, 1.0f);
    float4 _47 = float4(float4(0.0f, 1.0f, 1.0f, 1.0f).xyz, 1.0f);
    v = _47;
    float2 _48 = _47.xy;
    float _49 = _48.x;
    v = float4(_49, _48.y, 1.0f, 1.0f);
    v = float4(_49, 0.0f, 1.0f, 1.0f);
    float4 _53 = float4(_49, 1.0f, 0.0f, 1.0f);
    v = _53;
    float2 _54 = _53.yz;
    float _55 = _54.x;
    v = float4(1.0f, _55, _54.y, 1.0f);
    v = float4(0.0f, _55, 1.0f, 1.0f);
    v = 1.0f.xxxx;
    float4 _64 = float4(1.0f.xxxx.xyz, 1.0f);
    v = _64;
    float4 _68 = float4(_64.xy, 0.0f, 1.0f);
    v = _68;
    float2 _69 = _68.xy;
    float _70 = _69.x;
    float4 _72 = float4(_70, _69.y, 1.0f, 0.0f);
    v = _72;
    float2 _73 = _72.zw;
    float _74 = _73.x;
    v = float4(_70, 1.0f, _74, _73.y);
    v = float4(_70, 0.0f, _74, 1.0f);
    v = float4(_70, 1.0f, 1.0f, 1.0f);
    float4 _79 = float4(_70, 1.0f, 0.0f, 1.0f);
    v = _79;
    float4 _84 = float4(1.0f, _79.yzw);
    v = _84;
    float2 _85 = _84.yz;
    float _86 = _85.x;
    v = float4(0.0f, _86, _85.y, 1.0f);
    v = float4(0.0f, _86, 1.0f, 1.0f);
    float4 _90 = float4(1.0f, _86, 1.0f, 1.0f);
    v = _90;
    float2 _91 = _90.zw;
    float _92 = _91.x;
    v = float4(0.0f, 0.0f, _92, _91.y);
    v = float4(0.0f, 0.0f, _92, 1.0f);
    v = float4(0.0f, 1.0f, 1.0f, 1.0f);
    return float4(bool4(true, true, true, true).x ? _10_colorGreen.x : _10_colorRed.x, bool4(true, true, true, true).y ? _10_colorGreen.y : _10_colorRed.y, bool4(true, true, true, true).z ? _10_colorGreen.z : _10_colorRed.z, bool4(true, true, true, true).w ? _10_colorGreen.w : _10_colorRed.w);
}

void frag_main()
{
    float2 _20 = 0.0f.xx;
    sk_FragColor = main(_20);
}

SPIRV_Cross_Output main()
{
    frag_main();
    SPIRV_Cross_Output stage_output;
    stage_output.sk_FragColor = sk_FragColor;
    return stage_output;
}
