MCPcopy Index your code
hub / github.com/Traverse-Research/hassle-rs

github.com/Traverse-Research/hassle-rs @0.12.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.12.0 ↗ · + Follow
132 symbols 286 edges 16 files 12 documented · 9%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

🌤 hassle-rs

Actions Status Latest version Documentation Lines of code MIT Contributor Covenant

Banner

This crate provides an FFI layer and idiomatic rust wrappers for the new DirectXShaderCompiler library.

Usage

Add this to your Cargo.toml:

[dependencies]
hassle-rs = "0.12.0"

Then acquire dxcompiler.dll on Windows or libdxcompiler.so on Linux directly from AppVeyor, or compile it from source according to the instructions in the DirectXShaderCompiler GitHub repository and make sure it's in the executable environment. See our support table below for specific compatibility notes on non-Windows OSes.

DxcValidator also requires dxil.dll which can be grabbed from any recent DXC release: https://github.com/microsoft/DirectXShaderCompiler/releases/latest More info: https://www.wihlidal.com/blog/pipeline/2018-09-16-dxil-signing-post-compile/

Supported DXC versions on non-Windows

Outside of Windows (e.g. Unix) the emulated COM API needed its fair share of fixes to match the layout on Windows. This results in repetitive API breakage that is hard to detect from within hassle-rs: be sure to math the hassle-rs release below to a minimum DXC commit to prevent runtime failures outside of Windows!

Since hassle-rs DXC release Git commit
0.10.0 v1.7.2212 https://github.com/microsoft/DirectXShaderCompiler/commit/47f31378a9b51894b0465b33ac1d10ce6349a468
0.5.1 (if using intellisense) release-1.6.2012 https://github.com/microsoft/DirectXShaderCompiler/commit/2ade6f84d6b95bfd96eec1d6d15e3aa3b519d180

When compiling on MacOS with clang, or Linux with gcc, be sure to have at least https://github.com/microsoft/DirectXShaderCompiler/commit/af14220b45d3ce46e0bad51ce79655e41d07c478 (also included in release-1.6.2012).

Interesting DXC commits pertaining Unix support

These patches have had an effect on hassle-rs compatibility over time:

Usage examples

Compile HLSL into SPIR-V

let spirv = compile_hlsl(
    "shader_filename.hlsl",
    code,
    "copyCs",
    "cs_6_5",
    &vec!["-spirv"],
    &vec![
        ("MY_DEFINE", Some("Value")),
        ("OTHER_DEFINE", None)
    ],
);

Compile HLSL into DXIL and validate it

let dxil = compile_hlsl("test.cs.hlsl", test_cs, "main", "cs_6_5", args, &[]).unwrap();
let result = validate_dxil(&dxil); // Only a Windows machine in Developer Mode can run non-validated DXIL

if let Some(err) = result.err() {
    println!("validation failed: {}", err);
}

License

Licensed under MIT license (LICENSE or http://opensource.org/licenses/MIT)

Contributions

  • Graham Wihlidal
  • Tiago Carvalho
  • Marijn Suijten
  • Tomasz Stachowiak
  • Manon Oomen

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, shall be licensed as above, without any additional terms or conditions.

Contributions are always welcome; please look at the issue tracker to see what known improvements are documented.

Extension points exported contracts — how you extend this code

DxcIncludeHandler (Interface)
(no doc) [1 implementers]
src/wrapper.rs

Core symbols most depended-on inside this repo

result
called by 31
src/utils.rs
result_with_success
called by 13
src/utils.rs
to_wide
called by 12
src/utils.rs
is_err
called by 12
src/os.rs
consume
called by 7
src/fake_sign/modified_md5.rs
as_ref
called by 5
src/wrapper.rs
get_dxc_create_instance
called by 5
src/wrapper.rs
compile_hlsl
called by 4
src/utils.rs

Shape

Method 73
Function 29
Class 28
Enum 1
Interface 1

Languages

Rust100%

Modules by API surface

src/intellisense/wrapper.rs44 symbols
src/wrapper.rs43 symbols
src/utils.rs11 symbols
src/os.rs9 symbols
src/fake_sign/modified_md5.rs5 symbols
src/fake_sign/mod.rs5 symbols
examples/validate.rs4 symbols
examples/file-ast.rs4 symbols
examples/validate-fake-signing.rs3 symbols
src/ffi.rs1 symbols
examples/spirv.rs1 symbols
examples/intellisense-tu.rs1 symbols

For agents

$ claude mcp add hassle-rs \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact