From e9ddad2dfb1ba6ee16cdecdf82a308b76aa87741 Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Wed, 9 Oct 2024 09:31:28 +0200 Subject: [PATCH] Added a DX12/DXIL variant of the clear_swapchain program. --- .../0_clear_swapchain_dxil/app.cpp | 30 +++++++++++++++++++ .../0_clear_swapchain_dxil/app.hpp | 19 ++++++++++++ private/sdl_gpu_test/application.cpp | 2 +- private/sdl_gpu_test/application.hpp | 6 ++++ 4 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 private/sdl_gpu_test/0_clear_swapchain_dxil/app.cpp create mode 100644 private/sdl_gpu_test/0_clear_swapchain_dxil/app.hpp diff --git a/private/sdl_gpu_test/0_clear_swapchain_dxil/app.cpp b/private/sdl_gpu_test/0_clear_swapchain_dxil/app.cpp new file mode 100644 index 0000000..2512d29 --- /dev/null +++ b/private/sdl_gpu_test/0_clear_swapchain_dxil/app.cpp @@ -0,0 +1,30 @@ + +#include "./app.hpp" + +namespace sdl_gpu_test +{ +void ClearSwapchainDXILApp::init(const AppInitArgs& args) +{ + mOptions.shaderFormats = {.dxil = true}; + Application::init(args); +} + +void ClearSwapchainDXILApp::update(const AppUpdateArgs& args) +{ + Application::update(args); + + sdlpp::GPUCommandBuffer cmdBuffer = mDevice.acquireCommandBuffer(); + Uint32 swapchainWidth = 0, swapchainHeight = 0; + sdlpp::GPUTexture swapchainTexture = cmdBuffer.acquireSwapchainTexture(mWindow, swapchainWidth, swapchainHeight); + std::array colorTargets = {sdlpp::GPUColorTargetInfo{ + .texture = swapchainTexture, + .clearColor = {.r = 1.f, .g = 0.f, .b = 0.f, .a = 1.f}, + .loadOp = sdlpp::GPULoadOp::CLEAR, + }}; + sdlpp::GPURenderPass renderPass = cmdBuffer.beginRenderPass({ + .colorTargetInfos = colorTargets + }); + renderPass.end(); + cmdBuffer.submit(); +} +} diff --git a/private/sdl_gpu_test/0_clear_swapchain_dxil/app.hpp b/private/sdl_gpu_test/0_clear_swapchain_dxil/app.hpp new file mode 100644 index 0000000..688bb10 --- /dev/null +++ b/private/sdl_gpu_test/0_clear_swapchain_dxil/app.hpp @@ -0,0 +1,19 @@ + +#pragma once + +#if !defined(SDL_GPU_TEST_PRIVATE_SDL_GPU_TEST_0_CLEAR_SWAPCHAIN_DXIL_APP_HPP_INCLUDED) +#define SDL_GPU_TEST_PRIVATE_SDL_GPU_TEST_0_CLEAR_SWAPCHAIN_DXIL_APP_HPP_INCLUDED 1 + +#include "../application.hpp" + +namespace sdl_gpu_test +{ +class ClearSwapchainDXILApp : public Application +{ +public: + void init(const AppInitArgs& args) override; + void update(const AppUpdateArgs& args) override; +}; +} // namespace sdl_gpu_test + +#endif // !defined(SDL_GPU_TEST_PRIVATE_SDL_GPU_TEST_0_CLEAR_SWAPCHAIN_DXIL_APP_HPP_INCLUDED) diff --git a/private/sdl_gpu_test/application.cpp b/private/sdl_gpu_test/application.cpp index 9e1fc1a..ab784d2 100644 --- a/private/sdl_gpu_test/application.cpp +++ b/private/sdl_gpu_test/application.cpp @@ -20,7 +20,7 @@ void Application::init(const AppInitArgs& args) }); mDevice.create({ - .formatFlags{.spirv = true}, + .formatFlags = mOptions.shaderFormats, .debugMode = true }); mDevice.claimWindow(mWindow); diff --git a/private/sdl_gpu_test/application.hpp b/private/sdl_gpu_test/application.hpp index de62374..e4b59f6 100644 --- a/private/sdl_gpu_test/application.hpp +++ b/private/sdl_gpu_test/application.hpp @@ -26,6 +26,11 @@ struct AppCleanupArgs }; +struct AppOptions +{ + sdlpp::GPUShaderFormatFlags shaderFormats = {.spirv = true}; +}; + struct AppUpdateArgs { float secondsSinceStart = 0.f; @@ -39,6 +44,7 @@ protected: sdlpp::GPUDevice mDevice; mijin::StackedFileSystemAdapter mFileSystem; mijin::SimpleTaskLoop mTaskLoop; + AppOptions mOptions; bool mRunning = true; public: virtual ~Application() noexcept = default;