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