52 lines
1.8 KiB
C#
52 lines
1.8 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);
|
|
|
|
long before = GC.GetAllocatedBytesForCurrentThread();
|
|
for (int iteration = 0; iteration < 10_000; iteration++)
|
|
{
|
|
Assert.False(state.RequiresBind(
|
|
pipelineLayout: 30,
|
|
packGeneration: 8));
|
|
}
|
|
long allocated = GC.GetAllocatedBytesForCurrentThread() - before;
|
|
|
|
Assert.Equal(0, allocated);
|
|
}
|
|
}
|