diff --git a/gpu/src/instance.zig b/gpu/src/instance.zig index 96fd43dd..3efe79f8 100644 --- a/gpu/src/instance.zig +++ b/gpu/src/instance.zig @@ -1,12 +1,7 @@ const ChainedStruct = @import("types.zig").ChainedStruct; -pub const Instance = enum(usize) { - _, +pub const Instance = *opaque {}; - // TODO: verify there is a use case for nullable value of this type. - pub const none: Instance = @intToEnum(Instance, 0); - - pub const Descriptor = extern struct { - next_in_chain: *const ChainedStruct, - }; +pub const InstanceDescriptor = extern struct { + next_in_chain: *const ChainedStruct, }; diff --git a/gpu/src/interface.zig b/gpu/src/interface.zig index fbdf8544..263c169b 100644 --- a/gpu/src/interface.zig +++ b/gpu/src/interface.zig @@ -1,8 +1,9 @@ const Instance = @import("instance.zig").Instance; +const InstanceDescriptor = @import("instance.zig").InstanceDescriptor; /// Verifies that a gpu.Interface implementation exposes the expected function declarations. pub fn Interface(comptime Impl: type) type { - assertDecl(Impl, "createInstance", fn (descriptor: *const Instance.Descriptor) callconv(.Inline) Instance); + assertDecl(Impl, "createInstance", fn (descriptor: *const InstanceDescriptor) callconv(.Inline) ?Instance); return Impl; } @@ -17,7 +18,7 @@ pub fn Export(comptime Impl: type) type { _ = Interface(Impl); // verify implementation is a valid interface return struct { // WGPU_EXPORT WGPUInstance wgpuCreateInstance(WGPUInstanceDescriptor const * descriptor); - export fn wgpuCreateInstance(descriptor: *const Instance.Descriptor) Instance { + export fn wgpuCreateInstance(descriptor: *const InstanceDescriptor) ?Instance { return Impl.createInstance(descriptor); } }; @@ -25,9 +26,9 @@ pub fn Export(comptime Impl: type) type { /// A no-operation gpu.Interface implementation. pub const NullInterface = Interface(struct { - pub inline fn createInstance(descriptor: *const Instance.Descriptor) Instance { + pub inline fn createInstance(descriptor: *const InstanceDescriptor) ?Instance { _ = descriptor; - return Instance.none; + return null; } }); diff --git a/gpu/src/main.zig b/gpu/src/main.zig index 35ed0350..fd833ff5 100644 --- a/gpu/src/main.zig +++ b/gpu/src/main.zig @@ -19,7 +19,7 @@ pub const ComputePassEncoder = @import("compute_pass_encoder.zig").ComputePassEn pub const ComputePipeline = @import("compute_pipeline.zig").ComputePipeline; pub const Device = @import("device.zig").Device; pub const ExternalTexture = @import("external_texture.zig").ExternalTexture; -pub const Instance = @import("instance.zig").Instance; +pub usingnamespace @import("instance.zig"); pub const PipelineLayout = @import("pipeline_layout.zig").PipelineLayout; pub const QuerySet = @import("query_set.zig").QuerySet; pub const Queue = @import("queue.zig").Queue;