2#ifndef LIBSBX_GRAPHICS_COMMANDS_COMMAND_BUFFER_HPP_
3#define LIBSBX_GRAPHICS_COMMANDS_COMMAND_BUFFER_HPP_
7#include <vulkan/vulkan.hpp>
9#include <libsbx/graphics/devices/logical_device.hpp>
11#include <libsbx/graphics/commands/command_pool.hpp>
13namespace sbx::graphics {
20 VkSemaphore semaphore;
21 VkPipelineStageFlags stage;
25 std::vector<VkBuffer> buffers;
26 VkPipelineStageFlags src_stage_mask;
27 VkPipelineStageFlags dst_stage_mask;
28 VkAccessFlags src_access_mask;
29 VkAccessFlags dst_access_mask;
30 std::uint32_t src_queue_family{VK_QUEUE_FAMILY_IGNORED};
31 std::uint32_t dst_queue_family{VK_QUEUE_FAMILY_IGNORED};
35 VkPipelineStageFlags2 dst_stage_mask;
36 VkAccessFlags2 dst_access_mask;
37 std::uint32_t src_queue_family;
38 std::uint32_t dst_queue_family;
40 VkDeviceSize size{VK_WHOLE_SIZE};
41 VkDeviceSize offset{0};
45 VkPipelineStageFlags2 src_stage_mask;
46 VkAccessFlags2 src_access_mask;
47 std::uint32_t src_queue_family;
48 std::uint32_t dst_queue_family;
50 VkDeviceSize size{VK_WHOLE_SIZE};
51 VkDeviceSize offset{0};
56 std::uint32_t mip_levels;
57 std::uint32_t base_array_layer;
58 std::uint32_t layer_count;
59 VkPipelineStageFlags2 src_stage_mask;
60 VkAccessFlags2 src_access_mask;
61 std::uint32_t src_queue_family;
62 std::uint32_t dst_queue_family;
63 VkImageLayout old_layout;
64 VkImageLayout new_layout;
69 std::uint32_t mip_levels;
70 std::uint32_t base_array_layer;
71 std::uint32_t layer_count;
72 VkPipelineStageFlags2 dst_stage_mask;
73 VkAccessFlags2 dst_access_mask;
74 std::uint32_t src_queue_family;
75 std::uint32_t dst_queue_family;
76 VkImageLayout old_layout;
77 VkImageLayout new_layout;
80 command_buffer(
bool should_begin =
true, VkQueueFlagBits queue_type = VK_QUEUE_GRAPHICS_BIT, VkCommandBufferLevel buffer_level = VK_COMMAND_BUFFER_LEVEL_PRIMARY);
92 auto handle() const noexcept -> VkCommandBuffer;
94 operator VkCommandBuffer() const noexcept;
96 auto is_running() const noexcept ->
bool;
98 auto begin(VkCommandBufferUsageFlags usage = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT) ->
void;
102 auto submit_idle() ->
void;
104 auto submit(const std::vector<
wait_data>&
wait_data = {},
const VkSemaphore &signal_semaphore =
nullptr,
const VkFence& fence =
nullptr) ->
void;
106 auto copy_buffer(
const VkBuffer& source,
const VkBuffer& destination,
const VkBufferCopy& region) -> void;
108 auto buffer_barrier(
const buffer_barrier_data& buffer_barrier_data) -> void;
110 auto memory_dependency(
const VkMemoryBarrier2& memory_barrier) -> void;
112 auto release_buffer_ownership(
const std::vector<buffer_release_data>& releases) -> void;
114 auto acquire_buffer_ownership(
const std::vector<buffer_acquire_data>& acquires) -> void;
116 auto acquire_image_ownership(
const std::vector<image_acquire_data>& acquires) -> void;
118 auto release_image_ownership(
const std::vector<image_release_data>& releases) -> void;
120 auto set_viewport(
const VkViewport&
viewport) -> void;
122 auto set_scissor(
const VkRect2D& scissor) -> void;
124 auto bind_vertex_buffer(std::uint32_t first_binding,
const VkBuffer&
buffer) -> void;
126 auto bind_index_buffer(
const VkBuffer&
buffer, VkDeviceSize offset, VkIndexType index_type) -> void;
128 auto draw(std::uint32_t vertex_count, std::uint32_t instance_count, std::uint32_t first_vertex, std::uint32_t first_instance) -> void;
130 auto draw_indexed(std::uint32_t index_count, std::uint32_t instance_count, std::uint32_t first_index, std::int32_t vertex_offset, std::uint32_t first_instance) -> void;
132 auto draw_indirect(VkBuffer
buffer, std::uint32_t offset, std::uint32_t count) -> void;
134 auto draw_indexed_indirect(VkBuffer
buffer, std::uint32_t offset, std::uint32_t count) -> void;
136 auto draw_indexed_indirect_count(VkBuffer
buffer, std::uint32_t offset, VkBuffer count_buffer, std::uint32_t count_buffer_offset, std::uint32_t max_draw_count) -> void;
138 auto begin_render_pass(
const VkRenderPassBeginInfo& renderpass_begin_info, VkSubpassContents subpass_contents) -> void;
140 auto end_render_pass() -> void;
142 auto fill_buffer(
const VkBuffer&
buffer, VkDeviceSize offset, VkDeviceSize size, std::uint32_t data) -> void;
144 auto begin_rendering(
const VkRenderingInfo& rendering_info) -> void;
146 auto end_rendering() -> void;
148 auto reset(VkCommandBufferResetFlags flags = 0) -> void;
150 auto execute_commands(
const std::vector<command_buffer>& commands) -> void;
154 auto _queue() const -> const graphics::
queue&;
158 VkCommandBuffer _handle{};
159 VkQueueFlagBits _queue_type{};
Definition: buffer.hpp:21
Definition: command_buffer.hpp:15
Definition: command_pool.hpp:13
Definition: logical_device.hpp:19
Definition: viewport.hpp:13
Definition: command_buffer.hpp:34
Definition: command_buffer.hpp:24
Definition: command_buffer.hpp:44
Definition: command_buffer.hpp:67
Definition: command_buffer.hpp:54
Definition: command_buffer.hpp:19