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

[dxvk] Move deferSurfaceCreation handling to backend

This commit is contained in:
Philip Rebohle 2025-01-12 19:07:11 +01:00 committed by Philip Rebohle
parent ab9646551f
commit 63e88debee
4 changed files with 14 additions and 12 deletions

View File

@ -69,9 +69,6 @@ namespace dxvk {
CreateBackBuffers();
CreateBlitter();
CreateHud();
if (!pDevice->GetOptions()->deferSurfaceCreation)
RecreateSwapChain();
}
@ -531,6 +528,7 @@ namespace dxvk {
presenterDesc.imageExtent = { m_desc.Width, m_desc.Height };
presenterDesc.imageCount = PickImageCount(m_desc.BufferCount + 1);
presenterDesc.numFormats = PickFormats(m_desc.Format, presenterDesc.formats);
presenterDesc.deferSurfaceCreation = m_parent->GetOptions()->deferSurfaceCreation;
m_presenter = new Presenter(m_device, m_frameLatencySignal, presenterDesc, [
cAdapter = m_device->adapter(),

View File

@ -36,13 +36,9 @@ namespace dxvk {
UpdatePresentRegion(nullptr, nullptr);
if (m_window) {
if (m_window)
CreatePresenter();
if (!pDevice->GetOptions()->deferSurfaceCreation)
RecreateSwapChain();
}
if (FAILED(CreateBackBuffers(m_presentParams.BackBufferCount, m_presentParams.Flags)))
throw DxvkError("D3D9: Failed to create swapchain backbuffers");
@ -972,6 +968,7 @@ namespace dxvk {
presenterDesc.imageExtent = GetPresentExtent();
presenterDesc.imageCount = PickImageCount(m_presentParams.BackBufferCount + 1);
presenterDesc.numFormats = PickFormats(EnumerateFormat(m_presentParams.BackBufferFormat), presenterDesc.formats);
presenterDesc.deferSurfaceCreation = m_parent->GetOptions()->deferSurfaceCreation;
m_wctx->presenter = new Presenter(m_device,
m_wctx->frameLatencySignal, presenterDesc, [

View File

@ -27,6 +27,12 @@ namespace dxvk {
// with present operations and periodically signals the event
if (m_device->features().khrPresentWait.presentWait && m_signal != nullptr)
m_frameThread = dxvk::thread([this] { runFrameThread(); });
// Create Vulkan surface immediately if possible, but ignore
// failures since the app window may still be in use in some
// way at this point, e.g. by a different device.
if (!desc.deferSurfaceCreation)
createSurface();
}

View File

@ -32,10 +32,11 @@ namespace dxvk {
* an input during swap chain creation.
*/
struct PresenterDesc {
VkExtent2D imageExtent;
uint32_t imageCount;
uint32_t numFormats;
VkSurfaceFormatKHR formats[4];
VkExtent2D imageExtent = { };
uint32_t imageCount = 0u;
uint32_t numFormats = 0u;
VkSurfaceFormatKHR formats[4] = { };
bool deferSurfaceCreation = false;
};
/**