Blender V4.3
vk_command_buffer_wrapper.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#pragma once
10
11#include "vk_common.hh"
12
15 public:
17 virtual ~VKCommandBufferInterface() = default;
18
19 virtual void begin_recording() = 0;
20 virtual void end_recording() = 0;
21 virtual void submit_with_cpu_synchronization(VkFence vk_fence = VK_NULL_HANDLE) = 0;
22 virtual void wait_for_cpu_synchronization(VkFence vk_fence = VK_NULL_HANDLE) = 0;
23
24 virtual void bind_pipeline(VkPipelineBindPoint pipeline_bind_point, VkPipeline pipeline) = 0;
25 virtual void bind_descriptor_sets(VkPipelineBindPoint pipeline_bind_point,
26 VkPipelineLayout layout,
27 uint32_t first_set,
28 uint32_t descriptor_set_count,
29 const VkDescriptorSet *p_descriptor_sets,
30 uint32_t dynamic_offset_count,
31 const uint32_t *p_dynamic_offsets) = 0;
32 virtual void bind_index_buffer(VkBuffer buffer, VkDeviceSize offset, VkIndexType index_type) = 0;
33 virtual void bind_vertex_buffers(uint32_t first_binding,
34 uint32_t binding_count,
35 const VkBuffer *p_buffers,
36 const VkDeviceSize *p_offsets) = 0;
37 virtual void draw(uint32_t vertex_count,
38 uint32_t instance_count,
39 uint32_t first_vertex,
40 uint32_t first_instance) = 0;
41 virtual void draw_indexed(uint32_t index_count,
42 uint32_t instance_count,
43 uint32_t first_index,
44 int32_t vertex_offset,
45 uint32_t first_instance) = 0;
46 virtual void draw_indirect(VkBuffer buffer,
47 VkDeviceSize offset,
48 uint32_t draw_count,
49 uint32_t stride) = 0;
50 virtual void draw_indexed_indirect(VkBuffer buffer,
51 VkDeviceSize offset,
52 uint32_t draw_count,
53 uint32_t stride) = 0;
54 virtual void dispatch(uint32_t group_count_x,
55 uint32_t group_count_y,
56 uint32_t group_count_z) = 0;
57 virtual void dispatch_indirect(VkBuffer buffer, VkDeviceSize offset) = 0;
58 virtual void update_buffer(VkBuffer dst_buffer,
59 VkDeviceSize dst_offset,
60 VkDeviceSize data_size,
61 const void *p_data) = 0;
62 virtual void copy_buffer(VkBuffer src_buffer,
63 VkBuffer dst_buffer,
64 uint32_t region_count,
65 const VkBufferCopy *p_regions) = 0;
66 virtual void copy_image(VkImage src_image,
67 VkImageLayout src_image_layout,
68 VkImage dst_image,
69 VkImageLayout dst_image_layout,
70 uint32_t region_count,
71 const VkImageCopy *p_regions) = 0;
72 virtual void blit_image(VkImage src_image,
73 VkImageLayout src_image_layout,
74 VkImage dst_image,
75 VkImageLayout dst_image_layout,
76 uint32_t region_count,
77 const VkImageBlit *p_regions,
78 VkFilter filter) = 0;
79 virtual void copy_buffer_to_image(VkBuffer src_buffer,
80 VkImage dst_image,
81 VkImageLayout dst_image_layout,
82 uint32_t region_count,
83 const VkBufferImageCopy *p_regions) = 0;
84 virtual void copy_image_to_buffer(VkImage src_image,
85 VkImageLayout src_image_layout,
86 VkBuffer dst_buffer,
87 uint32_t region_count,
88 const VkBufferImageCopy *p_regions) = 0;
89 virtual void fill_buffer(VkBuffer dst_buffer,
90 VkDeviceSize dst_offset,
91 VkDeviceSize size,
92 uint32_t data) = 0;
93 virtual void clear_color_image(VkImage image,
94 VkImageLayout image_layout,
95 const VkClearColorValue *p_color,
96 uint32_t range_count,
97 const VkImageSubresourceRange *p_ranges) = 0;
98 virtual void clear_depth_stencil_image(VkImage image,
99 VkImageLayout image_layout,
100 const VkClearDepthStencilValue *p_depth_stencil,
101 uint32_t range_count,
102 const VkImageSubresourceRange *p_ranges) = 0;
103 virtual void clear_attachments(uint32_t attachment_count,
104 const VkClearAttachment *p_attachments,
105 uint32_t rect_count,
106 const VkClearRect *p_rects) = 0;
107 virtual void pipeline_barrier(VkPipelineStageFlags src_stage_mask,
108 VkPipelineStageFlags dst_stage_mask,
109 VkDependencyFlags dependency_flags,
110 uint32_t memory_barrier_count,
111 const VkMemoryBarrier *p_memory_barriers,
112 uint32_t buffer_memory_barrier_count,
113 const VkBufferMemoryBarrier *p_buffer_memory_barriers,
114 uint32_t image_memory_barrier_count,
115 const VkImageMemoryBarrier *p_image_memory_barriers) = 0;
116 virtual void push_constants(VkPipelineLayout layout,
117 VkShaderStageFlags stage_flags,
118 uint32_t offset,
119 uint32_t size,
120 const void *p_values) = 0;
121 virtual void begin_query(VkQueryPool vk_query_pool,
122 uint32_t query_index,
123 VkQueryControlFlags vk_query_control_flags) = 0;
124 virtual void end_query(VkQueryPool vk_query_pool, uint32_t query_index) = 0;
125 virtual void reset_query_pool(VkQueryPool vk_query_pool,
126 uint32_t first_query,
127 uint32_t query_count) = 0;
128
129 /* VK_KHR_dynamic_rendering */
130 virtual void begin_rendering(const VkRenderingInfo *p_rendering_info) = 0;
131 virtual void end_rendering() = 0;
132 /* VK_EXT_debug_utils */
133 virtual void begin_debug_utils_label(const VkDebugUtilsLabelEXT *vk_debug_utils_label) = 0;
134 virtual void end_debug_utils_label() = 0;
135};
136
138 private:
139 VkCommandPoolCreateInfo vk_command_pool_create_info_;
140 VkCommandBufferAllocateInfo vk_command_buffer_allocate_info_;
141 VkCommandBufferBeginInfo vk_command_buffer_begin_info_;
142 VkFenceCreateInfo vk_fence_create_info_;
143 VkSubmitInfo vk_submit_info_;
144
145 VkCommandPool vk_command_pool_ = VK_NULL_HANDLE;
146 VkCommandBuffer vk_command_buffer_ = VK_NULL_HANDLE;
147 VkFence vk_fence_ = VK_NULL_HANDLE;
148
149 public:
151 virtual ~VKCommandBufferWrapper();
152
153 void begin_recording() override;
154 void end_recording() override;
155 void submit_with_cpu_synchronization(VkFence vk_fence) override;
156 void wait_for_cpu_synchronization(VkFence vk_fence) override;
157
158 void bind_pipeline(VkPipelineBindPoint pipeline_bind_point, VkPipeline pipeline) override;
159 void bind_descriptor_sets(VkPipelineBindPoint pipeline_bind_point,
160 VkPipelineLayout layout,
161 uint32_t first_set,
162 uint32_t descriptor_set_count,
163 const VkDescriptorSet *p_descriptor_sets,
164 uint32_t dynamic_offset_count,
165 const uint32_t *p_dynamic_offsets) override;
166 void bind_index_buffer(VkBuffer buffer, VkDeviceSize offset, VkIndexType index_type) override;
167 void bind_vertex_buffers(uint32_t first_binding,
168 uint32_t binding_count,
169 const VkBuffer *p_buffers,
170 const VkDeviceSize *p_offsets) override;
171 void draw(uint32_t vertex_count,
172 uint32_t instance_count,
173 uint32_t first_vertex,
174 uint32_t first_instance) override;
175 void draw_indexed(uint32_t index_count,
176 uint32_t instance_count,
177 uint32_t first_index,
178 int32_t vertex_offset,
179 uint32_t first_instance) override;
180 void draw_indirect(VkBuffer buffer,
181 VkDeviceSize offset,
182 uint32_t draw_count,
183 uint32_t stride) override;
184 void draw_indexed_indirect(VkBuffer buffer,
185 VkDeviceSize offset,
186 uint32_t draw_count,
187 uint32_t stride) override;
188 void dispatch(uint32_t group_count_x, uint32_t group_count_y, uint32_t group_count_z) override;
189 void dispatch_indirect(VkBuffer buffer, VkDeviceSize offset) override;
190 void update_buffer(VkBuffer dst_buffer,
191 VkDeviceSize dst_offset,
192 VkDeviceSize data_size,
193 const void *p_data) override;
194 void copy_buffer(VkBuffer src_buffer,
195 VkBuffer dst_buffer,
196 uint32_t region_count,
197 const VkBufferCopy *p_regions) override;
198 void copy_image(VkImage src_image,
199 VkImageLayout src_image_layout,
200 VkImage dst_image,
201 VkImageLayout dst_image_layout,
202 uint32_t region_count,
203 const VkImageCopy *p_regions) override;
204 void blit_image(VkImage src_image,
205 VkImageLayout src_image_layout,
206 VkImage dst_image,
207 VkImageLayout dst_image_layout,
208 uint32_t region_count,
209 const VkImageBlit *p_regions,
210 VkFilter filter) override;
211 void copy_buffer_to_image(VkBuffer src_buffer,
212 VkImage dst_image,
213 VkImageLayout dst_image_layout,
214 uint32_t region_count,
215 const VkBufferImageCopy *p_regions) override;
216 void copy_image_to_buffer(VkImage src_image,
217 VkImageLayout src_image_layout,
218 VkBuffer dst_buffer,
219 uint32_t region_count,
220 const VkBufferImageCopy *p_regions) override;
221 void fill_buffer(VkBuffer dst_buffer,
222 VkDeviceSize dst_offset,
223 VkDeviceSize size,
224 uint32_t data) override;
225 void clear_color_image(VkImage image,
226 VkImageLayout image_layout,
227 const VkClearColorValue *p_color,
228 uint32_t range_count,
229 const VkImageSubresourceRange *p_ranges) override;
230 void clear_depth_stencil_image(VkImage image,
231 VkImageLayout image_layout,
232 const VkClearDepthStencilValue *p_depth_stencil,
233 uint32_t range_count,
234 const VkImageSubresourceRange *p_ranges) override;
235 void clear_attachments(uint32_t attachment_count,
236 const VkClearAttachment *p_attachments,
237 uint32_t rect_count,
238 const VkClearRect *p_rects) override;
239 void pipeline_barrier(VkPipelineStageFlags src_stage_mask,
240 VkPipelineStageFlags dst_stage_mask,
241 VkDependencyFlags dependency_flags,
242 uint32_t memory_barrier_count,
243 const VkMemoryBarrier *p_memory_barriers,
244 uint32_t buffer_memory_barrier_count,
245 const VkBufferMemoryBarrier *p_buffer_memory_barriers,
246 uint32_t image_memory_barrier_count,
247 const VkImageMemoryBarrier *p_image_memory_barriers) override;
248 void push_constants(VkPipelineLayout layout,
249 VkShaderStageFlags stage_flags,
250 uint32_t offset,
251 uint32_t size,
252 const void *p_values) override;
253 void begin_query(VkQueryPool vk_query_pool,
254 uint32_t query_index,
255 VkQueryControlFlags vk_query_control_flags) override;
256 void end_query(VkQueryPool vk_query_pool, uint32_t query_index) override;
257 void reset_query_pool(VkQueryPool, uint32_t first_query, uint32_t query_count) override;
258 void begin_rendering(const VkRenderingInfo *p_rendering_info) override;
259 void end_rendering() override;
260 void begin_debug_utils_label(const VkDebugUtilsLabelEXT *vk_debug_utils_label) override;
261 void end_debug_utils_label() override;
262};
263
264} // namespace blender::gpu::render_graph
virtual void fill_buffer(VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize size, uint32_t data)=0
virtual void bind_pipeline(VkPipelineBindPoint pipeline_bind_point, VkPipeline pipeline)=0
virtual void wait_for_cpu_synchronization(VkFence vk_fence=VK_NULL_HANDLE)=0
virtual void draw_indexed(uint32_t index_count, uint32_t instance_count, uint32_t first_index, int32_t vertex_offset, uint32_t first_instance)=0
virtual void bind_vertex_buffers(uint32_t first_binding, uint32_t binding_count, const VkBuffer *p_buffers, const VkDeviceSize *p_offsets)=0
virtual void clear_color_image(VkImage image, VkImageLayout image_layout, const VkClearColorValue *p_color, uint32_t range_count, const VkImageSubresourceRange *p_ranges)=0
virtual void copy_buffer(VkBuffer src_buffer, VkBuffer dst_buffer, uint32_t region_count, const VkBufferCopy *p_regions)=0
virtual void bind_descriptor_sets(VkPipelineBindPoint pipeline_bind_point, VkPipelineLayout layout, uint32_t first_set, uint32_t descriptor_set_count, const VkDescriptorSet *p_descriptor_sets, uint32_t dynamic_offset_count, const uint32_t *p_dynamic_offsets)=0
virtual void begin_query(VkQueryPool vk_query_pool, uint32_t query_index, VkQueryControlFlags vk_query_control_flags)=0
virtual void end_query(VkQueryPool vk_query_pool, uint32_t query_index)=0
virtual void clear_attachments(uint32_t attachment_count, const VkClearAttachment *p_attachments, uint32_t rect_count, const VkClearRect *p_rects)=0
virtual void clear_depth_stencil_image(VkImage image, VkImageLayout image_layout, const VkClearDepthStencilValue *p_depth_stencil, uint32_t range_count, const VkImageSubresourceRange *p_ranges)=0
virtual void submit_with_cpu_synchronization(VkFence vk_fence=VK_NULL_HANDLE)=0
virtual void draw(uint32_t vertex_count, uint32_t instance_count, uint32_t first_vertex, uint32_t first_instance)=0
virtual void copy_image(VkImage src_image, VkImageLayout src_image_layout, VkImage dst_image, VkImageLayout dst_image_layout, uint32_t region_count, const VkImageCopy *p_regions)=0
virtual void blit_image(VkImage src_image, VkImageLayout src_image_layout, VkImage dst_image, VkImageLayout dst_image_layout, uint32_t region_count, const VkImageBlit *p_regions, VkFilter filter)=0
virtual void copy_buffer_to_image(VkBuffer src_buffer, VkImage dst_image, VkImageLayout dst_image_layout, uint32_t region_count, const VkBufferImageCopy *p_regions)=0
virtual void begin_debug_utils_label(const VkDebugUtilsLabelEXT *vk_debug_utils_label)=0
virtual void copy_image_to_buffer(VkImage src_image, VkImageLayout src_image_layout, VkBuffer dst_buffer, uint32_t region_count, const VkBufferImageCopy *p_regions)=0
virtual void reset_query_pool(VkQueryPool vk_query_pool, uint32_t first_query, uint32_t query_count)=0
virtual void bind_index_buffer(VkBuffer buffer, VkDeviceSize offset, VkIndexType index_type)=0
virtual void push_constants(VkPipelineLayout layout, VkShaderStageFlags stage_flags, uint32_t offset, uint32_t size, const void *p_values)=0
virtual void begin_rendering(const VkRenderingInfo *p_rendering_info)=0
virtual void dispatch_indirect(VkBuffer buffer, VkDeviceSize offset)=0
virtual void update_buffer(VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize data_size, const void *p_data)=0
virtual void pipeline_barrier(VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask, VkDependencyFlags dependency_flags, uint32_t memory_barrier_count, const VkMemoryBarrier *p_memory_barriers, uint32_t buffer_memory_barrier_count, const VkBufferMemoryBarrier *p_buffer_memory_barriers, uint32_t image_memory_barrier_count, const VkImageMemoryBarrier *p_image_memory_barriers)=0
virtual void draw_indexed_indirect(VkBuffer buffer, VkDeviceSize offset, uint32_t draw_count, uint32_t stride)=0
virtual void draw_indirect(VkBuffer buffer, VkDeviceSize offset, uint32_t draw_count, uint32_t stride)=0
virtual void dispatch(uint32_t group_count_x, uint32_t group_count_y, uint32_t group_count_z)=0
void begin_debug_utils_label(const VkDebugUtilsLabelEXT *vk_debug_utils_label) override
void bind_descriptor_sets(VkPipelineBindPoint pipeline_bind_point, VkPipelineLayout layout, uint32_t first_set, uint32_t descriptor_set_count, const VkDescriptorSet *p_descriptor_sets, uint32_t dynamic_offset_count, const uint32_t *p_dynamic_offsets) override
void clear_attachments(uint32_t attachment_count, const VkClearAttachment *p_attachments, uint32_t rect_count, const VkClearRect *p_rects) override
void clear_depth_stencil_image(VkImage image, VkImageLayout image_layout, const VkClearDepthStencilValue *p_depth_stencil, uint32_t range_count, const VkImageSubresourceRange *p_ranges) override
void draw_indexed(uint32_t index_count, uint32_t instance_count, uint32_t first_index, int32_t vertex_offset, uint32_t first_instance) override
void fill_buffer(VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize size, uint32_t data) override
void copy_image_to_buffer(VkImage src_image, VkImageLayout src_image_layout, VkBuffer dst_buffer, uint32_t region_count, const VkBufferImageCopy *p_regions) override
void bind_pipeline(VkPipelineBindPoint pipeline_bind_point, VkPipeline pipeline) override
void begin_query(VkQueryPool vk_query_pool, uint32_t query_index, VkQueryControlFlags vk_query_control_flags) override
void draw_indirect(VkBuffer buffer, VkDeviceSize offset, uint32_t draw_count, uint32_t stride) override
void dispatch_indirect(VkBuffer buffer, VkDeviceSize offset) override
void pipeline_barrier(VkPipelineStageFlags src_stage_mask, VkPipelineStageFlags dst_stage_mask, VkDependencyFlags dependency_flags, uint32_t memory_barrier_count, const VkMemoryBarrier *p_memory_barriers, uint32_t buffer_memory_barrier_count, const VkBufferMemoryBarrier *p_buffer_memory_barriers, uint32_t image_memory_barrier_count, const VkImageMemoryBarrier *p_image_memory_barriers) override
void clear_color_image(VkImage image, VkImageLayout image_layout, const VkClearColorValue *p_color, uint32_t range_count, const VkImageSubresourceRange *p_ranges) override
void copy_buffer_to_image(VkBuffer src_buffer, VkImage dst_image, VkImageLayout dst_image_layout, uint32_t region_count, const VkBufferImageCopy *p_regions) override
void draw_indexed_indirect(VkBuffer buffer, VkDeviceSize offset, uint32_t draw_count, uint32_t stride) override
void begin_rendering(const VkRenderingInfo *p_rendering_info) override
void draw(uint32_t vertex_count, uint32_t instance_count, uint32_t first_vertex, uint32_t first_instance) override
void copy_image(VkImage src_image, VkImageLayout src_image_layout, VkImage dst_image, VkImageLayout dst_image_layout, uint32_t region_count, const VkImageCopy *p_regions) override
void update_buffer(VkBuffer dst_buffer, VkDeviceSize dst_offset, VkDeviceSize data_size, const void *p_data) override
void push_constants(VkPipelineLayout layout, VkShaderStageFlags stage_flags, uint32_t offset, uint32_t size, const void *p_values) override
void end_query(VkQueryPool vk_query_pool, uint32_t query_index) override
void copy_buffer(VkBuffer src_buffer, VkBuffer dst_buffer, uint32_t region_count, const VkBufferCopy *p_regions) override
void reset_query_pool(VkQueryPool, uint32_t first_query, uint32_t query_count) override
void blit_image(VkImage src_image, VkImageLayout src_image_layout, VkImage dst_image, VkImageLayout dst_image_layout, uint32_t region_count, const VkImageBlit *p_regions, VkFilter filter) override
void dispatch(uint32_t group_count_x, uint32_t group_count_y, uint32_t group_count_z) override
void bind_index_buffer(VkBuffer buffer, VkDeviceSize offset, VkIndexType index_type) override
void bind_vertex_buffers(uint32_t first_binding, uint32_t binding_count, const VkBuffer *p_buffers, const VkDeviceSize *p_offsets) override
unsigned int uint32_t
Definition stdint.h:80
signed int int32_t
Definition stdint.h:77