37 lines
1.5 KiB
C#
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)));
|
|
}
|
|
}
|