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() {
    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;
}
