mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-03-15 07:29:17 +01:00
[dxvk] Move deferSurfaceCreation handling to backend
This commit is contained in:
parent
ab9646551f
commit
63e88debee
@ -69,9 +69,6 @@ namespace dxvk {
|
|||||||
CreateBackBuffers();
|
CreateBackBuffers();
|
||||||
CreateBlitter();
|
CreateBlitter();
|
||||||
CreateHud();
|
CreateHud();
|
||||||
|
|
||||||
if (!pDevice->GetOptions()->deferSurfaceCreation)
|
|
||||||
RecreateSwapChain();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -531,6 +528,7 @@ namespace dxvk {
|
|||||||
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.deferSurfaceCreation = m_parent->GetOptions()->deferSurfaceCreation;
|
||||||
|
|
||||||
m_presenter = new Presenter(m_device, m_frameLatencySignal, presenterDesc, [
|
m_presenter = new Presenter(m_device, m_frameLatencySignal, presenterDesc, [
|
||||||
cAdapter = m_device->adapter(),
|
cAdapter = m_device->adapter(),
|
||||||
|
@ -36,13 +36,9 @@ namespace dxvk {
|
|||||||
|
|
||||||
UpdatePresentRegion(nullptr, nullptr);
|
UpdatePresentRegion(nullptr, nullptr);
|
||||||
|
|
||||||
if (m_window) {
|
if (m_window)
|
||||||
CreatePresenter();
|
CreatePresenter();
|
||||||
|
|
||||||
if (!pDevice->GetOptions()->deferSurfaceCreation)
|
|
||||||
RecreateSwapChain();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (FAILED(CreateBackBuffers(m_presentParams.BackBufferCount, m_presentParams.Flags)))
|
if (FAILED(CreateBackBuffers(m_presentParams.BackBufferCount, m_presentParams.Flags)))
|
||||||
throw DxvkError("D3D9: Failed to create swapchain backbuffers");
|
throw DxvkError("D3D9: Failed to create swapchain backbuffers");
|
||||||
|
|
||||||
@ -972,6 +968,7 @@ namespace dxvk {
|
|||||||
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.deferSurfaceCreation = m_parent->GetOptions()->deferSurfaceCreation;
|
||||||
|
|
||||||
m_wctx->presenter = new Presenter(m_device,
|
m_wctx->presenter = new Presenter(m_device,
|
||||||
m_wctx->frameLatencySignal, presenterDesc, [
|
m_wctx->frameLatencySignal, presenterDesc, [
|
||||||
|
@ -27,6 +27,12 @@ namespace dxvk {
|
|||||||
// with present operations and periodically signals the event
|
// with present operations and periodically signals the event
|
||||||
if (m_device->features().khrPresentWait.presentWait && m_signal != nullptr)
|
if (m_device->features().khrPresentWait.presentWait && m_signal != nullptr)
|
||||||
m_frameThread = dxvk::thread([this] { runFrameThread(); });
|
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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,10 +32,11 @@ namespace dxvk {
|
|||||||
* an input during swap chain creation.
|
* an input during swap chain creation.
|
||||||
*/
|
*/
|
||||||
struct PresenterDesc {
|
struct PresenterDesc {
|
||||||
VkExtent2D imageExtent;
|
VkExtent2D imageExtent = { };
|
||||||
uint32_t imageCount;
|
uint32_t imageCount = 0u;
|
||||||
uint32_t numFormats;
|
uint32_t numFormats = 0u;
|
||||||
VkSurfaceFormatKHR formats[4];
|
VkSurfaceFormatKHR formats[4] = { };
|
||||||
|
bool deferSurfaceCreation = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user