diff --git a/gpu/src/Device.zig b/gpu/src/Device.zig index 3c4e4b58..3b4fd057 100644 --- a/gpu/src/Device.zig +++ b/gpu/src/Device.zig @@ -21,6 +21,7 @@ const BindGroupLayout = @import("BindGroupLayout.zig"); const Buffer = @import("Buffer.zig"); const ExternalTexture = @import("ExternalTexture.zig"); const PipelineLayout = @import("PipelineLayout.zig"); +const QuerySet = @import("QuerySet.zig"); const Device = @This(); @@ -45,7 +46,7 @@ pub const VTable = struct { createErrorBuffer: fn (ptr: *anyopaque) Buffer, createExternalTexture: fn (ptr: *anyopaque, descriptor: *const ExternalTexture.Descriptor) ExternalTexture, createPipelineLayout: fn (ptr: *anyopaque, descriptor: *const PipelineLayout.Descriptor) PipelineLayout, - // createQuerySet: fn (ptr: *anyopaque, descriptor: *const QuerySet.Descriptor) QuerySet, + createQuerySet: fn (ptr: *anyopaque, descriptor: *const QuerySet.Descriptor) QuerySet, // createRenderBundleEncoder: fn (ptr: *anyopaque, descriptor: *const RenderBundleEncoder.Descriptor) RenderBundleEncoder, createRenderPipeline: fn (ptr: *anyopaque, descriptor: *const RenderPipeline.Descriptor) RenderPipeline, createRenderPipelineAsync: fn ( @@ -158,11 +159,9 @@ pub inline fn createPipelineLayout(device: Device, descriptor: *const PipelineLa return device.vtable.createPipelineLayout(device.ptr, descriptor); } -// pub inline fn createQuerySet(device: Device, descriptor: *const QuerySet.Descriptor) QuerySet { -// return device.vtable.createQuerySet(device.ptr, descriptor); -// } -// createQuerySet: fn (ptr: *anyopaque, descriptor: *const QuerySet.Descriptor) QuerySet, -// WGPU_EXPORT WGPUQuerySet wgpuDeviceCreateQuerySet(WGPUDevice device, WGPUQuerySetDescriptor const * descriptor); +pub inline fn createQuerySet(device: Device, descriptor: *const QuerySet.Descriptor) QuerySet { + return device.vtable.createQuerySet(device.ptr, descriptor); +} // pub inline fn createRenderBundleEncoder(device: Device, descriptor: *const RenderBundleEncoder.Descriptor) RenderBundleEncoder { // return device.vtable.createRenderBundleEncoder(device.ptr, descriptor); @@ -215,7 +214,7 @@ test { _ = createErrorBuffer; _ = createExternalTexture; _ = createPipelineLayout; - // _ = createQuerySet; + _ = createQuerySet; // _ = createRenderBundleEncoder; _ = createRenderPipeline; _ = createRenderPipelineAsync; diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index 04fd0369..49067690 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -549,12 +549,19 @@ const device_vtable = Device.VTable{ return wrapPipelineLayout(c.wgpuDeviceCreatePipelineLayout(@ptrCast(c.WGPUDevice, ptr), &desc)); } }).createPipelineLayout, - - // pub inline fn createQuerySet(device: Device, descriptor: *const QuerySet.Descriptor) QuerySet { - // return device.vtable.createQuerySet(device.ptr); - // } - // createQuerySet: fn (ptr: *anyopaque, descriptor: *const QuerySet.Descriptor) QuerySet, - // WGPU_EXPORT WGPUQuerySet wgpuDeviceCreateQuerySet(WGPUDevice device, WGPUQuerySetDescriptor const * descriptor); + .createQuerySet = (struct { + pub fn createQuerySet(ptr: *anyopaque, descriptor: *const QuerySet.Descriptor) QuerySet { + const desc = c.WGPUQuerySetDescriptor{ + .nextInChain = null, + .label = if (descriptor.label) |l| l else null, + .type = @enumToInt(descriptor.type), + .count = descriptor.count, + .pipelineStatistics = @ptrCast(*const c.WGPUPipelineStatisticName, &descriptor.pipeline_statistics[0]), + .pipelineStatisticsCount = @intCast(u32, descriptor.pipeline_statistics.len), + }; + return wrapQuerySet(c.wgpuDeviceCreateQuerySet(@ptrCast(c.WGPUDevice, ptr), &desc)); + } + }).createQuerySet, // pub inline fn createRenderBundleEncoder(device: Device, descriptor: *const RenderBundleEncoder.Descriptor) RenderBundleEncoder { // return device.vtable.createRenderBundleEncoder(device.ptr);