adding storage image read and writes
Build / build (push) Successful in 2m49s
Test / build_and_test (push) Successful in 28m36s

This commit is contained in:
2026-04-29 01:20:58 +02:00
parent e1ed409894
commit 0ea7281eff
7 changed files with 158 additions and 21 deletions
+3 -4
View File
@@ -189,11 +189,10 @@ fn writeDescriptorSets(self: *Self, rt: *spv.Runtime) !void {
}
},
.image => |image_data_array| for (image_data_array, 0..) |image_data, descriptor_index| {
if (image_data.object) |image| {
const memory = if (image.interface.memory) |memory| memory else continue :bindings;
const map: []u8 = @as([*]u8, @ptrCast(try memory.map(image.interface.memory_offset, try image.interface.getTotalSize())))[0..try image.interface.getTotalSize()];
if (image_data.object) |image_view| {
const addr: usize = @intFromPtr(image_view);
try rt.writeDescriptorSet(
map,
std.mem.asBytes(&addr),
@as(u32, @intCast(set_index)),
@as(u32, @intCast(binding_index)),
@as(u32, @intCast(descriptor_index)),
+3 -6
View File
@@ -83,7 +83,6 @@ pub fn draw(self: *Self, vertex_count: usize, instance_count: usize, first_verte
const render_target_view: *base.ImageView = (self.framebuffer orelse return).interface.attachments[0];
const render_target: *SoftImage = @alignCast(@fieldParentPtr("interface", render_target_view.image));
const render_target_memory = if (render_target.interface.memory) |memory| memory else return VkError.InvalidDeviceMemoryDrv;
var arena: std.heap.ArenaAllocator = .init(self.device.device_allocator.allocator());
defer arena.deinit();
@@ -122,10 +121,8 @@ pub fn draw(self: *Self, vertex_count: usize, instance_count: usize, first_verte
}
};
const texel_size = base.format.texelSize(render_target_view.format);
for (draw_call.fragments) |fragment| {
const texel_offset = try render_target.getTexelMemoryOffset(
try render_target.writeFloat4(
.{
.x = @intFromFloat(fragment.position[0]),
.y = @intFromFloat(fragment.position[1]),
@@ -136,9 +133,9 @@ pub fn draw(self: *Self, vertex_count: usize, instance_count: usize, first_verte
.mip_level = render_target_view.subresource_range.base_mip_level,
.array_layer = render_target_view.subresource_range.base_array_layer,
},
render_target_view.format,
fragment.color,
);
const map: []u8 = @as([*]u8, @ptrCast(try render_target_memory.map(render_target.interface.memory_offset + texel_offset, texel_size)))[0..texel_size];
blitter.writeFloat4(fragment.color, map, render_target_view.format);
}
_ = first_vertex;
+2 -2
View File
@@ -10,8 +10,8 @@ const VkError = base.VkError;
pub const SoftImage = @import("../SoftImage.zig");
pub const SoftImageView = @import("../SoftImageView.zig");
const F32x4 = zm.F32x4;
const U32x4 = @Vector(4, u32);
pub const F32x4 = zm.F32x4;
pub const U32x4 = @Vector(4, u32);
const State = struct {
src_format: vk.Format,