48 lines
1.7 KiB
C#
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);
|
|
}
|
|
}
|