46 lines
1.5 KiB
Markdown
46 lines
1.5 KiB
Markdown
# spirv-reflect-zig
|
|
|
|
This is a small program meant to reflect out zig compatible data structures from compiled spirv modules.
|
|
You can use the program in standalone or use it as part of your build.zig build system.
|
|
|
|
|
|
## As part of a build system
|
|
|
|
```zig
|
|
var spirvCompile = SpirvGenerator.init(b, .{.target = target, .optimize = optimize, .repoPath = "src"});
|
|
var myShader = spirvCompile.shader("path/to/shader.glsl", "myShader");
|
|
|
|
...
|
|
|
|
myExe.addModule("myShaderTypes", myShader);
|
|
```
|
|
|
|
In your program you can now access all the types defined in the shader
|
|
from your zig program via a simple zig import
|
|
|
|
```zig
|
|
const myShaderTypes = @import("myShaderTypes");
|
|
const ImageRenderData = myShaderTypes.ImageRenderData; // ImageRenderData conforms to the data layout specified
|
|
const gl = myShaderTypes.gl; // glsl base types are available through this node in the module
|
|
```
|
|
|
|
```zig
|
|
|
|
var mappedBuffer = SomeGpuApi.mapBuffer(...);
|
|
|
|
var typedBuffer = @ptrCast([*]ImageRenderData, mappedBuffer);
|
|
typedBuffer[0] = .{.someXYField = gl.vec2{.x = 42, .y = 42} };
|
|
|
|
```
|
|
|
|
|
|
## As a standalone CLI
|
|
|
|
You can generate the standalone CLI from this folder by calling `zig build install`.
|
|
|
|
This will create `spirv-reflect-zig` in `zig-out/bin`. This will be able to reflect the
|
|
contents of a json file generated by `spirv-cross --reflect` into a .zig file
|
|
|
|
`spirv-cross myshader.glsl --reflect --output myshader.json &&\
|
|
spirv-reflect-zig myshader.json -o myshader.zig`
|