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;