/*#pragma settings NoInline*/

void out_half (out half  v) { v = 1; }
void out_half2(out half2 v) { v = half2(2); }
void out_half3(out half3 v) { v = half3(3); }
void out_half4(out half4 v) { v = half4(4); }

void out_half2x2(out half2x2 v) { v = half2x2(2); }
void out_half3x3(out half3x3 v) { v = half3x3(3); }
void out_half4x4(out half4x4 v) { v = half4x4(4); }

void out_int (out int  v) { v = 1; }
void out_int2(out int2 v) { v = int2(2); }
void out_int3(out int3 v) { v = int3(3); }
void out_int4(out int4 v) { v = int4(4); }

void out_float (out float  v) { v = 1; }
void out_float2(out float2 v) { v = float2(2); }
void out_float3(out float3 v) { v = float3(3); }
void out_float4(out float4 v) { v = float4(4); }

void out_float2x2(out float2x2 v) { v = float2x2(2); }
void out_float3x3(out float3x3 v) { v = float3x3(3); }
void out_float4x4(out float4x4 v) { v = float4x4(4); }

void out_bool (out bool  v) { v = true; }
void out_bool2(out bool2 v) { v = bool2(false); }
void out_bool3(out bool3 v) { v = bool3(true);  }
void out_bool4(out bool4 v) { v = bool4(false); }

void main() {
    half     h;    out_half (h);
    half2    h2;   out_half2(h2);
    half3    h3;   out_half3(h3);
    half4    h4;   out_half4(h4);
                   out_half2(h3.xz);
                   out_half4(h4.zwxy);
    sk_FragColor = half4(h, h2.x, h3.x, h4.x);

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

    int      i;    out_int (i);
    int2     i2;   out_int2(i2);
    int3     i3;   out_int3(i3);
    int4     i4;   out_int4(i4);
                   out_int3(i4.xyz);
    sk_FragColor = half4(i, i2.x, i3.x, i4.x);

    float    f;    out_float (f);
    float2   f2;   out_float2(f2);
    float3   f3;   out_float3(f3);
    float4   f4;   out_float4(f4);
                   out_float2(f3.xy);
    sk_FragColor = half4(half(f), half(f2.x), half(f3.x), half(f4.x));

    float2x2 f2x2; out_float2x2(f2x2);
    float3x3 f3x3; out_float3x3(f3x3);
    float4x4 f4x4; out_float4x4(f4x4);
                   out_float(f2x2[0][0]);
    sk_FragColor = half4(half(f2x2[0][0]), half(f3x3[0][0]), half(f4x4[0][0]), 1);

    bool     b;    out_bool (b);
    bool2    b2;   out_bool2(b2);
    bool3    b3;   out_bool3(b3);
    bool4    b4;   out_bool4(b4);
                   out_bool2(b4.xw);
    sk_FragColor = half4(half(b), half(b2.x), half(b3.x), half(b4.x));
}
