mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-15 07:29:17 +01:00
[dxvk] Move presenter implementation to DXVK module
This commit is contained in:
parent
be875cd7e6
commit
b1b0abdbbf
@ -350,8 +350,8 @@ namespace dxvk {
|
|||||||
return DXGI_STATUS_OCCLUDED;
|
return DXGI_STATUS_OCCLUDED;
|
||||||
|
|
||||||
// Presentation semaphores and WSI swap chain image
|
// Presentation semaphores and WSI swap chain image
|
||||||
vk::PresenterInfo info = m_presenter->info();
|
PresenterInfo info = m_presenter->info();
|
||||||
vk::PresenterSync sync;
|
PresenterSync sync;
|
||||||
|
|
||||||
uint32_t imageIndex = 0;
|
uint32_t imageIndex = 0;
|
||||||
|
|
||||||
@ -397,7 +397,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
void D3D11SwapChain::SubmitPresent(
|
void D3D11SwapChain::SubmitPresent(
|
||||||
D3D11ImmediateContext* pContext,
|
D3D11ImmediateContext* pContext,
|
||||||
const vk::PresenterSync& Sync,
|
const PresenterSync& Sync,
|
||||||
uint32_t FrameId) {
|
uint32_t FrameId) {
|
||||||
auto lock = pContext->LockContext();
|
auto lock = pContext->LockContext();
|
||||||
|
|
||||||
@ -441,7 +441,7 @@ namespace dxvk {
|
|||||||
m_presentStatus.result = VK_SUCCESS;
|
m_presentStatus.result = VK_SUCCESS;
|
||||||
m_dirtyHdrMetadata = true;
|
m_dirtyHdrMetadata = true;
|
||||||
|
|
||||||
vk::PresenterDesc presenterDesc;
|
PresenterDesc presenterDesc;
|
||||||
presenterDesc.imageExtent = { m_desc.Width, m_desc.Height };
|
presenterDesc.imageExtent = { m_desc.Width, m_desc.Height };
|
||||||
presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1);
|
presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1);
|
||||||
presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats);
|
presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats);
|
||||||
@ -479,21 +479,21 @@ namespace dxvk {
|
|||||||
void D3D11SwapChain::CreatePresenter() {
|
void D3D11SwapChain::CreatePresenter() {
|
||||||
DxvkDeviceQueue graphicsQueue = m_device->queues().graphics;
|
DxvkDeviceQueue graphicsQueue = m_device->queues().graphics;
|
||||||
|
|
||||||
vk::PresenterDevice presenterDevice;
|
PresenterDevice presenterDevice;
|
||||||
presenterDevice.queueFamily = graphicsQueue.queueFamily;
|
presenterDevice.queueFamily = graphicsQueue.queueFamily;
|
||||||
presenterDevice.queue = graphicsQueue.queueHandle;
|
presenterDevice.queue = graphicsQueue.queueHandle;
|
||||||
presenterDevice.adapter = m_device->adapter()->handle();
|
presenterDevice.adapter = m_device->adapter()->handle();
|
||||||
presenterDevice.features.fullScreenExclusive = m_device->features().extFullScreenExclusive;
|
presenterDevice.features.fullScreenExclusive = m_device->features().extFullScreenExclusive;
|
||||||
presenterDevice.features.hdrMetadata = m_device->features().extHdrMetadata;
|
presenterDevice.features.hdrMetadata = m_device->features().extHdrMetadata;
|
||||||
|
|
||||||
vk::PresenterDesc presenterDesc;
|
PresenterDesc presenterDesc;
|
||||||
presenterDesc.imageExtent = { m_desc.Width, m_desc.Height };
|
presenterDesc.imageExtent = { m_desc.Width, m_desc.Height };
|
||||||
presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1);
|
presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1);
|
||||||
presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats);
|
presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats);
|
||||||
presenterDesc.numPresentModes = PickPresentModes(false, presenterDesc.presentModes);
|
presenterDesc.numPresentModes = PickPresentModes(false, presenterDesc.presentModes);
|
||||||
presenterDesc.fullScreenExclusive = PickFullscreenMode();
|
presenterDesc.fullScreenExclusive = PickFullscreenMode();
|
||||||
|
|
||||||
m_presenter = new vk::Presenter(
|
m_presenter = new Presenter(
|
||||||
m_device->adapter()->vki(),
|
m_device->adapter()->vki(),
|
||||||
m_device->vkd(),
|
m_device->vkd(),
|
||||||
presenterDevice,
|
presenterDevice,
|
||||||
@ -513,7 +513,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
void D3D11SwapChain::CreateRenderTargetViews() {
|
void D3D11SwapChain::CreateRenderTargetViews() {
|
||||||
vk::PresenterInfo info = m_presenter->info();
|
PresenterInfo info = m_presenter->info();
|
||||||
|
|
||||||
m_imageViews.clear();
|
m_imageViews.clear();
|
||||||
m_imageViews.resize(info.imageCount);
|
m_imageViews.resize(info.imageCount);
|
||||||
|
@ -97,7 +97,7 @@ namespace dxvk {
|
|||||||
Rc<DxvkDevice> m_device;
|
Rc<DxvkDevice> m_device;
|
||||||
Rc<DxvkContext> m_context;
|
Rc<DxvkContext> m_context;
|
||||||
|
|
||||||
Rc<vk::Presenter> m_presenter;
|
Rc<Presenter> m_presenter;
|
||||||
|
|
||||||
Rc<DxvkImage> m_swapImage;
|
Rc<DxvkImage> m_swapImage;
|
||||||
Rc<DxvkImageView> m_swapImageView;
|
Rc<DxvkImageView> m_swapImageView;
|
||||||
@ -130,7 +130,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
void SubmitPresent(
|
void SubmitPresent(
|
||||||
D3D11ImmediateContext* pContext,
|
D3D11ImmediateContext* pContext,
|
||||||
const vk::PresenterSync& Sync,
|
const PresenterSync& Sync,
|
||||||
uint32_t FrameId);
|
uint32_t FrameId);
|
||||||
|
|
||||||
void SynchronizePresent();
|
void SynchronizePresent();
|
||||||
|
@ -754,8 +754,8 @@ namespace dxvk {
|
|||||||
SynchronizePresent();
|
SynchronizePresent();
|
||||||
|
|
||||||
// Presentation semaphores and WSI swap chain image
|
// Presentation semaphores and WSI swap chain image
|
||||||
vk::PresenterInfo info = m_presenter->info();
|
PresenterInfo info = m_presenter->info();
|
||||||
vk::PresenterSync sync;
|
PresenterSync sync;
|
||||||
|
|
||||||
uint32_t imageIndex = 0;
|
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
|
// Present from CS thread so that we don't
|
||||||
// have to synchronize with it first.
|
// have to synchronize with it first.
|
||||||
m_presentStatus.result = VK_NOT_READY;
|
m_presentStatus.result = VK_NOT_READY;
|
||||||
@ -847,7 +847,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
m_presentStatus.result = VK_SUCCESS;
|
m_presentStatus.result = VK_SUCCESS;
|
||||||
|
|
||||||
vk::PresenterDesc presenterDesc;
|
PresenterDesc presenterDesc;
|
||||||
presenterDesc.imageExtent = GetPresentExtent();
|
presenterDesc.imageExtent = GetPresentExtent();
|
||||||
presenterDesc.imageCount = PickImageCount(m_presentParams.BackBufferCount + 1);
|
presenterDesc.imageCount = PickImageCount(m_presentParams.BackBufferCount + 1);
|
||||||
presenterDesc.numFormats = PickFormats(EnumerateFormat(m_presentParams.BackBufferFormat), presenterDesc.formats);
|
presenterDesc.numFormats = PickFormats(EnumerateFormat(m_presentParams.BackBufferFormat), presenterDesc.formats);
|
||||||
@ -883,19 +883,19 @@ namespace dxvk {
|
|||||||
|
|
||||||
DxvkDeviceQueue graphicsQueue = m_device->queues().graphics;
|
DxvkDeviceQueue graphicsQueue = m_device->queues().graphics;
|
||||||
|
|
||||||
vk::PresenterDevice presenterDevice;
|
PresenterDevice presenterDevice;
|
||||||
presenterDevice.queueFamily = graphicsQueue.queueFamily;
|
presenterDevice.queueFamily = graphicsQueue.queueFamily;
|
||||||
presenterDevice.queue = graphicsQueue.queueHandle;
|
presenterDevice.queue = graphicsQueue.queueHandle;
|
||||||
presenterDevice.adapter = m_device->adapter()->handle();
|
presenterDevice.adapter = m_device->adapter()->handle();
|
||||||
|
|
||||||
vk::PresenterDesc presenterDesc;
|
PresenterDesc presenterDesc;
|
||||||
presenterDesc.imageExtent = GetPresentExtent();
|
presenterDesc.imageExtent = GetPresentExtent();
|
||||||
presenterDesc.imageCount = PickImageCount(m_presentParams.BackBufferCount + 1);
|
presenterDesc.imageCount = PickImageCount(m_presentParams.BackBufferCount + 1);
|
||||||
presenterDesc.numFormats = PickFormats(EnumerateFormat(m_presentParams.BackBufferFormat), presenterDesc.formats);
|
presenterDesc.numFormats = PickFormats(EnumerateFormat(m_presentParams.BackBufferFormat), presenterDesc.formats);
|
||||||
presenterDesc.numPresentModes = PickPresentModes(false, presenterDesc.presentModes);
|
presenterDesc.numPresentModes = PickPresentModes(false, presenterDesc.presentModes);
|
||||||
presenterDesc.fullScreenExclusive = PickFullscreenMode();
|
presenterDesc.fullScreenExclusive = PickFullscreenMode();
|
||||||
|
|
||||||
m_presenter = new vk::Presenter(
|
m_presenter = new Presenter(
|
||||||
m_device->adapter()->vki(),
|
m_device->adapter()->vki(),
|
||||||
m_device->vkd(),
|
m_device->vkd(),
|
||||||
presenterDevice,
|
presenterDevice,
|
||||||
@ -916,7 +916,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
void D3D9SwapChainEx::CreateRenderTargetViews() {
|
void D3D9SwapChainEx::CreateRenderTargetViews() {
|
||||||
vk::PresenterInfo info = m_presenter->info();
|
PresenterInfo info = m_presenter->info();
|
||||||
|
|
||||||
m_imageViews.clear();
|
m_imageViews.clear();
|
||||||
m_imageViews.resize(info.imageCount);
|
m_imageViews.resize(info.imageCount);
|
||||||
|
@ -134,7 +134,7 @@ namespace dxvk {
|
|||||||
Rc<DxvkContext> m_context;
|
Rc<DxvkContext> m_context;
|
||||||
Rc<DxvkSwapchainBlitter> m_blitter;
|
Rc<DxvkSwapchainBlitter> m_blitter;
|
||||||
|
|
||||||
Rc<vk::Presenter> m_presenter;
|
Rc<Presenter> m_presenter;
|
||||||
|
|
||||||
Rc<hud::Hud> m_hud;
|
Rc<hud::Hud> m_hud;
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
void PresentImage(UINT PresentInterval);
|
void PresentImage(UINT PresentInterval);
|
||||||
|
|
||||||
void SubmitPresent(const vk::PresenterSync& Sync, uint32_t FrameId);
|
void SubmitPresent(const PresenterSync& Sync, uint32_t FrameId);
|
||||||
|
|
||||||
void SynchronizePresent();
|
void SynchronizePresent();
|
||||||
|
|
||||||
|
@ -397,7 +397,7 @@ namespace dxvk {
|
|||||||
m_cmdSubmissions.clear();
|
m_cmdSubmissions.clear();
|
||||||
m_cmdSparseBinds.clear();
|
m_cmdSparseBinds.clear();
|
||||||
|
|
||||||
m_wsiSemaphores = vk::PresenterSync();
|
m_wsiSemaphores = PresenterSync();
|
||||||
|
|
||||||
// Reset actual command buffers and pools
|
// Reset actual command buffers and pools
|
||||||
m_graphicsPool->reset();
|
m_graphicsPool->reset();
|
||||||
|
@ -2,8 +2,6 @@
|
|||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
#include "../vulkan/vulkan_presenter.h"
|
|
||||||
|
|
||||||
#include "dxvk_bind_mask.h"
|
#include "dxvk_bind_mask.h"
|
||||||
#include "dxvk_buffer.h"
|
#include "dxvk_buffer.h"
|
||||||
#include "dxvk_descriptor.h"
|
#include "dxvk_descriptor.h"
|
||||||
@ -14,6 +12,7 @@
|
|||||||
#include "dxvk_lifetime.h"
|
#include "dxvk_lifetime.h"
|
||||||
#include "dxvk_limits.h"
|
#include "dxvk_limits.h"
|
||||||
#include "dxvk_pipelayout.h"
|
#include "dxvk_pipelayout.h"
|
||||||
|
#include "dxvk_presenter.h"
|
||||||
#include "dxvk_signal.h"
|
#include "dxvk_signal.h"
|
||||||
#include "dxvk_sparse.h"
|
#include "dxvk_sparse.h"
|
||||||
#include "dxvk_staging.h"
|
#include "dxvk_staging.h"
|
||||||
@ -354,7 +353,7 @@ namespace dxvk {
|
|||||||
* The given semaphores must be binary semaphores.
|
* The given semaphores must be binary semaphores.
|
||||||
* \param [in] wsiSemaphores Pair of WSI semaphores
|
* \param [in] wsiSemaphores Pair of WSI semaphores
|
||||||
*/
|
*/
|
||||||
void setWsiSemaphores(const vk::PresenterSync& wsiSemaphores) {
|
void setWsiSemaphores(const PresenterSync& wsiSemaphores) {
|
||||||
m_wsiSemaphores = wsiSemaphores;
|
m_wsiSemaphores = wsiSemaphores;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1027,7 +1026,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
DxvkCommandSubmissionInfo m_cmd;
|
DxvkCommandSubmissionInfo m_cmd;
|
||||||
|
|
||||||
vk::PresenterSync m_wsiSemaphores = { };
|
PresenterSync m_wsiSemaphores = { };
|
||||||
|
|
||||||
DxvkLifetimeTracker m_resources;
|
DxvkLifetimeTracker m_resources;
|
||||||
DxvkSignalTracker m_signalTracker;
|
DxvkSignalTracker m_signalTracker;
|
||||||
|
@ -252,7 +252,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
void DxvkDevice::presentImage(
|
void DxvkDevice::presentImage(
|
||||||
const Rc<vk::Presenter>& presenter,
|
const Rc<Presenter>& presenter,
|
||||||
DxvkSubmitStatus* status) {
|
DxvkSubmitStatus* status) {
|
||||||
status->result = VK_NOT_READY;
|
status->result = VK_NOT_READY;
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "dxvk_objects.h"
|
#include "dxvk_objects.h"
|
||||||
#include "dxvk_options.h"
|
#include "dxvk_options.h"
|
||||||
#include "dxvk_pipemanager.h"
|
#include "dxvk_pipemanager.h"
|
||||||
|
#include "dxvk_presenter.h"
|
||||||
#include "dxvk_queue.h"
|
#include "dxvk_queue.h"
|
||||||
#include "dxvk_recycler.h"
|
#include "dxvk_recycler.h"
|
||||||
#include "dxvk_renderpass.h"
|
#include "dxvk_renderpass.h"
|
||||||
@ -25,8 +26,6 @@
|
|||||||
#include "dxvk_unbound.h"
|
#include "dxvk_unbound.h"
|
||||||
#include "dxvk_marker.h"
|
#include "dxvk_marker.h"
|
||||||
|
|
||||||
#include "../vulkan/vulkan_presenter.h"
|
|
||||||
|
|
||||||
namespace dxvk {
|
namespace dxvk {
|
||||||
|
|
||||||
class DxvkInstance;
|
class DxvkInstance;
|
||||||
@ -458,7 +457,7 @@ namespace dxvk {
|
|||||||
* \param [out] status Present status
|
* \param [out] status Present status
|
||||||
*/
|
*/
|
||||||
void presentImage(
|
void presentImage(
|
||||||
const Rc<vk::Presenter>& presenter,
|
const Rc<Presenter>& presenter,
|
||||||
DxvkSubmitStatus* status);
|
DxvkSubmitStatus* status);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,14 +1,12 @@
|
|||||||
#include "vulkan_presenter.h"
|
#include "dxvk_presenter.h"
|
||||||
|
|
||||||
#include "../dxvk/dxvk_format.h"
|
|
||||||
|
|
||||||
#include "../wsi/wsi_window.h"
|
#include "../wsi/wsi_window.h"
|
||||||
|
|
||||||
namespace dxvk::vk {
|
namespace dxvk {
|
||||||
|
|
||||||
Presenter::Presenter(
|
Presenter::Presenter(
|
||||||
const Rc<InstanceFn>& vki,
|
const Rc<vk::InstanceFn>& vki,
|
||||||
const Rc<DeviceFn>& vkd,
|
const Rc<vk::DeviceFn>& vkd,
|
||||||
PresenterDevice device,
|
PresenterDevice device,
|
||||||
const PresenterDesc& desc)
|
const PresenterDesc& desc)
|
||||||
: m_vki(vki), m_vkd(vkd), m_device(device) {
|
: m_vki(vki), m_vkd(vkd), m_device(device) {
|
@ -10,9 +10,11 @@
|
|||||||
#include "../util/util_math.h"
|
#include "../util/util_math.h"
|
||||||
#include "../util/util_string.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
|
* \brief Presenter description
|
||||||
@ -95,8 +97,8 @@ namespace dxvk::vk {
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
Presenter(
|
Presenter(
|
||||||
const Rc<InstanceFn>& vki,
|
const Rc<vk::InstanceFn>& vki,
|
||||||
const Rc<DeviceFn>& vkd,
|
const Rc<vk::DeviceFn>& vkd,
|
||||||
PresenterDevice device,
|
PresenterDevice device,
|
||||||
const PresenterDesc& desc);
|
const PresenterDesc& desc);
|
||||||
|
|
||||||
@ -201,8 +203,8 @@ namespace dxvk::vk {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
Rc<InstanceFn> m_vki;
|
Rc<vk::InstanceFn> m_vki;
|
||||||
Rc<DeviceFn> m_vkd;
|
Rc<vk::DeviceFn> m_vkd;
|
||||||
|
|
||||||
PresenterDevice m_device;
|
PresenterDevice m_device;
|
||||||
PresenterInfo m_info;
|
PresenterInfo m_info;
|
@ -6,9 +6,8 @@
|
|||||||
|
|
||||||
#include "../util/thread.h"
|
#include "../util/thread.h"
|
||||||
|
|
||||||
#include "../vulkan/vulkan_presenter.h"
|
|
||||||
|
|
||||||
#include "dxvk_cmdlist.h"
|
#include "dxvk_cmdlist.h"
|
||||||
|
#include "dxvk_presenter.h"
|
||||||
|
|
||||||
namespace dxvk {
|
namespace dxvk {
|
||||||
|
|
||||||
@ -43,7 +42,7 @@ namespace dxvk {
|
|||||||
* a swap chain image on the device.
|
* a swap chain image on the device.
|
||||||
*/
|
*/
|
||||||
struct DxvkPresentInfo {
|
struct DxvkPresentInfo {
|
||||||
Rc<vk::Presenter> presenter;
|
Rc<Presenter> presenter;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,6 +92,7 @@ dxvk_src = [
|
|||||||
'dxvk_options.cpp',
|
'dxvk_options.cpp',
|
||||||
'dxvk_pipelayout.cpp',
|
'dxvk_pipelayout.cpp',
|
||||||
'dxvk_pipemanager.cpp',
|
'dxvk_pipemanager.cpp',
|
||||||
|
'dxvk_presenter.cpp',
|
||||||
'dxvk_queue.cpp',
|
'dxvk_queue.cpp',
|
||||||
'dxvk_resource.cpp',
|
'dxvk_resource.cpp',
|
||||||
'dxvk_sampler.cpp',
|
'dxvk_sampler.cpp',
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
vkcommon_src = files([
|
vkcommon_src = files([
|
||||||
'vulkan_loader.cpp',
|
'vulkan_loader.cpp',
|
||||||
'vulkan_names.cpp',
|
'vulkan_names.cpp',
|
||||||
'vulkan_presenter.cpp',
|
|
||||||
])
|
])
|
||||||
|
|
||||||
thread_dep = dependency('threads')
|
thread_dep = dependency('threads')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user