microZEUS
The whole stack, hand-drawn.Sheet 9/10 — mzVolk

Sheet 9/10 — Driver · Software Vulkan

mzVolk

A software implementation of Vulkan. No GPU required.

In development
LayerDriver · Software Vulkan
LanguageC99 · SSE
TargetsLinux x86_64 · Linux arm32 · Windows · macOS arm64 · macOS x86_64 (Rosetta) · mzOS2 (freestanding)
Depends onmzJIT
Used bymzVKI
OrganizationZeunO8
SourcePrivate alpha — opens with a change order on this site’s log

General notes

mzVolk implements the Vulkan graphics API entirely in software, in pure C99. It speaks the standard ICD (Installable Client Driver) interface, so the Vulkan loader discovers and loads it exactly like a hardware driver — but every stage of the pipeline, from command-buffer recording to pixels on screen, runs on the CPU.

A draw call flows through per-vertex shading (via mzJIT), primitive assembly, full-frustum clipping, perspective divide, and a depth-tested, perspective-correct scanline rasterizer with blending, scissor, face culling, and texture sampling through combined image samplers — plus an SSE path on x86_64 that shades four pixel lanes at a time through JIT-compiled fragment shaders, and optional parallel rasterization that splits the framebuffer into row bands across worker threads (MZV_THREADS), each with its own shader executor. Presentation lands via XPutImage on X11, GDI on Windows, or an IOSurface-pooled NSView on macOS (VK_MVK_macos_surface). Each test ships with a twin that runs the identical logic on the platform’s real driver for A/B validation.

The project kept an honest, public list of what was not implemented yet — and burned it down in public. The v0.4 → v0.60 release run cleared the entire rasterizer section item by item — depth and stencil testing, the full blend matrix, scissor and culling, perspective-correct interpolation, indexed and instanced draws with multi-binding, per-instance-rate vertex input, strip/fan/line/point topologies, descriptor-backed uniform buffers, full-frustum clipping — hardened the API layer with thread-safe serialized queue submission, honest fences, and loud failures, then crossed off the big ones: textures (samplers, cube maps, arrays, and formats sampled in JIT-compiled shaders), compute pipelines (dispatch, shared memory, storage images), and — the last honest-list item — multisampling, done end-to-end by supersampling and resolving through vkCmdResolveImage, with polygon fill/line/point modes alongside. The honest list, as of v0.60, is empty.

Bill of materials — what’s in the box