SPIR-Q

Crate Documentation

SPIR-Q is a light weight library for SPIR-V pipeline metadata query.

Why SPIR-Q?

Back in days of OpenGL, we have glGetActiveUniformsiv and other APIs to get pipeline metadata, so that we can determine the sizes, names, array strides and other information dynamically at runtime. However, the next-gen API, Vulkan, was deisgned not to support shader reflection so that the driver can be kept as thin as possible. SPIR-Q is an attempt to fill this gap.

SPIR-Q can be very useful for scenarios where we want some dynamic in pipeline construction, so that we don't have to refill those redundantly long VkXxxCreateInfos all the time. It can also be used to automate filler code generation at compile time.

It should be noted that SPIR-V is targeting at Vulkan so OpenCL binaries are not supported.

Usage

The project is approaching the finish line. Please refer to the attached examples:

Sample output are attached in the same directories as the code files.

To-do

We are looking forward to improve SPIR-Q with features specified in SPIR-V 1.4. E.g. we no longer need to scan through function implementations to see what variables are used by an entry point. But unfortunately we have been blocked by spirv_headers. SPIR-Q will follow up as soon as spirv-headers updates.

License

This project is licensed under either of

at your option.