Blender V5.0
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
8
9#pragma once
10
11#include "vk_common.hh"
12
13namespace blender::gpu {
14struct VKExtensions;
15}
16
19 public:
21
23 virtual ~VKCommandBufferInterface() = default;
24
25 virtual void begin_recording() = 0;
26 virtual void end_recording() = 0;
27
28 virtual void bind_pipeline(VkPipelineBindPoint pipeline_bind_point, VkPipeline pipeline) = 0;
29 virtual void bind_descriptor_sets(VkPipelineBindPoint pipeline_bind_point,
30 VkPipelineLayout layout,
31 uint32_t first_set,
32 uint32_t descriptor_set_count,
33 const VkDescriptorSet *p_descriptor_sets,
34 uint32_t dynamic_offset_count,
35 const uint32_t *p_dynamic_offsets) = 0;
36 virtual void bind_index_buffer(VkBuffer buffer, VkDeviceSize offset, VkIndexType index_type) = 0;
37 virtual void bind_vertex_buffers(uint32_t first_binding,
38 uint32_t binding_count,
39 const VkBuffer *p_buffers,
40 const VkDeviceSize *p_offsets) = 0;
41 virtual void draw(uint32_t vertex_count,
42 uint32_t instance_count,
43 uint32_t first_vertex,
44 uint32_t first_instance) = 0;
45 virtual void draw_indexed(uint32_t index_count,
46 uint32_t instance_count,
47 uint32_t first_index,
48 int32_t vertex_offset,
49 uint32_t first_instance) = 0;
50 virtual void draw_indirect(VkBuffer buffer,
51 VkDeviceSize offset,
52 uint32_t draw_count,
53 uint32_t stride) = 0;
54 virtual void draw_indexed_indirect(VkBuffer buffer,
55 VkDeviceSize offset,
56 uint32_t draw_count,
57 uint32_t stride) = 0;
58 virtual void dispatch(uint32_t group_count_x,
59 uint32_t group_count_y,
60 uint32_t group_count_z) = 0;
61 virtual void dispatch_indirect(VkBuffer buffer, VkDeviceSize offset) = 0;
62 virtual void update_buffer(VkBuffer dst_buffer,
63 VkDeviceSize dst_offset,
64 VkDeviceSize data_size,
65 const void *p_data) = 0;
66 virtual void copy_buffer(VkBuffer src_buffer,
67 VkBuffer dst_buffer,
68 uint32_t region_count,
69 const VkBufferCopy *p_regions) = 0;
70 virtual void copy_image(VkImage src_image,
71 VkImageLayout src_image_layout,
72 VkImage dst_image,
73 VkImageLayout dst_image_layout,
74 uint32_t region_count,
75 const VkImageCopy *p_regions) = 0;
76 virtual void blit_image(VkImage src_image,
77 VkImageLayout src_image_layout,
78 VkImage dst_image,
79 VkImageLayout dst_image_layout,
80 uint32_t region_count,
81 const VkImageBlit *p_regions,
82 VkFilter filter) = 0;
83 virtual void copy_buffer_to_image(VkBuffer src_buffer,
84 VkImage dst_image,
85 VkImageLayout dst_image_layout,
86 uint32_t region_count,
87 const VkBufferImageCopy *p_regions) = 0;
88 virtual void copy_image_to_buffer(VkImage src_image,
89 VkImageLayout src_image_layout,
90 VkBuffer dst_buffer,
91 uint32_t region_count,
92 const VkBufferImageCopy *p_regions) = 0;
93 virtual void fill_buffer(VkBuffer dst_buffer,
94 VkDeviceSize dst_offset,
95 VkDeviceSize size,
96 uint32_t data) = 0;
97 virtual void clear_color_image(VkImage image,
98 VkImageLayout image_layout,
99 const VkClearColorValue *p_color,
100 uint32_t range_count,
101 const VkImageSubresourceRange *p_ranges) = 0;
102 virtual void clear_depth_stencil_image(VkImage image,
103 VkImageLayout image_layout,
104 const VkClearDepthStencilValue *p_depth_stencil,
105 uint32_t range_count,
106 const VkImageSubresourceRange *p_ranges) = 0;
107 virtual void clear_attachments(uint32_t attachment_count,
108 const VkClearAttachment *p_attachments,
109 uint32_t rect_count,
110 const VkClearRect *p_rects) = 0;
111 virtual void pipeline_barrier(VkPipelineStageFlags src_stage_mask,
112 VkPipelineStageFlags dst_stage_mask,
113 VkDependencyFlags dependency_flags,
114 uint32_t memory_barrier_count,
115 const VkMemoryBarrier *p_memory_barriers,
116 uint32_t buffer_memory_barrier_count,
117 const VkBufferMemoryBarrier *p_buffer_memory_barriers,
118 uint32_t image_memory_barrier_count,
119 const VkImageMemoryBarrier *p_image_memory_barriers) = 0;
120 virtual void push_constants(VkPipelineLayout layout,
121 VkShaderStageFlags stage_flags,
122 uint32_t offset,
123 uint32_t size,
124 const void *p_values) = 0;
125 virtual void begin_query(VkQueryPool vk_query_pool,
126 uint32_t query_index,
127 VkQueryControlFlags vk_query_control_flags) = 0;
128 virtual void end_query(VkQueryPool vk_query_pool, uint32_t query_index) = 0;
129 virtual void reset_query_pool(VkQueryPool vk_query_pool,
130 uint32_t first_query,
131 uint32_t query_count) = 0;
132 virtual void set_viewport(const Vector<VkViewport> viewports) = 0;
133 virtual void set_scissor(const Vector<VkRect2D> scissors) = 0;
134 virtual void set_line_width(const float line_width) = 0;
135
136 /* VK_KHR_dynamic_rendering */
137 virtual void begin_rendering(const VkRenderingInfo *p_rendering_info) = 0;
138 virtual void end_rendering() = 0;
139 /* VK_EXT_debug_utils */
140 virtual void begin_debug_utils_label(const VkDebugUtilsLabelEXT *vk_debug_utils_label) = 0;
141 virtual void end_debug_utils_label() = 0;
142
143 /* VK_EXT_descriptor_buffer */
145 uint32_t buffer_count, const VkDescriptorBufferBindingInfoEXT *p_binding_infos) = 0;
146 virtual void set_descriptor_buffer_offsets(VkPipelineBindPoint pipeline_bind_point,
147 VkPipelineLayout layout,
148 uint32_t first_set,
149 uint32_t set_count,
150 const uint32_t *p_buffer_indices,
151 const VkDeviceSize *p_offsets) = 0;
152};
153
155 private:
156 VkCommandBuffer vk_command_buffer_ = VK_NULL_HANDLE;
157
158 public:
159 VKCommandBufferWrapper(VkCommandBuffer vk_command_buffer, const VKExtensions &extensions);
160
161 void begin_recording() override;
162 void end_recording() override;
163
164 void bind_pipeline(VkPipelineBindPoint pipeline_bind_point, VkPipeline pipeline) override;
165 void bind_descriptor_sets(VkPipelineBindPoint pipeline_bind_point,
166 VkPipelineLayout layout,
167 uint32_t first_set,
168 uint32_t descriptor_set_count,
169 const VkDescriptorSet *p_descriptor_sets,
170 uint32_t dynamic_offset_count,
171 const uint32_t *p_dynamic_offsets) override;
172 void bind_index_buffer(VkBuffer buffer, VkDeviceSize offset, VkIndexType index_type) override;
173 void bind_vertex_buffers(uint32_t first_binding,
174 uint32_t binding_count,
175 const VkBuffer *p_buffers,
176 const VkDeviceSize *p_offsets) override;
177 void draw(uint32_t vertex_count,
178 uint32_t instance_count,
179 uint32_t first_vertex,
180 uint32_t first_instance) override;
181 void draw_indexed(uint32_t index_count,
182 uint32_t instance_count,
183 uint32_t first_index,
184 int32_t vertex_offset,
185 uint32_t first_instance) override;
186 void draw_indirect(VkBuffer buffer,
187 VkDeviceSize offset,
188 uint32_t draw_count,
189 uint32_t stride) override;
190 void draw_indexed_indirect(VkBuffer buffer,
191 VkDeviceSize offset,
192 uint32_t draw_count,
193 uint32_t stride) override;
194 void dispatch(uint32_t group_count_x, uint32_t group_count_y, uint32_t group_count_z) override;
195 void dispatch_indirect(VkBuffer buffer, VkDeviceSize offset) override;
196 void update_buffer(VkBuffer dst_buffer,
197 VkDeviceSize dst_offset,
198 VkDeviceSize data_size,
199 const void *p_data) override;
200 void copy_buffer(VkBuffer src_buffer,
201 VkBuffer dst_buffer,
202 uint32_t region_count,
203 const VkBufferCopy *p_regions) override;
204 void copy_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 VkImageCopy *p_regions) override;
210 void blit_image(VkImage src_image,
211 VkImageLayout src_image_layout,
212 VkImage dst_image,
213 VkImageLayout dst_image_layout,
214 uint32_t region_count,
215 const VkImageBlit *p_regions,
216 VkFilter filter) override;
217 void copy_buffer_to_image(VkBuffer src_buffer,
218 VkImage dst_image,
219 VkImageLayout dst_image_layout,
220 uint32_t region_count,
221 const VkBufferImageCopy *p_regions) override;
222 void copy_image_to_buffer(VkImage src_image,
223 VkImageLayout src_image_layout,
224 VkBuffer dst_buffer,
225 uint32_t region_count,
226 const VkBufferImageCopy *p_regions) override;
227 void fill_buffer(VkBuffer dst_buffer,
228 VkDeviceSize dst_offset,
229 VkDeviceSize size,
230 uint32_t data) override;
231 void clear_color_image(VkImage image,
232 VkImageLayout image_layout,
233 const VkClearColorValue *p_color,
234 uint32_t range_count,
235 const VkImageSubresourceRange *p_ranges) override;
236 void clear_depth_stencil_image(VkImage image,
237 VkImageLayout image_layout,
238 const VkClearDepthStencilValue *p_depth_stencil,
239 uint32_t range_count,
240 const VkImageSubresourceRange *p_ranges) override;
241 void clear_attachments(uint32_t attachment_count,
242 const VkClearAttachment *p_attachments,
243 uint32_t rect_count,
244 const VkClearRect *p_rects) override;
245 void pipeline_barrier(VkPipelineStageFlags src_stage_mask,
246 VkPipelineStageFlags dst_stage_mask,
247 VkDependencyFlags dependency_flags,
248 uint32_t memory_barrier_count,
249 const VkMemoryBarrier *p_memory_barriers,
250 uint32_t buffer_memory_barrier_count,
251 const VkBufferMemoryBarrier *p_buffer_memory_barriers,
252 uint32_t image_memory_barrier_count,
253 const VkImageMemoryBarrier *p_image_memory_barriers) override;
254 void push_constants(VkPipelineLayout layout,
255 VkShaderStageFlags stage_flags,
256 uint32_t offset,
257 uint32_t size,
258 const void *p_values) override;
259 void set_viewport(const Vector<VkViewport> viewports) override;
260 void set_scissor(const Vector<VkRect2D> scissors) override;
261 void set_line_width(const float line_width) override;
262 void begin_query(VkQueryPool vk_query_pool,
263 uint32_t query_index,
264 VkQueryControlFlags vk_query_control_flags) override;
265 void end_query(VkQueryPool vk_query_pool, uint32_t query_index) override;
266 void reset_query_pool(VkQueryPool, uint32_t first_query, uint32_t query_count) override;
267 void begin_rendering(const VkRenderingInfo *p_rendering_info) override;
268 void end_rendering() override;
269 void begin_debug_utils_label(const VkDebugUtilsLabelEXT *vk_debug_utils_label) override;
270 void end_debug_utils_label() override;
271
272 /* VK_EXT_descriptor_buffer */
273 void bind_descriptor_buffers(uint32_t buffer_count,
274 const VkDescriptorBufferBindingInfoEXT *p_binding_infos) override;
275 void set_descriptor_buffer_offsets(VkPipelineBindPoint pipeline_bind_point,
276 VkPipelineLayout layout,
277 uint32_t first_set,
278 uint32_t set_count,
279 const uint32_t *p_buffer_indices,
280 const VkDeviceSize *p_offsets) override;
281};
282
283} // namespace blender::gpu::render_graph
BMesh const char void * data
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
virtual void set_scissor(const Vector< VkRect2D > scissors)=0
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 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 set_descriptor_buffer_offsets(VkPipelineBindPoint pipeline_bind_point, VkPipelineLayout layout, uint32_t first_set, uint32_t set_count, const uint32_t *p_buffer_indices, const VkDeviceSize *p_offsets)=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 bind_descriptor_buffers(uint32_t buffer_count, const VkDescriptorBufferBindingInfoEXT *p_binding_infos)=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 set_viewport(const Vector< VkViewport > viewports)=0
virtual void set_line_width(const float line_width)=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 bind_descriptor_buffers(uint32_t buffer_count, const VkDescriptorBufferBindingInfoEXT *p_binding_infos) 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
VKCommandBufferWrapper(VkCommandBuffer vk_command_buffer, const VKExtensions &extensions)
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 set_descriptor_buffer_offsets(VkPipelineBindPoint pipeline_bind_point, VkPipelineLayout layout, uint32_t first_set, uint32_t set_count, const uint32_t *p_buffer_indices, const VkDeviceSize *p_offsets) 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 set_scissor(const Vector< VkRect2D > scissors) 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 set_viewport(const Vector< VkViewport > viewports) 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
#define filter