Table of Contents

Class SlangFrontend

Namespace
ShadowDusk.Compiler.Slang
Assembly
ShadowDusk.Compiler.dll

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

string

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

slangSource string

The Slang source text.

options SlangConvertOptions

Conversion options; see SlangConvertOptions.

Returns

Result<SlangFxConversion, ShaderError[]>