Blender V5.0
vk_command_buffer_wrapper.cc
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
10#include "vk_backend.hh"
11#include "vk_device.hh"
12
14VKCommandBufferWrapper::VKCommandBufferWrapper(VkCommandBuffer vk_command_buffer,
15 const VKExtensions &extensions)
16 : vk_command_buffer_(vk_command_buffer)
17{
19}
20
22{
23 VkCommandBufferBeginInfo vk_command_buffer_begin_info = {
24 VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
25 nullptr,
26 VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT,
27 nullptr};
28 vkBeginCommandBuffer(vk_command_buffer_, &vk_command_buffer_begin_info);
29}
30
32{
33 vkEndCommandBuffer(vk_command_buffer_);
34}
35
36void VKCommandBufferWrapper::bind_pipeline(VkPipelineBindPoint pipeline_bind_point,
37 VkPipeline pipeline)
38{
39 vkCmdBindPipeline(vk_command_buffer_, pipeline_bind_point, pipeline);
40}
41
42void VKCommandBufferWrapper::bind_descriptor_sets(VkPipelineBindPoint pipeline_bind_point,
43 VkPipelineLayout layout,
44 uint32_t first_set,
45 uint32_t descriptor_set_count,
46 const VkDescriptorSet *p_descriptor_sets,
47 uint32_t dynamic_offset_count,
48 const uint32_t *p_dynamic_offsets)
49{
50 vkCmdBindDescriptorSets(vk_command_buffer_,
51 pipeline_bind_point,
52 layout,
53 first_set,
54 descriptor_set_count,
55 p_descriptor_sets,
56 dynamic_offset_count,
57 p_dynamic_offsets);
58}
59
61 VkDeviceSize offset,
62 VkIndexType index_type)
63{
64 vkCmdBindIndexBuffer(vk_command_buffer_, buffer, offset, index_type);
65}
66
68 uint32_t binding_count,
69 const VkBuffer *p_buffers,
70 const VkDeviceSize *p_offsets)
71{
72 vkCmdBindVertexBuffers(vk_command_buffer_, first_binding, binding_count, p_buffers, p_offsets);
73}
74
75void VKCommandBufferWrapper::draw(uint32_t vertex_count,
76 uint32_t instance_count,
77 uint32_t first_vertex,
78 uint32_t first_instance)
79{
80 vkCmdDraw(vk_command_buffer_, vertex_count, instance_count, first_vertex, first_instance);
81}
82
83void VKCommandBufferWrapper::draw_indexed(uint32_t index_count,
84 uint32_t instance_count,
85 uint32_t first_index,
86 int32_t vertex_offset,
87 uint32_t first_instance)
88{
89 vkCmdDrawIndexed(
90 vk_command_buffer_, index_count, instance_count, first_index, vertex_offset, first_instance);
91}
92
94 VkDeviceSize offset,
95 uint32_t draw_count,
96 uint32_t stride)
97{
98 vkCmdDrawIndirect(vk_command_buffer_, buffer, offset, draw_count, stride);
99}
100
102 VkDeviceSize offset,
103 uint32_t draw_count,
104 uint32_t stride)
105{
106 vkCmdDrawIndexedIndirect(vk_command_buffer_, buffer, offset, draw_count, stride);
107}
108
109void VKCommandBufferWrapper::dispatch(uint32_t group_count_x,
110 uint32_t group_count_y,
111 uint32_t group_count_z)
112{
113 vkCmdDispatch(vk_command_buffer_, group_count_x, group_count_y, group_count_z);
114}
115
116void VKCommandBufferWrapper::dispatch_indirect(VkBuffer buffer, VkDeviceSize offset)
117{
118 vkCmdDispatchIndirect(vk_command_buffer_, buffer, offset);
119}
120
122 VkDeviceSize dst_offset,
123 VkDeviceSize data_size,
124 const void *p_data)
125{
126 vkCmdUpdateBuffer(vk_command_buffer_, dst_buffer, dst_offset, data_size, p_data);
127}
128
129void VKCommandBufferWrapper::copy_buffer(VkBuffer src_buffer,
130 VkBuffer dst_buffer,
131 uint32_t region_count,
132 const VkBufferCopy *p_regions)
133{
134 vkCmdCopyBuffer(vk_command_buffer_, src_buffer, dst_buffer, region_count, p_regions);
135}
136
138 VkImageLayout src_image_layout,
139 VkImage dst_image,
140 VkImageLayout dst_image_layout,
141 uint32_t region_count,
142 const VkImageCopy *p_regions)
143{
144 vkCmdCopyImage(vk_command_buffer_,
145 src_image,
146 src_image_layout,
147 dst_image,
148 dst_image_layout,
149 region_count,
150 p_regions);
151}
152
154 VkImageLayout src_image_layout,
155 VkImage dst_image,
156 VkImageLayout dst_image_layout,
157 uint32_t region_count,
158 const VkImageBlit *p_regions,
159 VkFilter filter)
160{
161 vkCmdBlitImage(vk_command_buffer_,
162 src_image,
163 src_image_layout,
164 dst_image,
165 dst_image_layout,
166 region_count,
167 p_regions,
168 filter);
169}
170
172 VkImage dst_image,
173 VkImageLayout dst_image_layout,
174 uint32_t region_count,
175 const VkBufferImageCopy *p_regions)
176{
177 vkCmdCopyBufferToImage(
178 vk_command_buffer_, src_buffer, dst_image, dst_image_layout, region_count, p_regions);
179}
180
182 VkImageLayout src_image_layout,
183 VkBuffer dst_buffer,
184 uint32_t region_count,
185 const VkBufferImageCopy *p_regions)
186{
187 vkCmdCopyImageToBuffer(
188 vk_command_buffer_, src_image, src_image_layout, dst_buffer, region_count, p_regions);
189}
190
191void VKCommandBufferWrapper::fill_buffer(VkBuffer dst_buffer,
192 VkDeviceSize dst_offset,
193 VkDeviceSize size,
194 uint32_t data)
195{
196 vkCmdFillBuffer(vk_command_buffer_, dst_buffer, dst_offset, size, data);
197}
198
200 VkImageLayout image_layout,
201 const VkClearColorValue *p_color,
202 uint32_t range_count,
203 const VkImageSubresourceRange *p_ranges)
204{
205 vkCmdClearColorImage(vk_command_buffer_, image, image_layout, p_color, range_count, p_ranges);
206}
208 VkImage image,
209 VkImageLayout image_layout,
210 const VkClearDepthStencilValue *p_depth_stencil,
211 uint32_t range_count,
212 const VkImageSubresourceRange *p_ranges)
213{
214 vkCmdClearDepthStencilImage(
215 vk_command_buffer_, image, image_layout, p_depth_stencil, range_count, p_ranges);
216}
217
218void VKCommandBufferWrapper::clear_attachments(uint32_t attachment_count,
219 const VkClearAttachment *p_attachments,
220 uint32_t rect_count,
221 const VkClearRect *p_rects)
222{
223 vkCmdClearAttachments(vk_command_buffer_, attachment_count, p_attachments, rect_count, p_rects);
224}
225
227 VkPipelineStageFlags src_stage_mask,
228 VkPipelineStageFlags dst_stage_mask,
229 VkDependencyFlags dependency_flags,
230 uint32_t memory_barrier_count,
231 const VkMemoryBarrier *p_memory_barriers,
232 uint32_t buffer_memory_barrier_count,
233 const VkBufferMemoryBarrier *p_buffer_memory_barriers,
234 uint32_t image_memory_barrier_count,
235 const VkImageMemoryBarrier *p_image_memory_barriers)
236{
237 vkCmdPipelineBarrier(vk_command_buffer_,
238 src_stage_mask,
239 dst_stage_mask,
240 dependency_flags,
241 memory_barrier_count,
242 p_memory_barriers,
243 buffer_memory_barrier_count,
244 p_buffer_memory_barriers,
245 image_memory_barrier_count,
246 p_image_memory_barriers);
247}
248
249void VKCommandBufferWrapper::push_constants(VkPipelineLayout layout,
250 VkShaderStageFlags stage_flags,
251 uint32_t offset,
252 uint32_t size,
253 const void *p_values)
254{
255 vkCmdPushConstants(vk_command_buffer_, layout, stage_flags, offset, size, p_values);
256}
257
259{
260 vkCmdSetViewport(vk_command_buffer_, 0, viewports.size(), viewports.data());
261}
262
264{
265 vkCmdSetScissor(vk_command_buffer_, 0, scissors.size(), scissors.data());
266}
267void VKCommandBufferWrapper::set_line_width(const float line_width)
268{
269 vkCmdSetLineWidth(vk_command_buffer_, line_width);
270}
271
272void VKCommandBufferWrapper::begin_rendering(const VkRenderingInfo *p_rendering_info)
273{
274 const VKDevice &device = VKBackend::get().device;
276 device.functions.vkCmdBeginRendering(vk_command_buffer_, p_rendering_info);
277}
278
280{
281 const VKDevice &device = VKBackend::get().device;
283 device.functions.vkCmdEndRendering(vk_command_buffer_);
284}
285
286void VKCommandBufferWrapper::begin_query(VkQueryPool vk_query_pool,
287 uint32_t query_index,
288 VkQueryControlFlags vk_query_control_flags)
289{
290 vkCmdBeginQuery(vk_command_buffer_, vk_query_pool, query_index, vk_query_control_flags);
291}
292
293void VKCommandBufferWrapper::end_query(VkQueryPool vk_query_pool, uint32_t query_index)
294{
295 vkCmdEndQuery(vk_command_buffer_, vk_query_pool, query_index);
296}
297
298void VKCommandBufferWrapper::reset_query_pool(VkQueryPool vk_query_pool,
299 uint32_t first_query,
300 uint32_t query_count)
301{
302 vkCmdResetQueryPool(vk_command_buffer_, vk_query_pool, first_query, query_count);
303}
304
306 const VkDebugUtilsLabelEXT *vk_debug_utils_label)
307{
308 const VKDevice &device = VKBackend::get().device;
310 device.functions.vkCmdBeginDebugUtilsLabel(vk_command_buffer_, vk_debug_utils_label);
311 }
312}
313
315{
316 const VKDevice &device = VKBackend::get().device;
318 device.functions.vkCmdEndDebugUtilsLabel(vk_command_buffer_);
319 }
320}
321
322/* VK_EXT_descriptor_buffer */
324 uint32_t buffer_count, const VkDescriptorBufferBindingInfoEXT *p_binding_infos)
325{
326 const VKDevice &device = VKBackend::get().device;
327 device.functions.vkCmdBindDescriptorBuffers(vk_command_buffer_, buffer_count, p_binding_infos);
328}
329void VKCommandBufferWrapper::set_descriptor_buffer_offsets(VkPipelineBindPoint pipeline_bind_point,
330 VkPipelineLayout layout,
331 uint32_t first_set,
332 uint32_t set_count,
333 const uint32_t *p_buffer_indices,
334 const VkDeviceSize *p_offsets)
335{
336 const VKDevice &device = VKBackend::get().device;
337 device.functions.vkCmdSetDescriptorBufferOffsets(vk_command_buffer_,
338 pipeline_bind_point,
339 layout,
340 first_set,
341 set_count,
342 p_buffer_indices,
343 p_offsets);
344}
345
346} // namespace blender::gpu::render_graph
#define BLI_assert(a)
Definition BLI_assert.h:46
BMesh const char void * data
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
Definition btDbvt.cpp:52
int64_t size() const
static VKBackend & get()
Definition vk_backend.hh:91
PFN_vkCmdBindDescriptorBuffersEXT vkCmdBindDescriptorBuffers
Definition vk_device.hh:252
PFN_vkCmdSetDescriptorBufferOffsetsEXT vkCmdSetDescriptorBufferOffsets
Definition vk_device.hh:253
PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabel
Definition vk_device.hh:235
PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabel
Definition vk_device.hh:234
PFN_vkCmdBeginRendering vkCmdBeginRendering
Definition vk_device.hh:230
PFN_vkCmdEndRendering vkCmdEndRendering
Definition vk_device.hh:231
struct blender::gpu::VKDevice::@152120360333013146246346216002113345357100126073 functions
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