1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-13 19:29:14 +01:00

[dxvk] Move presenter implementation to DXVK module

This commit is contained in:
Philip Rebohle 2023-05-29 13:18:13 +02:00
parent be875cd7e6
commit b1b0abdbbf
13 changed files with 42 additions and 45 deletions

View File

@ -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);

View File

@ -97,7 +97,7 @@ namespace dxvk {
Rc<DxvkDevice> m_device;
Rc<DxvkContext> m_context;
Rc<vk::Presenter> m_presenter;
Rc<Presenter> m_presenter;
Rc<DxvkImage> m_swapImage;
Rc<DxvkImageView> m_swapImageView;
@ -130,7 +130,7 @@ namespace dxvk {
void SubmitPresent(
D3D11ImmediateContext* pContext,
const vk::PresenterSync& Sync,
const PresenterSync& Sync,
uint32_t FrameId);
void SynchronizePresent();

View File

@ -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);

View File

@ -134,7 +134,7 @@ namespace dxvk {
Rc<DxvkContext> m_context;
Rc<DxvkSwapchainBlitter> m_blitter;
Rc<vk::Presenter> m_presenter;
Rc<Presenter> m_presenter;
Rc<hud::Hud> 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();

View File

@ -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();

View File

@ -2,8 +2,6 @@
#include <limits>
#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;

View File

@ -252,7 +252,7 @@ namespace dxvk {
void DxvkDevice::presentImage(
const Rc<vk::Presenter>& presenter,
const Rc<Presenter>& presenter,
DxvkSubmitStatus* status) {
status->result = VK_NOT_READY;

View File

@ -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<vk::Presenter>& presenter,
const Rc<Presenter>& presenter,
DxvkSubmitStatus* status);
/**

View File

@ -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<InstanceFn>& vki,
const Rc<DeviceFn>& vkd,
const Rc<vk::InstanceFn>& vki,
const Rc<vk::DeviceFn>& vkd,
PresenterDevice device,
const PresenterDesc& desc)
: m_vki(vki), m_vkd(vkd), m_device(device) {

View File

@ -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<InstanceFn>& vki,
const Rc<DeviceFn>& vkd,
const Rc<vk::InstanceFn>& vki,
const Rc<vk::DeviceFn>& vkd,
PresenterDevice device,
const PresenterDesc& desc);
@ -201,8 +203,8 @@ namespace dxvk::vk {
private:
Rc<InstanceFn> m_vki;
Rc<DeviceFn> m_vkd;
Rc<vk::InstanceFn> m_vki;
Rc<vk::DeviceFn> m_vkd;
PresenterDevice m_device;
PresenterInfo m_info;

View File

@ -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<vk::Presenter> presenter;
Rc<Presenter> presenter;
};

View File

@ -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',

View File

@ -1,7 +1,6 @@
vkcommon_src = files([
'vulkan_loader.cpp',
'vulkan_names.cpp',
'vulkan_presenter.cpp',
])
thread_dep = dependency('threads')