sugarloaf 0.4.4

Sugarloaf is Rio rendering engine, designed to be multiplatform. It is based on WebGPU, Rust library for Desktops and WebAssembly for Web (JavaScript). This project is created and maintained for Rio terminal purposes but feel free to use it.
#version 450

// Per-vertex non-quad geometry shader, ported from `vs_main` in
// `sugarloaf/src/renderer/renderer.metal`. Used for `polygon()` /
// `line()` / `triangle()` / `arc()` calls — anything that emits
// caller-supplied vertices instead of QuadInstances.
//
// Per-vertex layout matches `Vertex` in
// `sugarloaf/src/renderer/batch.rs` (88 bytes):
//   loc 0  R32G32B32_SFLOAT     pos              (offset 0)
//   loc 1  R32G32B32A32_SFLOAT  color            (offset 12)
//   loc 2  R32G32_SFLOAT        uv               (offset 28)
//   loc 3  R32G32_SINT          layers           (offset 36)
//   loc 4  R32G32B32A32_SFLOAT  corner_radii     (offset 44)
//   loc 5  R32G32_SFLOAT        rect_size        (offset 60)
//   loc 6  R32_SINT             underline_style  (offset 68)
//   loc 7  R32G32B32A32_SFLOAT  clip_rect        (offset 72)
//
// Drawn as TRIANGLE_LIST with one instance — the caller supplies
// every vertex explicitly. Outputs the same `VertexOutput` as
// `quad.vert.glsl` so they share the same fragment shader.

layout(set = 0, binding = 0, std140) uniform Globals {
    mat4 transform;
    uint input_colorspace;
    uint _pad0;
    uint _pad1;
    uint _pad2;
} globals;

layout(location = 0) in vec3  in_pos;
layout(location = 1) in vec4  in_color;
layout(location = 2) in vec2  in_uv;
layout(location = 3) in ivec2 in_layers;
layout(location = 4) in vec4  in_corner_radii;
layout(location = 5) in vec2  in_rect_size;
layout(location = 6) in int   in_underline_style;
layout(location = 7) in vec4  in_clip_rect;

layout(location = 0)      out vec4 out_color;
layout(location = 1)      out vec2 out_uv;
layout(location = 2) flat out ivec2 out_layers;
layout(location = 3)      out vec4 out_corner_radii;
layout(location = 4)      out vec2 out_rect_size;
layout(location = 5) flat out int  out_underline_style;
layout(location = 6) flat out vec4 out_clip_rect;

void main() {
    gl_Position = globals.transform * vec4(in_pos, 1.0);
    out_color = in_color;
    out_uv = in_uv;
    out_layers = in_layers;
    out_corner_radii = in_corner_radii;
    out_rect_size = in_rect_size;
    out_underline_style = in_underline_style;
    out_clip_rect = in_clip_rect;
}