#pragma once #include "dxvk_buffer.h" #include "dxvk_image.h" #include "dxvk_recorder.h" namespace dxvk { /** * \brief Barrier set * * Accumulates memory barriers and provides a * method to record all those barriers into a * command buffer at once. */ class DxvkBarrierSet { public: DxvkBarrierSet(); ~DxvkBarrierSet(); void accessBuffer( const Rc<DxvkBuffer>& buffer, VkDeviceSize offset, VkDeviceSize size, VkPipelineStageFlags stages, VkAccessFlags access); void recordCommands( DxvkRecorder& recorder); void reset(); private: VkPipelineStageFlags m_srcStages = 0; VkPipelineStageFlags m_dstStages = 0; std::vector<VkMemoryBarrier> m_memBarriers; std::vector<VkBufferMemoryBarrier> m_bufBarriers; std::vector<VkImageMemoryBarrier> m_imgBarriers; DxvkResourceAccessTypes getAccessTypes(VkAccessFlags flags) const; }; }