diff --git a/lib/spirv-reflect-zig/.gitignore b/lib/spirv-reflect-zig/.gitignore
deleted file mode 100644
index e73c965..0000000
--- a/lib/spirv-reflect-zig/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-zig-cache/
-zig-out/
diff --git a/lib/spirv-reflect-zig/LICENSE b/lib/spirv-reflect-zig/LICENSE
deleted file mode 100644
index 33fa315..0000000
--- a/lib/spirv-reflect-zig/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) peterino2@github.com
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/lib/spirv-reflect-zig/README.md b/lib/spirv-reflect-zig/README.md
deleted file mode 100644
index 9ba34b6..0000000
--- a/lib/spirv-reflect-zig/README.md
+++ /dev/null
@@ -1,45 +0,0 @@
-# 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`
diff --git a/lib/spirv-reflect-zig/build.zig b/lib/spirv-reflect-zig/build.zig
deleted file mode 100644
index 71ec234..0000000
--- a/lib/spirv-reflect-zig/build.zig
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright (c) peterino2@github.com
-
-const std = @import("std");
-const Build = std.Build;
-const LazyPath = Build.LazyPath;
-
-// 1. for each vertex/fragment shader file invoke
-// glslc --target-env=vulkan1.2 -o .spv
-//
-// 2. for each generated .spv file i want to invoke
-// spirv-cross --reflect .spv --output .json
-//
-// 3. compile the reflect program, and invoke it on the json file.
-// spirv-reflect-zig .json
-//
-// .zig
-
-pub const SpirvGenerator2 = struct {
- b: *Build,
- spirv_build: *Build,
- glslTypes: *Build.Module,
-
- reflect: *Build.Step.Compile,
-
- const BuildOptions = struct {
- importName: []const u8 = "SpirvReflect",
- optimize: std.builtin.OptimizeMode = .Debug,
- };
-
- fn initFromBuilder(b: *Build, spirv_build: *Build, opts: BuildOptions) SpirvGenerator2 {
- const reflect = spirv_build.addExecutable(.{
- .name = "spirv-reflect-zig",
- .root_source_file = spirv_build.path("src/main.zig"),
- .target = spirv_build.graph.host,
- .optimize = opts.optimize,
- });
-
- const dep = spirv_build.dependency("glslTypes", .{
- .target = spirv_build.graph.host,
- .optimize = opts.optimize,
- });
-
- return .{
- .b = b,
- .spirv_build = spirv_build,
- .reflect = reflect,
- .glslTypes = dep.module("glslTypes"),
- };
- }
-
- pub fn init(b: *Build, opts: BuildOptions) SpirvGenerator2 {
- const dep = b.dependency(opts.importName, .{});
- return initFromBuilder(b, dep.builder, opts);
- }
-
- pub fn createShader(
- self: SpirvGenerator2,
- shaderPath: Build.LazyPath,
- shaderName: []const u8,
- ) struct { mod: *Build.Module, spvArtifactInstall: *Build.Step } {
- const importSpv = self.b.fmt("{s}.spv", .{shaderName});
- const finalSpv = self.b.fmt("shaders/{s}.spv", .{shaderName});
- const finalJson = self.b.fmt("shaders/{s}.json", .{shaderName});
- const finalZig = self.b.fmt("reflectedTypes/{s}.zig", .{shaderName});
-
- const shaderCompile = self.b.addSystemCommand(&[_][]const u8{"glslc"});
- shaderCompile.addFileArg(shaderPath);
- shaderCompile.addArg("--target-env=vulkan1.2");
- shaderCompile.addArg("-o");
- const spvOutputFile = shaderCompile.addOutputFileArg(finalSpv);
-
- const spvOutputArtifact = self.b.addInstallFile(spvOutputFile, finalSpv);
-
- const jsonReflectStep = self.spirv_build.addSystemCommand(&[_][]const u8{"spirv-cross"});
- jsonReflectStep.addFileArg(spvOutputFile);
- jsonReflectStep.addArg("--reflect");
- jsonReflectStep.addArg("--output");
- const outputJson = jsonReflectStep.addOutputFileArg(finalJson);
-
- const run_cmd = self.b.addRunArtifact(self.reflect);
- run_cmd.addFileArg(outputJson);
- run_cmd.addArg("-e");
- run_cmd.addArg(importSpv);
- run_cmd.addArg("-o");
- const outputZigFile = run_cmd.addOutputFileArg(finalZig);
-
- const module = self.spirv_build.createModule(.{
- .root_source_file = outputZigFile,
- });
-
- module.addAnonymousImport(importSpv, .{
- .root_source_file = spvOutputFile,
- });
-
- module.addImport("glslTypes", self.glslTypes);
-
- return .{ .mod = module, .spvArtifactInstall = &spvOutputArtifact.step };
- }
-
- // creates a shader and immediately adds it to the executable
- pub fn addShader(
- self: SpirvGenerator2,
- module: *Build.Module,
- shaderPath: LazyPath,
- shaderName: []const u8,
- ) void {
- const results = self.createShader(shaderPath, shaderName);
- module.addImport(shaderName, results.mod);
- }
-
- pub fn addShaderInstallRef(self: *SpirvGenerator2, exe: *Build.Step.Compile, shader_path: LazyPath, shader_name: []const u8) void {
- const results = self.createShader(shader_path, shader_name);
- exe.step.dependOn(results.spvArtifactInstall);
- }
-};
-
-pub fn build(b: *std.Build) void {
- const optimize = b.standardOptimizeOption(.{});
- const target = b.standardTargetOptions(.{});
- const static_build = b.option(bool, "static_build", "builds backlog dependencies for static linking") orelse false;
- _ = static_build;
-
- const test_step = b.step("test", "");
- const tests = b.addTest(.{
- .target = target,
- .optimize = optimize,
- .root_source_file = b.path("src/test.zig"),
- .link_libc = true,
- });
-
- const runArtifact = b.addRunArtifact(tests);
- test_step.dependOn(&runArtifact.step);
-}
diff --git a/lib/spirv-reflect-zig/build.zig.zon b/lib/spirv-reflect-zig/build.zig.zon
deleted file mode 100644
index be0d2ad..0000000
--- a/lib/spirv-reflect-zig/build.zig.zon
+++ /dev/null
@@ -1,11 +0,0 @@
-.{
- .name = .SpirvReflect,
- .version = "0.0.0",
- .dependencies = .{
- .glslTypes = .{ .path = "glslTypes" },
- },
- .paths = .{
- "",
- },
- .fingerprint = 0x8bdf68352d7dc5fa,
-}
diff --git a/lib/spirv-reflect-zig/build_test/build.zig b/lib/spirv-reflect-zig/build_test/build.zig
deleted file mode 100644
index 1775706..0000000
--- a/lib/spirv-reflect-zig/build_test/build.zig
+++ /dev/null
@@ -1,25 +0,0 @@
-const std = @import("std");
-
-const SpirvReflect = @import("SpirvReflect");
-
-pub fn build(b: *std.Build) void {
- const target = b.standardTargetOptions(.{});
- const optimize = b.standardOptimizeOption(.{});
-
- const spirvGen = SpirvReflect.SpirvGenerator2.init(b, .{});
- b.installArtifact(spirvGen.reflect);
-
- const test_vk = spirvGen.createShader(.{ .path = "../shaders/test_vk.vert" }, "test_vk");
-
- const exe = b.addExecutable(.{
- .name = "example",
- .root_source_file = .{ .path = "main.zig" },
- .target = target,
- .optimize = optimize,
- });
-
- exe.root_module.addImport("test_vk", test_vk);
- spirvGen.addShader(&exe.root_module, "../shaders/test_vk.vert", "test_vk2");
-
- b.installArtifact(exe);
-}
diff --git a/lib/spirv-reflect-zig/build_test/build.zig.zon b/lib/spirv-reflect-zig/build_test/build.zig.zon
deleted file mode 100644
index 6f895b8..0000000
--- a/lib/spirv-reflect-zig/build_test/build.zig.zon
+++ /dev/null
@@ -1,12 +0,0 @@
-.{
- .name = "testing",
- .version = "0.0.0",
-
- .dependencies = .{
- .SpirvReflect = .{ .path = "../" },
- },
-
- .paths = .{
- "",
- },
-}
diff --git a/lib/spirv-reflect-zig/build_test/main.zig b/lib/spirv-reflect-zig/build_test/main.zig
deleted file mode 100644
index 86d8dcd..0000000
--- a/lib/spirv-reflect-zig/build_test/main.zig
+++ /dev/null
@@ -1,9 +0,0 @@
-const std = @import("std");
-const test_vk = @import("test_vk");
-const test_vk2 = @import("test_vk2");
-
-pub fn main() !void {
- std.debug.print("hello world {d}\n", .{@sizeOf(test_vk.ImageRenderData)});
- std.debug.print("hello world {d}\n", .{@sizeOf(test_vk2.ImageRenderData)});
- return;
-}
diff --git a/lib/spirv-reflect-zig/example.zig b/lib/spirv-reflect-zig/example.zig
deleted file mode 100644
index 2a31eca..0000000
--- a/lib/spirv-reflect-zig/example.zig
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (c) peterino2@github.com
-
-const std = @import("std");
-const test_vk = @import("test_vk");
-
-pub fn main() !void {
- const stdout_file = std.io.getStdOut().writer();
- var bw = std.io.bufferedWriter(stdout_file);
- const zout = bw.writer();
-
- try zout.print("\n\nHello World!\n\nThis is a sample program using reflected type info from\n", .{});
- try zout.print("the shader in `test_shaders/test_vk.vert`\n\n", .{});
- try zout.print("sizeOf {s} == {d}\n", .{ @typeName(test_vk.ImageRenderData), @sizeOf(test_vk.ImageRenderData) });
- try zout.print("The following fields, types and offsets are in {s}:\n", .{@typeName(test_vk.ImageRenderData)});
- for (test_vk.ImageRenderData.FieldDetails) |field| {
- try zout.print(" name={s}, offset={d}, size={d}\n", .{ field.name, field.offset, field.size });
- }
- try bw.flush();
-}
diff --git a/lib/spirv-reflect-zig/glslTypes/build.zig b/lib/spirv-reflect-zig/glslTypes/build.zig
deleted file mode 100644
index 8a22f3d..0000000
--- a/lib/spirv-reflect-zig/glslTypes/build.zig
+++ /dev/null
@@ -1,14 +0,0 @@
-const std = @import("std");
-
-pub fn build(b: *std.Build) void {
- const target = b.standardTargetOptions(.{});
- const optimize = b.standardOptimizeOption(.{});
-
- const mod = b.addModule("glslTypes", .{
- .target = target,
- .optimize = optimize,
- .root_source_file = b.path("glslTypes.zig"),
- });
-
- _ = mod;
-}
diff --git a/lib/spirv-reflect-zig/glslTypes/build.zig.zon b/lib/spirv-reflect-zig/glslTypes/build.zig.zon
deleted file mode 100644
index 93f0e49..0000000
--- a/lib/spirv-reflect-zig/glslTypes/build.zig.zon
+++ /dev/null
@@ -1,8 +0,0 @@
-.{
- .name = "glslTypes",
- .version = "0.0.0",
- .dependencies = .{},
- .paths = .{
- "",
- },
-}
diff --git a/lib/spirv-reflect-zig/glslTypes/glslTypes.zig b/lib/spirv-reflect-zig/glslTypes/glslTypes.zig
deleted file mode 100644
index b7ecc47..0000000
--- a/lib/spirv-reflect-zig/glslTypes/glslTypes.zig
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) peterino2@github.com
-
-const std = @import("std");
-
-pub const vec2 = extern struct {
- x: f32,
- y: f32,
-
- pub fn from(o: anytype) @This() {
- return .{
- .x = o.x,
- .y = o.y,
- };
- }
-};
-
-pub const int = i32;
-pub const uint = u32;
-
-pub const u8vec4 = [4]u8;
-
-pub const vec3 = extern struct {
- x: f32,
- y: f32,
- z: f32,
-
- pub fn from(o: anytype) @This() {
- return .{
- .x = o.x,
- .y = o.y,
- .z = o.z,
- .pad = 0,
- };
- }
-};
-
-pub const vec4 = extern struct {
- x: f32,
- y: f32,
- z: f32,
- w: f32,
-
- pub fn from(o: anytype) @This() {
- return .{
- .x = o.x,
- .y = o.y,
- .z = o.z,
- .w = o.w,
- };
- }
-};
-
-pub const mat4 = [4][4]f32;
-
-pub const float = f32;
-
-pub fn CheckFieldDetails(
- comptime T: type,
- comptime fieldName: []const u8,
- expectedOffset: usize,
- expectedSize: usize,
-) void {
- const offset = @offsetOf(T, fieldName);
- const size = @sizeOf(@TypeOf(@field(std.mem.zeroes(T), fieldName)));
- if (offset != expectedOffset) {
- const msg = std.fmt.comptimePrint(
- "Unexpected field offset, {s} was expected at offset {d} but found at offset {d}",
- .{ fieldName, expectedOffset, offset },
- );
- @compileError(msg);
- }
-
- if (size != expectedSize) {
- const msg = std.fmt.comptimePrint(
- "Unexpected field size, '{s}' was expected with size {d} but found at size {d}",
- .{ fieldName, expectedSize, size },
- );
- @compileError(msg);
- }
-}
-
-pub fn ValidateGeneratedStruct(comptime T: type) void {
- for (@field(T, "FieldDetails")) |detail| {
- CheckFieldDetails(T, detail.name, detail.offset, detail.size);
- }
-}
-
-pub const FieldDetail = struct {
- name: []const u8,
- size: usize,
- offset: usize,
-};
diff --git a/lib/spirv-reflect-zig/hlslTypes/build.zig b/lib/spirv-reflect-zig/hlslTypes/build.zig
deleted file mode 100644
index ef0ca5a..0000000
--- a/lib/spirv-reflect-zig/hlslTypes/build.zig
+++ /dev/null
@@ -1,14 +0,0 @@
-const std = @import("std");
-
-pub fn build(b: *std.Build) void {
- const target = b.standardTargetOptions(.{});
- const optimize = b.standardOptimizeOption(.{});
-
- const mod = b.addModule("glslTypes", .{
- .target = target,
- .optimize = optimize,
- .root_source_file = b.path("glslTypes.zig"),
- });
-
- _ = mod;
-}
diff --git a/lib/spirv-reflect-zig/hlslTypes/build.zig.zon b/lib/spirv-reflect-zig/hlslTypes/build.zig.zon
deleted file mode 100644
index c7f90be..0000000
--- a/lib/spirv-reflect-zig/hlslTypes/build.zig.zon
+++ /dev/null
@@ -1,8 +0,0 @@
-.{
- .name = "glslTypes",
- .version = "0.0.0",
- .dependencies = .{},
- .paths = .{
- "",
- },
-}
diff --git a/lib/spirv-reflect-zig/hlslTypes/glslTypes.zig b/lib/spirv-reflect-zig/hlslTypes/glslTypes.zig
deleted file mode 100644
index b7ecc47..0000000
--- a/lib/spirv-reflect-zig/hlslTypes/glslTypes.zig
+++ /dev/null
@@ -1,92 +0,0 @@
-// Copyright (c) peterino2@github.com
-
-const std = @import("std");
-
-pub const vec2 = extern struct {
- x: f32,
- y: f32,
-
- pub fn from(o: anytype) @This() {
- return .{
- .x = o.x,
- .y = o.y,
- };
- }
-};
-
-pub const int = i32;
-pub const uint = u32;
-
-pub const u8vec4 = [4]u8;
-
-pub const vec3 = extern struct {
- x: f32,
- y: f32,
- z: f32,
-
- pub fn from(o: anytype) @This() {
- return .{
- .x = o.x,
- .y = o.y,
- .z = o.z,
- .pad = 0,
- };
- }
-};
-
-pub const vec4 = extern struct {
- x: f32,
- y: f32,
- z: f32,
- w: f32,
-
- pub fn from(o: anytype) @This() {
- return .{
- .x = o.x,
- .y = o.y,
- .z = o.z,
- .w = o.w,
- };
- }
-};
-
-pub const mat4 = [4][4]f32;
-
-pub const float = f32;
-
-pub fn CheckFieldDetails(
- comptime T: type,
- comptime fieldName: []const u8,
- expectedOffset: usize,
- expectedSize: usize,
-) void {
- const offset = @offsetOf(T, fieldName);
- const size = @sizeOf(@TypeOf(@field(std.mem.zeroes(T), fieldName)));
- if (offset != expectedOffset) {
- const msg = std.fmt.comptimePrint(
- "Unexpected field offset, {s} was expected at offset {d} but found at offset {d}",
- .{ fieldName, expectedOffset, offset },
- );
- @compileError(msg);
- }
-
- if (size != expectedSize) {
- const msg = std.fmt.comptimePrint(
- "Unexpected field size, '{s}' was expected with size {d} but found at size {d}",
- .{ fieldName, expectedSize, size },
- );
- @compileError(msg);
- }
-}
-
-pub fn ValidateGeneratedStruct(comptime T: type) void {
- for (@field(T, "FieldDetails")) |detail| {
- CheckFieldDetails(T, detail.name, detail.offset, detail.size);
- }
-}
-
-pub const FieldDetail = struct {
- name: []const u8,
- size: usize,
- offset: usize,
-};
diff --git a/lib/spirv-reflect-zig/shaders/test_vk.vert b/lib/spirv-reflect-zig/shaders/test_vk.vert
deleted file mode 100644
index 59ae1a4..0000000
--- a/lib/spirv-reflect-zig/shaders/test_vk.vert
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) peterino2@github.com
-
-#version 460
-
-layout (location = 0) in vec3 vPosition;
-layout (location = 1) in vec3 vNormal;
-layout (location = 2) in vec4 vColor;
-layout (location = 3) in vec2 vTexCoord;
-
-layout (location = 0) out vec4 outColor;
-layout (location = 1) out vec2 texCoord;
-
-struct ImageRenderData {
- vec2 imagePosition;
- vec2 imageSize;
- vec2 anchorPoint;
- vec2 scale;
- float alpha;
- vec4 baseColor;
- float zLevel;
-};
-
-struct ImageRenderData2{
- ImageRenderData ird;
- float someFloat;
- vec2 someVec2;
-};
-
-layout(std140, set = 0, binding = 0) readonly buffer ImageBufferObjects {
- ImageRenderData2 objects[];
-} objectBuffer;
-
-layout (push_constant) uniform constants
-{
- vec2 extent;
-} PushConstants;
-
-void main()
-{
- vec2 imagePosition = objectBuffer.objects[gl_BaseInstance].ird.imagePosition;
- vec2 imageSize = objectBuffer.objects[gl_BaseInstance].ird.imageSize;
- vec2 anchor = objectBuffer.objects[gl_BaseInstance].ird.anchorPoint;
- vec2 scale = objectBuffer.objects[gl_BaseInstance].ird.scale;
- float alpha = objectBuffer.objects[gl_BaseInstance].ird.alpha;
- vec4 baseColor = objectBuffer.objects[gl_BaseInstance].ird.baseColor;
-
- vec2 finalSize = (imageSize / PushConstants.extent);
-
- vec2 finalPos = ((imagePosition / PushConstants.extent) * 2 - 1) - anchor * finalSize * scale;
-
- outColor = baseColor;
- gl_Position = vec4(
- finalPos.x + ( vPosition.x * finalSize.x ),
- finalPos.y + (-vPosition.y * finalSize.y ),
- vPosition.z, 1.0
- );
-
- texCoord = vec2(1 - vTexCoord.x, vTexCoord.y);
-}
-
diff --git a/lib/spirv-reflect-zig/src/ReflectedJsonInfo.zig b/lib/spirv-reflect-zig/src/ReflectedJsonInfo.zig
deleted file mode 100644
index e9af8cb..0000000
--- a/lib/spirv-reflect-zig/src/ReflectedJsonInfo.zig
+++ /dev/null
@@ -1,288 +0,0 @@
-// Copyright (c) peterino2@github.com
-
-const std = @import("std");
-
-arena: std.heap.ArenaAllocator,
-allocator: std.mem.Allocator,
-fileName: []const u8,
-
-typeIdNames: std.StringArrayHashMap([]const u8),
-reflectedTypes: std.StringArrayHashMap(ReflectedTypeInfo),
-
-// some runtime options
-opts: Options,
-
-const Options = struct {
- verbose: bool = false,
- embedFile: ?[]const u8 = null,
-};
-
-pub const ReflectedField = struct {
- name: []u8,
- typeName: []u8,
- size: usize,
- offset: usize,
-};
-
-pub const ReflectedTypeInfo = struct {
- name: []u8,
- fields: std.ArrayList(ReflectedField),
- size: usize,
-};
-
-pub fn err(_: @This(), comptime fmt: []const u8, args: anytype) void {
- std.debug.print("[ERROR ]:" ++ fmt ++ "\n", args);
-}
-
-pub fn warn(_: @This(), comptime fmt: []const u8, args: anytype) void {
- std.debug.print("[WARNING]:" ++ fmt ++ "\n", args);
-}
-
-pub fn logv(self: @This(), comptime fmt: []const u8, args: anytype) void {
- if (self.opts.verbose) {
- std.debug.print("[VERBOSE]:" ++ fmt ++ "\n", args);
- }
-}
-
-pub fn reflect(allocator: std.mem.Allocator, fileName: []const u8, opts: Options) !@This() {
- var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
- const arenaAlloc = arena.allocator();
- var self = @This(){
- .arena = arena,
- .allocator = arenaAlloc,
- .fileName = fileName,
- .typeIdNames = std.StringArrayHashMap([]const u8).init(arenaAlloc),
- .reflectedTypes = std.StringArrayHashMap(ReflectedTypeInfo).init(arenaAlloc),
- .opts = opts,
- };
-
- var file = try std.fs.cwd().openFile(fileName, .{});
- const fileContents = try file.readToEndAlloc(allocator, 10000000);
- defer allocator.free(fileContents);
-
- var tree = try std.json.parseFromSlice(std.json.Value, allocator, fileContents, .{});
- defer tree.deinit();
- //var tree = try parser.parseFromSlice(fileContents);
- var root = tree.value.object;
- //defer tree.deinit();
-
- if (root.get("types")) |maybe| {
- const typesRef = maybe.object;
- for (typesRef.keys(), typesRef.values()) |k, v| {
- const reflectedType = self.generateReflectedTypeInfo(v.object) catch |e| {
- if (e == error.DummyObject) {
- continue;
- } else {
- return e;
- }
- };
-
- try self.reflectedTypes.put(try dupeString(self.allocator, k), reflectedType);
- }
-
- try self.updateReflectedSizes();
- }
-
- if (root.get("ssbos")) |maybe| {
- const ssbos = maybe.array;
- for (ssbos.items) |ssboObject| {
- self.logv("ssbo {s}", .{ssboObject.object.get("name").?.string});
- }
- }
-
- return self;
-}
-
-fn dupeString(allocator: std.mem.Allocator, str: []const u8) ![]u8 {
- return try std.fmt.allocPrint(allocator, "{s}", .{str});
-}
-
-fn updateReflectedSize(self: *@This(), typeToUpdate: []const u8) void {
- var reflected = self.reflectedTypes.getPtr(typeToUpdate).?;
-
- if (reflected.size != 0)
- return;
-
- // get the last element
- if (reflected.fields.items.len > 0) {
- const lastField = reflected.fields.items[reflected.fields.items.len - 1];
- if (lastField.typeName[0] == '_') {
- self.updateReflectedSize(lastField.typeName);
- reflected.size = lastField.offset + self.reflectedTypes.get(lastField.typeName).?.size;
- } else {
- // TODO: apply some padding rules
- reflected.size = lastField.offset + lastField.size;
- }
- }
-}
-
-fn updateReflectedSizes(self: *@This()) !void {
- for (self.reflectedTypes.keys()) |key| {
- self.updateReflectedSize(key);
- }
-
- for (self.reflectedTypes.values()) |*v| {
- for (v.fields.items) |*field| {
- if (field.typeName[0] == '_') {
- field.size = self.reflectedTypes.get(field.typeName).?.size;
- }
- }
- }
-}
-fn generateReflectedTypeInfo(self: @This(), typeObject: std.json.ObjectMap) !ReflectedTypeInfo {
- var info = ReflectedTypeInfo{
- .fields = std.ArrayList(ReflectedField).init(self.allocator),
- .name = try dupeString(self.allocator, typeObject.get("name").?.string),
- .size = 0,
- };
-
- for (typeObject.get("members").?.array.items) |member| {
- var reflectedField = ReflectedField{
- .name = try dupeString(self.allocator, member.object.get("name").?.string),
- .typeName = try dupeString(self.allocator, member.object.get("type").?.string),
- .size = 0,
- .offset = 0,
- };
-
- if (member.object.get("offset")) |offset| {
- reflectedField.offset = @as(usize, @intCast(offset.integer));
- } else {
- return error.DummyObject;
- }
-
- // determine size
- //
- if (std.mem.eql(u8, reflectedField.typeName, "int"))
- reflectedField.size = 4;
-
- if (std.mem.eql(u8, reflectedField.typeName, "uint"))
- reflectedField.size = 4;
-
- if (std.mem.eql(u8, reflectedField.typeName, "vec2"))
- reflectedField.size = 8;
-
- if (std.mem.eql(u8, reflectedField.typeName, "vec4"))
- reflectedField.size = 16;
-
- if (std.mem.eql(u8, reflectedField.typeName, "float"))
- reflectedField.size = 4;
-
- if (std.mem.eql(u8, reflectedField.typeName, "mat4"))
- reflectedField.size = 64;
-
- if (std.mem.eql(u8, reflectedField.typeName, "vec3")) {
- self.warn("vec3 usage detected, this is poorly supported by many vendors", .{});
- reflectedField.size = 16;
- }
-
- if (std.mem.eql(u8, reflectedField.typeName, "u8vec4")) {
- reflectedField.size = 4;
- }
- try info.fields.append(reflectedField);
- }
-
- return info;
-}
-
-pub fn deinit(self: *@This()) void {
- self.arena.deinit();
-}
-
-pub fn render(self: *@This(), allocator: std.mem.Allocator) ![]u8 {
- var ostring = std.ArrayList(u8).init(allocator);
- defer ostring.deinit();
- var writer = ostring.writer();
-
- var validateChunk = std.ArrayList(u8).init(allocator);
- defer validateChunk.deinit();
- var validate = validateChunk.writer();
- try validate.writeAll("comptime {");
-
- // write the preamble
- try writer.writeAll("// This file is automatically generated\n");
- try writer.writeAll("const gl = @import(\"glslTypes\");\n\n");
- if (self.opts.embedFile) |embedFile| {
- // std.debug.print("embedFile = {s}\n", .{embedFile});
- try writer.print("pub const spirv_raw = @embedFile(\"{s}\");\n", .{embedFile});
- try writer.print("pub const spirv: *const[spirv_raw.len: 0] u8 align(4) = spirv_raw;\n", .{});
- try writer.print("pub fn spv() []const u32 {{ var p: []const u32 = undefined; p.ptr = @alignCast(@ptrCast(spirv.ptr)); p.len = spirv.len / 4; return p; }}", .{});
- // try writer.print("pub fn spv() []const u32 {{ " ++
- // "var p: []const u32; " ++
- // "p.ptr = @ptrCast(spirv.ptr);" ++
- // "p.len = spirv.len >> 2; return p; }} ", .{});
- // std.debug.print("{s}", .{ostring.items});
- }
- try writer.writeAll("const vec2 = gl.vec2;\n");
- try writer.writeAll("const vec3 = gl.vec3;\n");
- try writer.writeAll("const vec4 = gl.vec4;\n");
- try writer.writeAll("const mat4 = gl.mat4;\n");
- try writer.writeAll("const float = gl.float;\n");
- try writer.writeAll("const u8vec4 = gl.u8vec4;\n");
- try writer.writeAll("const uint = gl.uint;\n");
- try writer.writeAll("const int = gl.int;\n");
-
- for (self.reflectedTypes.values()) |reflected| {
- if (std.mem.eql(u8, reflected.name, "gl_PerVertex")) {
- continue;
- }
-
- var testChunk = std.ArrayList(u8).init(allocator);
- defer testChunk.deinit();
- var testChunkWriter = testChunk.writer();
-
- try validate.print("gl.ValidateGeneratedStruct({s});", .{reflected.name});
-
- try testChunkWriter.writeAll("\npub const FieldDetails: []const gl.FieldDetail = &.{\n");
-
- try writer.print("\npub const {s} = extern struct {{ \n", .{reflected.name});
- var currentOffset: usize = 0;
- var padCount: usize = 0;
- for (reflected.fields.items) |field| {
- const expected: usize = field.offset;
-
- try testChunkWriter.print(".{{ .name = \"{s}\", .offset = {d}, .size = {d} }},\n", .{ field.name, expected, field.size });
-
- if (currentOffset != expected) {
- if (currentOffset > expected) {
- self.err(
- "`{s}` has field `{s}` with invalid offsets. Expected to be at `{d}` but current offset is already `{d}`",
- .{
- reflected.name,
- field.name,
- expected,
- currentOffset,
- },
- );
- }
-
- try writer.print("pad{d}:[{d}]u8,\n", .{ padCount, expected - currentOffset });
- currentOffset += expected - currentOffset;
- padCount += 1;
- }
-
- if (field.typeName[0] != '_') {
- try writer.print("{s}: {s}, \n", .{ field.name, field.typeName });
- } else {
- const refTypeName = self.reflectedTypes.get(field.typeName).?.name;
- try writer.print("{s}: {s}, \n", .{ field.name, refTypeName });
- }
- currentOffset += field.size;
- }
-
- try testChunkWriter.writeAll("};\n");
-
- try writer.writeAll(testChunk.items);
- try writer.writeAll("};\n\n");
- }
-
- try validate.writeAll("}");
- try writer.writeAll(validateChunk.items);
-
- try ostring.append(0);
- var ast = try std.zig.Ast.parse(allocator, @as([:0]const u8, @ptrCast(ostring.items[0 .. ostring.items.len - 1])), .zig);
- std.debug.print("output={s}", .{ostring.items[0 .. ostring.items.len - 1]});
- defer ast.deinit(allocator);
- const out = try ast.render(allocator);
-
- return out;
-}
diff --git a/lib/spirv-reflect-zig/src/main.zig b/lib/spirv-reflect-zig/src/main.zig
deleted file mode 100644
index b4ef74a..0000000
--- a/lib/spirv-reflect-zig/src/main.zig
+++ /dev/null
@@ -1,153 +0,0 @@
-// Copyright (c) peterino2@github.com
-
-const std = @import("std");
-const ReflectedJsonInfo = @import("ReflectedJsonInfo.zig");
-
-const ProgramOptions = struct {
- outputFile: []u8,
- verbose: bool = false,
- sourceFile: ?[]u8 = null,
- errorMsg: ?[]u8 = null,
- embedFile: ?[]u8 = null,
-
- pub fn deinit(self: @This(), allocator: std.mem.Allocator) void {
- allocator.free(self.outputFile);
- if (self.sourceFile) |src| {
- allocator.free(src);
- }
-
- if (self.errorMsg) |msg| {
- allocator.free(msg);
- }
-
- if (self.embedFile) |embedFile| {
- allocator.free(embedFile);
- }
- }
-};
-
-fn matchArgOpt(arg: []const u8, long: []const u8, short: ?[]const u8) bool {
- if (arg.len < 2) {
- return false;
- }
-
- if (arg[0] == '-') {
- if (arg[1] == '-') {
- return std.mem.eql(u8, arg[2..], long);
- } else if (short) |s| {
- return arg[1] == s[0];
- }
- }
-
- return false;
-}
-
-fn dupe(allocator: std.mem.Allocator, str: []const u8) ![]u8 {
- return try std.fmt.allocPrint(allocator, "{s}", .{str});
-}
-
-fn parseArgs(allocator: std.mem.Allocator) !ProgramOptions {
- const ParseState = enum {
- zero,
- default,
- output,
- embed,
- };
-
- var state: ParseState = .zero;
-
- var opts: ProgramOptions = .{
- .outputFile = try dupe(allocator, "reflected_spirv.zig"),
- };
- const args = try std.process.argsAlloc(allocator);
- defer std.process.argsFree(allocator, args);
-
- for (args) |arg| {
- switch (state) {
- .zero => {
- state = .default;
- },
- .default => {
- if (arg[0] == '-') {
- if (matchArgOpt(arg, "embed", "e"))
- state = .embed;
- if (matchArgOpt(arg, "output", "o"))
- state = .output;
- if (matchArgOpt(arg, "verbose", "v"))
- opts.verbose = true;
- } else {
- if (opts.sourceFile) |src| {
- allocator.free(src);
- opts.sourceFile = null;
- opts.errorMsg = try dupe(allocator, "Too many source files, this is not supported");
- return opts;
- }
- opts.sourceFile = try dupe(allocator, arg);
- }
- },
- .output => {
- allocator.free(opts.outputFile);
- opts.outputFile = try dupe(allocator, arg);
- state = .default;
- },
- .embed => {
- const embedFile = try dupe(allocator, arg);
-
- const replacements = std.mem.replace(u8, arg, "\\", "/", embedFile);
- _ = replacements;
-
- if (opts.embedFile != null)
- allocator.free(opts.embedFile.?);
-
- opts.embedFile = embedFile;
- state = .default;
- },
- }
- }
-
- return opts;
-}
-
-fn usage() void {
- std.debug.print("usage: spirv-reflect [-o or --output]