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

Download history 8/week @ 2024-04-22 9/week @ 2024-04-29 15/week @ 2024-05-13 73/week @ 2024-05-20 82/week @ 2024-05-27 48/week @ 2024-06-03 56/week @ 2024-06-10 25/week @ 2024-06-17 35/week @ 2024-06-24 116/week @ 2024-07-01 46/week @ 2024-07-08 64/week @ 2024-07-15 203/week @ 2024-07-29 21/week @ 2024-08-05

每月292次下载
14 个库中使用了 (9 个直接使用)

MIT/Apache

94KB
2.5K SLoC

SPIR-Q

Crate Documentation

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.

请参阅附带的示例

  • walk:枚举所有描述符变量的偏移量、符号和类型。
  • inspect:使用您自己的检查器函数自定义着色器反射。
  • gallery:所有 GLSL 数据类型。

示例输出与代码文件在同一目录中。

许可证

本项目受以下任一许可证的许可

根据您的选择。

依赖项

~1.7–2.3MB
~49K SLoC