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:
parent
ab9646551f
commit
63e88debee
@ -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(),
|
||||
|
@ -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, [
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user