/*#pragma settings NoInline*/

uniform half4 colorGreen, colorRed, colorWhite;

void out_half (out half  v) { v = colorWhite.r; }
void out_half2(out half2 v) { v = half2(colorWhite.g); }
void out_half3(out half3 v) { v = half3(colorWhite.b); }
void out_half4(out half4 v) { v = half4(colorWhite.a); }

void out_half2x2(out half2x2 v) { v = half2x2(colorWhite.r); }
void out_half3x3(out half3x3 v) { v = half3x3(colorWhite.g); }
void out_half4x4(out half4x4 v) { v = half4x4(colorWhite.b); }

void out_int (out int  v) { v = int(colorWhite.r); }
void out_int2(out int2 v) { v = int2(colorWhite.g); }
void out_int3(out int3 v) { v = int3(colorWhite.b); }
void out_int4(out int4 v) { v = int4(colorWhite.a); }

void out_float (out float  v) { v = float(colorWhite.r); }
void out_float2(out float2 v) { v = float2(colorWhite.g); }
void out_float3(out float3 v) { v = float3(colorWhite.b); }
void out_float4(out float4 v) { v = float4(colorWhite.a); }

void out_float2x2(out float2x2 v) { v = float2x2(colorWhite.r); }
void out_float3x3(out float3x3 v) { v = float3x3(colorWhite.g); }
void out_float4x4(out float4x4 v) { v = float4x4(colorWhite.b); }

void out_bool (out bool  v) { v = bool(colorWhite.r); }
void out_bool2(out bool2 v) { v = bool2(colorWhite.g); }
void out_bool3(out bool3 v) { v = bool3(colorWhite.b); }
void out_bool4(out bool4 v) { v = bool4(colorWhite.a); }

half4 main(float2 coords) {
    half4 result;

    half     h;    out_half (h);
    half2    h2;   out_half2(h2);
    half3    h3;   out_half3(h3);
    half4    h4;   out_half4(h4);
                   out_half(h3[1]);
                   out_half2(h3.xz);
                   out_half4(h4.zwxy);

    half2x2  h2x2; out_half2x2(h2x2);
    half3x3  h3x3; out_half3x3(h3x3);
    half4x4  h4x4; out_half4x4(h4x4);
                   out_half3(h3x3[1]);
                   out_half(h4x4[3].w);
                   out_half(h2x2[0][0]);

    int      i;    out_int (i);
    int2     i2;   out_int2(i2);
    int3     i3;   out_int3(i3);
    int4     i4;   out_int4(i4);
                   out_int3(i4.xyz);
                   out_int(i2[1]);

    float    f;    out_float (f);
    float2   f2;   out_float2(f2);
    float3   f3;   out_float3(f3);
    float4   f4;   out_float4(f4);
                   out_float2(f3.xy);
                   out_float(f2[0]);

    float2x2 f2x2; out_float2x2(f2x2);
    float3x3 f3x3; out_float3x3(f3x3);
    float4x4 f4x4; out_float4x4(f4x4);
                   out_float(f2x2[0][0]);

    bool     b;    out_bool (b);
    bool2    b2;   out_bool2(b2);
    bool3    b3;   out_bool3(b3);
    bool4    b4;   out_bool4(b4);
                   out_bool2(b4.xw);
                   out_bool(b3[2]);

    bool ok = true;
    ok = ok && 1 == (h * h2.x * h3.x * h4.x * h2x2[0][0] * h3x3[0][0] * h4x4[0][0]);
    ok = ok && 1 == (f * f2.x * f3.x * f4.x * f2x2[0][0] * f3x3[0][0] * f4x4[0][0]);
    ok = ok && 1 == (i * i2.x * i3.x * i4.x);
    ok = ok &&      (b && b2.x && b3.x && b4.x);

    return ok ? colorGreen : colorRed;
}
