[pixel shader]
vector main() : sv_target
{
    float4 ret = vector(1.0, 2.0, 3.0, 4.0);
    return ret;
}

[test]
draw quad
probe all rgba (1.0, 2.0, 3.0, 4.0)

[pixel shader]
float4 main() : sv_target
{
    vector<float, 4> ret = float4(1.0, 2.0, 3.0, 4.0);
    return ret;
}

[test]
draw quad
probe all rgba (1.0, 2.0, 3.0, 4.0)

[pixel shader]
float4 main() : sv_target
{
    vector<float, 3> ret = vector<float, 3>(1.0, 2.0, 3.0);
    return vector(ret, 0.0);
}

[test]
draw quad
probe all rgba (1.0, 2.0, 3.0, 0.0)

[pixel shader fail]
vector main() : sv_target
{
    vector ret = vector(1.0, 2.0, 3.0);
    return ret;
}

[pixel shader fail(sm<6)]
vector main() : sv_target
{
    vector<float> ret = vector(1.0, 2.0, 3.0, 4.0);
    return ret;
}

[pixel shader]
float4 main() : sv_target
{
    matrix m = matrix<float, 4, 4>(1.0, 2.0, 3.0, 4.0,
                                   5.0, 6.0, 7.0, 8.0,
                                   9.0, 10.0, 11.0, 12.0,
                                   13.0, 14.0, 15.0, 16.0);
    return m[1];
}

[test]
draw quad
probe all rgba (5.0, 6.0, 7.0, 8.0)

[pixel shader]
float4 main() : sv_target
{
    matrix<float, 2, 3> m = float2x3(1.0, 2.0, 3.0,
                                     5.0, 6.0, 7.0);
    return float4(m[1], 0.0);
}

[test]
draw quad
probe all rgba (5.0, 6.0, 7.0, 0.0)

[pixel shader fail(sm<6)]
float4 main() : sv_target
{
    matrix m = matrix<float>(1.0, 2.0, 3.0, 4.0,
                             5.0, 6.0, 7.0, 8.0,
                             9.0, 10.0, 11.0, 12.0,
                             13.0, 14.0, 15.0, 16.0);
    return m[1];
}

[pixel shader fail(sm<6)]
float4 main() : sv_target
{
    matrix m = matrix<float, 4>(1.0, 2.0, 3.0, 4.0,
                                5.0, 6.0, 7.0, 8.0,
                                9.0, 10.0, 11.0, 12.0,
                                13.0, 14.0, 15.0, 16.0);
    return m[1];
}

[pixel shader fail]
float4 main() : sv_target
{
    matrix m = matrix(1.0, 2.0, 3.0, 4.0,
                      5.0, 6.0, 7.0, 8.0,
                      9.0, 10.0, 11.0, 12.0,
                      13.0, 14.0, 15.0);
    return m[1];
}
