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