From faacb7ced17f67f86381ba16ea4d74f16831e6b1 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Fri, 24 Oct 2025 17:57:28 +0200 Subject: [PATCH] adding serializer --- LICENSE | 2 +- README.md | 2 +- src/Deserializer.zig | 32 +++++++++++++++++++++++++++ src/FilesystemModuleResolver.zig | 20 +++++++++++++++++ src/Serializer.zig | 37 ++++++++++++++++++++++++++++++++ src/lib.zig | 3 +++ 6 files changed, 94 insertions(+), 2 deletions(-) create mode 100644 src/Deserializer.zig create mode 100644 src/FilesystemModuleResolver.zig create mode 100644 src/Serializer.zig diff --git a/LICENSE b/LICENSE index 42fa211..e6dd6fd 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 REMqb +Copyright (c) 2025 kbz_8 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index db951c6..67120b8 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# nzsl-zig \ No newline at end of file +# NZigSL diff --git a/src/Deserializer.zig b/src/Deserializer.zig new file mode 100644 index 0000000..c386c2c --- /dev/null +++ b/src/Deserializer.zig @@ -0,0 +1,32 @@ +const std = @import("std"); +const Module = @import("Module.zig"); +const cnzsl = @cImport({ + @cInclude("CNZSL/CNZSL.h"); +}); + +const Self = @This(); + +instance: *cnzsl.nzslDeserializer, + +pub fn init(data: []const u8) !Self { + const cdeserializer = cnzsl.nzslDeserializerCreate(@ptrCast(data), data.len) orelse return error.NullPointer; + return .{ + .instance = cdeserializer, + }; +} + +pub fn deinit(self: Self) void { + cnzsl.nzslDeserializerDestroy(@ptrCast(self.instance)); +} + +pub fn deserializeShader(self: Self) !Module { + const cmodule = cnzsl.nzslDeserializeShader(@ptrCast(self.instance)) orelse return error.NullPointer; + return .{ + .instance = @ptrCast(cmodule), + }; +} + +pub fn getLastError(self: Self) ![]const u8 { + const err = cnzsl.nzslDeserializerGetLastError(@ptrCast(self.instance)) orelse return error.NullPointer; + return std.mem.span(err); +} diff --git a/src/FilesystemModuleResolver.zig b/src/FilesystemModuleResolver.zig new file mode 100644 index 0000000..7fddb42 --- /dev/null +++ b/src/FilesystemModuleResolver.zig @@ -0,0 +1,20 @@ +const std = @import("std"); +const Module = @import("Module.zig"); +const cnzsl = @cImport({ + @cInclude("CNZSL/CNZSL.h"); +}); + +const Self = @This(); + +instance: *cnzsl.nzslFilesystemModuleResolver, + +pub fn init() !Self { + const cfmr = cnzsl.nzslFilesystemModuleResolverCreate() orelse error.NullPointer; + return .{ + .instance = cfmr, + }; +} + +pub fn deinit(self: Self) void { + cnzsl.nzslFilesystemModuleResolverDestroy(@ptrCast(self.instance)); +} diff --git a/src/Serializer.zig b/src/Serializer.zig new file mode 100644 index 0000000..b4e052f --- /dev/null +++ b/src/Serializer.zig @@ -0,0 +1,37 @@ +const std = @import("std"); +const Module = @import("Module.zig"); +const cnzsl = @cImport({ + @cInclude("CNZSL/CNZSL.h"); +}); + +const Self = @This(); + +instance: *cnzsl.nzslSerializer, + +pub fn init() !Self { + const cserializer = cnzsl.nzslSerializerCreate() orelse return error.NullPointer; + return .{ + .instance = cserializer, + }; +} + +pub fn deinit(self: Self) void { + cnzsl.nzslSerializerDestroy(self.instance); +} + +pub fn serializeShader(self: Self, module: Module) !void { + if (cnzsl.nzslSerializeShader(self.instance, @ptrCast(module.instance)) == 0) { + return error.FailedToSerializeShader; + } +} + +pub fn getData(self: Self) []const u8 { + var size: usize = undefined; + const code: [*c]const u8 = @ptrCast(cnzsl.nzslSerializerGetData(self.instance, &size)); + return code[0..size]; +} + +pub fn getLastError(self: Self) ![]const u8 { + const err = cnzsl.nzslSerializerGetLastError(@ptrCast(self.instance)) orelse return error.NullPointer; + return std.mem.span(err); +} diff --git a/src/lib.zig b/src/lib.zig index 662640a..0864af5 100644 --- a/src/lib.zig +++ b/src/lib.zig @@ -23,8 +23,11 @@ pub fn hashOption(str: [:0]const u8) !OptionHash { } pub const BackendParameters = @import("BackendParameters.zig"); +pub const Deserializer = @import("Deserializer.zig"); +pub const FilesystemModuleResolver = @import("FilesystemModuleResolver.zig"); pub const GlslWriter = @import("GlslWriter.zig"); pub const LangWriter = @import("LangWriter.zig"); pub const Module = @import("Module.zig"); pub const parser = @import("parser.zig"); +pub const Serializer = @import("Serializer.zig"); pub const SpirvWriter = @import("SpirvWriter.zig");