Class SlangFrontend
The Slang input frontend (issue #197's sibling, issue #198): accepts a .slang
source and produces ordinary .fx effect text for ShadowDusk's unchanged
faithful pipeline. ShadowDusk is a multi-input, multi-output shader compiler — input
languages (.fx, ShaderToy GLSL, Slang) are thin text frontends over ONE pipeline that
fans out to every supported runtime (MonoGame, KNI, FNA), OS (Windows, macOS, Linux), and
graphics backend (OpenGL, DX11, DX12, Vulkan) — and this frontend follows that shape
exactly.
How it works — no Slang toolchain, anywhere, ever (owner direction 2026-08-13,
superseding an earlier slangc-based route): Slang is a near-superset of HLSL — it keeps
HLSL's types, semantics, cbuffer/register, and function syntax — so the
supported input is HLSL-compatible Slang, and the shader body compiles through the
same DXC every .fx uses, with nothing new to ship. The frontend is pure managed text
transformation, so .slang input works everywhere the pipeline works, the
browser/WASM host included. Slang-only language features (module imports,
generics, interface conformances, extensions) are rejected loudly by
name (SD0600) — never silently miscompiled — which is the trade the project
chose, and matches the request as filed ("write slang, but still go through the normal
compilation pipe… features not supported in HLSL are likely also not supported in
MonoGame").
The technique block is synthesized. Slang has no technique/pass
concept, so entry points are declared the Slang way — [shader("vertex")] /
[shader("fragment")] attributes — and the frontend generates a one-pass technique
from them (both stages when both are present; pixel-only, the SpriteBatch shape, when only a
fragment entry exists). The attributes themselves are stripped from the body before compile
(fxc-lineage compilers reject them outside library targets). Shader-model selection follows
the ShaderToy frontend's measured convention: #if SM4 → vs/ps_4_0_level_9_1
(mgfxc's DirectX_11 floor), else vs/ps_3_0.
No route through this frontend is `mgfxc`-equivalent — `mgfxc` cannot read
Slang at all. The claim is simpler and stronger: the generated .fx compiles through
the same faithful pipeline as any other, to the same proven targets.
public static class SlangFrontend
- Inheritance
-
SlangFrontend
- Inherited Members
Fields
Extension
File extension the CLI auto-routes through this frontend.
public const string Extension = ".slang"
Field Value
Methods
ConvertToFx(string, SlangConvertOptions)
Converts HLSL-compatible Slang source to .fx effect text, or returns the loud
diagnostics (SD0600 for a Slang-only construct; SD0602–SD0604 for
entry-point problems). Pure text transformation — no toolchain, no process, no native.
public static Result<SlangFxConversion, ShaderError[]> ConvertToFx(string slangSource, SlangConvertOptions options)
Parameters
slangSourcestringThe Slang source text.
optionsSlangConvertOptionsConversion options; see SlangConvertOptions.