acdream/tests/AcDream.App.Tests/Rendering/Gpu/Vk/VulkanDrawBindingStateTests.cs
Erik d123c4b67c
All checks were successful
CI / linux-portable (push) Successful in 3m30s
CI / windows-gate (push) Successful in 6m15s
CI / release (push) Successful in 2m11s
test(ci): harden scheduling and allocation gates
2026-08-27 19:28:10 +02:00

48 lines
1.7 KiB
C#

using AcDream.App.Rendering.Gpu.Vk;
namespace AcDream.App.Tests.Rendering.Gpu.Vk;
public sealed class VulkanDrawBindingStateTests
{
[Fact]
public void FirstDrawBinds_IdenticalDrawReuses_ChangedInputsRebind()
{
var state = new VulkanDrawBindingState();
Assert.True(state.RequiresBind(pipelineLayout: 10, packGeneration: 3));
state.MarkBound(pipelineLayout: 10, packGeneration: 3);
Assert.False(state.RequiresBind(pipelineLayout: 10, packGeneration: 3));
state.MarkDirty();
Assert.True(state.RequiresBind(pipelineLayout: 10, packGeneration: 3));
state.MarkBound(pipelineLayout: 10, packGeneration: 3);
Assert.True(state.RequiresBind(pipelineLayout: 11, packGeneration: 3));
Assert.True(state.RequiresBind(pipelineLayout: 10, packGeneration: 4));
}
[Fact]
public void PackAndRetailLayoutsCannotReuseEachOthersBinding()
{
var state = new VulkanDrawBindingState();
state.MarkBound(pipelineLayout: 20, packGeneration: 7);
Assert.True(state.RequiresBind(pipelineLayout: 21, packGeneration: 0));
state.MarkBound(pipelineLayout: 21, packGeneration: 0);
Assert.True(state.RequiresBind(pipelineLayout: 20, packGeneration: 7));
}
[Fact]
public void WarmChecksAllocateZero()
{
var state = new VulkanDrawBindingState();
state.MarkBound(pipelineLayout: 30, packGeneration: 8);
ZeroAllocationProbe.AssertAllocatesNothing(
"VulkanDrawBindingState.RequiresBind",
() => _ = state.RequiresBind(
pipelineLayout: 30,
packGeneration: 8),
batchSize: 10_000);
}
}