DirectX and HLSL Backend¶
The DirectX backend covers both CrossGL-to-HLSL generation and HLSL-to-CrossGL
import. It is selected through the directx, hlsl, or dx target and
source aliases, depending on whether the caller is emitting a target shader or
loading existing HLSL.
Pipeline¶
CrossGL output generation starts from the shared translator AST and is handled
by crosstl.translator.codegen.directx_codegen.HLSLCodeGen. The generator
normalizes stage names, validates resource declarations, maps CrossGL scalar,
vector, matrix, sampler, texture, image, and buffer types to HLSL, and emits
stage entry points such as VSMain, PSMain, and CSMain.
Reverse translation uses crosstl.backend.DirectX.DirectxLexer.HLSLLexer and
crosstl.backend.DirectX.DirectxParser.HLSLParser to parse HLSL into the
DirectX backend AST. crosstl.backend.DirectX.DirectxCrossGLCodeGen then
serializes that AST back into CrossGL syntax.
Supported Surface¶
The backend is the primary path for DirectX shader integration:
shader stages including vertex, fragment/pixel, compute, geometry, tessellation, mesh, amplification, and ray tracing stages
HLSL semantics such as
SV_POSITION,SV_Target,SV_VertexID, and resource-related system valuesconstant buffers, global resources, samplers, comparison samplers, texture operations, image atomics, and resource arrays
preprocessor directives and include handling through the HLSL preprocessor
HLSL-specific resource validation for duplicate constant-buffer names and resource/member shadowing
Implementation Notes¶
The generator keeps per-function resource context while rendering a function so
that texture, sampler, and implicit sampler arguments can be emitted in the
shape expected by HLSL. Stage helpers live in stage_utils and resource array
size inference lives in resource_arrays; keep backend-specific behavior in
the DirectX generator unless the rule is shared by multiple targets.
When extending this backend, add focused tests under the DirectX translator and backend test folders. Prefer documenting new public behavior on this page and API details in the relevant class or function docstrings.