#spir-v #vulkan #glsl

rasen-dsl

Rust中编写SPIR-V着色器的Rasen编译器包装器

2个不稳定版本

使用旧的Rust 2015

0.2.0 2018年4月21日
0.1.0 2018年4月7日

#glsl中的第79

MIT许可

180KB
4K SLoC

rasen-dsl

rasen_dsl包提供了一组工具函数,可以将着色器编写为完全有效的Rust代码

extern crate rasen;
extern crate rasen_dsl;

use rasen_dsl::prelude::*;

fn main() {
    let shader = Module::new();

    let normal: Value<Vec3> = normalize(shader.input(0, "a_normal"));
    let light = vec3(0.3, -0.5, 0.2);
    let color = vec4(0.25, 0.625, 1.0, 1.0);

    let res = clamp(dot(normal, light), 0.1f32, 1.0f32) * color;
    shader.output(0, "o_color", res);

    let bytecode = shader.build(ShaderType::Fragment).unwrap();
    // bytecode is now a Vec<u8> you can pass to Vulkan to create the shader module
}

此包比Rasen编译器本身还要实验性,但它已经提供了编译器暴露的所有功能。

最终,DSL包的目标(除了作为图构建器的静态检查等价物外)是提供一个API来测试CPU上着色器的执行,以及该环境提供的所有调试工具。该库目前提供了所有转换原语,将您的标量/向量/矩阵转换为Value< _ >类型以测试您的程序,然而大多数GLSL操作尚未实现。

依赖项

~10MB
~218K SLoC