Mojo Backend

The Mojo backend covers CrossGL-to-Mojo generation and Mojo source import. It is selected through the mojo target and source aliases.

Pipeline

CrossGL output generation is implemented by crosstl.translator.codegen.mojo_codegen.MojoCodeGen. The generator emits a Mojo-like shader module, maps CrossGL scalar and aggregate types to Mojo types, uses SIMD for vector storage, emits helper types for matrices, and generates constructor/swizzle helpers when an expression needs them.

Reverse translation uses crosstl.backend.Mojo.MojoLexer.MojoLexer and crosstl.backend.Mojo.MojoParser.MojoParser to parse Mojo source into the Mojo backend AST. crosstl.backend.Mojo.MojoCrossGLCodeGen then serializes that AST back into CrossGL syntax.

Supported Surface

The backend focuses on shader-like Mojo code:

  • imports, structs, classes, constant buffers, functions, decorators, constants, and globals

  • var/let-style declarations, assignments, loops, conditionals, switches, returns, and expression statements

  • SIMD vector forms, generated matrix helper structs, swizzles, vector constructors, and array literals

  • shader decorators for vertex, fragment, and compute entry points

  • fixed arrays through InlineArray and dynamic arrays through List

Implementation Notes

Mojo codegen carries helper-registration state because some CrossGL vector and matrix operations require generated support functions. Keep helper generation near MojoCodeGen so emitted code remains self-contained. Backend-neutral array or expression utilities should only be shared after another target needs the same behavior.