Skip to content

FloatyMonkey/slang-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Slang Rust Bindings

Rust bindings for the Slang shader language. Supporting both the modern compilation and reflection API.

Currently mostly reflects the needs of our own engine but contributions are more than welcome.

Example

let global_session = slang::GlobalSession::new().unwrap();

let search_path = std::ffi::CString::new("shaders/directory").unwrap();

// All compiler options are available through this builder.
let session_options = slang::OptionsBuilder::new()
	.optimization(slang::OptimizationLevel::High)
	.matrix_layout_row(true);

let target_desc = slang::TargetDescBuilder::new()
	.format(slang::CompileTarget::Dxil)
	.profile(self.global_session.find_profile("sm_6_5"));

let session_desc = slang::SessionDescBuilder::new()
	.targets(&[*target_desc])
	.search_paths(&[search_path.as_ptr()])
	.options(&session_options);

let session = self.global_session.create_session(&session_desc).unwrap();

let module = session.load_module("filename.slang").unwrap();

let entry_point = module.find_entry_point_by_name("main").unwrap();

let program = session.create_composite_component_type(&[
	module.downcast().clone(), entry_point.downcast().clone(),
]).unwrap();

let linked_program = program.link().unwrap();

// Entry point to the reflection API.
let reflection = linked_program.layout(0).unwrap();

let shader_bytecode = linked_program.entry_point_code(0, 0).unwrap();

Installation

Add the following to the [dependencies] section of your Cargo.toml:

slang = { git = "https://github.com/FloatyMonkey/slang-rs.git" }

Set the SLANG_DIR environment variable to the path of your Slang installation. Download the latest release from their releases page. Copy slang.dll to your executable's directory.

To compile to DXIL bytecode you need the Microsoft DirectXShaderCompiler. Download the latest release from their releases page. Copy dxil.dll and dxcompiler.dll to your executable's directory.

Credits

Maintained by Lauro Oyen (@laurooyen).

Licensed under MIT or Apache-2.0.

About

Rust bindings for the Slang shader language.

Topics

Resources

License

Apache-2.0, MIT licenses found

Licenses found

Apache-2.0
LICENSE-APACHE
MIT
LICENSE-MIT

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages