a73x

56668744

Reset row GPU spans on render cache resize

a73x   2026-04-08 19:00


diff --git a/src/main.zig b/src/main.zig
index c98a9d1..22c217c 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -731,15 +731,15 @@ test "RenderCache resizeRows preserves surviving row caches" {
    try cache.resizeRows(std.testing.allocator, 3);
    try std.testing.expectEqual(@as(usize, 3), cache.rows.len);
    try std.testing.expectEqual(@as(usize, 1), cache.rows[0].instances.items.len);
    try std.testing.expectEqual(@as(u32, 17), cache.rows[0].gpu_offset_instances);
    try std.testing.expectEqual(@as(u32, 1), cache.rows[0].gpu_len_instances);
    try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_offset_instances);
    try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_len_instances);
    try std.testing.expectEqual(@as(usize, 0), cache.rows[2].instances.items.len);

    try cache.resizeRows(std.testing.allocator, 1);
    try std.testing.expectEqual(@as(usize, 1), cache.rows.len);
    try std.testing.expectEqual(@as(usize, 1), cache.rows[0].instances.items.len);
    try std.testing.expectEqual(@as(u32, 17), cache.rows[0].gpu_offset_instances);
    try std.testing.expectEqual(@as(u32, 1), cache.rows[0].gpu_len_instances);
    try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_offset_instances);
    try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_len_instances);
}

test "RenderCache deinit resets fields after releasing row storage" {
@@ -815,7 +815,8 @@ test "RenderCache resizeRows truncates populated tail rows and preserves prefix 

    try std.testing.expectEqual(@as(usize, 1), cache.rows.len);
    try std.testing.expectEqual(@as(usize, 1), cache.rows[0].instances.items.len);
    try std.testing.expectEqual(@as(u32, 10), cache.rows[0].gpu_offset_instances);
    try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_offset_instances);
    try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_len_instances);
    try std.testing.expectEqual(@as(u32, 0), cache.total_instance_count);
    try std.testing.expect(cache.layout_dirty);
}
@@ -889,6 +890,10 @@ const RenderCache = struct {
    }

    fn invalidateAfterResize(self: *RenderCache) void {
        for (self.rows) |*row| {
            row.gpu_offset_instances = 0;
            row.gpu_len_instances = 0;
        }
        self.cursor_instances.clearRetainingCapacity();
        self.packed_instances.clearRetainingCapacity();
        self.total_instance_count = 0;