2 个版本
| 0.1.1 | 2023 年 5 月 14 日 |
|---|---|
| 0.1.0 | 2023 年 5 月 13 日 |
#29 在 #wgsl
每月 38 次下载
用于 jit-spirv
25KB
452 行
JIT SPIR-V (实现)
jit-spirv-impl 实现 jit-spirv 的过程宏代码生成器。
使用方法
请参阅 jit-spirv 的文档 以获取使用方法。
许可证
本项目许可协议为以下之一:
- Apache 许可协议 2.0 版,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 https://open-source.org.cn/licenses/MIT)
任选其一。
lib.rs:
jit-spirv
第一个参数是包含文本着色器源代码的字符串切片。其他后续参数可以更精细地控制生成的代码以编译您的着色器。
源语言
jit-spirv 目前支持三种源语言
glsl: 着色器源代码为 GLSL(默认启用);hlsl: 着色器源代码为 HLSL(默认启用);wgsl: 着色器源代码为 WGSL。
当启用 wgsl 功能时,WebGPU 的实验性 WGSL 支持可用,但您必须使用夜间工具链进行编译。由于 naga 后端限制,大多数额外参数将无效,SPIR-V 中只生成第一个入口点。
着色器阶段
以下着色器阶段受支持
vert: 顶点着色器;tesc: 规划控制着色器(Hull 着色器);tese: 规划评估着色器(域着色器);geom: 几何着色器;frag: 片段着色器(像素着色器);comp: 计算着色器;mesh: (网格着色)网格着色器;task: (网格着色)任务着色器;rgen:(光线追踪) 光线生成着色器;rint:(光线追踪) 交点着色器;rahit:(光线追踪) 任意击中着色器;rchit:(光线追踪) 最近击中着色器;rmiss:(光线追踪) 失败着色器;rcall:(光线追踪) 可调用着色器;
指定入口函数
默认情况下,编译器会寻找名为 main 的入口点函数。您也可以显式指定入口函数名称
jit_spirv!(hlsl_source, hlsl, vert, entry="very_main");
优化优先级
决定您希望 SPIR-V 进行多少优化
min_size:优化为最小输出大小;max_perf:优化为最佳性能;no_debug:移除所有调试信息(如果您想反映 SPIR-V 并获取变量名称,请不要这样做)。
编译器定义
您也可以定义宏替换
jit_spirv!(glsl_source, vert,
D USE_LIGHTMAP,
D LIGHTMAP_COUNT="2");
您可以请求目标环境的特定版本
vulkan1_0对于 Vulkan 1.0(默认,支持 SPIR-V 1.0);vulkan1_1对于 Vulkan 1.1(支持 SPIR-V 1.3);vulkan1_2对于 Vulkan 1.2(支持 SPIR-V 1.5)。opengl4_5对于 OpenGL 4.5 核心配置文件。webgpu对于 WebGPU。
当然,一旦您开始使用宏,这基本上意味着您正在变得非常动态,这个小小的软件包可能不足以满足需求。那么,可能是一个建立自己的着色器编译管道的好时机!
描述符自动绑定
如果您因为工作太累而懒得指定描述符绑定点,可以开启 auto_bind
jit_spirv!(r#"
#version 450 core
uniform sampler2D limap;
uniform sampler2D emit_map;
void main() {}
"#, glsl, frag, auto_bind);
但是,如果您没有自动化反射工具来获取实际的绑定点,不建议使用此功能。
WebGPU 的 Flip-Y
如果您打算为 WebGPU 编译 WGSL,由于 WebGPU 和 Vulkan 之间 NDC(归一化设备坐标)的差异,naga 默认会反转 Y 轴。如果这种校正是不希望看到的,您可以通过 no_y_flip 来选择不进行反转。
依赖关系
~300–750KB
~18K SLoC