Skip to content

Commit

Permalink
Merge branch 'dev/lvengesanam/resolve_change_resolution_issue' into '…
Browse files Browse the repository at this point in the history
…main'

[REMIX-1931] Ensure previous swapchain is destroyed before creating new swapchain

See merge request lightspeedrtx/dxvk-remix-nv!938
  • Loading branch information
lvengesanam committed Aug 16, 2024
2 parents f4e4419 + ce49d52 commit 0bf8bb4
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 15 deletions.
4 changes: 2 additions & 2 deletions src/d3d9/d3d9_swapchain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1008,7 +1008,7 @@ namespace dxvk {

if (m_presentParams.hDeviceWindow == hWindow) {
// NV-DXVK start: DLFG integration
m_device->releasePresenter();
m_device->synchronizePresenter();

if (m_presenter != nullptr) {
assert(m_dlfgPresenter == nullptr);
Expand Down Expand Up @@ -1324,7 +1324,7 @@ namespace dxvk {
m_device->waitForIdle();

// NV-DXVK start: DLFG integration
m_device->releasePresenter();
m_device->synchronizePresenter();
// NV-DXVK end

m_presenter = nullptr;
Expand Down
13 changes: 5 additions & 8 deletions src/dxvk/dxvk_device.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -380,14 +380,13 @@ namespace dxvk {
// NV-DXVK end

// NV-DXVK start: DLFG integration
if (m_lastPresenter.ptr() != presenter.ptr()) {
if (m_presenterInFlight.ptr() != presenter.ptr()) {
// if we're switching presenters, synchronize the old one to make sure nothing stays in flight
if (m_lastPresenter != nullptr) {
m_lastPresenter->synchronize();
}
// to ensure the correctness of reference count for presenter object
synchronizePresenter();

// stash the presenter object so we can synchronize with it if needed
m_lastPresenter = presenter;
m_presenterInFlight = presenter;
}
// NV-DXVK end

Expand Down Expand Up @@ -460,9 +459,7 @@ namespace dxvk {

// NV-DXVK start: DLFG integration
// idle DLFG so we can call vkDeviceWaitIdle safely
if (m_lastPresenter != nullptr) {
m_lastPresenter->synchronize();
}
synchronizePresenter();
// NV-DXVK end

if (m_vkd->vkDeviceWaitIdle(m_vkd->device()) != VK_SUCCESS)
Expand Down
10 changes: 5 additions & 5 deletions src/dxvk/dxvk_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -612,10 +612,10 @@ namespace dxvk {

// NV-DXVK start: DLFG integration
// release the current presenter stashed in the device
void releasePresenter() {
if (m_lastPresenter != nullptr) {
m_lastPresenter->synchronize();
m_lastPresenter = nullptr;
void synchronizePresenter() {
if (m_presenterInFlight != nullptr) {
m_presenterInFlight->synchronize();
m_presenterInFlight = nullptr;
}
}
// NV-DXVK end
Expand All @@ -628,7 +628,7 @@ namespace dxvk {
Rc<DxvkAdapter> m_adapter;
Rc<vk::DeviceFn> m_vkd;
DxvkDeviceExtensions m_extensions;
Rc<vk::Presenter> m_lastPresenter;
Rc<vk::Presenter> m_presenterInFlight;

DxvkDeviceFeatures m_features;
DxvkDeviceInfo m_properties;
Expand Down

0 comments on commit 0bf8bb4

Please sign in to comment.