Transient CB only, validation fixes
This commit is contained in:
81
src/Game.zig
81
src/Game.zig
@@ -41,11 +41,11 @@ index_buffer: shaders.IndexBuffer,
|
||||
|
||||
global_uniforms: shaders.GlobalUniformsBuffer,
|
||||
global_uniforms_staging_buffer: StagingBuffer,
|
||||
global_uniforms_transfer_command_buffer: CommandBuffer,
|
||||
global_uniforms_transfer_semaphores: []vk.Semaphore,
|
||||
point_lights: shaders.PointLightBuffer,
|
||||
directional_lights: shaders.DirectionalLightBuffer,
|
||||
sampler: vk.Sampler,
|
||||
deferred_command_buffers: std.ArrayList(CommandBuffer),
|
||||
|
||||
blocks: Blocks,
|
||||
materials: Materials,
|
||||
@@ -232,23 +232,6 @@ pub fn init(allocator: std.mem.Allocator, engine: *Engine, swapchain: *Swapchain
|
||||
});
|
||||
errdefer global_uniforms_staging_buffer.deinit(engine);
|
||||
|
||||
var global_uniforms_transfer_command_buffer: CommandBuffer = try .init(engine, .transfer, .persistent);
|
||||
errdefer global_uniforms_transfer_command_buffer.deinit(engine);
|
||||
|
||||
try global_uniforms_transfer_command_buffer.beginCommandBuffer();
|
||||
global_uniforms_transfer_command_buffer.copyBuffer(
|
||||
global_uniforms_staging_buffer.buffer,
|
||||
global_uniforms.buffer,
|
||||
&.{
|
||||
.{
|
||||
.src_offset = 0,
|
||||
.dst_offset = 0,
|
||||
.size = @sizeOf(shaders.GlobalUniforms),
|
||||
},
|
||||
},
|
||||
);
|
||||
try global_uniforms_transfer_command_buffer.endCommandBuffer();
|
||||
|
||||
const global_uniforms_transfer_semaphores = blk: {
|
||||
var semaphores: std.ArrayList(vk.Semaphore) = try .initCapacity(allocator, swapchain.swapchain_images.len);
|
||||
errdefer semaphores.deinit(allocator);
|
||||
@@ -367,8 +350,24 @@ pub fn init(allocator: std.mem.Allocator, engine: *Engine, swapchain: *Swapchain
|
||||
.depth_compare_op = .greater,
|
||||
.depth_bounds_test_enable = .false,
|
||||
.stencil_test_enable = .false,
|
||||
.front = undefined,
|
||||
.back = undefined,
|
||||
.front = .{
|
||||
.fail_op = .keep,
|
||||
.pass_op = .keep,
|
||||
.depth_fail_op = .keep,
|
||||
.compare_op = .never,
|
||||
.compare_mask = 0,
|
||||
.write_mask = 0,
|
||||
.reference = 0,
|
||||
},
|
||||
.back = .{
|
||||
.fail_op = .keep,
|
||||
.pass_op = .keep,
|
||||
.depth_fail_op = .keep,
|
||||
.compare_op = .never,
|
||||
.compare_mask = 0,
|
||||
.write_mask = 0,
|
||||
.reference = 0,
|
||||
},
|
||||
.min_depth_bounds = 0,
|
||||
.max_depth_bounds = 1,
|
||||
},
|
||||
@@ -536,8 +535,8 @@ pub fn init(allocator: std.mem.Allocator, engine: *Engine, swapchain: *Swapchain
|
||||
const world_seed = engine.random.int(u64);
|
||||
std.log.info("Using world seed 0x{x:0<16}", .{world_seed});
|
||||
var it = Iterator2(i16).init(.{
|
||||
.min = .{ -12, -12 },
|
||||
.max = .{ 12, 12 },
|
||||
.min = .{ -8, -8 },
|
||||
.max = .{ 8, 8 },
|
||||
});
|
||||
while (it.next()) |chunk_coords2| {
|
||||
const chunk_coords3 = chunk_coords2 ++ [_]i16{0};
|
||||
@@ -648,11 +647,11 @@ pub fn init(allocator: std.mem.Allocator, engine: *Engine, swapchain: *Swapchain
|
||||
|
||||
.global_uniforms = global_uniforms,
|
||||
.global_uniforms_staging_buffer = global_uniforms_staging_buffer,
|
||||
.global_uniforms_transfer_command_buffer = global_uniforms_transfer_command_buffer,
|
||||
.global_uniforms_transfer_semaphores = global_uniforms_transfer_semaphores,
|
||||
.point_lights = point_lights,
|
||||
.directional_lights = directional_lights,
|
||||
.sampler = sampler,
|
||||
.deferred_command_buffers = try .initCapacity(allocator, 4),
|
||||
|
||||
.blocks = blocks,
|
||||
.materials = materials,
|
||||
@@ -667,6 +666,11 @@ pub fn init(allocator: std.mem.Allocator, engine: *Engine, swapchain: *Swapchain
|
||||
pub fn deinit(self: *Game) void {
|
||||
std.log.scoped(.deinit).debug("Deinitializing {*}", .{self});
|
||||
|
||||
for (self.deferred_command_buffers.items) |*command_buffer| {
|
||||
command_buffer.deinit(self.engine);
|
||||
}
|
||||
self.deferred_command_buffers.deinit(self.allocator);
|
||||
|
||||
self.vertex_buffer.deinit(self.engine);
|
||||
self.index_buffer.deinit(self.engine);
|
||||
|
||||
@@ -679,7 +683,6 @@ pub fn deinit(self: *Game) void {
|
||||
|
||||
self.global_uniforms.deinit(self.engine);
|
||||
self.global_uniforms_staging_buffer.deinit(self.engine);
|
||||
self.global_uniforms_transfer_command_buffer.deinit(self.engine);
|
||||
self.point_lights.deinit(self.engine);
|
||||
self.directional_lights.deinit(self.engine);
|
||||
|
||||
@@ -755,6 +758,11 @@ fn render(self: *Game) !void {
|
||||
else => return err,
|
||||
};
|
||||
|
||||
for (self.deferred_command_buffers.items) |*deferred_command_buffer| {
|
||||
deferred_command_buffer.deinit(self.engine);
|
||||
}
|
||||
self.deferred_command_buffers.clearRetainingCapacity();
|
||||
|
||||
const extent = self.swapchain.extent;
|
||||
|
||||
const framebuffer_size = Vector2.init(
|
||||
@@ -800,12 +808,31 @@ fn render(self: *Game) !void {
|
||||
@memcpy(staging_memory, std.mem.asBytes(&global_uniforms_data));
|
||||
self.global_uniforms_staging_buffer.unmap(self.engine);
|
||||
|
||||
try self.global_uniforms_transfer_command_buffer.submit(self.engine, .{
|
||||
try self.deferred_command_buffers.ensureUnusedCapacity(self.allocator, 1);
|
||||
const global_uniforms_transfer_command_buffer = try CommandBuffer.init(self.engine, .transfer);
|
||||
self.deferred_command_buffers.appendAssumeCapacity(global_uniforms_transfer_command_buffer);
|
||||
|
||||
try global_uniforms_transfer_command_buffer.beginCommandBuffer();
|
||||
global_uniforms_transfer_command_buffer.copyBuffer(
|
||||
self.global_uniforms_staging_buffer.buffer,
|
||||
self.global_uniforms.buffer,
|
||||
&.{
|
||||
.{
|
||||
.src_offset = 0,
|
||||
.dst_offset = 0,
|
||||
.size = @sizeOf(shaders.GlobalUniforms),
|
||||
},
|
||||
},
|
||||
);
|
||||
try global_uniforms_transfer_command_buffer.endCommandBuffer();
|
||||
|
||||
try global_uniforms_transfer_command_buffer.submit(self.engine, .{
|
||||
.signal_semaphores = &.{self.global_uniforms_transfer_semaphores[self.swapchain.image_index.?]},
|
||||
});
|
||||
|
||||
var command_buffer: CommandBuffer = try .init(self.engine, .graphics, .transient);
|
||||
defer command_buffer.deinit(self.engine);
|
||||
try self.deferred_command_buffers.ensureUnusedCapacity(self.allocator, 1);
|
||||
const command_buffer: CommandBuffer = try .init(self.engine, .graphics);
|
||||
self.deferred_command_buffers.appendAssumeCapacity(command_buffer);
|
||||
|
||||
try command_buffer.beginCommandBuffer();
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user