mirror of
https://github.com/doitsujin/dxvk.git
synced 2024-12-02 19:24:12 +01:00
[dxvk] Allow barriers to be recorded into a specific command buffer
This commit is contained in:
parent
2315d55ecc
commit
e59f53abfa
@ -2,8 +2,16 @@
|
|||||||
|
|
||||||
namespace dxvk {
|
namespace dxvk {
|
||||||
|
|
||||||
DxvkBarrierSet:: DxvkBarrierSet() { }
|
DxvkBarrierSet:: DxvkBarrierSet(DxvkCmdBuffer cmdBuffer)
|
||||||
DxvkBarrierSet::~DxvkBarrierSet() { }
|
: m_cmdBuffer(cmdBuffer) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DxvkBarrierSet::~DxvkBarrierSet() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void DxvkBarrierSet::accessBuffer(
|
void DxvkBarrierSet::accessBuffer(
|
||||||
const DxvkBufferSliceHandle& bufSlice,
|
const DxvkBufferSliceHandle& bufSlice,
|
||||||
@ -184,7 +192,7 @@ namespace dxvk {
|
|||||||
pMemBarrier = &memBarrier;
|
pMemBarrier = &memBarrier;
|
||||||
|
|
||||||
commandList->cmdPipelineBarrier(
|
commandList->cmdPipelineBarrier(
|
||||||
srcFlags, dstFlags, 0,
|
m_cmdBuffer, srcFlags, dstFlags, 0,
|
||||||
pMemBarrier ? 1 : 0, pMemBarrier,
|
pMemBarrier ? 1 : 0, pMemBarrier,
|
||||||
m_bufBarriers.size(), m_bufBarriers.data(),
|
m_bufBarriers.size(), m_bufBarriers.data(),
|
||||||
m_imgBarriers.size(), m_imgBarriers.data());
|
m_imgBarriers.size(), m_imgBarriers.data());
|
||||||
|
@ -17,7 +17,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
DxvkBarrierSet();
|
DxvkBarrierSet(DxvkCmdBuffer cmdBuffer);
|
||||||
~DxvkBarrierSet();
|
~DxvkBarrierSet();
|
||||||
|
|
||||||
void accessBuffer(
|
void accessBuffer(
|
||||||
@ -80,6 +80,8 @@ namespace dxvk {
|
|||||||
VkImageSubresourceRange subres;
|
VkImageSubresourceRange subres;
|
||||||
DxvkAccessFlags access;
|
DxvkAccessFlags access;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
DxvkCmdBuffer m_cmdBuffer;
|
||||||
|
|
||||||
VkPipelineStageFlags m_srcStages = 0;
|
VkPipelineStageFlags m_srcStages = 0;
|
||||||
VkPipelineStageFlags m_dstStages = 0;
|
VkPipelineStageFlags m_dstStages = 0;
|
||||||
|
@ -541,6 +541,7 @@ namespace dxvk {
|
|||||||
|
|
||||||
|
|
||||||
void cmdPipelineBarrier(
|
void cmdPipelineBarrier(
|
||||||
|
DxvkCmdBuffer cmdBuffer,
|
||||||
VkPipelineStageFlags srcStageMask,
|
VkPipelineStageFlags srcStageMask,
|
||||||
VkPipelineStageFlags dstStageMask,
|
VkPipelineStageFlags dstStageMask,
|
||||||
VkDependencyFlags dependencyFlags,
|
VkDependencyFlags dependencyFlags,
|
||||||
@ -550,7 +551,9 @@ namespace dxvk {
|
|||||||
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
const VkBufferMemoryBarrier* pBufferMemoryBarriers,
|
||||||
uint32_t imageMemoryBarrierCount,
|
uint32_t imageMemoryBarrierCount,
|
||||||
const VkImageMemoryBarrier* pImageMemoryBarriers) {
|
const VkImageMemoryBarrier* pImageMemoryBarriers) {
|
||||||
m_vkd->vkCmdPipelineBarrier(m_execBuffer,
|
m_cmdBuffersUsed.set(cmdBuffer);
|
||||||
|
|
||||||
|
m_vkd->vkCmdPipelineBarrier(getCmdBuffer(cmdBuffer),
|
||||||
srcStageMask, dstStageMask, dependencyFlags,
|
srcStageMask, dstStageMask, dependencyFlags,
|
||||||
memoryBarrierCount, pMemoryBarriers,
|
memoryBarrierCount, pMemoryBarriers,
|
||||||
bufferMemoryBarrierCount, pBufferMemoryBarriers,
|
bufferMemoryBarrierCount, pBufferMemoryBarriers,
|
||||||
@ -720,6 +723,10 @@ namespace dxvk {
|
|||||||
DxvkGpuQueryTracker m_gpuQueryTracker;
|
DxvkGpuQueryTracker m_gpuQueryTracker;
|
||||||
DxvkBufferTracker m_bufferTracker;
|
DxvkBufferTracker m_bufferTracker;
|
||||||
DxvkStatCounters m_statCounters;
|
DxvkStatCounters m_statCounters;
|
||||||
|
|
||||||
|
VkCommandBuffer getCmdBuffer(DxvkCmdBuffer cmdBuffer) const {
|
||||||
|
return cmdBuffer == DxvkCmdBuffer::ExecBuffer ? m_execBuffer : m_initBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -22,6 +22,9 @@ namespace dxvk {
|
|||||||
m_metaCopy (metaCopyObjects),
|
m_metaCopy (metaCopyObjects),
|
||||||
m_metaMipGen (metaMipGenObjects),
|
m_metaMipGen (metaMipGenObjects),
|
||||||
m_metaPack (metaPackObjects),
|
m_metaPack (metaPackObjects),
|
||||||
|
m_barriers (DxvkCmdBuffer::ExecBuffer),
|
||||||
|
m_transfers (DxvkCmdBuffer::InitBuffer),
|
||||||
|
m_transitions (DxvkCmdBuffer::ExecBuffer),
|
||||||
m_queryManager(gpuQueryPool) {
|
m_queryManager(gpuQueryPool) {
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -3843,7 +3846,8 @@ namespace dxvk {
|
|||||||
barrier.srcAccessMask = srcAccess;
|
barrier.srcAccessMask = srcAccess;
|
||||||
barrier.dstAccessMask = dstAccess;
|
barrier.dstAccessMask = dstAccess;
|
||||||
|
|
||||||
m_cmd->cmdPipelineBarrier(srcStages, dstStages,
|
m_cmd->cmdPipelineBarrier(
|
||||||
|
DxvkCmdBuffer::ExecBuffer, srcStages, dstStages,
|
||||||
0, 1, &barrier, 0, nullptr, 0, nullptr);
|
0, 1, &barrier, 0, nullptr, 0, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -895,6 +895,7 @@ namespace dxvk {
|
|||||||
DxvkContextState m_state;
|
DxvkContextState m_state;
|
||||||
|
|
||||||
DxvkBarrierSet m_barriers;
|
DxvkBarrierSet m_barriers;
|
||||||
|
DxvkBarrierSet m_transfers;
|
||||||
DxvkBarrierSet m_transitions;
|
DxvkBarrierSet m_transitions;
|
||||||
DxvkBarrierControlFlags m_barrierControl;
|
DxvkBarrierControlFlags m_barrierControl;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user