16 vk_command_pool_create_info_ = {};
17 vk_command_pool_create_info_.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
18 vk_command_pool_create_info_.queueFamilyIndex = 0;
20 vk_command_buffer_allocate_info_ = {};
21 vk_command_buffer_allocate_info_.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
22 vk_command_buffer_allocate_info_.commandPool = VK_NULL_HANDLE;
23 vk_command_buffer_allocate_info_.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
24 vk_command_buffer_allocate_info_.commandBufferCount = 1;
26 vk_command_buffer_begin_info_ = {};
27 vk_command_buffer_begin_info_.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
28 vk_command_buffer_begin_info_.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
30 vk_fence_create_info_ = {};
31 vk_fence_create_info_.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
32 vk_fence_create_info_.flags = VK_FENCE_CREATE_SIGNALED_BIT;
35 vk_submit_info_.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
36 vk_submit_info_.waitSemaphoreCount = 0;
37 vk_submit_info_.pWaitSemaphores =
nullptr;
38 vk_submit_info_.pWaitDstStageMask =
nullptr;
39 vk_submit_info_.commandBufferCount = 1;
40 vk_submit_info_.pCommandBuffers = &vk_command_buffer_;
41 vk_submit_info_.signalSemaphoreCount = 0;
42 vk_submit_info_.pSignalSemaphores =
nullptr;
50 if (vk_command_pool_ != VK_NULL_HANDLE) {
51 vkDestroyCommandPool(device.
vk_handle(), vk_command_pool_, vk_allocation_callbacks);
52 vk_command_pool_ = VK_NULL_HANDLE;
54 if (vk_fence_ != VK_NULL_HANDLE) {
55 vkDestroyFence(device.
vk_handle(), vk_fence_, vk_allocation_callbacks);
56 vk_fence_ = VK_NULL_HANDLE;
64 if (vk_command_pool_ == VK_NULL_HANDLE) {
67 &vk_command_pool_create_info_,
68 vk_allocation_callbacks,
70 vk_command_buffer_allocate_info_.commandPool = vk_command_pool_;
71 vk_command_pool_create_info_.queueFamilyIndex = 0;
73 if (vk_fence_ == VK_NULL_HANDLE) {
74 vkCreateFence(device.
vk_handle(), &vk_fence_create_info_, vk_allocation_callbacks, &vk_fence_);
76 BLI_assert(vk_command_buffer_ == VK_NULL_HANDLE);
77 vkAllocateCommandBuffers(
78 device.
vk_handle(), &vk_command_buffer_allocate_info_, &vk_command_buffer_);
80 vkBeginCommandBuffer(vk_command_buffer_, &vk_command_buffer_begin_info_);
85 vkEndCommandBuffer(vk_command_buffer_);
90 if (vk_fence == VK_NULL_HANDLE) {
94 vkResetFences(device.
vk_handle(), 1, &vk_fence);
97 vkQueueSubmit(device.
queue_get(), 1, &vk_submit_info_, vk_fence);
99 vk_command_buffer_ =
nullptr;
104 if (vk_fence == VK_NULL_HANDLE) {
105 vk_fence = vk_fence_;
108 while (vkWaitForFences(device.
vk_handle(), 1, &vk_fence,
true,
UINT64_MAX) == VK_TIMEOUT) {
115 vkCmdBindPipeline(vk_command_buffer_, pipeline_bind_point, pipeline);
119 VkPipelineLayout layout,
122 const VkDescriptorSet *p_descriptor_sets,
126 vkCmdBindDescriptorSets(vk_command_buffer_,
130 descriptor_set_count,
132 dynamic_offset_count,
138 VkIndexType index_type)
140 vkCmdBindIndexBuffer(vk_command_buffer_, buffer, offset, index_type);
145 const VkBuffer *p_buffers,
146 const VkDeviceSize *p_offsets)
148 vkCmdBindVertexBuffers(vk_command_buffer_, first_binding, binding_count, p_buffers, p_offsets);
156 vkCmdDraw(vk_command_buffer_, vertex_count, instance_count, first_vertex, first_instance);
166 vk_command_buffer_, index_count, instance_count, first_index, vertex_offset, first_instance);
174 vkCmdDrawIndirect(vk_command_buffer_, buffer, offset, draw_count, stride);
182 vkCmdDrawIndexedIndirect(vk_command_buffer_, buffer, offset, draw_count, stride);
189 vkCmdDispatch(vk_command_buffer_, group_count_x, group_count_y, group_count_z);
194 vkCmdDispatchIndirect(vk_command_buffer_, buffer, offset);
198 VkDeviceSize dst_offset,
199 VkDeviceSize data_size,
202 vkCmdUpdateBuffer(vk_command_buffer_, dst_buffer, dst_offset, data_size, p_data);
208 const VkBufferCopy *p_regions)
210 vkCmdCopyBuffer(vk_command_buffer_, src_buffer, dst_buffer, region_count, p_regions);
214 VkImageLayout src_image_layout,
216 VkImageLayout dst_image_layout,
218 const VkImageCopy *p_regions)
220 vkCmdCopyImage(vk_command_buffer_,
230 VkImageLayout src_image_layout,
232 VkImageLayout dst_image_layout,
234 const VkImageBlit *p_regions,
237 vkCmdBlitImage(vk_command_buffer_,
249 VkImageLayout dst_image_layout,
251 const VkBufferImageCopy *p_regions)
253 vkCmdCopyBufferToImage(
254 vk_command_buffer_, src_buffer, dst_image, dst_image_layout, region_count, p_regions);
258 VkImageLayout src_image_layout,
261 const VkBufferImageCopy *p_regions)
263 vkCmdCopyImageToBuffer(
264 vk_command_buffer_, src_image, src_image_layout, dst_buffer, region_count, p_regions);
268 VkDeviceSize dst_offset,
272 vkCmdFillBuffer(vk_command_buffer_, dst_buffer, dst_offset, size, data);
276 VkImageLayout image_layout,
277 const VkClearColorValue *p_color,
279 const VkImageSubresourceRange *p_ranges)
281 vkCmdClearColorImage(vk_command_buffer_, image, image_layout, p_color, range_count, p_ranges);
285 VkImageLayout image_layout,
286 const VkClearDepthStencilValue *p_depth_stencil,
288 const VkImageSubresourceRange *p_ranges)
290 vkCmdClearDepthStencilImage(
291 vk_command_buffer_, image, image_layout, p_depth_stencil, range_count, p_ranges);
295 const VkClearAttachment *p_attachments,
297 const VkClearRect *p_rects)
299 vkCmdClearAttachments(vk_command_buffer_, attachment_count, p_attachments, rect_count, p_rects);
303 VkPipelineStageFlags src_stage_mask,
304 VkPipelineStageFlags dst_stage_mask,
305 VkDependencyFlags dependency_flags,
307 const VkMemoryBarrier *p_memory_barriers,
308 uint32_t buffer_memory_barrier_count,
309 const VkBufferMemoryBarrier *p_buffer_memory_barriers,
310 uint32_t image_memory_barrier_count,
311 const VkImageMemoryBarrier *p_image_memory_barriers)
313 vkCmdPipelineBarrier(vk_command_buffer_,
317 memory_barrier_count,
319 buffer_memory_barrier_count,
320 p_buffer_memory_barriers,
321 image_memory_barrier_count,
322 p_image_memory_barriers);
326 VkShaderStageFlags stage_flags,
329 const void *p_values)
331 vkCmdPushConstants(vk_command_buffer_, layout, stage_flags, offset, size, p_values);
350 VkQueryControlFlags vk_query_control_flags)
352 vkCmdBeginQuery(vk_command_buffer_, vk_query_pool, query_index, vk_query_control_flags);
357 vkCmdEndQuery(vk_command_buffer_, vk_query_pool, query_index);
364 vkCmdResetQueryPool(vk_command_buffer_, vk_query_pool, first_query, query_count);
368 const VkDebugUtilsLabelEXT *vk_debug_utils_label)
VkQueue queue_get() const
VkDevice vk_handle() const
std::mutex & queue_mutex_get()
const uint32_t queue_family_get() const
PFN_vkCmdEndDebugUtilsLabelEXT vkCmdEndDebugUtilsLabel
PFN_vkCmdBeginDebugUtilsLabelEXT vkCmdBeginDebugUtilsLabel
PFN_vkCmdBeginRendering vkCmdBeginRendering
struct blender::gpu::VKDevice::@670 functions
PFN_vkCmdEndRendering vkCmdEndRendering
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 begin_recording() 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 wait_for_cpu_synchronization(VkFence vk_fence) 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 end_recording() 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 end_rendering() override
void end_debug_utils_label() override
virtual ~VKCommandBufferWrapper()
void submit_with_cpu_synchronization(VkFence vk_fence) 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
#define VK_ALLOCATION_CALLBACKS