43 个版本 (9 个稳定版本)
1.2.2 | 2024年7月6日 |
---|---|
1.2.0 | 2024年3月23日 |
1.1.1 | 2023年12月26日 |
0.6.4 | 2023年6月1日 |
0.1.0 | 2019年12月28日 |
#31 in 图形 API
每月292次下载
在 14 个库中使用了 (9 个直接使用)
94KB
2.5K SLoC
SPIR-Q
SPIR-Q 是一个轻量级的 SPIR-V 管道元数据查询库,支持与 Vulkan 1.3 兼容的 SPIR-V 1.5 规范。
为什么是 SPIR-Q?
在 OpenGL 时代,我们已经有 glGetActiveUniformsiv
和其他 API 来获取管道元数据,以便在运行时动态地确定大小、名称、数组步长和其他信息。然而,下一代 API,Vulkan,设计时并未支持着色器反射,以便驱动程序尽可能保持瘦。SPIR-Q 就是尝试填补这一空白。
SPIR-Q 对于需要管道构建中的一些动态场景非常有用,这样我们就不必一直重新填充那些冗长的 VkXxxCreateInfo
。它也可以用于在编译时自动生成填充代码。
需要注意的是,SPIR-V 是针对 Vulkan 设计的,因此不支持 OpenCL 二进制文件。
用法
use spirq::*;
let entry_points = ReflectConfig::new()
// Load SPIR-V data into `[u32]` buffer `spv_words`.
.spv(spv_words)
// Set this true if you want to reflect all resources no matter it's
// used by an entry point or not.
.ref_all_rscs(true)
// Combine sampled image and separated sampler states if they are bound
// to the same binding point.
.combine_img_samplers(true)
// Generate unique names for types and struct fields to help further
// processing of the reflection data. Otherwise, the debug names are
// assigned.
.gen_unique_names(true)
// Specialize the constant at `SpecID=3` with unsigned integer 7. The
// constants specialized here won't be listed in the result entry point's
// variable list.
.specialize(3, ConstantValue::U32(7))
// Do the work.
.reflect()
.unwrap();
// All extracted entry point data are available in `entry_points` now.
请参阅附带的示例
示例输出与代码文件在同一目录中。
许可证
本项目受以下任一许可证的许可
- Apache 许可证 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- 麻省理工学院许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
根据您的选择。
依赖项
~1.7–2.3MB
~49K SLoC