diff --git a/gpu/src/Device.zig b/gpu/src/Device.zig index 0b540bfe..55e20284 100644 --- a/gpu/src/Device.zig +++ b/gpu/src/Device.zig @@ -24,6 +24,7 @@ const PipelineLayout = @import("PipelineLayout.zig"); const QuerySet = @import("QuerySet.zig"); const RenderBundleEncoder = @import("RenderBundleEncoder.zig"); const Sampler = @import("Sampler.zig"); +const Texture = @import("Texture.zig"); const Device = @This(); @@ -59,8 +60,7 @@ pub const VTable = struct { createSampler: fn (ptr: *anyopaque, descriptor: *const Sampler.Descriptor) Sampler, createShaderModule: fn (ptr: *anyopaque, descriptor: *const ShaderModule.Descriptor) ShaderModule, nativeCreateSwapChain: fn (ptr: *anyopaque, surface: ?Surface, descriptor: *const SwapChain.Descriptor) SwapChain, - // createTexture: fn (ptr: *anyopaque, descriptor: *const Texture.Descriptor) Texture, - // WGPU_EXPORT WGPUTexture wgpuDeviceCreateTexture(WGPUDevice device, WGPUTextureDescriptor const * descriptor); + createTexture: fn (ptr: *anyopaque, descriptor: *const Texture.Descriptor) Texture, destroy: fn (ptr: *anyopaque) void, // TODO: should features be exposed as static slice? // WGPU_EXPORT size_t wgpuDeviceEnumerateFeatures(WGPUDevice device, WGPUFeature * features); @@ -125,6 +125,10 @@ pub inline fn nativeCreateSwapChain(device: Device, surface: ?Surface, descripto return device.vtable.nativeCreateSwapChain(device.ptr, surface, descriptor); } +pub inline fn createTexture(device: Device, descriptor: *const Texture.Descriptor) Texture { + return device.vtable.createTexture(device.ptr, descriptor); +} + pub inline fn destroy(device: Device) void { device.vtable.destroy(device.ptr); } @@ -210,6 +214,7 @@ test { _ = createSampler; _ = createShaderModule; _ = nativeCreateSwapChain; + _ = createTexture; _ = destroy; _ = createBuffer; _ = createCommandEncoder; diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index bb809fa3..378ddabf 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -444,6 +444,14 @@ const device_vtable = Device.VTable{ )); } }).nativeCreateSwapChain, + .createTexture = (struct { + pub fn createTexture(ptr: *anyopaque, descriptor: *const Texture.Descriptor) Texture { + return wrapTexture(c.wgpuDeviceCreateTexture( + @ptrCast(c.WGPUDevice, ptr), + @ptrCast(*const c.WGPUTextureDescriptor, descriptor), + )); + } + }).createTexture, .destroy = (struct { pub fn destroy(ptr: *anyopaque) void { c.wgpuDeviceDestroy(@ptrCast(c.WGPUDevice, ptr)); diff --git a/gpu/src/Texture.zig b/gpu/src/Texture.zig index 1bfc29c8..13bf6d2b 100644 --- a/gpu/src/Texture.zig +++ b/gpu/src/Texture.zig @@ -38,6 +38,7 @@ pub inline fn createView(texture: Texture, descriptor: *const TextureView.Descri } pub const Descriptor = struct { + reserved: ?*anyopaque = null, label: ?[*:0]const u8 = null, usage: Usage, dimension: Dimension,