From f5e6976937b7ee5b2078c75d442d31f5becc8a19 Mon Sep 17 00:00:00 2001 From: Stephen Gutekanst Date: Fri, 11 Mar 2022 19:36:21 -0700 Subject: [PATCH] gpu: make ConstantEntry & ColorTargetState C ABI compatible Signed-off-by: Stephen Gutekanst --- gpu/src/NativeInstance.zig | 16 ++++++++-------- gpu/src/structs.zig | 6 ++++-- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/gpu/src/NativeInstance.zig b/gpu/src/NativeInstance.zig index 9182fa5e..cfe8a5c2 100644 --- a/gpu/src/NativeInstance.zig +++ b/gpu/src/NativeInstance.zig @@ -411,10 +411,10 @@ inline fn convertRenderPipelineDescriptor( .nextInChain = null, .module = @ptrCast(c.WGPUShaderModule, d.fragment.module.ptr), .entryPoint = d.vertex.entry_point, - .constantCount = 0, // d.fragment.constants.len, - .constants = null, // TODO: need to convert entire list to WGPUConstantEntry - .targetCount = 0, // d.fragment.targets.len, - .targets = null, // TODO: need to convert entire list to WGPUColorTargetState + .constantCount = @intCast(u32, d.fragment.constants.len), + .constants = @ptrCast(*const c.WGPUConstantEntry, &d.fragment.constants[0]), + .targetCount = @intCast(u32, d.fragment.targets.len), + .targets = @ptrCast(*const c.WGPUColorTargetState, &d.fragment.targets[0]), }; return c.WGPURenderPipelineDescriptor{ @@ -425,10 +425,10 @@ inline fn convertRenderPipelineDescriptor( .nextInChain = null, .module = @ptrCast(c.WGPUShaderModule, d.vertex.module.ptr), .entryPoint = d.vertex.entry_point, - .constantCount = 0, // d.vertex.constants.len, - .constants = null, // TODO: need to convert entire list to WGPUConstantEntry - .bufferCount = 0, // d.vertex.buffers.len - .buffers = null, // TODO: need to convert entire list to WGPUVertexBufferLayout + .constantCount = @intCast(u32, d.vertex.constants.len), + .constants = @ptrCast(*const c.WGPUConstantEntry, &d.vertex.constants[0]), + .bufferCount = @intCast(u32, d.vertex.buffers.len), + .buffers = @ptrCast(*const c.WGPUVertexBufferLayout, &d.vertex.buffers[0]), }, .primitive = c.WGPUPrimitiveState{ .nextInChain = null, diff --git a/gpu/src/structs.zig b/gpu/src/structs.zig index b87dc625..cc88a0f9 100644 --- a/gpu/src/structs.zig +++ b/gpu/src/structs.zig @@ -69,7 +69,8 @@ pub const DepthStencilState = struct { }; // TODO: how does this map to browser API? -pub const ConstantEntry = struct { +pub const ConstantEntry = extern struct { + reserved: ?*anyopaque = null, key: [*:0]const u8, value: f64, }; @@ -129,7 +130,8 @@ pub const FragmentState = struct { targets: []const ColorTargetState, }; -pub const ColorTargetState = struct { +pub const ColorTargetState = extern struct { + reserved: ?*anyopaque = null, format: Texture.Format, blend: *const BlendState, write_mask: ColorWriteMask,