move to au globals
This commit is contained in:
194
src/main.zig
194
src/main.zig
@@ -6,6 +6,8 @@ const Allocator = std.mem.Allocator;
|
||||
|
||||
const gfx = @import("gfx.zig");
|
||||
|
||||
const au = @import("au.zig");
|
||||
|
||||
const app_name = "vulkan-zig triangle example";
|
||||
|
||||
const Vertex = extern struct {
|
||||
@@ -94,106 +96,108 @@ pub fn main() !void {
|
||||
defer _ = gpa.deinit();
|
||||
const ally = gpa.allocator();
|
||||
|
||||
const base = try gfx.Base.init();
|
||||
defer base.deinit();
|
||||
try au.init(ally);
|
||||
defer au.deinit();
|
||||
|
||||
const inst = try gfx.Instance.init(&base);
|
||||
defer inst.deinit();
|
||||
// std.debug.print("Initialized!!\n", .{ });
|
||||
|
||||
const win = try gfx.Window.init(&inst, "zig-glfw-vulkan", .{ .width = 800, .height = 600 });
|
||||
defer win.deinit();
|
||||
|
||||
const dev = try gfx.Device.init(ally, &inst, &win);
|
||||
defer dev.deinit();
|
||||
|
||||
var sc = try gfx.Swapchain.create(ally, &dev);
|
||||
defer sc.deinit();
|
||||
|
||||
const device_local = gfx.VkAllocator.init(dev.pdev, inst.vki);
|
||||
|
||||
const pipeline_layout = try dev.vkd.createPipelineLayout(dev.dev, &.{
|
||||
.flags = .{},
|
||||
.set_layout_count = 0,
|
||||
.p_set_layouts = undefined,
|
||||
.push_constant_range_count = 0,
|
||||
.p_push_constant_ranges = undefined,
|
||||
}, null);
|
||||
defer dev.vkd.destroyPipelineLayout(dev.dev, pipeline_layout, null);
|
||||
|
||||
const pipeline = try createPipeline(dev.dev, pipeline_layout, dev.format, dev.vkd);
|
||||
defer dev.vkd.destroyPipeline(dev.dev, pipeline, null);
|
||||
|
||||
const vertex_buffer = try dev.vkd.createBuffer(dev.dev, &.{
|
||||
.size = @sizeOf(@TypeOf(vertices)),
|
||||
.usage = .{ .transfer_dst_bit = true, .vertex_buffer_bit = true },
|
||||
.sharing_mode = .exclusive,
|
||||
}, null);
|
||||
defer dev.vkd.destroyBuffer(dev.dev, vertex_buffer, null);
|
||||
const vertex_mem_reqs = dev.vkd.getBufferMemoryRequirements(dev.dev, vertex_buffer);
|
||||
const vertex_memory = try device_local.alloc(dev.dev, dev.vkd, vertex_mem_reqs, .{ .device_local_bit = true });
|
||||
defer dev.vkd.freeMemory(dev.dev, vertex_memory, null);
|
||||
try dev.vkd.bindBufferMemory(dev.dev, vertex_buffer, vertex_memory, 0);
|
||||
|
||||
try gfx.uploadData(Vertex, dev.pdev, inst.vki, dev.dev, dev.vkd, dev.queue, dev.pool, vertex_buffer, &vertices);
|
||||
|
||||
const index_buffer = try dev.vkd.createBuffer(dev.dev, &.{
|
||||
.size = @sizeOf(@TypeOf(indices)),
|
||||
.usage = .{ .transfer_dst_bit = true, .index_buffer_bit = true },
|
||||
.sharing_mode = .exclusive,
|
||||
}, null);
|
||||
defer dev.vkd.destroyBuffer(dev.dev, index_buffer, null);
|
||||
const index_mem_reqs = dev.vkd.getBufferMemoryRequirements(dev.dev, index_buffer);
|
||||
const index_memory = try device_local.alloc(dev.dev, dev.vkd, index_mem_reqs, .{ .device_local_bit = true });
|
||||
defer dev.vkd.freeMemory(dev.dev, index_memory, null);
|
||||
try dev.vkd.bindBufferMemory(dev.dev, index_buffer, index_memory, 0);
|
||||
|
||||
try gfx.uploadData(Index, dev.pdev, inst.vki, dev.dev, dev.vkd, dev.queue, dev.pool, index_buffer, &indices);
|
||||
|
||||
try sc.init();
|
||||
for (sc.chain.items(.image), sc.chain.items(.view), sc.chain.items(.cmdbuf)) |image, view, cmdbuf| {
|
||||
try record_cmdbuf(cmdbuf, dev.vkd, image, view, sc.extent, pipeline, vertex_buffer, index_buffer);
|
||||
while (!au.W.should_close()) {
|
||||
au.W.wait_events();
|
||||
// std.debug.print("Event!!\n", .{ });
|
||||
}
|
||||
|
||||
var index: u32 = 0;
|
||||
try au.D.deviceWaitIdle();
|
||||
|
||||
while (c.glfwWindowShouldClose(win.ref) == c.GLFW_FALSE) {
|
||||
var w: c_int = undefined;
|
||||
var h: c_int = undefined;
|
||||
c.glfwGetFramebufferSize(win.ref, &w, &h);
|
||||
|
||||
// Don't present or resize swapchain while the window is minimized
|
||||
if (w == 0 or h == 0) {
|
||||
c.glfwPollEvents();
|
||||
continue;
|
||||
}
|
||||
|
||||
const frame = sc.chain.get(index);
|
||||
|
||||
render(dev.dev, dev.vkd, sc.ref, frame, dev.queue) catch |err| switch (err) {
|
||||
error.OutOfDateKHR => {
|
||||
// TODO: this is a hack to safely destroy sync primitives
|
||||
// don't do this. be smart about sync primitive reuse or
|
||||
// move them to "garbage" to be destroyed later.
|
||||
try dev.vkd.deviceWaitIdle(dev.dev);
|
||||
|
||||
try sc.init();
|
||||
for (sc.chain.items(.image), sc.chain.items(.view), sc.chain.items(.cmdbuf)) |image, view, cmdbuf| {
|
||||
try record_cmdbuf(cmdbuf, dev.vkd, image, view, sc.extent, pipeline, vertex_buffer, index_buffer);
|
||||
}
|
||||
|
||||
index = 0;
|
||||
|
||||
continue;
|
||||
},
|
||||
else => |errx| return errx,
|
||||
};
|
||||
|
||||
c.glfwPollEvents();
|
||||
|
||||
index = @intCast((index + 1) % sc.chain.len);
|
||||
}
|
||||
|
||||
try dev.vkd.deviceWaitIdle(dev.dev);
|
||||
// // todo create command pool
|
||||
//
|
||||
// var sc = try gfx.Swapchain.create(ally, &dev);
|
||||
// defer sc.deinit();
|
||||
//
|
||||
// const device_local = gfx.VkAllocator.init(dev.pdev, inst.vki);
|
||||
//
|
||||
// const pipeline_layout = try dev.vkd.createPipelineLayout(dev.dev, &.{
|
||||
// .flags = .{},
|
||||
// .set_layout_count = 0,
|
||||
// .p_set_layouts = undefined,
|
||||
// .push_constant_range_count = 0,
|
||||
// .p_push_constant_ranges = undefined,
|
||||
// }, null);
|
||||
// defer dev.vkd.destroyPipelineLayout(dev.dev, pipeline_layout, null);
|
||||
//
|
||||
// const pipeline = try createPipeline(dev.dev, pipeline_layout, dev.format, dev.vkd);
|
||||
// defer dev.vkd.destroyPipeline(dev.dev, pipeline, null);
|
||||
//
|
||||
// const vertex_buffer = try dev.vkd.createBuffer(dev.dev, &.{
|
||||
// .size = @sizeOf(@TypeOf(vertices)),
|
||||
// .usage = .{ .transfer_dst_bit = true, .vertex_buffer_bit = true },
|
||||
// .sharing_mode = .exclusive,
|
||||
// }, null);
|
||||
// defer dev.vkd.destroyBuffer(dev.dev, vertex_buffer, null);
|
||||
// const vertex_mem_reqs = dev.vkd.getBufferMemoryRequirements(dev.dev, vertex_buffer);
|
||||
// const vertex_memory = try device_local.alloc(dev.dev, dev.vkd, vertex_mem_reqs, .{ .device_local_bit = true });
|
||||
// defer dev.vkd.freeMemory(dev.dev, vertex_memory, null);
|
||||
// try dev.vkd.bindBufferMemory(dev.dev, vertex_buffer, vertex_memory, 0);
|
||||
//
|
||||
// try gfx.uploadData(Vertex, dev.pdev, inst.vki, dev.dev, dev.vkd, dev.queue, dev.pool, vertex_buffer, &vertices);
|
||||
//
|
||||
// const index_buffer = try dev.vkd.createBuffer(dev.dev, &.{
|
||||
// .size = @sizeOf(@TypeOf(indices)),
|
||||
// .usage = .{ .transfer_dst_bit = true, .index_buffer_bit = true },
|
||||
// .sharing_mode = .exclusive,
|
||||
// }, null);
|
||||
// defer dev.vkd.destroyBuffer(dev.dev, index_buffer, null);
|
||||
// const index_mem_reqs = dev.vkd.getBufferMemoryRequirements(dev.dev, index_buffer);
|
||||
// const index_memory = try device_local.alloc(dev.dev, dev.vkd, index_mem_reqs, .{ .device_local_bit = true });
|
||||
// defer dev.vkd.freeMemory(dev.dev, index_memory, null);
|
||||
// try dev.vkd.bindBufferMemory(dev.dev, index_buffer, index_memory, 0);
|
||||
//
|
||||
// try gfx.uploadData(Index, dev.pdev, inst.vki, dev.dev, dev.vkd, dev.queue, dev.pool, index_buffer, &indices);
|
||||
//
|
||||
// try sc.init();
|
||||
// for (sc.chain.items(.image), sc.chain.items(.view), sc.chain.items(.cmdbuf)) |image, view, cmdbuf| {
|
||||
// try record_cmdbuf(cmdbuf, dev.vkd, image, view, sc.extent, pipeline, vertex_buffer, index_buffer);
|
||||
// }
|
||||
//
|
||||
// var index: u32 = 0;
|
||||
//
|
||||
// while (c.glfwWindowShouldClose(win.ref) == c.GLFW_FALSE) {
|
||||
// var w: c_int = undefined;
|
||||
// var h: c_int = undefined;
|
||||
// c.glfwGetFramebufferSize(win.ref, &w, &h);
|
||||
//
|
||||
// // Don't present or resize swapchain while the window is minimized
|
||||
// if (w == 0 or h == 0) {
|
||||
// c.glfwPollEvents();
|
||||
// continue;
|
||||
// }
|
||||
//
|
||||
// const frame = sc.chain.get(index);
|
||||
//
|
||||
// render(dev.dev, dev.vkd, sc.ref, frame, dev.queue) catch |err| switch (err) {
|
||||
// error.OutOfDateKHR => {
|
||||
// // TODO: this is a hack to safely destroy sync primitives
|
||||
// // don't do this. be smart about sync primitive reuse or
|
||||
// // move them to "garbage" to be destroyed later.
|
||||
// try dev.vkd.deviceWaitIdle(dev.dev);
|
||||
//
|
||||
// try sc.init();
|
||||
// for (sc.chain.items(.image), sc.chain.items(.view), sc.chain.items(.cmdbuf)) |image, view, cmdbuf| {
|
||||
// try record_cmdbuf(cmdbuf, dev.vkd, image, view, sc.extent, pipeline, vertex_buffer, index_buffer);
|
||||
// }
|
||||
//
|
||||
// index = 0;
|
||||
//
|
||||
// continue;
|
||||
// },
|
||||
// else => |errx| return errx,
|
||||
// };
|
||||
//
|
||||
// c.glfwPollEvents();
|
||||
//
|
||||
// index = @intCast((index + 1) % sc.chain.len);
|
||||
// }
|
||||
//
|
||||
// try dev.vkd.deviceWaitIdle(dev.dev);
|
||||
}
|
||||
|
||||
fn record_cmdbuf(
|
||||
|
Reference in New Issue
Block a user