From 856c98c4c197ca8fd999da05617a8b538fdf2d42 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Tue, 15 Mar 2022 21:14:57 -0700 Subject: [PATCH] gpu: implement Texture.createView Signed-off-by: Stephen Gutekanst --- gpu/src/NativeInstance.zig | 19 +++++++++++++++++++ gpu/src/Texture.zig | 7 +++++-- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index bebfedb1..df81751b 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -786,6 +786,25 @@ const texture_vtable = Texture.VTable{ c.wgpuTextureDestroy(@ptrCast(c.WGPUTexture, ptr)); } }).destroy, + .createView = (struct { + pub fn createView(ptr: *anyopaque, descriptor: *const TextureView.Descriptor) TextureView { + const desc = c.WGPUTextureViewDescriptor{ + .nextInChain = null, + .label = if (descriptor.label) |l| l else "", + .format = @enumToInt(descriptor.format), + .dimension = @enumToInt(descriptor.dimension), + .baseMipLevel = descriptor.base_mip_level, + .mipLevelCount = descriptor.mip_level_count, + .baseArrayLayer = descriptor.base_array_layer, + .arrayLayerCount = descriptor.array_layer_count, + .aspect = @enumToInt(descriptor.aspect), + }; + return wrapTextureView(c.wgpuTextureCreateView( + @ptrCast(c.WGPUTexture, ptr), + &desc, + )); + } + }).createView, }; fn wrapSampler(sampler: c.WGPUSampler) Sampler { diff --git a/gpu/src/Texture.zig b/gpu/src/Texture.zig index 3663549b..b010102c 100644 --- a/gpu/src/Texture.zig +++ b/gpu/src/Texture.zig @@ -12,10 +12,9 @@ vtable: *const VTable, pub const VTable = struct { reference: fn (ptr: *anyopaque) void, release: fn (ptr: *anyopaque) void, - // TODO: - // WGPU_EXPORT WGPUTextureView wgpuTextureCreateView(WGPUTexture texture, WGPUTextureViewDescriptor const * descriptor); destroy: fn (ptr: *anyopaque) void, setLabel: fn (ptr: *anyopaque, label: [:0]const u8) void, + createView: fn (ptr: *anyopaque, descriptor: *const TextureView.Descriptor) TextureView, }; pub inline fn reference(texture: Texture) void { @@ -34,6 +33,10 @@ pub inline fn destroy(texture: Texture) void { texture.vtable.destroy(texture.ptr); } +pub inline fn createView(texture: Texture, descriptor: *const TextureView.Descriptor) TextureView { + return texture.vtable.createView(texture.ptr, descriptor); +} + pub const Descriptor = struct { label: ?[*:0]const u8 = null, usage: Usage,