forked from mirror/vulkan-zig
update example with new proxying wrappers
This commit is contained in:
@@ -73,39 +73,39 @@ pub fn main() !void {
|
||||
var swapchain = try Swapchain.init(&gc, allocator, extent);
|
||||
defer swapchain.deinit();
|
||||
|
||||
const pipeline_layout = try gc.vkd.createPipelineLayout(gc.dev, &.{
|
||||
const pipeline_layout = try gc.dev.createPipelineLayout(&.{
|
||||
.flags = .{},
|
||||
.set_layout_count = 0,
|
||||
.p_set_layouts = undefined,
|
||||
.push_constant_range_count = 0,
|
||||
.p_push_constant_ranges = undefined,
|
||||
}, null);
|
||||
defer gc.vkd.destroyPipelineLayout(gc.dev, pipeline_layout, null);
|
||||
defer gc.dev.destroyPipelineLayout(pipeline_layout, null);
|
||||
|
||||
const render_pass = try createRenderPass(&gc, swapchain);
|
||||
defer gc.vkd.destroyRenderPass(gc.dev, render_pass, null);
|
||||
defer gc.dev.destroyRenderPass(render_pass, null);
|
||||
|
||||
const pipeline = try createPipeline(&gc, pipeline_layout, render_pass);
|
||||
defer gc.vkd.destroyPipeline(gc.dev, pipeline, null);
|
||||
defer gc.dev.destroyPipeline(pipeline, null);
|
||||
|
||||
var framebuffers = try createFramebuffers(&gc, allocator, render_pass, swapchain);
|
||||
defer destroyFramebuffers(&gc, allocator, framebuffers);
|
||||
|
||||
const pool = try gc.vkd.createCommandPool(gc.dev, &.{
|
||||
const pool = try gc.dev.createCommandPool(&.{
|
||||
.queue_family_index = gc.graphics_queue.family,
|
||||
}, null);
|
||||
defer gc.vkd.destroyCommandPool(gc.dev, pool, null);
|
||||
defer gc.dev.destroyCommandPool(pool, null);
|
||||
|
||||
const buffer = try gc.vkd.createBuffer(gc.dev, &.{
|
||||
const buffer = try gc.dev.createBuffer(&.{
|
||||
.size = @sizeOf(@TypeOf(vertices)),
|
||||
.usage = .{ .transfer_dst_bit = true, .vertex_buffer_bit = true },
|
||||
.sharing_mode = .exclusive,
|
||||
}, null);
|
||||
defer gc.vkd.destroyBuffer(gc.dev, buffer, null);
|
||||
const mem_reqs = gc.vkd.getBufferMemoryRequirements(gc.dev, buffer);
|
||||
defer gc.dev.destroyBuffer(buffer, null);
|
||||
const mem_reqs = gc.dev.getBufferMemoryRequirements(buffer);
|
||||
const memory = try gc.allocate(mem_reqs, .{ .device_local_bit = true });
|
||||
defer gc.vkd.freeMemory(gc.dev, memory, null);
|
||||
try gc.vkd.bindBufferMemory(gc.dev, buffer, memory, 0);
|
||||
defer gc.dev.freeMemory(memory, null);
|
||||
try gc.dev.bindBufferMemory(buffer, memory, 0);
|
||||
|
||||
try uploadVertices(&gc, pool, buffer);
|
||||
|
||||
@@ -164,24 +164,24 @@ pub fn main() !void {
|
||||
}
|
||||
|
||||
try swapchain.waitForAllFences();
|
||||
try gc.vkd.deviceWaitIdle(gc.dev);
|
||||
try gc.dev.deviceWaitIdle();
|
||||
}
|
||||
|
||||
fn uploadVertices(gc: *const GraphicsContext, pool: vk.CommandPool, buffer: vk.Buffer) !void {
|
||||
const staging_buffer = try gc.vkd.createBuffer(gc.dev, &.{
|
||||
const staging_buffer = try gc.dev.createBuffer(&.{
|
||||
.size = @sizeOf(@TypeOf(vertices)),
|
||||
.usage = .{ .transfer_src_bit = true },
|
||||
.sharing_mode = .exclusive,
|
||||
}, null);
|
||||
defer gc.vkd.destroyBuffer(gc.dev, staging_buffer, null);
|
||||
const mem_reqs = gc.vkd.getBufferMemoryRequirements(gc.dev, staging_buffer);
|
||||
defer gc.dev.destroyBuffer(staging_buffer, null);
|
||||
const mem_reqs = gc.dev.getBufferMemoryRequirements(staging_buffer);
|
||||
const staging_memory = try gc.allocate(mem_reqs, .{ .host_visible_bit = true, .host_coherent_bit = true });
|
||||
defer gc.vkd.freeMemory(gc.dev, staging_memory, null);
|
||||
try gc.vkd.bindBufferMemory(gc.dev, staging_buffer, staging_memory, 0);
|
||||
defer gc.dev.freeMemory(staging_memory, null);
|
||||
try gc.dev.bindBufferMemory(staging_buffer, staging_memory, 0);
|
||||
|
||||
{
|
||||
const data = try gc.vkd.mapMemory(gc.dev, staging_memory, 0, vk.WHOLE_SIZE, .{});
|
||||
defer gc.vkd.unmapMemory(gc.dev, staging_memory);
|
||||
const data = try gc.dev.mapMemory(staging_memory, 0, vk.WHOLE_SIZE, .{});
|
||||
defer gc.dev.unmapMemory(staging_memory);
|
||||
|
||||
const gpu_vertices: [*]Vertex = @ptrCast(@alignCast(data));
|
||||
@memcpy(gpu_vertices, vertices[0..]);
|
||||
@@ -191,15 +191,17 @@ fn uploadVertices(gc: *const GraphicsContext, pool: vk.CommandPool, buffer: vk.B
|
||||
}
|
||||
|
||||
fn copyBuffer(gc: *const GraphicsContext, pool: vk.CommandPool, dst: vk.Buffer, src: vk.Buffer, size: vk.DeviceSize) !void {
|
||||
var cmdbuf: vk.CommandBuffer = undefined;
|
||||
try gc.vkd.allocateCommandBuffers(gc.dev, &.{
|
||||
var cmdbuf_handle: vk.CommandBuffer = undefined;
|
||||
try gc.dev.allocateCommandBuffers(&.{
|
||||
.command_pool = pool,
|
||||
.level = .primary,
|
||||
.command_buffer_count = 1,
|
||||
}, @ptrCast(&cmdbuf));
|
||||
defer gc.vkd.freeCommandBuffers(gc.dev, pool, 1, @ptrCast(&cmdbuf));
|
||||
}, @ptrCast(&cmdbuf_handle));
|
||||
defer gc.dev.freeCommandBuffers(pool, 1, @ptrCast(&cmdbuf_handle));
|
||||
|
||||
try gc.vkd.beginCommandBuffer(cmdbuf, &.{
|
||||
const cmdbuf = GraphicsContext.CommandBuffer.init(cmdbuf_handle, gc.dev.wrapper);
|
||||
|
||||
try cmdbuf.beginCommandBuffer(&.{
|
||||
.flags = .{ .one_time_submit_bit = true },
|
||||
});
|
||||
|
||||
@@ -208,17 +210,17 @@ fn copyBuffer(gc: *const GraphicsContext, pool: vk.CommandPool, dst: vk.Buffer,
|
||||
.dst_offset = 0,
|
||||
.size = size,
|
||||
};
|
||||
gc.vkd.cmdCopyBuffer(cmdbuf, src, dst, 1, @ptrCast(®ion));
|
||||
cmdbuf.copyBuffer(src, dst, 1, @ptrCast(®ion));
|
||||
|
||||
try gc.vkd.endCommandBuffer(cmdbuf);
|
||||
try cmdbuf.endCommandBuffer();
|
||||
|
||||
const si = vk.SubmitInfo{
|
||||
.command_buffer_count = 1,
|
||||
.p_command_buffers = @ptrCast(&cmdbuf),
|
||||
.p_command_buffers = (&cmdbuf.handle)[0..1],
|
||||
.p_wait_dst_stage_mask = undefined,
|
||||
};
|
||||
try gc.vkd.queueSubmit(gc.graphics_queue.handle, 1, @ptrCast(&si), .null_handle);
|
||||
try gc.vkd.queueWaitIdle(gc.graphics_queue.handle);
|
||||
try gc.dev.queueSubmit(gc.graphics_queue.handle, 1, @ptrCast(&si), .null_handle);
|
||||
try gc.dev.queueWaitIdle(gc.graphics_queue.handle);
|
||||
}
|
||||
|
||||
fn createCommandBuffers(
|
||||
@@ -234,12 +236,12 @@ fn createCommandBuffers(
|
||||
const cmdbufs = try allocator.alloc(vk.CommandBuffer, framebuffers.len);
|
||||
errdefer allocator.free(cmdbufs);
|
||||
|
||||
try gc.vkd.allocateCommandBuffers(gc.dev, &.{
|
||||
try gc.dev.allocateCommandBuffers(&.{
|
||||
.command_pool = pool,
|
||||
.level = .primary,
|
||||
.command_buffer_count = @as(u32, @truncate(cmdbufs.len)),
|
||||
.command_buffer_count = @intCast(cmdbufs.len),
|
||||
}, cmdbufs.ptr);
|
||||
errdefer gc.vkd.freeCommandBuffers(gc.dev, pool, @truncate(cmdbufs.len), cmdbufs.ptr);
|
||||
errdefer gc.dev.freeCommandBuffers(pool, @intCast(cmdbufs.len), cmdbufs.ptr);
|
||||
|
||||
const clear = vk.ClearValue{
|
||||
.color = .{ .float_32 = .{ 0, 0, 0, 1 } },
|
||||
@@ -248,8 +250,8 @@ fn createCommandBuffers(
|
||||
const viewport = vk.Viewport{
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.width = @as(f32, @floatFromInt(extent.width)),
|
||||
.height = @as(f32, @floatFromInt(extent.height)),
|
||||
.width = @floatFromInt(extent.width),
|
||||
.height = @floatFromInt(extent.height),
|
||||
.min_depth = 0,
|
||||
.max_depth = 1,
|
||||
};
|
||||
@@ -260,10 +262,10 @@ fn createCommandBuffers(
|
||||
};
|
||||
|
||||
for (cmdbufs, framebuffers) |cmdbuf, framebuffer| {
|
||||
try gc.vkd.beginCommandBuffer(cmdbuf, &.{});
|
||||
try gc.dev.beginCommandBuffer(cmdbuf, &.{});
|
||||
|
||||
gc.vkd.cmdSetViewport(cmdbuf, 0, 1, @ptrCast(&viewport));
|
||||
gc.vkd.cmdSetScissor(cmdbuf, 0, 1, @ptrCast(&scissor));
|
||||
gc.dev.cmdSetViewport(cmdbuf, 0, 1, @ptrCast(&viewport));
|
||||
gc.dev.cmdSetScissor(cmdbuf, 0, 1, @ptrCast(&scissor));
|
||||
|
||||
// This needs to be a separate definition - see https://github.com/ziglang/zig/issues/7627.
|
||||
const render_area = vk.Rect2D{
|
||||
@@ -271,28 +273,28 @@ fn createCommandBuffers(
|
||||
.extent = extent,
|
||||
};
|
||||
|
||||
gc.vkd.cmdBeginRenderPass(cmdbuf, &.{
|
||||
gc.dev.cmdBeginRenderPass(cmdbuf, &.{
|
||||
.render_pass = render_pass,
|
||||
.framebuffer = framebuffer,
|
||||
.render_area = render_area,
|
||||
.clear_value_count = 1,
|
||||
.p_clear_values = @as([*]const vk.ClearValue, @ptrCast(&clear)),
|
||||
.p_clear_values = @ptrCast(&clear),
|
||||
}, .@"inline");
|
||||
|
||||
gc.vkd.cmdBindPipeline(cmdbuf, .graphics, pipeline);
|
||||
gc.dev.cmdBindPipeline(cmdbuf, .graphics, pipeline);
|
||||
const offset = [_]vk.DeviceSize{0};
|
||||
gc.vkd.cmdBindVertexBuffers(cmdbuf, 0, 1, @ptrCast(&buffer), &offset);
|
||||
gc.vkd.cmdDraw(cmdbuf, vertices.len, 1, 0, 0);
|
||||
gc.dev.cmdBindVertexBuffers(cmdbuf, 0, 1, @ptrCast(&buffer), &offset);
|
||||
gc.dev.cmdDraw(cmdbuf, vertices.len, 1, 0, 0);
|
||||
|
||||
gc.vkd.cmdEndRenderPass(cmdbuf);
|
||||
try gc.vkd.endCommandBuffer(cmdbuf);
|
||||
gc.dev.cmdEndRenderPass(cmdbuf);
|
||||
try gc.dev.endCommandBuffer(cmdbuf);
|
||||
}
|
||||
|
||||
return cmdbufs;
|
||||
}
|
||||
|
||||
fn destroyCommandBuffers(gc: *const GraphicsContext, pool: vk.CommandPool, allocator: Allocator, cmdbufs: []vk.CommandBuffer) void {
|
||||
gc.vkd.freeCommandBuffers(gc.dev, pool, @truncate(cmdbufs.len), cmdbufs.ptr);
|
||||
gc.dev.freeCommandBuffers(pool, @truncate(cmdbufs.len), cmdbufs.ptr);
|
||||
allocator.free(cmdbufs);
|
||||
}
|
||||
|
||||
@@ -301,13 +303,13 @@ fn createFramebuffers(gc: *const GraphicsContext, allocator: Allocator, render_p
|
||||
errdefer allocator.free(framebuffers);
|
||||
|
||||
var i: usize = 0;
|
||||
errdefer for (framebuffers[0..i]) |fb| gc.vkd.destroyFramebuffer(gc.dev, fb, null);
|
||||
errdefer for (framebuffers[0..i]) |fb| gc.dev.destroyFramebuffer(fb, null);
|
||||
|
||||
for (framebuffers) |*fb| {
|
||||
fb.* = try gc.vkd.createFramebuffer(gc.dev, &.{
|
||||
fb.* = try gc.dev.createFramebuffer(&.{
|
||||
.render_pass = render_pass,
|
||||
.attachment_count = 1,
|
||||
.p_attachments = @as([*]const vk.ImageView, @ptrCast(&swapchain.swap_images[i].view)),
|
||||
.p_attachments = @ptrCast(&swapchain.swap_images[i].view),
|
||||
.width = swapchain.extent.width,
|
||||
.height = swapchain.extent.height,
|
||||
.layers = 1,
|
||||
@@ -319,7 +321,7 @@ fn createFramebuffers(gc: *const GraphicsContext, allocator: Allocator, render_p
|
||||
}
|
||||
|
||||
fn destroyFramebuffers(gc: *const GraphicsContext, allocator: Allocator, framebuffers: []const vk.Framebuffer) void {
|
||||
for (framebuffers) |fb| gc.vkd.destroyFramebuffer(gc.dev, fb, null);
|
||||
for (framebuffers) |fb| gc.dev.destroyFramebuffer(fb, null);
|
||||
allocator.free(framebuffers);
|
||||
}
|
||||
|
||||
@@ -346,11 +348,11 @@ fn createRenderPass(gc: *const GraphicsContext, swapchain: Swapchain) !vk.Render
|
||||
.p_color_attachments = @ptrCast(&color_attachment_ref),
|
||||
};
|
||||
|
||||
return try gc.vkd.createRenderPass(gc.dev, &.{
|
||||
return try gc.dev.createRenderPass(&.{
|
||||
.attachment_count = 1,
|
||||
.p_attachments = @as([*]const vk.AttachmentDescription, @ptrCast(&color_attachment)),
|
||||
.p_attachments = @ptrCast(&color_attachment),
|
||||
.subpass_count = 1,
|
||||
.p_subpasses = @as([*]const vk.SubpassDescription, @ptrCast(&subpass)),
|
||||
.p_subpasses = @ptrCast(&subpass),
|
||||
}, null);
|
||||
}
|
||||
|
||||
@@ -359,17 +361,17 @@ fn createPipeline(
|
||||
layout: vk.PipelineLayout,
|
||||
render_pass: vk.RenderPass,
|
||||
) !vk.Pipeline {
|
||||
const vert = try gc.vkd.createShaderModule(gc.dev, &.{
|
||||
const vert = try gc.dev.createShaderModule(&.{
|
||||
.code_size = shaders.triangle_vert.len,
|
||||
.p_code = @as([*]const u32, @ptrCast(&shaders.triangle_vert)),
|
||||
.p_code = @ptrCast(&shaders.triangle_vert),
|
||||
}, null);
|
||||
defer gc.vkd.destroyShaderModule(gc.dev, vert, null);
|
||||
defer gc.dev.destroyShaderModule(vert, null);
|
||||
|
||||
const frag = try gc.vkd.createShaderModule(gc.dev, &.{
|
||||
const frag = try gc.dev.createShaderModule(&.{
|
||||
.code_size = shaders.triangle_frag.len,
|
||||
.p_code = @as([*]const u32, @ptrCast(&shaders.triangle_frag)),
|
||||
.p_code = @ptrCast(&shaders.triangle_frag),
|
||||
}, null);
|
||||
defer gc.vkd.destroyShaderModule(gc.dev, frag, null);
|
||||
defer gc.dev.destroyShaderModule(frag, null);
|
||||
|
||||
const pssci = [_]vk.PipelineShaderStageCreateInfo{
|
||||
.{
|
||||
@@ -471,8 +473,7 @@ fn createPipeline(
|
||||
};
|
||||
|
||||
var pipeline: vk.Pipeline = undefined;
|
||||
_ = try gc.vkd.createGraphicsPipelines(
|
||||
gc.dev,
|
||||
_ = try gc.dev.createGraphicsPipelines(
|
||||
.null_handle,
|
||||
1,
|
||||
@ptrCast(&gpci),
|
||||
|
||||
Reference in New Issue
Block a user