[require]
shader model < 3.0

[pixel shader fail]
float4 main() : sv_target
{
    float4 teChnique = {0, 0, 0, 0};
    return teChnique;
}

[pixel shader fail]
float4 main() : sv_target
{
    float4 technique10 = {0, 0, 0, 0};
    return technique10;
}

[pixel shader fail]
float4 main() : sv_target
{
    float4 technique11 = {0, 0, 0, 0};
    return technique11;
}

[pixel shader fail]
typedef float4 technique10;

float4 main() : sv_target
{
    return float4(0, 0, 0, 0);
}

[pixel shader fail]
typedef float4 Technique;

float4 main() : sv_target
{
    return float4(0, 0, 0, 0);
}

[pixel shader fail]
float4 main() : sv_target
{
    float4 fxgroup = {0, 0, 0, 0};
    return fxgroup;
}

[pixel shader]
typedef float4 Technique10;
typedef float4 Technique11;

float4 main() : sv_target
{
    return float4(0, 0, 0, 0);
}

[pixel shader]
float4 main() : sv_target
{
    float4 teChnique10 = {0, 0, 0, 0};
    float4 teChnique11 = {0, 0, 0, 0};
    return teChnique10 + teChnique11;
}

[pixel shader]
float4 main() : sv_target
{
    float4 teChnique11 = {0, 0, 0, 0};
    return teChnique11;
}

[pixel shader]
float4 main() : sv_target
{
    float4 fxGroup = {0, 0, 0, 0};
    return fxGroup;
}

[effect todo]
technique
{
}

technique10
{
}

% Effects without techniques are not allowed for fx_2_0
[effect fail todo]
float4 f;

% fx_5_0 keyword fails with fx_2_0 profile
[effect fail]
technique
{
}

technique11
{
}

[effect fail]
technique
{
}

tEchnique10
{
}

[effect fail]
technique
{
}

tEchnique11
{
}

[effect fail]
// Empty groups are not allowed
fxgroup group
{
}

% Regular shaders with technique blocks
[vertex shader]
float4 main() : sv_position
{
    return 0;
}

technique
{
}

technique10
{
}

technique11
{
}

fxgroup group
{
    technique10 {}
}

[pixel shader]
float4 main() : sv_target
{
    return 0;
}

tEchnique
{
}

technique10
{
}

technique11
{
}

fxgroup group
{
    technique10 {}
}