Flutter Engine
vulkan_command_buffer.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
6 
7 #include "vulkan_proc_table.h"
8 
9 namespace vulkan {
10 
12  const VulkanProcTable& p_vk,
13  const VulkanHandle<VkDevice>& device,
14  const VulkanHandle<VkCommandPool>& pool)
15  : vk(p_vk), device_(device), pool_(pool), valid_(false) {
16  const VkCommandBufferAllocateInfo allocate_info = {
17  .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO,
18  .pNext = nullptr,
19  .commandPool = pool_,
20  .level = VK_COMMAND_BUFFER_LEVEL_PRIMARY,
21  .commandBufferCount = 1,
22  };
23 
24  VkCommandBuffer buffer = VK_NULL_HANDLE;
25 
26  if (VK_CALL_LOG_ERROR(vk.AllocateCommandBuffers(device_, &allocate_info,
27  &buffer)) != VK_SUCCESS) {
28  FML_DLOG(INFO) << "Could not allocate command buffers.";
29  return;
30  }
31 
32  auto buffer_collect = [this](VkCommandBuffer buffer) {
33  vk.FreeCommandBuffers(device_, pool_, 1, &buffer);
34  };
35 
36  handle_ = {buffer, buffer_collect};
37 
38  valid_ = true;
39 }
40 
42 
44  return valid_;
45 }
46 
47 VkCommandBuffer VulkanCommandBuffer::Handle() const {
48  return handle_;
49 }
50 
52  const VkCommandBufferBeginInfo info{
53  .sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO,
54  .pNext = nullptr,
55  .flags = 0,
56  .pInheritanceInfo = nullptr,
57  };
58 
59  return VK_CALL_LOG_ERROR(vk.BeginCommandBuffer(handle_, &info)) == VK_SUCCESS;
60 }
61 
63  return VK_CALL_LOG_ERROR(vk.EndCommandBuffer(handle_)) == VK_SUCCESS;
64 }
65 
67  VkPipelineStageFlagBits src_stage_flags,
68  VkPipelineStageFlagBits dest_stage_flags,
69  uint32_t /* mask of VkDependencyFlagBits */ dependency_flags,
70  uint32_t memory_barrier_count,
71  const VkMemoryBarrier* memory_barriers,
72  uint32_t buffer_memory_barrier_count,
73  const VkBufferMemoryBarrier* buffer_memory_barriers,
74  uint32_t image_memory_barrier_count,
75  const VkImageMemoryBarrier* image_memory_barriers) const {
76  vk.CmdPipelineBarrier(handle_, src_stage_flags, dest_stage_flags,
77  dependency_flags, memory_barrier_count, memory_barriers,
78  buffer_memory_barrier_count, buffer_memory_barriers,
79  image_memory_barrier_count, image_memory_barriers);
80  return true;
81 }
82 
83 } // namespace vulkan
#define VK_CALL_LOG_ERROR(expression)
VulkanCommandBuffer(const VulkanProcTable &vk, const VulkanHandle< VkDevice > &device, const VulkanHandle< VkCommandPool > &pool)
VkCommandBuffer Handle() const
bool InsertPipelineBarrier(VkPipelineStageFlagBits src_stage_flags, VkPipelineStageFlagBits dest_stage_flags, uint32_t dependency_flags, uint32_t memory_barrier_count, const VkMemoryBarrier *memory_barriers, uint32_t buffer_memory_barrier_count, const VkBufferMemoryBarrier *buffer_memory_barriers, uint32_t image_memory_barrier_count, const VkImageMemoryBarrier *image_memory_barriers) const
#define FML_DLOG(severity)
Definition: logging.h:85