struct Output {
    [[builtin(position)]] Position : vec4<f32>;
    [[location(0)]] color : vec4<f32>;
};
[[stage(vertex)]] fn main(
    [[builtin(vertex_index)]] VertexIndex : u32,
    [[builtin(instance_index)]] InstanceIndex : u32) -> Output {
    // TODO: remove workaround for Tint unary array access broke
    let zv : array<vec2<f32>, 4> = array<vec2<f32>, 4>(
        vec2<f32>(0.2, 0.2),
        vec2<f32>(0.3, 0.3),
        vec2<f32>(-0.1, -0.1),
        vec2<f32>(1.1, 1.1));
    let z : f32 = zv[InstanceIndex].x;
    var output : Output;
    output.Position = vec4<f32>(0.5, 0.5, z, 1.0);
    let colors : array<vec4<f32>, 4> = array<vec4<f32>, 4>(
        vec4<f32>(1.0, 0.0, 0.0, 1.0),
        vec4<f32>(0.0, 1.0, 0.0, 1.0),
        vec4<f32>(0.0, 0.0, 1.0, 1.0),
        vec4<f32>(1.0, 1.0, 1.0, 1.0)
    );
    output.color = colors[InstanceIndex];
    return output;
}