Skip to content

SPIR-V shader translation for Veldrid, using SPIRV-Cross

License

Notifications You must be signed in to change notification settings

partyalarm/veldrid-spirv

 
 

Repository files navigation

Veldrid.SPIRV

NuGet

Veldrid.SPIRV is an extension library for Veldrid that provides support for loading SPIR-V bytecode for all Veldrid backends.

Usage

The easiest way to use Veldrid.SPIRV is through the extension methods it provides for the ResourceFactory type.

byte[] vertexShaderSpirvBytes = File.ReadAllBytes("myshader.vert.spv");
byte[] fragmentShaderSpirvBytes = File.ReadAllBytes("myshader.vert.spv");
Shader[] shaders = factory.CreateFromSpirv(
    new ShaderDescription(ShaderStages.Vertex, vertexShaderSpirvBytes, "main"),
    new ShaderDescription(ShaderStages.Fragment, vertexShaderSpirvBytes, "main"));
// Use "shaders" array to construct a Pipeline

You can also directly load GLSL source code and do the same as above. Behind the scenes, Veldrid.SPIRV will compile the GLSL to SPIR-V and then perform the cross-compile to the target language.

Specialization Constants

Although HLSL and OpenGL-style GLSL do not support SPIR-V Specialization Constants, you can use Veldrid.SPIRV to "specialize" the shader before the target source code is actually emitted. Set CrossCompileOptions.Specializations with an array of SpecializationConstant values to accomplish this.

libveldrid-spirv

Veldrid.SPIRV is implemented primarily as a native library, interfacing with SPIRV-Cross and shaderc. There are build scripts in the root of the repository which can be used to automatically build the native library for your platform.

Native build requirements:

  • CMake
  • Python

Pre-built binaries are bundled in the NuGet package for the following operating systems:

  • Windows x64
  • Windows x86
  • macOS x64
  • Linux x64
  • iOS arm64
  • Android arm64-v8a
  • Android armeabi-v7a

About

SPIR-V shader translation for Veldrid, using SPIRV-Cross

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C# 44.8%
  • CMake 24.3%
  • C++ 16.8%
  • GLSL 5.2%
  • PowerShell 3.5%
  • Python 2.6%
  • Other 2.8%