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)
{
    int4 expected = int4(1, 0, 0, 2);
    bool _58 = false;
    if (abs(int(_10_testInputs.x)) == 1)
    {
        int2 _44 = abs(int2(int(_10_testInputs.xy.x), int(_10_testInputs.xy.y)));
        _58 = all(bool2(_44.x == int4(1, 0, 0, 2).xy.x, _44.y == int4(1, 0, 0, 2).xy.y));
    }
    else
    {
        _58 = false;
    }
    bool _78 = false;
    if (_58)
    {
        int3 _61 = abs(int3(int(_10_testInputs.xyz.x), int(_10_testInputs.xyz.y), int(_10_testInputs.xyz.z)));
        _78 = all(bool3(_61.x == int4(1, 0, 0, 2).xyz.x, _61.y == int4(1, 0, 0, 2).xyz.y, _61.z == int4(1, 0, 0, 2).xyz.z));
    }
    else
    {
        _78 = false;
    }
    bool _96 = false;
    if (_78)
    {
        int4 _81 = abs(int4(int(_10_testInputs.x), int(_10_testInputs.y), int(_10_testInputs.z), int(_10_testInputs.w)));
        _96 = all(bool4(_81.x == int4(1, 0, 0, 2).x, _81.y == int4(1, 0, 0, 2).y, _81.z == int4(1, 0, 0, 2).z, _81.w == int4(1, 0, 0, 2).w));
    }
    else
    {
        _96 = false;
    }
    bool _100 = false;
    if (_96)
    {
        _100 = true;
    }
    else
    {
        _100 = false;
    }
    bool _107 = false;
    if (_100)
    {
        _107 = all(bool2(int2(1, 0).x == int4(1, 0, 0, 2).xy.x, int2(1, 0).y == int4(1, 0, 0, 2).xy.y));
    }
    else
    {
        _107 = false;
    }
    bool _114 = false;
    if (_107)
    {
        _114 = all(bool3(int3(1, 0, 0).x == int4(1, 0, 0, 2).xyz.x, int3(1, 0, 0).y == int4(1, 0, 0, 2).xyz.y, int3(1, 0, 0).z == int4(1, 0, 0, 2).xyz.z));
    }
    else
    {
        _114 = false;
    }
    bool _117 = false;
    if (_114)
    {
        _117 = true;
    }
    else
    {
        _117 = false;
    }
    bool4 _118 = _117.xxxx;
    return float4(_118.x ? _10_colorGreen.x : _10_colorRed.x, _118.y ? _10_colorGreen.y : _10_colorRed.y, _118.z ? _10_colorGreen.z : _10_colorRed.z, _118.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;
}
