56668744
Reset row GPU spans on render cache resize
a73x 2026-04-08 19:00
Commit message
src/main.zig
| Old | New | ||
|---|---|---|---|
| @@ -731,15 +731,15 @@ test "RenderCache resizeRows preserves surviving row caches" { | |||
| 731 | try cache.resizeRows(std.testing.allocator, 3); | 731 | try cache.resizeRows(std.testing.allocator, 3); |
| 732 | try std.testing.expectEqual(@as(usize, 3), cache.rows.len); | 732 | try std.testing.expectEqual(@as(usize, 3), cache.rows.len); |
| 733 | try std.testing.expectEqual(@as(usize, 1), cache.rows[0].instances.items.len); | 733 | try std.testing.expectEqual(@as(usize, 1), cache.rows[0].instances.items.len); |
| 734 | try std.testing.expectEqual(@as(u32, 17), cache.rows[0].gpu_offset_instances); | 734 | try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_offset_instances); |
| 735 | try std.testing.expectEqual(@as(u32, 1), cache.rows[0].gpu_len_instances); | 735 | try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_len_instances); |
| 736 | try std.testing.expectEqual(@as(usize, 0), cache.rows[2].instances.items.len); | 736 | try std.testing.expectEqual(@as(usize, 0), cache.rows[2].instances.items.len); |
| 737 | 737 | ||
| 738 | try cache.resizeRows(std.testing.allocator, 1); | 738 | try cache.resizeRows(std.testing.allocator, 1); |
| 739 | try std.testing.expectEqual(@as(usize, 1), cache.rows.len); | 739 | try std.testing.expectEqual(@as(usize, 1), cache.rows.len); |
| 740 | try std.testing.expectEqual(@as(usize, 1), cache.rows[0].instances.items.len); | 740 | try std.testing.expectEqual(@as(usize, 1), cache.rows[0].instances.items.len); |
| 741 | try std.testing.expectEqual(@as(u32, 17), cache.rows[0].gpu_offset_instances); | 741 | try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_offset_instances); |
| 742 | try std.testing.expectEqual(@as(u32, 1), cache.rows[0].gpu_len_instances); | 742 | try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_len_instances); |
| 743 | } | 743 | } |
| 744 | 744 | ||
| 745 | test "RenderCache deinit resets fields after releasing row storage" { | 745 | test "RenderCache deinit resets fields after releasing row storage" { |
| @@ -815,7 +815,8 @@ test "RenderCache resizeRows truncates populated tail rows and preserves prefix | |||
| 815 | 815 | ||
| 816 | try std.testing.expectEqual(@as(usize, 1), cache.rows.len); | 816 | try std.testing.expectEqual(@as(usize, 1), cache.rows.len); |
| 817 | try std.testing.expectEqual(@as(usize, 1), cache.rows[0].instances.items.len); | 817 | try std.testing.expectEqual(@as(usize, 1), cache.rows[0].instances.items.len); |
| 818 | try std.testing.expectEqual(@as(u32, 10), cache.rows[0].gpu_offset_instances); | 818 | try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_offset_instances); |
| 819 | try std.testing.expectEqual(@as(u32, 0), cache.rows[0].gpu_len_instances); | ||
| 819 | try std.testing.expectEqual(@as(u32, 0), cache.total_instance_count); | 820 | try std.testing.expectEqual(@as(u32, 0), cache.total_instance_count); |
| 820 | try std.testing.expect(cache.layout_dirty); | 821 | try std.testing.expect(cache.layout_dirty); |
| 821 | } | 822 | } |
| @@ -889,6 +890,10 @@ const RenderCache = struct { | |||
| 889 | } | 890 | } |
| 890 | 891 | ||
| 891 | fn invalidateAfterResize(self: *RenderCache) void { | 892 | fn invalidateAfterResize(self: *RenderCache) void { |
| 893 | for (self.rows) |*row| { | ||
| 894 | row.gpu_offset_instances = 0; | ||
| 895 | row.gpu_len_instances = 0; | ||
| 896 | } | ||
| 892 | self.cursor_instances.clearRetainingCapacity(); | 897 | self.cursor_instances.clearRetainingCapacity(); |
| 893 | self.packed_instances.clearRetainingCapacity(); | 898 | self.packed_instances.clearRetainingCapacity(); |
| 894 | self.total_instance_count = 0; | 899 | self.total_instance_count = 0; |