Vulkan SPIR-V Backend

The Vulkan SPIR-V backend covers CrossGL-to-SPIR-V text generation and Vulkan SPIR-V-style source import. It is selected through the canonical vulkan target/source name or the spirv and spv aliases.

Pipeline

CrossGL output generation is implemented by crosstl.translator.codegen.SPIRV_codegen.VulkanSPIRVCodeGen. The generator builds a SPIR-V module from the shared translator AST, assigns result ids, registers types, constants, variables, functions, entry points, capabilities, decorations, and ordered instruction sections.

Reverse translation uses crosstl.backend.SPIRV.VulkanLexer.VulkanLexer and crosstl.backend.SPIRV.VulkanParser.VulkanParser to parse Vulkan/SPIR-V style source into the Vulkan backend AST. crosstl.backend.SPIRV.VulkanCrossGLCodeGen then serializes that AST back into CrossGL syntax.

Supported Surface

The backend focuses on Vulkan shader module structure:

  • shader stages and execution models for vertex, fragment, compute, and related entry-point forms

  • SPIR-V type, pointer, array, image, sampler, sampled-image, and function type registration

  • descriptor sets, bindings, push constants, layouts, input/output variables, and storage classes

  • arithmetic, logical, selection, loop, function-call, texture, image, and resource-query instructions

  • deterministic module ordering for capabilities, extensions, imports, decorations, types, constants, globals, functions, and entry points

Implementation Notes

SPIR-V generation is stateful: ids, type caches, decorations, and control-flow blocks are all part of one module build. Keep module-level state transitions in VulkanSPIRVCodeGen and avoid sharing mutable SPIR-V state with text backends. Tests should assert both generated instructions and stable ordering when changing this backend.