acdream/tests/AcDream.App.Tests/Rendering/Gpu/Vk/VulkanRenderFailurePolicyTests.cs

37 lines
1.5 KiB
C#

using AcDream.App.Rendering.Gpu.Vk;
using Silk.NET.Vulkan;
namespace AcDream.App.Tests.Rendering.Gpu.Vk;
public sealed class VulkanRenderFailurePolicyTests
{
[Fact]
public void ManagedOutOfMemoryAndNestedFatalFailuresAreTerminal()
{
Assert.True(VulkanRenderFailurePolicy.IsFatal(new OutOfMemoryException("managed")));
Assert.True(VulkanRenderFailurePolicy.IsFatal(new InvalidOperationException(
"wrapper",
new VulkanCallException("nested", Result.ErrorDeviceLost))));
Assert.True(VulkanRenderFailurePolicy.IsFatal(new AggregateException(
new InvalidOperationException("ordinary"),
new VulkanCallException("nested", Result.ErrorOutOfDeviceMemory))));
}
[Theory]
[InlineData(Result.ErrorDeviceLost)]
[InlineData(Result.ErrorOutOfHostMemory)]
[InlineData(Result.ErrorOutOfDeviceMemory)]
[InlineData(Result.ErrorSurfaceLostKhr)]
public void TerminalVulkanResultsCannotFallBackToAnotherGraph(Result result) =>
Assert.True(VulkanRenderFailurePolicy.IsFatal(
new VulkanCallException("test", result)));
[Fact]
public void OrdinaryPackAndNonTerminalVulkanFailuresMayBeQuarantined()
{
Assert.False(VulkanRenderFailurePolicy.IsFatal(
new InvalidOperationException("pack bug")));
Assert.False(VulkanRenderFailurePolicy.IsFatal(
new VulkanCallException("pack pipeline", Result.ErrorFormatNotSupported)));
}
}