mirror of
https://github.com/doitsujin/dxvk.git
synced 2025-04-01 09:25:24 +02:00
[dxvk] Free zero buffer if it goes unused
This commit is contained in:
parent
1cab928ed0
commit
a2ce4aaa48
@ -153,6 +153,9 @@ namespace dxvk {
|
|||||||
m_endLatencyTracking = false;
|
m_endLatencyTracking = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we have a zero buffer, see if we can get rid of it
|
||||||
|
freeZeroBuffer();
|
||||||
|
|
||||||
this->beginRecording(
|
this->beginRecording(
|
||||||
m_device->createCommandList());
|
m_device->createCommandList());
|
||||||
}
|
}
|
||||||
@ -7773,7 +7776,21 @@ namespace dxvk {
|
|||||||
m_cmd->track(m_zeroBuffer, DxvkAccess::Write);
|
m_cmd->track(m_zeroBuffer, DxvkAccess::Write);
|
||||||
return m_zeroBuffer;
|
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(
|
void DxvkContext::resizeDescriptorArrays(
|
||||||
uint32_t bindingCount) {
|
uint32_t bindingCount) {
|
||||||
|
@ -1865,6 +1865,8 @@ namespace dxvk {
|
|||||||
Rc<DxvkBuffer> createZeroBuffer(
|
Rc<DxvkBuffer> createZeroBuffer(
|
||||||
VkDeviceSize size);
|
VkDeviceSize size);
|
||||||
|
|
||||||
|
void freeZeroBuffer();
|
||||||
|
|
||||||
void resizeDescriptorArrays(
|
void resizeDescriptorArrays(
|
||||||
uint32_t bindingCount);
|
uint32_t bindingCount);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user