gpu: implement Device.createPipelineLayout
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
parent
cedf734e4e
commit
acb3049739
2 changed files with 31 additions and 12 deletions
|
|
@ -20,6 +20,7 @@ const BindGroup = @import("BindGroup.zig");
|
||||||
const BindGroupLayout = @import("BindGroupLayout.zig");
|
const BindGroupLayout = @import("BindGroupLayout.zig");
|
||||||
const Buffer = @import("Buffer.zig");
|
const Buffer = @import("Buffer.zig");
|
||||||
const ExternalTexture = @import("ExternalTexture.zig");
|
const ExternalTexture = @import("ExternalTexture.zig");
|
||||||
|
const PipelineLayout = @import("PipelineLayout.zig");
|
||||||
|
|
||||||
const Device = @This();
|
const Device = @This();
|
||||||
|
|
||||||
|
|
@ -43,7 +44,7 @@ pub const VTable = struct {
|
||||||
) void,
|
) void,
|
||||||
createErrorBuffer: fn (ptr: *anyopaque) Buffer,
|
createErrorBuffer: fn (ptr: *anyopaque) Buffer,
|
||||||
createExternalTexture: fn (ptr: *anyopaque, descriptor: *const ExternalTexture.Descriptor) ExternalTexture,
|
createExternalTexture: fn (ptr: *anyopaque, descriptor: *const ExternalTexture.Descriptor) ExternalTexture,
|
||||||
// createPipelineLayout: fn (ptr: *anyopaque, descriptor: *const PipelineLayout.Descriptor) PipelineLayout,
|
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,
|
// createRenderBundleEncoder: fn (ptr: *anyopaque, descriptor: *const RenderBundleEncoder.Descriptor) RenderBundleEncoder,
|
||||||
createRenderPipeline: fn (ptr: *anyopaque, descriptor: *const RenderPipeline.Descriptor) RenderPipeline,
|
createRenderPipeline: fn (ptr: *anyopaque, descriptor: *const RenderPipeline.Descriptor) RenderPipeline,
|
||||||
|
|
@ -153,11 +154,9 @@ pub inline fn createExternalTexture(device: Device, descriptor: *const ExternalT
|
||||||
return device.vtable.createExternalTexture(device.ptr, descriptor);
|
return device.vtable.createExternalTexture(device.ptr, descriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
// pub inline fn createPipelineLayout(device: Device, descriptor: *const PipelineLayout.Descriptor) PipelineLayout {
|
pub inline fn createPipelineLayout(device: Device, descriptor: *const PipelineLayout.Descriptor) PipelineLayout {
|
||||||
// return device.vtable.createPipelineLayout(device.ptr, descriptor);
|
return device.vtable.createPipelineLayout(device.ptr, descriptor);
|
||||||
// }
|
}
|
||||||
// createPipelineLayout: fn (ptr: *anyopaque, descriptor: *const PipelineLayout.Descriptor) PipelineLayout,
|
|
||||||
// WGPU_EXPORT WGPUPipelineLayout wgpuDeviceCreatePipelineLayout(WGPUDevice device, WGPUPipelineLayoutDescriptor const * descriptor);
|
|
||||||
|
|
||||||
// pub inline fn createQuerySet(device: Device, descriptor: *const QuerySet.Descriptor) QuerySet {
|
// pub inline fn createQuerySet(device: Device, descriptor: *const QuerySet.Descriptor) QuerySet {
|
||||||
// return device.vtable.createQuerySet(device.ptr, descriptor);
|
// return device.vtable.createQuerySet(device.ptr, descriptor);
|
||||||
|
|
@ -215,7 +214,7 @@ test {
|
||||||
_ = createComputePipelineAsync;
|
_ = createComputePipelineAsync;
|
||||||
_ = createErrorBuffer;
|
_ = createErrorBuffer;
|
||||||
_ = createExternalTexture;
|
_ = createExternalTexture;
|
||||||
// _ = createPipelineLayout;
|
_ = createPipelineLayout;
|
||||||
// _ = createQuerySet;
|
// _ = createQuerySet;
|
||||||
// _ = createRenderBundleEncoder;
|
// _ = createRenderBundleEncoder;
|
||||||
_ = createRenderPipeline;
|
_ = createRenderPipeline;
|
||||||
|
|
|
||||||
|
|
@ -523,12 +523,32 @@ const device_vtable = Device.VTable{
|
||||||
return wrapExternalTexture(c.wgpuDeviceCreateExternalTexture(@ptrCast(c.WGPUDevice, ptr), &desc));
|
return wrapExternalTexture(c.wgpuDeviceCreateExternalTexture(@ptrCast(c.WGPUDevice, ptr), &desc));
|
||||||
}
|
}
|
||||||
}).createExternalTexture,
|
}).createExternalTexture,
|
||||||
|
.createPipelineLayout = (struct {
|
||||||
|
pub fn createPipelineLayout(ptr: *anyopaque, descriptor: *const PipelineLayout.Descriptor) PipelineLayout {
|
||||||
|
var few_bind_group_layouts: [16]c.WGPUBindGroupLayout = undefined;
|
||||||
|
const bind_group_layouts = if (descriptor.bind_group_layouts.len <= 16) blk: {
|
||||||
|
for (descriptor.bind_group_layouts) |layout, i| {
|
||||||
|
few_bind_group_layouts[i] = @ptrCast(c.WGPUBindGroupLayout, layout.ptr);
|
||||||
|
}
|
||||||
|
break :blk few_bind_group_layouts[0..descriptor.bind_group_layouts.len];
|
||||||
|
} else blk: {
|
||||||
|
const mem = std.heap.page_allocator.alloc(c.WGPUBindGroupLayout, descriptor.bind_group_layouts.len) catch unreachable;
|
||||||
|
for (descriptor.bind_group_layouts) |layout, i| {
|
||||||
|
mem[i] = @ptrCast(c.WGPUBindGroupLayout, layout.ptr);
|
||||||
|
}
|
||||||
|
break :blk mem;
|
||||||
|
};
|
||||||
|
defer if (descriptor.bind_group_layouts.len > 16) std.heap.page_allocator.free(descriptor.bind_group_layouts);
|
||||||
|
|
||||||
// pub inline fn createPipelineLayout(device: Device, descriptor: *const PipelineLayout.Descriptor) PipelineLayout {
|
const desc = c.WGPUPipelineLayoutDescriptor{
|
||||||
// return device.vtable.createPipelineLayout(device.ptr);
|
.nextInChain = null,
|
||||||
// }
|
.label = if (descriptor.label) |l| l else null,
|
||||||
// createPipelineLayout: fn (ptr: *anyopaque, descriptor: *const PipelineLayout.Descriptor) PipelineLayout,
|
.bindGroupLayoutCount = @intCast(u32, bind_group_layouts.len),
|
||||||
// WGPU_EXPORT WGPUPipelineLayout wgpuDeviceCreatePipelineLayout(WGPUDevice device, WGPUPipelineLayoutDescriptor const * descriptor);
|
.bindGroupLayouts = &bind_group_layouts[0],
|
||||||
|
};
|
||||||
|
return wrapPipelineLayout(c.wgpuDeviceCreatePipelineLayout(@ptrCast(c.WGPUDevice, ptr), &desc));
|
||||||
|
}
|
||||||
|
}).createPipelineLayout,
|
||||||
|
|
||||||
// pub inline fn createQuerySet(device: Device, descriptor: *const QuerySet.Descriptor) QuerySet {
|
// pub inline fn createQuerySet(device: Device, descriptor: *const QuerySet.Descriptor) QuerySet {
|
||||||
// return device.vtable.createQuerySet(device.ptr);
|
// return device.vtable.createQuerySet(device.ptr);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue