From a7667972a22de06ee64826571d334bc7c1eebb75 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Wed, 9 Mar 2022 23:37:32 -0700 Subject: [PATCH] gpu: implement QuerySet Signed-off-by: Stephen Gutekanst --- gpu/src/NativeInstance.zig | 22 ++++++++++++++++++++++ gpu/src/QuerySet.zig | 28 ++++++++++++++++++++++++++++ gpu/src/TODO | 6 ------ gpu/src/main.zig | 2 ++ 4 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 gpu/src/QuerySet.zig diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index ef7d8135..b7880f2a 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -27,6 +27,7 @@ const RenderPipeline = @import("RenderPipeline.zig"); const RenderPassEncoder = @import("RenderPassEncoder.zig"); const RenderBundleEncoder = @import("RenderBundleEncoder.zig"); const RenderBundle = @import("RenderBundle.zig"); +const QuerySet = @import("QuerySet.zig"); const TextureUsage = @import("enums.zig").TextureUsage; const TextureFormat = @import("enums.zig").TextureFormat; @@ -644,6 +645,26 @@ const render_bundle_vtable = RenderBundle.VTable{ }).release, }; +fn wrapQuerySet(qset: c.WGPUQuerySet) QuerySet { + return .{ + .ptr = qset.?, + .vtable = &query_set_vtable, + }; +} + +const query_set_vtable = QuerySet.VTable{ + .reference = (struct { + pub fn reference(ptr: *anyopaque) void { + c.wgpuQuerySetReference(@ptrCast(c.WGPUQuerySet, ptr)); + } + }).reference, + .release = (struct { + pub fn release(ptr: *anyopaque) void { + c.wgpuQuerySetRelease(@ptrCast(c.WGPUQuerySet, ptr)); + } + }).release, +}; + test "syntax" { _ = wrap; _ = interface_vtable; @@ -664,4 +685,5 @@ test "syntax" { _ = wrapRenderPassEncoder; _ = wrapRenderBundleEncoder; _ = wrapRenderBundle; + _ = wrapQuerySet; } diff --git a/gpu/src/QuerySet.zig b/gpu/src/QuerySet.zig new file mode 100644 index 00000000..c3a22741 --- /dev/null +++ b/gpu/src/QuerySet.zig @@ -0,0 +1,28 @@ +const QuerySet = @This(); + +/// The type erased pointer to the QuerySet implementation +/// Equal to c.WGPUQuerySet for NativeInstance. +ptr: *anyopaque, +vtable: *const VTable, + +pub const VTable = struct { + reference: fn (ptr: *anyopaque) void, + release: fn (ptr: *anyopaque) void, + // TODO: + // WGPU_EXPORT void wgpuQuerySetDestroy(WGPUQuerySet querySet); + // WGPU_EXPORT void wgpuQuerySetSetLabel(WGPUQuerySet querySet, char const * label); +}; + +pub inline fn reference(qset: QuerySet) void { + qset.vtable.reference(qset.ptr); +} + +pub inline fn release(qset: QuerySet) void { + qset.vtable.release(qset.ptr); +} + +test "syntax" { + _ = VTable; + _ = reference; + _ = release; +} diff --git a/gpu/src/TODO b/gpu/src/TODO index 21163fb9..cf8673b9 100644 --- a/gpu/src/TODO +++ b/gpu/src/TODO @@ -604,12 +604,6 @@ WGPU_EXPORT void wgpuPipelineLayoutSetLabel(WGPUPipelineLayout pipelineLayout, c WGPU_EXPORT void wgpuPipelineLayoutReference(WGPUPipelineLayout pipelineLayout); WGPU_EXPORT void wgpuPipelineLayoutRelease(WGPUPipelineLayout pipelineLayout); -// Methods of QuerySet -WGPU_EXPORT void wgpuQuerySetDestroy(WGPUQuerySet querySet); -WGPU_EXPORT void wgpuQuerySetSetLabel(WGPUQuerySet querySet, char const * label); -WGPU_EXPORT void wgpuQuerySetReference(WGPUQuerySet querySet); -WGPU_EXPORT void wgpuQuerySetRelease(WGPUQuerySet querySet); - typedef enum WGPUSType { // webgpu.h upstream: WGPUSType_Invalid = 0x00000000, diff --git a/gpu/src/main.zig b/gpu/src/main.zig index dd538015..6b3eba33 100644 --- a/gpu/src/main.zig +++ b/gpu/src/main.zig @@ -42,6 +42,7 @@ pub const RenderPipeline = @import("RenderPipeline.zig"); pub const RenderPassEncoder = @import("RenderPassEncoder.zig"); pub const RenderBundleEncoder = @import("RenderBundleEncoder.zig"); pub const RenderBundle = @import("RenderBundle.zig"); +pub const QuerySet = @import("QuerySet.zig"); pub const Feature = @import("enums.zig").Feature; pub const TextureUsage = @import("enums.zig").TextureUsage; @@ -108,6 +109,7 @@ test "syntax" { _ = RenderPassEncoder; _ = RenderBundleEncoder; _ = RenderBundle; + _ = QuerySet; _ = Feature; }