From c4ed2385e98385b2459b93a151df9e6e7d7d3591 Mon Sep 17 00:00:00 2001
From: lucy96chen <47800040+lucy96chen@users.noreply.github.com>
Date: Thu, 2 Jun 2022 14:02:18 -0700
Subject: Add simple swapchain resize test (#2249)
* Added swapchain resize test
* fixed externals
* Rerun CI
* Ignore test if swapchain fails to create
---
.../gfx-unit-test-tool/gfx-unit-test-tool.vcxproj | 4 ++
.../gfx-unit-test-tool.vcxproj.filters | 3 +
premake5.lua | 2 +-
tools/gfx-unit-test/swap-chain-resize-test.cpp | 84 ++++++++++++++++++++++
4 files changed, 92 insertions(+), 1 deletion(-)
create mode 100644 tools/gfx-unit-test/swap-chain-resize-test.cpp
diff --git a/build/visual-studio/gfx-unit-test-tool/gfx-unit-test-tool.vcxproj b/build/visual-studio/gfx-unit-test-tool/gfx-unit-test-tool.vcxproj
index ea9cc9bd4..7c8dd3144 100644
--- a/build/visual-studio/gfx-unit-test-tool/gfx-unit-test-tool.vcxproj
+++ b/build/visual-studio/gfx-unit-test-tool/gfx-unit-test-tool.vcxproj
@@ -296,6 +296,7 @@
+
@@ -326,6 +327,9 @@
{F5ADB74E-02A7-44FB-AA3B-FC02F8AC7A4B}
+
+ {3565FE5E-4FA3-11EB-AE93-0242AC130002}
+
diff --git a/build/visual-studio/gfx-unit-test-tool/gfx-unit-test-tool.vcxproj.filters b/build/visual-studio/gfx-unit-test-tool/gfx-unit-test-tool.vcxproj.filters
index d49f305fe..fd4b2707f 100644
--- a/build/visual-studio/gfx-unit-test-tool/gfx-unit-test-tool.vcxproj.filters
+++ b/build/visual-studio/gfx-unit-test-tool/gfx-unit-test-tool.vcxproj.filters
@@ -89,6 +89,9 @@
Source Files
+
+ Source Files
+
Source Files
diff --git a/premake5.lua b/premake5.lua
index 75d093612..20dc6557c 100644
--- a/premake5.lua
+++ b/premake5.lua
@@ -1389,7 +1389,7 @@ tool "slangd"
uuid "092DAB9F-1DA5-4538-ADD7-1A8D1DBFD519"
includedirs { "." }
addSourceDir "tools/unit-test"
- links { "core", "slang", "gfx", "gfx-util" }
+ links { "core", "slang", "gfx", "gfx-util", "platform" }
toolSharedLibrary "slang-unit-test"
uuid "0162864E-7651-4B5E-9105-C571105276EA"
diff --git a/tools/gfx-unit-test/swap-chain-resize-test.cpp b/tools/gfx-unit-test/swap-chain-resize-test.cpp
new file mode 100644
index 000000000..903deba30
--- /dev/null
+++ b/tools/gfx-unit-test/swap-chain-resize-test.cpp
@@ -0,0 +1,84 @@
+#include "tools/unit-test/slang-unit-test.h"
+
+#include "slang-gfx.h"
+#include "gfx-test-util.h"
+#include "tools/gfx-util/shader-cursor.h"
+#include "tools/platform/window.h"
+#include "source/core/slang-basic.h"
+
+using namespace gfx;
+using namespace Slang;
+
+namespace gfx_test
+{
+ struct SwapchainResizeTest
+ {
+ IDevice* device;
+ UnitTestContext* context;
+
+ RefPtr window;
+ ComPtr queue;
+ ComPtr swapchain;
+
+ static const GfxCount width = 500;
+ static const GfxCount height = 500;
+ static const int kSwapchainImageCount = 2;
+
+ void init(IDevice* device, UnitTestContext* context)
+ {
+ this->device = device;
+ this->context = context;
+ }
+
+ void createRequiredResources()
+ {
+ platform::Application::init();
+
+ platform::WindowDesc windowDesc;
+ windowDesc.title = "";
+ windowDesc.width = width;
+ windowDesc.height = height;
+ windowDesc.style = platform::WindowStyle::Default;
+ window = platform::Application::createWindow(windowDesc);
+
+ ICommandQueue::Desc queueDesc = {};
+ queueDesc.type = ICommandQueue::QueueType::Graphics;
+ queue = device->createCommandQueue(queueDesc);
+
+ ISwapchain::Desc swapchainDesc = {};
+ swapchainDesc.format = Format::R8G8B8A8_UNORM;
+ swapchainDesc.width = width;
+ swapchainDesc.height = height;
+ swapchainDesc.imageCount = kSwapchainImageCount;
+ swapchainDesc.queue = queue;
+ WindowHandle windowHandle = window->getNativeHandle().convert();
+ if (SLANG_FAILED(device->createSwapchain(swapchainDesc, windowHandle, swapchain.writeRef())))
+ SLANG_IGNORE_TEST;
+ }
+
+ void run()
+ {
+ createRequiredResources();
+ // TODO: Extend test by drawing for a few frames before and after resize to ensure swapchain remains usable
+ GFX_CHECK_CALL(swapchain->resize(700, 700));
+ }
+ };
+
+ void swapchainResizeTestImpl(IDevice* device, UnitTestContext* context)
+ {
+ SwapchainResizeTest t;
+ t.init(device, context);
+ t.run();
+ }
+
+ SLANG_UNIT_TEST(swapchainResizeD3D12)
+ {
+ runTestImpl(swapchainResizeTestImpl, unitTestContext, RenderApiFlag::D3D12);
+ }
+
+ SLANG_UNIT_TEST(swapchainResizeVulkan)
+ {
+ runTestImpl(swapchainResizeTestImpl, unitTestContext, RenderApiFlag::Vulkan);
+ }
+
+}
--
cgit v1.2.3