Builtin Library
- ..
- README.md1.5 KB
- bindings.yaml2.1 KB
- shader.wgsl1.8 KB
README.md
edges
The sides of a mesh as point pairs: the first stage of the edge table. It reads
pt (the point each vertex reads), and each primitive's vstart and vcount.
One invocation per primitive writes, for every vertex slot of its run, the side
leaving that vertex as lo, hi (its lower and higher point), face (the owning
primitive) and rev (1 when the side runs from the higher point to the lower).
The outputs hold nv slots, a bind of the vertex count. A slot with no side (the
last vertex of an open run, a side joining a point to itself, a primitive with
fewer than two vertices) holds ZERO_NONE (the largest i32) in lo and hi
and -1 in face, so a sort puts it last. Integers are 32-bit words, exact.
The edge table is this kernel, a stable sort of the slots by hi and then by
lo, and the edges_runs kernel (run heads, then the table). The sort and
the compaction between are the sort and compact kernels; edges_runs states the
whole sequence, and the core.edges node runs it. closed_all is 1 for a mesh of
faces, which wrap; with 0 the closed column decides per primitive, for curves.
np is the number of primitives in the plain variant. Over a live count
(COUNT=device, see the abi README) the live primitives are read from
domain_count and the dispatch covers their capacity; that variant wraps every
primitive and binds no closed, which keeps it at 8 storage buffers (8 in the
plain variant).