1
0
mirror of https://github.com/doitsujin/dxvk.git synced 2025-02-23 10:54:14 +01:00

[dxvk] Track transform feedback buffer access

This commit is contained in:
Philip Rebohle 2025-02-14 20:02:57 +01:00
parent f0c6e27938
commit ea99f2f2c5

View File

@ -5530,8 +5530,14 @@ namespace dxvk {
ctrBuffers[i] = physSlice.handle;
ctrOffsets[i] = physSlice.offset;
if (physSlice.handle != VK_NULL_HANDLE)
m_cmd->track(m_state.xfb.activeCounters[i].buffer(), DxvkAccess::Read);
if (physSlice.handle) {
accessBuffer(DxvkCmdBuffer::ExecBuffer, m_state.xfb.activeCounters[i],
VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT |
VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT);
m_cmd->track(m_state.xfb.activeCounters[i].buffer(), DxvkAccess::Write);
}
}
m_cmd->cmdBeginTransformFeedback(
@ -5556,9 +5562,6 @@ namespace dxvk {
ctrBuffers[i] = physSlice.handle;
ctrOffsets[i] = physSlice.offset;
if (physSlice.handle != VK_NULL_HANDLE)
m_cmd->track(m_state.xfb.activeCounters[i].buffer(), DxvkAccess::Write);
m_state.xfb.activeCounters[i] = DxvkBufferSlice();
}
@ -6407,14 +6410,18 @@ namespace dxvk {
xfbOffsets[i] = physSlice.offset;
xfbLengths[i] = physSlice.length;
if (physSlice.handle == VK_NULL_HANDLE)
if (!physSlice.handle)
xfbBuffers[i] = m_common->dummyResources().bufferHandle();
if (physSlice.handle != VK_NULL_HANDLE) {
const Rc<DxvkBuffer>& buffer = m_state.xfb.buffers[i].buffer();
if (physSlice.handle) {
Rc<DxvkBuffer> buffer = m_state.xfb.buffers[i].buffer();
buffer->setXfbVertexStride(gsInfo.xfbStrides[i]);
m_cmd->track(buffer, DxvkAccess::Write);
accessBuffer(DxvkCmdBuffer::ExecBuffer, m_state.xfb.buffers[i],
VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT);
m_cmd->track(std::move(buffer), DxvkAccess::Write);
}
}