/* * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Copyright: * 2016-2017 Danny Robson */ #include "./command_buffer.hpp" #include "./event.hpp" #include "./pipeline.hpp" #include using cruft::vk::command_buffer; /////////////////////////////////////////////////////////////////////////////// void command_buffer::reset (VkCommandBufferResetFlags flags) { auto err = vkResetCommandBuffer (native (), flags); error::try_code (err); } /////////////////////////////////////////////////////////////////////////////// void command_buffer::begin (const VkCommandBufferBeginInfo &info) { auto err = vkBeginCommandBuffer (native (), &info); error::try_code (err); } //----------------------------------------------------------------------------- void command_buffer::begin (const VkRenderPassBeginInfo &info, VkSubpassContents contents) { vkCmdBeginRenderPass (native (), &info, contents); } //----------------------------------------------------------------------------- void command_buffer::end (void) { auto err = vkEndCommandBuffer (native ()); error::try_code (err); } //----------------------------------------------------------------------------- void command_buffer::end_pass (void) { vkCmdEndRenderPass (native ()); } /////////////////////////////////////////////////////////////////////////////// template void command_buffer::execute (const command_buffer (&buffers)[N]) { vkCmdExecuteCOmmands (native (), N, buffers); } //----------------------------------------------------------------------------- void command_buffer::next_subpass (const VkSubpassContents contents) { vkCmdNextSubpass (native (), contents); } /////////////////////////////////////////////////////////////////////////////// template void command_buffer::bind (const pipeline &p) { vkCmdBindPipeline (native (), static_cast (BindpointV), p.native ()); } template void command_buffer::bind(const pipeline&); template void command_buffer::bind(const pipeline&); /////////////////////////////////////////////////////////////////////////////// void command_buffer::set (const event &ev, VkPipelineStageFlags flags) { vkCmdSetEvent (native (), ev.native (), flags); } //----------------------------------------------------------------------------- void command_buffer::reset (const event &ev, VkPipelineStageFlags flags) { vkCmdResetEvent (native (), ev.native (), flags); } //----------------------------------------------------------------------------- void command_buffer::wait (util::view events, VkPipelineStageFlags src_mask, VkPipelineStageFlags dst_mask, util::view VkMemoryBarriers, util::view VkBufferMemoryBarriers, util::view VkImageMemoryBarriers) { vkCmdWaitEvents (native (), trunc_cast (events.size ()), &events.cbegin ()->native (), src_mask, dst_mask, trunc_cast (VkMemoryBarriers.size ()), VkMemoryBarriers.cbegin (), trunc_cast (VkBufferMemoryBarriers.size ()), VkBufferMemoryBarriers.cbegin (), trunc_cast (VkImageMemoryBarriers.size ()), VkImageMemoryBarriers.cbegin ()); }