From b1b0abdbbff2c74692ff279ca3bb05d975e2eaae Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Mon, 29 May 2023 13:18:13 +0200 Subject: [PATCH] [dxvk] Move presenter implementation to DXVK module --- src/d3d11/d3d11_swapchain.cpp | 16 ++++++++-------- src/d3d11/d3d11_swapchain.h | 4 ++-- src/d3d9/d3d9_swapchain.cpp | 16 ++++++++-------- src/d3d9/d3d9_swapchain.h | 4 ++-- src/dxvk/dxvk_cmdlist.cpp | 2 +- src/dxvk/dxvk_cmdlist.h | 7 +++---- src/dxvk/dxvk_device.cpp | 2 +- src/dxvk/dxvk_device.h | 5 ++--- .../dxvk_presenter.cpp} | 10 ++++------ .../vulkan_presenter.h => dxvk/dxvk_presenter.h} | 14 ++++++++------ src/dxvk/dxvk_queue.h | 5 ++--- src/dxvk/meson.build | 1 + src/vulkan/meson.build | 1 - 13 files changed, 42 insertions(+), 45 deletions(-) rename src/{vulkan/vulkan_presenter.cpp => dxvk/dxvk_presenter.cpp} (99%) rename src/{vulkan/vulkan_presenter.h => dxvk/dxvk_presenter.h} (96%) diff --git a/src/d3d11/d3d11_swapchain.cpp b/src/d3d11/d3d11_swapchain.cpp index b6dcc1654..b08c6a3de 100644 --- a/src/d3d11/d3d11_swapchain.cpp +++ b/src/d3d11/d3d11_swapchain.cpp @@ -350,8 +350,8 @@ namespace dxvk { return DXGI_STATUS_OCCLUDED; // Presentation semaphores and WSI swap chain image - vk::PresenterInfo info = m_presenter->info(); - vk::PresenterSync sync; + PresenterInfo info = m_presenter->info(); + PresenterSync sync; uint32_t imageIndex = 0; @@ -397,7 +397,7 @@ namespace dxvk { void D3D11SwapChain::SubmitPresent( D3D11ImmediateContext* pContext, - const vk::PresenterSync& Sync, + const PresenterSync& Sync, uint32_t FrameId) { auto lock = pContext->LockContext(); @@ -441,7 +441,7 @@ namespace dxvk { m_presentStatus.result = VK_SUCCESS; m_dirtyHdrMetadata = true; - vk::PresenterDesc presenterDesc; + PresenterDesc presenterDesc; presenterDesc.imageExtent = { m_desc.Width, m_desc.Height }; presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1); presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats); @@ -479,21 +479,21 @@ namespace dxvk { void D3D11SwapChain::CreatePresenter() { DxvkDeviceQueue graphicsQueue = m_device->queues().graphics; - vk::PresenterDevice presenterDevice; + PresenterDevice presenterDevice; presenterDevice.queueFamily = graphicsQueue.queueFamily; presenterDevice.queue = graphicsQueue.queueHandle; presenterDevice.adapter = m_device->adapter()->handle(); presenterDevice.features.fullScreenExclusive = m_device->features().extFullScreenExclusive; presenterDevice.features.hdrMetadata = m_device->features().extHdrMetadata; - vk::PresenterDesc presenterDesc; + PresenterDesc presenterDesc; presenterDesc.imageExtent = { m_desc.Width, m_desc.Height }; presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1); presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats); presenterDesc.numPresentModes = PickPresentModes(false, presenterDesc.presentModes); presenterDesc.fullScreenExclusive = PickFullscreenMode(); - m_presenter = new vk::Presenter( + m_presenter = new Presenter( m_device->adapter()->vki(), m_device->vkd(), presenterDevice, @@ -513,7 +513,7 @@ namespace dxvk { void D3D11SwapChain::CreateRenderTargetViews() { - vk::PresenterInfo info = m_presenter->info(); + PresenterInfo info = m_presenter->info(); m_imageViews.clear(); m_imageViews.resize(info.imageCount); diff --git a/src/d3d11/d3d11_swapchain.h b/src/d3d11/d3d11_swapchain.h index 9da85d664..5722f38d9 100644 --- a/src/d3d11/d3d11_swapchain.h +++ b/src/d3d11/d3d11_swapchain.h @@ -97,7 +97,7 @@ namespace dxvk { Rc m_device; Rc m_context; - Rc m_presenter; + Rc m_presenter; Rc m_swapImage; Rc m_swapImageView; @@ -130,7 +130,7 @@ namespace dxvk { void SubmitPresent( D3D11ImmediateContext* pContext, - const vk::PresenterSync& Sync, + const PresenterSync& Sync, uint32_t FrameId); void SynchronizePresent(); diff --git a/src/d3d9/d3d9_swapchain.cpp b/src/d3d9/d3d9_swapchain.cpp index 191b8019e..4624e07ae 100644 --- a/src/d3d9/d3d9_swapchain.cpp +++ b/src/d3d9/d3d9_swapchain.cpp @@ -754,8 +754,8 @@ namespace dxvk { SynchronizePresent(); // Presentation semaphores and WSI swap chain image - vk::PresenterInfo info = m_presenter->info(); - vk::PresenterSync sync; + PresenterInfo info = m_presenter->info(); + PresenterSync sync; uint32_t imageIndex = 0; @@ -808,7 +808,7 @@ namespace dxvk { } - void D3D9SwapChainEx::SubmitPresent(const vk::PresenterSync& Sync, uint32_t FrameId) { + void D3D9SwapChainEx::SubmitPresent(const PresenterSync& Sync, uint32_t FrameId) { // Present from CS thread so that we don't // have to synchronize with it first. m_presentStatus.result = VK_NOT_READY; @@ -847,7 +847,7 @@ namespace dxvk { m_presentStatus.result = VK_SUCCESS; - vk::PresenterDesc presenterDesc; + PresenterDesc presenterDesc; presenterDesc.imageExtent = GetPresentExtent(); presenterDesc.imageCount = PickImageCount(m_presentParams.BackBufferCount + 1); presenterDesc.numFormats = PickFormats(EnumerateFormat(m_presentParams.BackBufferFormat), presenterDesc.formats); @@ -883,19 +883,19 @@ namespace dxvk { DxvkDeviceQueue graphicsQueue = m_device->queues().graphics; - vk::PresenterDevice presenterDevice; + PresenterDevice presenterDevice; presenterDevice.queueFamily = graphicsQueue.queueFamily; presenterDevice.queue = graphicsQueue.queueHandle; presenterDevice.adapter = m_device->adapter()->handle(); - vk::PresenterDesc presenterDesc; + PresenterDesc presenterDesc; presenterDesc.imageExtent = GetPresentExtent(); presenterDesc.imageCount = PickImageCount(m_presentParams.BackBufferCount + 1); presenterDesc.numFormats = PickFormats(EnumerateFormat(m_presentParams.BackBufferFormat), presenterDesc.formats); presenterDesc.numPresentModes = PickPresentModes(false, presenterDesc.presentModes); presenterDesc.fullScreenExclusive = PickFullscreenMode(); - m_presenter = new vk::Presenter( + m_presenter = new Presenter( m_device->adapter()->vki(), m_device->vkd(), presenterDevice, @@ -916,7 +916,7 @@ namespace dxvk { void D3D9SwapChainEx::CreateRenderTargetViews() { - vk::PresenterInfo info = m_presenter->info(); + PresenterInfo info = m_presenter->info(); m_imageViews.clear(); m_imageViews.resize(info.imageCount); diff --git a/src/d3d9/d3d9_swapchain.h b/src/d3d9/d3d9_swapchain.h index 9d2837a5d..9949f1129 100644 --- a/src/d3d9/d3d9_swapchain.h +++ b/src/d3d9/d3d9_swapchain.h @@ -134,7 +134,7 @@ namespace dxvk { Rc m_context; Rc m_blitter; - Rc m_presenter; + Rc m_presenter; Rc m_hud; @@ -179,7 +179,7 @@ namespace dxvk { void PresentImage(UINT PresentInterval); - void SubmitPresent(const vk::PresenterSync& Sync, uint32_t FrameId); + void SubmitPresent(const PresenterSync& Sync, uint32_t FrameId); void SynchronizePresent(); diff --git a/src/dxvk/dxvk_cmdlist.cpp b/src/dxvk/dxvk_cmdlist.cpp index 42fd0a9c4..6887d939d 100644 --- a/src/dxvk/dxvk_cmdlist.cpp +++ b/src/dxvk/dxvk_cmdlist.cpp @@ -397,7 +397,7 @@ namespace dxvk { m_cmdSubmissions.clear(); m_cmdSparseBinds.clear(); - m_wsiSemaphores = vk::PresenterSync(); + m_wsiSemaphores = PresenterSync(); // Reset actual command buffers and pools m_graphicsPool->reset(); diff --git a/src/dxvk/dxvk_cmdlist.h b/src/dxvk/dxvk_cmdlist.h index 988c9e4ad..bd4edd576 100644 --- a/src/dxvk/dxvk_cmdlist.h +++ b/src/dxvk/dxvk_cmdlist.h @@ -2,8 +2,6 @@ #include -#include "../vulkan/vulkan_presenter.h" - #include "dxvk_bind_mask.h" #include "dxvk_buffer.h" #include "dxvk_descriptor.h" @@ -14,6 +12,7 @@ #include "dxvk_lifetime.h" #include "dxvk_limits.h" #include "dxvk_pipelayout.h" +#include "dxvk_presenter.h" #include "dxvk_signal.h" #include "dxvk_sparse.h" #include "dxvk_staging.h" @@ -354,7 +353,7 @@ namespace dxvk { * The given semaphores must be binary semaphores. * \param [in] wsiSemaphores Pair of WSI semaphores */ - void setWsiSemaphores(const vk::PresenterSync& wsiSemaphores) { + void setWsiSemaphores(const PresenterSync& wsiSemaphores) { m_wsiSemaphores = wsiSemaphores; } @@ -1027,7 +1026,7 @@ namespace dxvk { DxvkCommandSubmissionInfo m_cmd; - vk::PresenterSync m_wsiSemaphores = { }; + PresenterSync m_wsiSemaphores = { }; DxvkLifetimeTracker m_resources; DxvkSignalTracker m_signalTracker; diff --git a/src/dxvk/dxvk_device.cpp b/src/dxvk/dxvk_device.cpp index 87022f857..718a1e277 100644 --- a/src/dxvk/dxvk_device.cpp +++ b/src/dxvk/dxvk_device.cpp @@ -252,7 +252,7 @@ namespace dxvk { void DxvkDevice::presentImage( - const Rc& presenter, + const Rc& presenter, DxvkSubmitStatus* status) { status->result = VK_NOT_READY; diff --git a/src/dxvk/dxvk_device.h b/src/dxvk/dxvk_device.h index 7c222907c..8c472700c 100644 --- a/src/dxvk/dxvk_device.h +++ b/src/dxvk/dxvk_device.h @@ -15,6 +15,7 @@ #include "dxvk_objects.h" #include "dxvk_options.h" #include "dxvk_pipemanager.h" +#include "dxvk_presenter.h" #include "dxvk_queue.h" #include "dxvk_recycler.h" #include "dxvk_renderpass.h" @@ -25,8 +26,6 @@ #include "dxvk_unbound.h" #include "dxvk_marker.h" -#include "../vulkan/vulkan_presenter.h" - namespace dxvk { class DxvkInstance; @@ -458,7 +457,7 @@ namespace dxvk { * \param [out] status Present status */ void presentImage( - const Rc& presenter, + const Rc& presenter, DxvkSubmitStatus* status); /** diff --git a/src/vulkan/vulkan_presenter.cpp b/src/dxvk/dxvk_presenter.cpp similarity index 99% rename from src/vulkan/vulkan_presenter.cpp rename to src/dxvk/dxvk_presenter.cpp index 62499530d..a1aade7e8 100644 --- a/src/vulkan/vulkan_presenter.cpp +++ b/src/dxvk/dxvk_presenter.cpp @@ -1,14 +1,12 @@ -#include "vulkan_presenter.h" - -#include "../dxvk/dxvk_format.h" +#include "dxvk_presenter.h" #include "../wsi/wsi_window.h" -namespace dxvk::vk { +namespace dxvk { Presenter::Presenter( - const Rc& vki, - const Rc& vkd, + const Rc& vki, + const Rc& vkd, PresenterDevice device, const PresenterDesc& desc) : m_vki(vki), m_vkd(vkd), m_device(device) { diff --git a/src/vulkan/vulkan_presenter.h b/src/dxvk/dxvk_presenter.h similarity index 96% rename from src/vulkan/vulkan_presenter.h rename to src/dxvk/dxvk_presenter.h index 641956f90..0ea118c4e 100644 --- a/src/vulkan/vulkan_presenter.h +++ b/src/dxvk/dxvk_presenter.h @@ -10,9 +10,11 @@ #include "../util/util_math.h" #include "../util/util_string.h" -#include "vulkan_loader.h" +#include "../vulkan/vulkan_loader.h" -namespace dxvk::vk { +#include "dxvk_format.h" + +namespace dxvk { /** * \brief Presenter description @@ -95,8 +97,8 @@ namespace dxvk::vk { public: Presenter( - const Rc& vki, - const Rc& vkd, + const Rc& vki, + const Rc& vkd, PresenterDevice device, const PresenterDesc& desc); @@ -201,8 +203,8 @@ namespace dxvk::vk { private: - Rc m_vki; - Rc m_vkd; + Rc m_vki; + Rc m_vkd; PresenterDevice m_device; PresenterInfo m_info; diff --git a/src/dxvk/dxvk_queue.h b/src/dxvk/dxvk_queue.h index 14f1e21b2..eca7445c3 100644 --- a/src/dxvk/dxvk_queue.h +++ b/src/dxvk/dxvk_queue.h @@ -6,9 +6,8 @@ #include "../util/thread.h" -#include "../vulkan/vulkan_presenter.h" - #include "dxvk_cmdlist.h" +#include "dxvk_presenter.h" namespace dxvk { @@ -43,7 +42,7 @@ namespace dxvk { * a swap chain image on the device. */ struct DxvkPresentInfo { - Rc presenter; + Rc presenter; }; diff --git a/src/dxvk/meson.build b/src/dxvk/meson.build index 678ab268b..2bf46c5f1 100644 --- a/src/dxvk/meson.build +++ b/src/dxvk/meson.build @@ -92,6 +92,7 @@ dxvk_src = [ 'dxvk_options.cpp', 'dxvk_pipelayout.cpp', 'dxvk_pipemanager.cpp', + 'dxvk_presenter.cpp', 'dxvk_queue.cpp', 'dxvk_resource.cpp', 'dxvk_sampler.cpp', diff --git a/src/vulkan/meson.build b/src/vulkan/meson.build index 7fa26c18d..b9d586f7a 100644 --- a/src/vulkan/meson.build +++ b/src/vulkan/meson.build @@ -1,7 +1,6 @@ vkcommon_src = files([ 'vulkan_loader.cpp', 'vulkan_names.cpp', - 'vulkan_presenter.cpp', ]) thread_dep = dependency('threads')