a73x

2ff87ed6

Add text coverage variant helpers

a73x   2026-04-09 07:58


diff --git a/src/renderer.zig b/src/renderer.zig
index 4726717..eacb89e 100644
--- a/src/renderer.zig
+++ b/src/renderer.zig
@@ -313,6 +313,22 @@ fn nextInstanceCapacity(current: u32, needed: u32) u32 {
    return capacity;
}

pub const CoverageVariant = enum(u32) {
    baseline,
    mild,
    medium,
    crisp,
};

fn coverageVariantParams(variant: CoverageVariant) [2]f32 {
    return switch (variant) {
        .baseline => .{ 1.0, 0.0 },
        .mild => .{ 1.15, 0.0 },
        .medium => .{ 1.3, 0.0 },
        .crisp => .{ 1.55, -0.08 },
    };
}

const InstanceUploadRequest = struct {
    current_capacity: u32,
    offset_instances: u32,
@@ -1468,6 +1484,22 @@ test "swapchainNeedsRebuild flags suboptimal result" {
    try std.testing.expect(!swapchainNeedsRebuild(.success));
}

test "coverageVariantParams returns baseline values" {
    try std.testing.expectEqualDeep([2]f32{ 1.0, 0.0 }, coverageVariantParams(.baseline));
}

test "coverageVariantParams steepens progressively" {
    const mild = coverageVariantParams(.mild);
    const medium = coverageVariantParams(.medium);
    const crisp = coverageVariantParams(.crisp);

    try std.testing.expect(mild[0] < medium[0]);
    try std.testing.expect(medium[0] < crisp[0]);
    try std.testing.expectEqual(@as(f32, 0.0), mild[1]);
    try std.testing.expectEqual(@as(f32, 0.0), medium[1]);
    try std.testing.expectEqual(@as(f32, -0.08), crisp[1]);
}

test "range upload falls back to full upload when capacity must grow" {
    const decision = planInstanceUpload(.{
        .current_capacity = 8,