1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-03-28 02:19:26 +01:00

[dxvk] Free zero buffer if it goes unused

This commit is contained in:
Philip Rebohle 2025-03-23 18:34:26 +01:00
parent 1cab928ed0
commit a2ce4aaa48
2 changed files with 20 additions and 1 deletions

View File

@ -153,6 +153,9 @@ namespace dxvk {
m_endLatencyTracking = false;
}
// If we have a zero buffer, see if we can get rid of it
freeZeroBuffer();
this->beginRecording(
m_device->createCommandList());
}
@ -7773,7 +7776,21 @@ namespace dxvk {
m_cmd->track(m_zeroBuffer, DxvkAccess::Write);
return m_zeroBuffer;
}
void DxvkContext::freeZeroBuffer() {
constexpr uint64_t ZeroBufferLifetime = 4096u;
// Don't free the zero buffer if it is still kept alive by a prior
// submission anyway
if (!m_zeroBuffer || m_zeroBuffer->isInUse(DxvkAccess::Write))
return;
// Delete zero buffer if it hasn't been actively used in a while
if (m_zeroBuffer->getTrackId() + ZeroBufferLifetime < m_trackingId)
m_zeroBuffer = nullptr;
}
void DxvkContext::resizeDescriptorArrays(
uint32_t bindingCount) {

View File

@ -1865,6 +1865,8 @@ namespace dxvk {
Rc<DxvkBuffer> createZeroBuffer(
VkDeviceSize size);
void freeZeroBuffer();
void resizeDescriptorArrays(
uint32_t bindingCount);