SlangShaderSharp 2026.3.0
dotnet add package SlangShaderSharp --version 2026.3.0
NuGet\Install-Package SlangShaderSharp -Version 2026.3.0
<PackageReference Include="SlangShaderSharp" Version="2026.3.0" />
<PackageVersion Include="SlangShaderSharp" Version="2026.3.0" />
<PackageReference Include="SlangShaderSharp" />
paket add SlangShaderSharp --version 2026.3.0
#r "nuget: SlangShaderSharp, 2026.3.0"
#:package SlangShaderSharp@2026.3.0
#addin nuget:?package=SlangShaderSharp&version=2026.3.0
#tool nuget:?package=SlangShaderSharp&version=2026.3.0
SlangShaderSharp
An in-development C# binding for the Slang shading language that targets .NET 8+ built on-top of Source Generated COM Wrappers.
Now available on NuGet: https://www.nuget.org/packages/SlangShaderSharp/
Most bindings have been implemented, but not fully tested. If you discover a missing or broken binding, please raise an issue on GitHub.
Versioning
The versioning of this library follows the versioning of the underlying Slang library where the Revision part is used to indicate changes in the bindings.
For Example:
SlangShaderSharp 2025.21.2.0 corresponds to Slang library version 2025.21.2.
SlangShaderSharp 2025.21.2.1 corresponds to Slang library version 2025.21.2 with changes in the bindings only.
Usage
Loading a Module and Getting WGSL Code for a Compute Shader
// 1. Create Global Session
Slang.CreateGlobalSession(Slang.ApiVersion, out var globalSession).Succeeded.ShouldBeTrue();
// 2. Create Session
var sessionDesc = new SessionDesc
{
Targets = [new TargetDesc { Format = SlangCompileTarget.Wgsl }],
// Slang supports using the preprocessor.
PreprocessorMacros = [
new PreprocessorMacroDesc("BIAS_VALUE", "1138"),
new PreprocessorMacroDesc("OTHER_MACRO", "float")
],
};
globalSession.CreateSession(sessionDesc, out var session).Succeeded.ShouldBeTrue();
// 3. Load module
var module = session.LoadModuleFromSource("test", "test.slang", Slang.CreateBlob("""
StructuredBuffer<float> buffer0;
StructuredBuffer<float> buffer1;
RWStructuredBuffer<float> result;
[shader("compute")]
[numthreads(1,1,1)]
void computeMain(uint3 threadId : SV_DispatchThreadID)
{
uint index = threadId.x;
result[index] = buffer0[index] + buffer1[index];
}
"""u8), out var moduleLoadError);
module.ShouldNotBeNull(moduleLoadError?.AsString ?? "Unknown Error");
// 4. Query Entry Points
module.FindEntryPointByName("computeMain", out var entryPoint).Succeeded.ShouldBeTrue();
// 5. Compose Modules + Entry Points
session.CreateCompositeComponentType([module, entryPoint], out var composedProgram, out _).Succeeded.ShouldBeTrue();
// 6. Link
composedProgram.Link(out _, out var linkError).Succeeded.ShouldBeTrue(linkError?.AsString ?? "Unknown Error");
// 7. Get Target Kernel Code
composedProgram.GetEntryPointCode(0, 0, out var wgslCode, out _).Succeeded.ShouldBeTrue();
// Output
_ = wgslCode.AsString;
// Done
Slang.Shutdown();
Extensions
ISlangBlob
ReadOnlySpan<byte> Buffer- View the blob data as a safe read-only span.string AsString- Converts the blob data to a UTF-8 string.
Updating Bindings
Eventually this should be moved to a GitHub Action.
- Update
update_slang.ps1to point towards the desired Slang version. - Run
update_slang.ps1. - Adjust any bindings as needed to incorporate any changes in the header files (diff compare the header files to make this easy!)
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
-
net8.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.