zig-chess/src/vulkan/sync.zig

55 lines
1.6 KiB
Zig

const std = @import("std");
const vk = @import("vulkan");
const device = @import("device.zig");
pub const SyncContext = struct {
image_available_semaphore: vk.Semaphore,
render_finished_semaphore: vk.Semaphore,
in_flight_fence: vk.Fence,
pub fn destroy(self: *const SyncContext, ldc: *const device.LogicalDeviceContext) void {
ldc.vkd.destroyFence(ldc.device, self.in_flight_fence, null);
ldc.vkd.destroySemaphore(ldc.device, self.render_finished_semaphore, null);
ldc.vkd.destroySemaphore(ldc.device, self.image_available_semaphore, null);
}
};
pub fn initSyncObjects(ldc: device.LogicalDeviceContext) !SyncContext {
const semaphore_create_info = vk.SemaphoreCreateInfo{};
const image_available_semaphore = try ldc.vkd.createSemaphore(
ldc.device,
&semaphore_create_info,
null,
);
errdefer ldc.vkd.destroySemaphore(ldc.device, image_available_semaphore, null);
const render_finished_semaphore = try ldc.vkd.createSemaphore(
ldc.device,
&semaphore_create_info,
null,
);
errdefer ldc.vkd.destroySemaphore(ldc.device, render_finished_semaphore, null);
const fence_create_info = vk.FenceCreateInfo{
.flags = .{
.signaled_bit = true,
},
};
const in_flight_fence = try ldc.vkd.createFence(
ldc.device,
&fence_create_info,
null,
);
std.debug.print("created synchronization objects\n", .{});
return .{
.image_available_semaphore = image_available_semaphore,
.render_finished_semaphore = render_finished_semaphore,
.in_flight_fence = in_flight_fence,
};
}