From def801d8a163e7ba81ec5fc069f70c7754d3b084 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 18 Mar 2022 17:43:29 -0700 Subject: [PATCH] gpu: implement Device.createRenderBundleEncoder Signed-off-by: Stephen Gutekanst --- gpu/src/Device.zig | 13 ++++++------- gpu/src/NativeInstance.zig | 22 +++++++++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/gpu/src/Device.zig b/gpu/src/Device.zig index 3b4fd057..17fef222 100644 --- a/gpu/src/Device.zig +++ b/gpu/src/Device.zig @@ -22,6 +22,7 @@ const Buffer = @import("Buffer.zig"); const ExternalTexture = @import("ExternalTexture.zig"); const PipelineLayout = @import("PipelineLayout.zig"); const QuerySet = @import("QuerySet.zig"); +const RenderBundleEncoder = @import("RenderBundleEncoder.zig"); const Device = @This(); @@ -47,7 +48,7 @@ pub const VTable = struct { 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, - // createRenderBundleEncoder: fn (ptr: *anyopaque, descriptor: *const RenderBundleEncoder.Descriptor) RenderBundleEncoder, + createRenderBundleEncoder: fn (ptr: *anyopaque, descriptor: *const RenderBundleEncoder.Descriptor) RenderBundleEncoder, createRenderPipeline: fn (ptr: *anyopaque, descriptor: *const RenderPipeline.Descriptor) RenderPipeline, createRenderPipelineAsync: fn ( ptr: *anyopaque, @@ -163,11 +164,9 @@ pub inline fn createQuerySet(device: Device, descriptor: *const QuerySet.Descrip 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); -// } -// createRenderBundleEncoder: fn (ptr: *anyopaque, descriptor: *const RenderBundleEncoder.Descriptor) RenderBundleEncoder, -// WGPU_EXPORT WGPURenderBundleEncoder wgpuDeviceCreateRenderBundleEncoder(WGPUDevice device, WGPURenderBundleEncoderDescriptor const * descriptor); +pub inline fn createRenderBundleEncoder(device: Device, descriptor: *const RenderBundleEncoder.Descriptor) RenderBundleEncoder { + return device.vtable.createRenderBundleEncoder(device.ptr, descriptor); +} pub inline fn createRenderPipeline(device: Device, descriptor: *const RenderPipeline.Descriptor) RenderPipeline { return device.vtable.createRenderPipeline(device.ptr, descriptor); @@ -215,7 +214,7 @@ test { _ = createExternalTexture; _ = createPipelineLayout; _ = createQuerySet; - // _ = createRenderBundleEncoder; + _ = createRenderBundleEncoder; _ = createRenderPipeline; _ = createRenderPipelineAsync; _ = tick; diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index 49067690..3de92d4f 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -562,13 +562,21 @@ const device_vtable = Device.VTable{ 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); - // } - // createRenderBundleEncoder: fn (ptr: *anyopaque, descriptor: *const RenderBundleEncoder.Descriptor) RenderBundleEncoder, - // WGPU_EXPORT WGPURenderBundleEncoder wgpuDeviceCreateRenderBundleEncoder(WGPUDevice device, WGPURenderBundleEncoderDescriptor const * descriptor); - + .createRenderBundleEncoder = (struct { + pub fn createRenderBundleEncoder(ptr: *anyopaque, descriptor: *const RenderBundleEncoder.Descriptor) RenderBundleEncoder { + const desc = c.WGPURenderBundleEncoderDescriptor{ + .nextInChain = null, + .label = if (descriptor.label) |l| l else null, + .colorFormatsCount = @intCast(u32, descriptor.color_formats.len), + .colorFormats = @ptrCast(*const c.WGPUTextureFormat, &descriptor.color_formats[0]), + .depthStencilFormat = @enumToInt(descriptor.depth_stencil_format), + .sampleCount = descriptor.sample_count, + .depthReadOnly = descriptor.depth_read_only, + .stencilReadOnly = descriptor.stencil_read_only, + }; + return wrapRenderBundleEncoder(c.wgpuDeviceCreateRenderBundleEncoder(@ptrCast(c.WGPUDevice, ptr), &desc)); + } + }).createRenderBundleEncoder, .createRenderPipeline = (struct { pub fn createRenderPipeline(ptr: *anyopaque, descriptor: *const RenderPipeline.Descriptor) RenderPipeline { var tmp_depth_stencil: c.WGPUDepthStencilState = undefined;