From 8c48c3a436599e7ff315bd31c205f2cd932cb8c7 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 18 Mar 2022 17:37:26 -0700 Subject: [PATCH] gpu: implement Device.createQuerySet Signed-off-by: Stephen Gutekanst --- gpu/src/Device.zig | 13 ++++++------- gpu/src/NativeInstance.zig | 19 +++++++++++++------ 2 files changed, 19 insertions(+), 13 deletions(-) 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);