Skip to main content

vcti-shader-foundry

The shader artifact-set builder: composes the installed shader features into the pipeline matrix, drives the compiler, and emits the artifact set for VCollab renderers.

Overview

vcti-shader-foundry is the assembler of the shader system — the offline build tool that turns the installed shader features into the committed artifact set the runtime ships. It composes the features it lists (vcti-shader-deform, -derive, -fringe) into the pipeline matrix, drives vcti-shader-compiler to emit and validate GLSL ES, checks every result against its contract, and packs the shaders, one envelope per pipeline and the registry.json index into a single archive, written atomically, for a consumer to take as it likes.

Composition is the whole job, and it is the part no feature can do: each feature declares its own fields and cannot see what it is combined with, so the builder is where the clip-space transform that belongs to nobody is added, where a field name two features declare differently is rejected, and where the manifest — the only contract the runtime reads — is written.

It is not the toolchain and not the vocabulary: the .slang → GLSL ES machinery lives in vcti-shader-compiler, the specs you declare fields with in vcti-shader-base, and each shader feature in its own package. See docs/design.md for the system design and docs/extending.md for adding a shader feature.

Installation

pip install vcti-shader-foundry

This is a build tool, not a runtime dependency; install it in the authoring environment alongside the feature packages you want built. The shader compilers (slangc, spirv-cross, glslang) are external and pinned — discovered via SLANG_DIR / SPIRV_CROSS_DIR / GLSLANG_DIR or PATH.

Quick Start

Build the artifact set as one archive:

$ shader-foundry emit
wrote shaders-3.0.0-1fc4c3a7.zip: 15 pipeline(s), 531,073 bytes, sha256 1fc4c3a7f81222b59c74378dab9c5f46610b55276b319b5d200c62b0a6df9919
  registry.json, pipelines/*.json (15), shaders/*.glsl (30)
  toolchain slangc 2026.12.0.1, spirv-cross vulkan-sdk-1.4.357.0, glslang 11:16.5.0 (pinned)

One file, three kinds of content, because the same build is read three ways: registry.json for a consumer choosing a pipeline, one self-contained envelope per pipeline — contract, uniform layout and sources inline — for one rendering it, and the .glsl files for a person. The archive is written whole or not at all: everything is built and checked in memory, then written to a temporary file and renamed into place. It is also reproducible, so identical inputs give an identical file and the hash above identifies the set. The default name carries both facts a reader wants — the version that built it and the first eight digits of that hash — and --out takes any path, with {version} and {sha8} filled in wherever they appear; a plain shaders.zip is a fixed name.

Give a directory instead of a .zip path and the same files are unpacked into it — to read them, or to build a subset with --pipeline ID (repeatable) while iterating on one shape. A subset carries no registry.json, because the index is what a consumer selects from and must not list a pipeline that was not built, and it cannot become an archive. shader-foundry pipelines lists the ids, and needs no toolchain installed.

The executable versions a set is built with are pinned in the package. emit warns when the installed tools differ from the pins and refuses with --strict-toolchain; the manifest records what was actually used either way.

The same from Python, when a build needs to do more around it:

# requires: the shader toolchain (slangc, spirv-cross, glslang)
from vcti.shader.compiler import discover_toolchain
from vcti.shader.foundry import build_artifact_set, build_manifest, toolchain_info, write_archive

toolchain = discover_toolchain()
artifact_set = build_artifact_set(build_manifest(toolchain_info(toolchain)), toolchain)
print(write_archive(artifact_set))          # shaders-<version>-<sha8>.zip, the default name

Inspect the matrix without compiling anything — 12 continuous-fringe pipelines over four data families and three vertex variants, plus 3 discrete-fringe ones:

from vcti.shader.foundry import build_pipelines

for pipeline in build_pipelines():
    print(pipeline.id, list(pipeline.capabilities))
# deform3.symtensor.fringe-float ['deform3', 'symtensor', 'fringe-float']

Dependencies

vcti-shader-compiler, vcti-shader-base, the feature packages (vcti-shader-deform, -derive, -fringe), plus vcti-derived. The shader toolchain executables (slangc, spirv-cross, glslang) are external, not pip dependencies. Nothing here needs a GL context: moderngl and numpy live in the gl extra, for the tests that prove each emitted pair links, draws, and computes what its file says it does; pip install "vcti-shader-foundry[gl]" pulls them in on a machine that has a GL stack.

Documentation

If you want to… Read
Understand the system design and decisions docs/design.md
Add a new shader feature docs/extending.md
See practical build workflows docs/patterns.md
Navigate and modify the builder source docs/source-guide.md
Look up a specific function or type docs/api.md

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vcti_shader_foundry-3.0.0.tar.gz (72.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vcti_shader_foundry-3.0.0-py3-none-any.whl (47.6 kB view details)

Uploaded Python 3

File details

Details for the file vcti_shader_foundry-3.0.0.tar.gz.

File metadata

  • Download URL: vcti_shader_foundry-3.0.0.tar.gz
  • Upload date:
  • Size: 72.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for vcti_shader_foundry-3.0.0.tar.gz
Algorithm Hash digest
SHA256 9476d9a87ceb05e29caec86694bf85df2b3e16f2dfb28ca4e4bf2b11a2772fd6
MD5 a06f414e5f194d569d35b0fe23ce13e9
BLAKE2b-256 7f6e75f31880497bca425b54db4eb91e8c6b4ae2c39702b2c4021ab826ada387

See more details on using hashes here.

Provenance

The following attestation bundles were made for vcti_shader_foundry-3.0.0.tar.gz:

Publisher: release.yml on vcollab/vcti-python-shader-foundry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vcti_shader_foundry-3.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for vcti_shader_foundry-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b0928b434f0f6bc373584053f089a99f7df649298454bbead16ca5e0ee1f2fa8
MD5 6c742e48f1dc97c6f4e1ec2b4f028ab9
BLAKE2b-256 2bd1706974ae3ae44d52ccbf76a1a7558b7cde1fa6766abde7cef70f17b0ef4d

See more details on using hashes here.

Provenance

The following attestation bundles were made for vcti_shader_foundry-3.0.0-py3-none-any.whl:

Publisher: release.yml on vcollab/vcti-python-shader-foundry

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

3.0.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page