mirror of
https://github.com/EduApps-CDG/OpenDX
synced 2024-12-30 09:45:37 +01:00
70 lines
1.7 KiB
C++
70 lines
1.7 KiB
C++
|
#include "dxvk_barrier.h"
|
||
|
|
||
|
namespace dxvk {
|
||
|
|
||
|
DxvkBarrierSet:: DxvkBarrierSet() { }
|
||
|
DxvkBarrierSet::~DxvkBarrierSet() { }
|
||
|
|
||
|
bool DxvkBarrierSet::hasBarriers() const {
|
||
|
return (m_srcFlags | m_dstFlags) != 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
void DxvkBarrierSet::addMemoryBarrier(
|
||
|
VkPipelineStageFlags srcFlags,
|
||
|
VkPipelineStageFlags dstFlags,
|
||
|
const VkMemoryBarrier& barrier) {
|
||
|
m_srcFlags |= srcFlags;
|
||
|
m_dstFlags |= dstFlags;
|
||
|
m_memory.push_back(barrier);
|
||
|
}
|
||
|
|
||
|
|
||
|
void DxvkBarrierSet::addBufferBarrier(
|
||
|
VkPipelineStageFlags srcFlags,
|
||
|
VkPipelineStageFlags dstFlags,
|
||
|
const VkBufferMemoryBarrier& barrier) {
|
||
|
m_srcFlags |= srcFlags;
|
||
|
m_dstFlags |= dstFlags;
|
||
|
m_buffer.push_back(barrier);
|
||
|
}
|
||
|
|
||
|
|
||
|
void DxvkBarrierSet::addImageBarrier(
|
||
|
VkPipelineStageFlags srcFlags,
|
||
|
VkPipelineStageFlags dstFlags,
|
||
|
const VkImageMemoryBarrier& barrier) {
|
||
|
m_srcFlags |= srcFlags;
|
||
|
m_dstFlags |= dstFlags;
|
||
|
m_image.push_back(barrier);
|
||
|
}
|
||
|
|
||
|
|
||
|
void DxvkBarrierSet::recordCommands(
|
||
|
DxvkRecorder& recorder) {
|
||
|
VkPipelineStageFlags srcFlags = m_srcFlags;
|
||
|
VkPipelineStageFlags dstFlags = m_dstFlags;
|
||
|
|
||
|
if (srcFlags == 0) srcFlags = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
|
||
|
if (dstFlags == 0) dstFlags = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
|
||
|
|
||
|
recorder.cmdPipelineBarrier(
|
||
|
srcFlags, dstFlags, 0,
|
||
|
m_memory.size(), m_memory.data(),
|
||
|
m_buffer.size(), m_buffer.data(),
|
||
|
m_image.size(), m_image.data());
|
||
|
|
||
|
this->reset();
|
||
|
}
|
||
|
|
||
|
|
||
|
void DxvkBarrierSet::reset() {
|
||
|
m_srcFlags = 0;
|
||
|
m_dstFlags = 0;
|
||
|
|
||
|
m_memory.resize(0);
|
||
|
m_buffer.resize(0);
|
||
|
m_image .resize(0);
|
||
|
}
|
||
|
|
||
|
}
|