fixing example performance issues
Some checks failed
Build / build (push) Failing after 30s
Test / build (push) Failing after 54s

This commit is contained in:
2026-01-21 17:44:10 +01:00
parent 19687251b0
commit c175224a01
4 changed files with 28 additions and 23 deletions

2
.gitignore vendored
View File

@@ -2,3 +2,5 @@
zig-out/ zig-out/
.gdb_history .gdb_history
*.o *.o
vgcore*
callgrind*

View File

@@ -23,6 +23,11 @@ pub fn build(b: *std.Build) void {
// Zig example setup // Zig example setup
const sdl3 = b.lazyDependency("sdl3", .{
.target = target,
.optimize = optimize,
}) orelse return;
const example_exe = b.addExecutable(.{ const example_exe = b.addExecutable(.{
.name = "spirv_interpreter_example", .name = "spirv_interpreter_example",
.root_module = b.createModule(.{ .root_module = b.createModule(.{
@@ -31,17 +36,12 @@ pub fn build(b: *std.Build) void {
.optimize = optimize, .optimize = optimize,
.imports = &.{ .imports = &.{
.{ .name = "spv", .module = mod }, .{ .name = "spv", .module = mod },
.{ .name = "pretty", .module = pretty.module("pretty") }, .{ .name = "sdl3", .module = sdl3.module("sdl3") },
//.{ .name = "pretty", .module = pretty.module("pretty") },
}, },
}), }),
}); });
const sdl3 = b.lazyDependency("sdl3", .{
.target = target,
.optimize = optimize,
}) orelse return;
example_exe.root_module.addImport("sdl3", sdl3.module("sdl3"));
const example_install = b.addInstallArtifact(example_exe, .{}); const example_install = b.addInstallArtifact(example_exe, .{});
example_install.step.dependOn(&lib_install.step); example_install.step.dependOn(&lib_install.step);

View File

@@ -9,8 +9,11 @@ const screen_height = 480;
pub fn main() !void { pub fn main() !void {
{ {
var gpa: std.heap.DebugAllocator(.{}) = .init; //var gpa: std.heap.DebugAllocator(.{}) = .init;
defer _ = gpa.deinit(); //defer _ = gpa.deinit();
var gpa = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer gpa.deinit();
defer sdl3.shutdown(); defer sdl3.shutdown();
const init_flags = sdl3.InitFlags{ .video = true }; const init_flags = sdl3.InitFlags{ .video = true };
@@ -22,7 +25,7 @@ pub fn main() !void {
const allocator = gpa.allocator(); const allocator = gpa.allocator();
var module = try spv.Module.init(allocator, @ptrCast(@alignCast(shader_source))); var module = try spv.Module.init(allocator, @ptrCast(@alignCast(shader_source)), .{});
defer module.deinit(allocator); defer module.deinit(allocator);
const surface = try window.getSurface(); const surface = try window.getSurface();
@@ -72,10 +75,10 @@ pub fn main() !void {
try rt.readOutput(f32, output[0..], color); try rt.readOutput(f32, output[0..], color);
const rgba = surface.mapRgba( const rgba = surface.mapRgba(
@intFromFloat(output[0] * 255.0), @truncate(@as(u32, @intFromFloat(output[0] * 255.0))),
@intFromFloat(output[1] * 255.0), @truncate(@as(u32, @intFromFloat(output[1] * 255.0))),
@intFromFloat(output[2] * 255.0), @truncate(@as(u32, @intFromFloat(output[2] * 255.0))),
@intFromFloat(output[3] * 255.0), @truncate(@as(u32, @intFromFloat(output[3] * 255.0))),
); );
pixel_map[(y * surface.getWidth()) + x] = rgba.value; pixel_map[(y * surface.getWidth()) + x] = rgba.value;

View File

@@ -270,39 +270,39 @@ fn writeValue(self: *const Self, comptime T: type, input: []const T, value: *Res
inline else => return RuntimeError.InvalidValueType, inline else => return RuntimeError.InvalidValueType,
} }
}, },
.Vector4f32 => |vec| inline for (0..4) |i| switch (T) { .Vector4f32 => |*vec| inline for (0..4) |i| switch (T) {
f32 => vec[i] = input[i], f32 => vec[i] = input[i],
inline else => return RuntimeError.InvalidValueType, inline else => return RuntimeError.InvalidValueType,
}, },
.Vector3f32 => |vec| inline for (0..3) |i| switch (T) { .Vector3f32 => |*vec| inline for (0..3) |i| switch (T) {
f32 => vec[i] = input[i], f32 => vec[i] = input[i],
inline else => return RuntimeError.InvalidValueType, inline else => return RuntimeError.InvalidValueType,
}, },
.Vector2f32 => |vec| inline for (0..2) |i| switch (T) { .Vector2f32 => |*vec| inline for (0..2) |i| switch (T) {
f32 => vec[i] = input[i], f32 => vec[i] = input[i],
inline else => return RuntimeError.InvalidValueType, inline else => return RuntimeError.InvalidValueType,
}, },
.Vector4i32 => |vec| inline for (0..4) |i| switch (T) { .Vector4i32 => |*vec| inline for (0..4) |i| switch (T) {
i32 => vec[i] = input[i], i32 => vec[i] = input[i],
inline else => return RuntimeError.InvalidValueType, inline else => return RuntimeError.InvalidValueType,
}, },
.Vector3i32 => |vec| inline for (0..3) |i| switch (T) { .Vector3i32 => |*vec| inline for (0..3) |i| switch (T) {
i32 => vec[i] = input[i], i32 => vec[i] = input[i],
inline else => return RuntimeError.InvalidValueType, inline else => return RuntimeError.InvalidValueType,
}, },
.Vector2i32 => |vec| inline for (0..2) |i| switch (T) { .Vector2i32 => |*vec| inline for (0..2) |i| switch (T) {
i32 => vec[i] = input[i], i32 => vec[i] = input[i],
inline else => return RuntimeError.InvalidValueType, inline else => return RuntimeError.InvalidValueType,
}, },
.Vector4u32 => |vec| inline for (0..4) |i| switch (T) { .Vector4u32 => |*vec| inline for (0..4) |i| switch (T) {
u32 => vec[i] = input[i], u32 => vec[i] = input[i],
inline else => return RuntimeError.InvalidValueType, inline else => return RuntimeError.InvalidValueType,
}, },
.Vector3u32 => |vec| inline for (0..3) |i| switch (T) { .Vector3u32 => |*vec| inline for (0..3) |i| switch (T) {
u32 => vec[i] = input[i], u32 => vec[i] = input[i],
inline else => return RuntimeError.InvalidValueType, inline else => return RuntimeError.InvalidValueType,
}, },
.Vector2u32 => |vec| inline for (0..2) |i| switch (T) { .Vector2u32 => |*vec| inline for (0..2) |i| switch (T) {
u32 => vec[i] = input[i], u32 => vec[i] = input[i],
inline else => return RuntimeError.InvalidValueType, inline else => return RuntimeError.InvalidValueType,
}, },