fix a bunch of runtime errors. now I have to create the pipeline!

This commit is contained in:
Vivianne 2022-07-19 02:06:00 -07:00
parent 4a63e3131f
commit 2814854d16
5 changed files with 21 additions and 27 deletions

View file

@ -137,7 +137,7 @@ pub const Buffer = struct {
const GetError = Buffer.InitError || DeviceDispatch.BeginCommandBufferError;
pub fn get(queue_id: queues.QueueId, device: *const Device) GetError!*Buffer {
var ctx = Context.context;
var ctx = &Context.context;
var cmd = &ctx.cur_cmd_buf[@enumToInt(queue_id)];
if (cmd.handle == .null_handle) {
try cmd.init(device, queues.get(queue_id));
@ -322,10 +322,6 @@ pub const Buffer = struct {
pm_buffer_submit.begin();
defer pm_buffer_submit.end();
_ = wait_sema;
_ = signal_sema;
_ = wait_mask;
assert(self.began);
assert(!self.ended);
assert(!self.submitted);

View file

@ -1,4 +1,5 @@
const std = @import("std");
const assert = std.debug.assert;
const vk = @import("vulkan");
const Image = @import("image.zig").Image;
const RenderPass = @import("RenderPass.zig");
@ -49,10 +50,9 @@ pub fn getOrAdd(device: *const Device, attachments: []*const Image, width: u32,
};
for (attachments) |attachment, i| {
if (attachment.view != .null_handle) {
key.attachments[i] = attachment.view;
key.formats[i] = attachment.format;
}
assert(attachment.view != .null_handle);
key.attachments[i] = attachment.view;
key.formats[i] = attachment.format;
}
const result = s_fbufs.getOrPutAssumeCapacity(key);

View file

@ -247,9 +247,7 @@ pub const Image = struct {
const prev_queue = queues.get(prev.owner);
const next_queue = queues.get(self.owner);
std.debug.print("stage: {}\n\n stage_mask: {}\n", .{ self.stage, next_queue.stage_mask });
assert(self.stage.intersect(next_queue.stage_mask).toInt() == self.stage.toInt());
std.debug.print("access: {}\n\n access_mask: {}\n", .{ self.access, next_queue.access_mask });
assert(self.access.intersect(next_queue.access_mask).toInt() == self.access.toInt());
if (prev.substates != null) {
@ -260,7 +258,6 @@ pub const Image = struct {
.layout = self.layout,
}, 0, img.array_layers, 0, img.mip_levels);
assert(img.state.substates == null);
std.debug.print("substates\n", .{});
return inserted_barrier;
}
@ -303,9 +300,7 @@ pub const Image = struct {
assert(!dst_cmd.queue_transfer_src);
dst_cmd.queue_transfer_dst = true;
device.dispatch.cmdPipelineBarrier(dst_cmd.handle, prev.stage, self.stage, .{}, 0, undefined, 0, undefined, 1, @ptrCast([*]const vk.ImageMemoryBarrier, &barrier));
std.debug.print("prev: {},\n\nself: {}\n\n", .{ prev, self });
prev.* = self.*;
std.debug.print("AFTERWARDS prev: {},\n\nself: {}\n\n", .{ prev, self });
inserted_barrier = true;
} else {
const layout_change = prev.layout != self.layout;
@ -336,9 +331,7 @@ pub const Image = struct {
},
};
device.dispatch.cmdPipelineBarrier(cmd.handle, prev.stage, self.stage, .{}, 0, undefined, 0, undefined, 1, @ptrCast([*]const vk.ImageMemoryBarrier, &barrier));
std.debug.print("prev: {},\n\nself: {}\n\n", .{ prev, self });
prev.* = self.*;
std.debug.print("AFTERWARDS prev: {},\n\nself: {}\n\n", .{ prev, self });
inserted_barrier = true;
} else {
// no data hazard, append usage state
@ -719,7 +712,7 @@ pub const Image = struct {
pub fn infoToViewInfo(info: *const vk.ImageCreateInfo) !vk.ImageViewCreateInfo {
// anything but transfer usage needs a view
const viewless: vk.ImageUsageFlags = .{ .transfer_src_bit = true, .transfer_dst_bit = true };
if (!info.usage.contains(viewless)) {
if (info.usage.intersect(viewless.complement()).toInt() != 0) {
return vk.ImageViewCreateInfo{
.flags = .{},
.format = info.format,

View file

@ -9,7 +9,7 @@ const settings = @import("settings.zig");
const queues = @import("queues.zig");
const vma = @import("vma");
const profiler = @import("../../common/profiler.zig");
const Image = @import("image.zig").Image;
const image = @import("image.zig");
var s_allocator: Allocator = undefined;
@ -37,7 +37,7 @@ pub fn finalize(device: *const Device) !void {
pub fn update() void {}
const pm_imgnew = profiler.ProfileMark.init("memory.imageNew");
pub fn imageNew(img: *Image, device: *const Device, info: vk.ImageCreateInfo, mem_usage: vma.MemoryUsage) !void {
pub fn imageNew(img: *image.Image, device: *const Device, info: vk.ImageCreateInfo, mem_usage: vma.MemoryUsage) !void {
pm_imgnew.begin();
defer pm_imgnew.end();
@ -63,8 +63,6 @@ pub fn imageNew(img: *Image, device: *const Device, info: vk.ImageCreateInfo, me
img.array_layers = @intCast(u8, info.array_layers);
img.imported = false;
std.debug.print("gettextpool img info {}\n", .{info.usage});
const pool = getTexturePool(info.usage, mem_usage) orelse return error.NoPoolForImage;
const result = try vma.Allocator.createImage(s_allocator.handle, info, .{
@ -76,10 +74,14 @@ pub fn imageNew(img: *Image, device: *const Device, info: vk.ImageCreateInfo, me
});
img.handle = result.image;
img.allocation = result.allocation;
var view_info = try image.infoToViewInfo(&info);
view_info.image = img.handle;
img.view = try device.dispatch.createImageView(device.handle, &view_info, null);
}
const pm_imagedel = profiler.ProfileMark.init("memory.imageDel");
pub fn imageDel(img: *const Image, device: *const Device) void {
pub fn imageDel(img: *const image.Image, device: *const Device) void {
pm_imagedel.begin();
defer pm_imagedel.end();
@ -100,8 +102,6 @@ fn getTexturePool(usage: vk.ImageUsageFlags, mem_usage: vma.MemoryUsage) ?vma.Po
else => {},
}
std.debug.print("usage in getTexturePool {}\n", .{usage});
const attachment_usage: vk.ImageUsageFlags = .{ .color_attachment_bit = true, .depth_stencil_attachment_bit = true };
std.debug.assert(pool != null or usage.intersect(attachment_usage).toInt() != 0);
@ -260,9 +260,9 @@ pub const Releasable = struct {
.buffer => |buffer| {
allocator.handle.destroyBuffer(buffer.handle, buffer.allocation);
},
.image => |image| {
device.dispatch.destroyImageView(device.handle, image.view, null);
allocator.handle.destroyImage(image.handle, image.allocation);
.image => |img| {
device.dispatch.destroyImageView(device.handle, img.view, null);
allocator.handle.destroyImage(img.handle, img.allocation);
},
.image_view => |image_view| {
device.dispatch.destroyImageView(device.handle, image_view, null);

View file

@ -52,6 +52,8 @@ const graphics_access: vk.AccessFlags = .{
.shader_write_bit = true,
.color_attachment_read_bit = true,
.color_attachment_write_bit = true,
.depth_stencil_attachment_read_bit = true,
.depth_stencil_attachment_write_bit = true,
.conditional_rendering_read_bit_ext = true,
.acceleration_structure_read_bit_khr = true,
.acceleration_structure_write_bit_khr = true,
@ -289,7 +291,10 @@ pub const Queue = struct {
pub fn init(device: *const Device, support: *const Support, id: usize) !Self {
const family = support.families[id] orelse unreachable; // fix this silliness
const index = support.indices[id];
assert(family >= 0);
assert(device.handle != .null_handle);
const handle = device.dispatch.getDeviceQueue(device.handle, family, @enumToInt(index));
assert(handle != .null_handle);
var self = Self{
.family = family,