#include "./command_buffer.hpp" #include "./event.hpp" #include "./pipeline.hpp" using vk::command_buffer; /////////////////////////////////////////////////////////////////////////////// void command_buffer::reset (VkCommandBufferResetFlags flags) { auto err = vkResetCommandBuffer (id (), flags); error::try_code (err); } /////////////////////////////////////////////////////////////////////////////// void command_buffer::begin (const VkCommandBufferBeginInfo &info) { auto err = vkBeginCommandBuffer (id (), &info); error::try_code (err); } //----------------------------------------------------------------------------- void command_buffer::begin (const VkRenderPassBeginInfo &info, VkSubpassContents contents) { vkCmdBeginRenderPass (id (), &info, contents); } //----------------------------------------------------------------------------- void command_buffer::end (void) { auto err = vkEndCommandBuffer (id ()); error::try_code (err); } //----------------------------------------------------------------------------- void command_buffer::end_pass (void) { vkCmdEndRenderPass (id ()); } /////////////////////////////////////////////////////////////////////////////// template void command_buffer::execute (const command_buffer (&buffers)[N]) { vkCmdExecuteCOmmands (id (), N, buffers); } //----------------------------------------------------------------------------- void command_buffer::next_subpass (const VkSubpassContents contents) { vkCmdNextSubpass (id (), contents); } /////////////////////////////////////////////////////////////////////////////// void command_buffer::bind (VkPipelineBindPoint point, const pipeline &p) { vkCmdBindPipeline (id (), point, p.id ()); } /////////////////////////////////////////////////////////////////////////////// void command_buffer::set (const event &ev, VkPipelineStageFlags flags) { vkCmdSetEvent (id (), ev.id (), flags); } //----------------------------------------------------------------------------- void command_buffer::reset (const event &ev, VkPipelineStageFlags flags) { vkCmdResetEvent (id (), ev.id (), flags); } //----------------------------------------------------------------------------- void command_buffer::wait (util::view events, VkPipelineStageFlags src_mask, VkPipelineStageFlags dst_mask, util::view VkMemoryBarriers, util::view VkBufferMemoryBarriers, util::view VkImageMemoryBarriers) { vkCmdWaitEvents (id (), events.size (), &events.cbegin ()->id (), src_mask, dst_mask, VkMemoryBarriers.size (), VkMemoryBarriers.cbegin (), VkBufferMemoryBarriers.size (), VkBufferMemoryBarriers.cbegin (), VkImageMemoryBarriers.size (), VkImageMemoryBarriers.cbegin ()); }