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 --- tools/gfx-unit-test/swap-chain-resize-test.cpp | 84 ++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 tools/gfx-unit-test/swap-chain-resize-test.cpp (limited to 'tools') 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