From 861195a62e3ee1ce8925ff2fb2c7d6a682152b3a Mon Sep 17 00:00:00 2001 From: Philip Rebohle Date: Fri, 18 Oct 2024 01:27:10 +0200 Subject: [PATCH] [dxvk] Fix race condition in relocation check The storage pointer is not safe to dereference outside the CS thread for relocatable resources since the storage object may change. --- src/dxvk/dxvk_buffer.cpp | 4 ++-- src/dxvk/dxvk_image.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/dxvk/dxvk_buffer.cpp b/src/dxvk/dxvk_buffer.cpp index ea77196d1..c086d57ad 100644 --- a/src/dxvk/dxvk_buffer.cpp +++ b/src/dxvk/dxvk_buffer.cpp @@ -35,7 +35,8 @@ namespace dxvk { m_properties (memFlags), m_shaderStages (util::shaderStages(createInfo.stages)), m_sharingMode (device->getSharingMode()), - m_info (createInfo) { + m_info (createInfo), + m_stableAddress (true) { m_allocator->registerResource(this); DxvkAllocationInfo allocationInfo = { }; @@ -58,7 +59,6 @@ namespace dxvk { bool DxvkBuffer::canRelocate() const { return !m_bufferInfo.mapPtr && !m_stableAddress - && !m_storage->flags().test(DxvkAllocationFlag::Imported) && !(m_info.flags & VK_BUFFER_CREATE_SPARSE_BINDING_BIT); } diff --git a/src/dxvk/dxvk_image.cpp b/src/dxvk/dxvk_image.cpp index 86b504fae..800fcf72a 100644 --- a/src/dxvk/dxvk_image.cpp +++ b/src/dxvk/dxvk_image.cpp @@ -45,7 +45,8 @@ namespace dxvk { m_allocator (&memAlloc), m_properties (memFlags), m_shaderStages (util::shaderStages(createInfo.stages)), - m_info (createInfo) { + m_info (createInfo), + m_stableAddress (true) { m_allocator->registerResource(this); copyFormatList(createInfo.viewFormatCount, createInfo.viewFormats); @@ -66,7 +67,6 @@ namespace dxvk { bool DxvkImage::canRelocate() const { return !m_imageInfo.mapPtr && !m_shared && !m_stableAddress - && !m_storage->flags().test(DxvkAllocationFlag::Imported) && !(m_info.flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT); }