Flutter Impeller
command_buffer_vk.h
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 
5 #ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_COMMAND_BUFFER_VK_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_COMMAND_BUFFER_VK_H_
7 
8 #include "fml/status_or.h"
17 
18 namespace impeller {
19 
20 class ContextVK;
21 class CommandEncoderFactoryVK;
22 class CommandEncoderVK;
23 
24 class CommandBufferVK final
25  : public CommandBuffer,
26  public BackendCast<CommandBufferVK, CommandBuffer>,
27  public std::enable_shared_from_this<CommandBufferVK> {
28  public:
29  // |CommandBuffer|
30  ~CommandBufferVK() override;
31 
32  // Encoder Functionality
33 
34  /// @brief Ensure that [object] is kept alive until this command buffer
35  /// completes execution.
36  bool Track(const std::shared_ptr<SharedObjectVK>& object);
37 
38  /// @brief Ensure that [buffer] is kept alive until this command buffer
39  /// completes execution.
40  bool Track(const std::shared_ptr<const DeviceBuffer>& buffer);
41 
42  /// @brief Ensure that [texture] is kept alive until this command buffer
43  /// completes execution.
44  bool Track(const std::shared_ptr<const Texture>& texture);
45 
46  /// @brief Ensure that [texture] is kept alive until this command buffer
47  /// completes execution.
48  bool Track(const std::shared_ptr<const TextureSourceVK>& texture);
49 
50  /// @brief Retrieve the native command buffer from this object.
51  vk::CommandBuffer GetCommandBuffer() const;
52 
53  /// @brief Push a debug group.
54  ///
55  /// This label is only visible in debuggers like RenderDoc. This function is
56  /// ignored in release builds.
57  void PushDebugGroup(std::string_view label) const;
58 
59  /// @brief Pop the previous debug group.
60  ///
61  /// This label is only visible in debuggers like RenderDoc. This function is
62  /// ignored in release builds.
63  void PopDebugGroup() const;
64 
65  /// @brief Insert a new debug marker.
66  ///
67  /// This label is only visible in debuggers like RenderDoc. This function is
68  /// ignored in release builds.
69  void InsertDebugMarker(std::string_view label) const;
70 
71  /// @brief End recording of the current command buffer.
72  bool EndCommandBuffer() const;
73 
74  /// @brief Allocate a new descriptor set for the given [layout].
75  fml::StatusOr<vk::DescriptorSet> AllocateDescriptorSets(
76  const vk::DescriptorSetLayout& layout,
77  const ContextVK& context);
78 
79  // Visible for testing.
81 
82  private:
83  friend class ContextVK;
84  friend class CommandQueueVK;
85 
86  std::weak_ptr<const DeviceHolderVK> device_holder_;
87  std::shared_ptr<TrackedObjectsVK> tracked_objects_;
88 
89  CommandBufferVK(std::weak_ptr<const Context> context,
90  std::weak_ptr<const DeviceHolderVK> device_holder,
91  std::shared_ptr<TrackedObjectsVK> tracked_objects);
92 
93  // |CommandBuffer|
94  void SetLabel(std::string_view label) const override;
95 
96  // |CommandBuffer|
97  bool IsValid() const override;
98 
99  // |CommandBuffer|
100  bool OnSubmitCommands(CompletionCallback callback) override;
101 
102  // |CommandBuffer|
103  void OnWaitUntilCompleted() override;
104 
105  // |CommandBuffer|
106  void OnWaitUntilScheduled() override;
107 
108  // |CommandBuffer|
109  std::shared_ptr<RenderPass> OnCreateRenderPass(RenderTarget target) override;
110 
111  // |CommandBuffer|
112  std::shared_ptr<BlitPass> OnCreateBlitPass() override;
113 
114  // |CommandBuffer|
115  std::shared_ptr<ComputePass> OnCreateComputePass() override;
116 
117  CommandBufferVK(const CommandBufferVK&) = delete;
118 
119  CommandBufferVK& operator=(const CommandBufferVK&) = delete;
120 };
121 
122 } // namespace impeller
123 
124 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_VULKAN_COMMAND_BUFFER_VK_H_
A collection of encoded commands to be submitted to the GPU for execution. A command buffer is obtain...
std::function< void(Status)> CompletionCallback
void PushDebugGroup(std::string_view label) const
Push a debug group.
void InsertDebugMarker(std::string_view label) const
Insert a new debug marker.
DescriptorPoolVK & GetDescriptorPool() const
bool Track(const std::shared_ptr< SharedObjectVK > &object)
Ensure that [object] is kept alive until this command buffer completes execution.
bool EndCommandBuffer() const
End recording of the current command buffer.
void PopDebugGroup() const
Pop the previous debug group.
fml::StatusOr< vk::DescriptorSet > AllocateDescriptorSets(const vk::DescriptorSetLayout &layout, const ContextVK &context)
Allocate a new descriptor set for the given [layout].
vk::CommandBuffer GetCommandBuffer() const
Retrieve the native command buffer from this object.
A per-frame descriptor pool. Descriptors from this pool don't need to be freed individually....