diff --git a/src/dxvk/dxvk_memory.cpp b/src/dxvk/dxvk_memory.cpp index e675cb24f..f9ce5ee3e 100644 --- a/src/dxvk/dxvk_memory.cpp +++ b/src/dxvk/dxvk_memory.cpp @@ -1121,6 +1121,10 @@ namespace dxvk { VkDeviceSize offset = address & DxvkPageAllocator::ChunkAddressMask; auto allocation = m_allocationPool.create(this, &type); + + if (!(allocationInfo.properties & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) && allocationInfo.resourceCookie) + allocation->m_flags.set(DxvkAllocationFlag::CanMove); + allocation->m_resourceCookie = allocationInfo.resourceCookie; allocation->m_memory = chunk.memory.memory; allocation->m_address = address; @@ -1163,6 +1167,9 @@ namespace dxvk { if (memory.buffer) allocation->m_flags.set(DxvkAllocationFlag::OwnsBuffer); + if (!(allocationInfo.properties & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) && allocationInfo.resourceCookie) + allocation->m_flags.set(DxvkAllocationFlag::CanMove); + allocation->m_resourceCookie = allocationInfo.resourceCookie; allocation->m_memory = memory.memory; allocation->m_address = DedicatedChunkAddress; @@ -1188,7 +1195,7 @@ namespace dxvk { void DxvkMemoryAllocator::freeAllocation( DxvkResourceAllocation* allocation) { - if (allocation->m_flags.test(DxvkAllocationFlag::Cacheable)) { + if (allocation->m_flags.test(DxvkAllocationFlag::CanCache)) { // Return cacheable allocations to the shared cache allocation->destroyBufferViews(); @@ -1454,7 +1461,7 @@ namespace dxvk { // so it will get recycled as-is after use. allocation = createAllocation(memoryType, memoryPool, address, allocationSize, DxvkAllocationInfo()); - allocation->m_flags.set(DxvkAllocationFlag::Cacheable); + allocation->m_flags.set(DxvkAllocationFlag::CanCache); if (tail) { tail->m_nextCached = allocation; diff --git a/src/dxvk/dxvk_memory.h b/src/dxvk/dxvk_memory.h index 64c34a38e..a0485b1cf 100644 --- a/src/dxvk/dxvk_memory.h +++ b/src/dxvk/dxvk_memory.h @@ -448,8 +448,9 @@ namespace dxvk { OwnsMemory = 0, OwnsBuffer = 1, OwnsImage = 2, - Cacheable = 3, - Imported = 4, + CanCache = 3, + CanMove = 4, + Imported = 5, }; using DxvkAllocationFlags = Flags;