// defines built-in interfaces supported by SkiaSL geometry shaders

layout(builtin=10002) in sk_PerVertex {
  layout(builtin=0) float4 sk_Position;
  layout(builtin=1) float sk_PointSize;
} sk_in[];

layout(builtin=10007) out sk_PerVertex {
    layout(builtin=0) float4 sk_Position;
    layout(builtin=1) float sk_PointSize;
};

// sk_InvocationID exists, but is declared programmatically (to support a workaround)
// layout(builtin=8) in int sk_InvocationID;

sk_has_side_effects void EmitStreamVertex(int stream);
sk_has_side_effects void EndStreamPrimitive(int stream);
sk_has_side_effects void EmitVertex();
sk_has_side_effects void EndPrimitive();
