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