| Flutter Impeller |

Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
impeller::CommandBuffer Class Referenceabstract

A collection of encoded commands to be submitted to the GPU for execution. A command buffer is obtained from a graphics `Context`. More...

`#include <command_buffer.h>`

Inheritance diagram for impeller::CommandBuffer:

## Public Types
enum class | Status { kPending , kError , kCompleted }
using | CompletionCallback = std::function< void(Status)>

## Public Member Functions
virtual | ~CommandBuffer ()
virtual bool | IsValid () const =0
virtual void | SetLabel (std::string_view label) const =0
void | WaitUntilCompleted ()
| Block the current thread until the GPU has completed execution of the commands. More...
void | WaitUntilScheduled ()
| Block the current thread until the GPU has completed scheduling execution of the commands. More...
std::shared_ptr< RenderPass > | CreateRenderPass (const RenderTarget &render_target)
| Create a render pass to record render commands into. More...
std::shared_ptr< BlitPass > | CreateBlitPass ()
| Create a blit pass to record blit commands into. More...
std::shared_ptr< ComputePass > | CreateComputePass ()
| Create a compute pass to record compute commands into. More...

## Protected Member Functions
| CommandBuffer (std::weak_ptr< const Context > context)
virtual std::shared_ptr< RenderPass > | OnCreateRenderPass (RenderTarget render_target)=0
virtual std::shared_ptr< BlitPass > | OnCreateBlitPass ()=0
virtual bool | OnSubmitCommands (CompletionCallback callback)=0
virtual void | OnWaitUntilCompleted ()=0
virtual void | OnWaitUntilScheduled ()=0
virtual std::shared_ptr< ComputePass > | OnCreateComputePass ()=0

## Protected Attributes
std::weak_ptr< const Context > | context_

## Friends
class | testing::CommandBufferMock
class | CommandQueue

## Detailed Description

A collection of encoded commands to be submitted to the GPU for execution. A command buffer is obtained from a graphics `Context`.

To submit commands to the GPU, acquire a `RenderPass` from the command buffer and record `Command`s into that pass. A `RenderPass` describes the configuration of the various attachments when the command is submitted.

A command buffer is only meant to be used on a single thread. If a frame workload needs to be encoded from multiple threads, set up and record into multiple command buffers. The order of submission of commands encoded in multiple command buffers can be controlled via either the order in which the command buffers were created, or, using the `ReserveSpotInQueue` command which allows for encoding commands for submission in an order that is different from the encoding order.

Definition at line 45 of file command_buffer.h.

## Member Typedef Documentation

## ◆ CompletionCallback

using impeller::CommandBuffer::CompletionCallback = std::function<void(Status)>

Definition at line 55 of file command_buffer.h.

## Member Enumeration Documentation

## ◆ Status

enum impeller::CommandBuffer::Status
| strong

Enumerator
kPending |
kError |
kCompleted |

Definition at line 49 of file command_buffer.h.

49 {
50 kPending,
51 kError,
52 kCompleted,
53 };

## Constructor & Destructor Documentation

## ◆ ~CommandBuffer()

impeller::CommandBuffer::~CommandBuffer | ( |  | ) |
| virtual default

## ◆ CommandBuffer()

impeller::CommandBuffer::CommandBuffer | ( | std::weak_ptr< const Context > | context | ) |
| explicit protected

Definition at line 13 of file command_buffer.cc.

14 : context_(std::move(context)) {}
impeller::CommandBuffer::context_
std::weak_ptr< const Context > context_
Definition: command_buffer.h:101

## Member Function Documentation

## ◆ CreateBlitPass()

std::shared_ptr< BlitPass > impeller::CommandBuffer::CreateBlitPass | ( |  | ) |

Create a blit pass to record blit commands into.

Returns
  A valid blit pass or null.

Definition at line 51 of file command_buffer.cc.

51 {
52 auto pass = OnCreateBlitPass();
53 if (pass && pass->IsValid()) {
54 pass->SetLabel("BlitPass");
55 return pass;
56 }
57 return nullptr;
58 }
impeller::CommandBuffer::OnCreateBlitPass
virtual std::shared_ptr< BlitPass > OnCreateBlitPass()=0

References OnCreateBlitPass().

## ◆ CreateComputePass()

std::shared_ptr< ComputePass > impeller::CommandBuffer::CreateComputePass | ( |  | ) |

Create a compute pass to record compute commands into.

Returns
  A valid compute pass or null.

Definition at line 60 of file command_buffer.cc.

60 {
61 if (!IsValid()) {
62 return nullptr;
63 }
64 auto pass = OnCreateComputePass();
65 if (pass && pass->IsValid()) {
66 pass->SetLabel("ComputePass");
67 return pass;
68 }
69 return nullptr;
70 }
impeller::CommandBuffer::IsValid
virtual bool IsValid() const =0
impeller::CommandBuffer::OnCreateComputePass
virtual std::shared_ptr< ComputePass > OnCreateComputePass()=0

References IsValid(), and OnCreateComputePass().

## ◆ CreateRenderPass()

std::shared_ptr< RenderPass > impeller::CommandBuffer::CreateRenderPass | ( | const RenderTarget & | render_target | ) |

Create a render pass to record render commands into.

Parameters

  [in] | render_target | The description of the render target this pass will target.

Returns
  A valid render pass or null.

Definition at line 41 of file command_buffer.cc.

42 {
43 auto pass = OnCreateRenderPass(render_target);
44 if (pass && pass->IsValid()) {
45 pass->SetLabel("RenderPass");
46 return pass;
47 }
48 return nullptr;
49 }
impeller::CommandBuffer::OnCreateRenderPass
virtual std::shared_ptr< RenderPass > OnCreateRenderPass(RenderTarget render_target)=0

References OnCreateRenderPass().

## ◆ IsValid()

virtual bool impeller::CommandBuffer::IsValid | ( |  | ) | const
| pure virtual

Referenced by CreateComputePass().

## ◆ OnCreateBlitPass()

virtual std::shared_ptr<BlitPass> impeller::CommandBuffer::OnCreateBlitPass | ( |  | ) |
| protected pure virtual

Referenced by CreateBlitPass().

## ◆ OnCreateComputePass()

virtual std::shared_ptr<ComputePass> impeller::CommandBuffer::OnCreateComputePass | ( |  | ) |
| protected pure virtual

Referenced by CreateComputePass().

## ◆ OnCreateRenderPass()

virtual std::shared_ptr<RenderPass> impeller::CommandBuffer::OnCreateRenderPass | ( | RenderTarget | render_target | ) |
| protected pure virtual

Referenced by CreateRenderPass().

## ◆ OnSubmitCommands()

virtual bool impeller::CommandBuffer::OnSubmitCommands | ( | CompletionCallback | callback | ) |
| protected pure virtual

## ◆ OnWaitUntilCompleted()

virtual void impeller::CommandBuffer::OnWaitUntilCompleted | ( |  | ) |
| protected pure virtual

Referenced by WaitUntilCompleted().

## ◆ OnWaitUntilScheduled()

virtual void impeller::CommandBuffer::OnWaitUntilScheduled | ( |  | ) |
| protected pure virtual

Referenced by WaitUntilScheduled().

## ◆ SetLabel()

virtual void impeller::CommandBuffer::SetLabel | ( | std::string_view | label | ) | const
| pure virtual

## ◆ WaitUntilCompleted()

void impeller::CommandBuffer::WaitUntilCompleted | ( |  | ) |

Block the current thread until the GPU has completed execution of the commands.

Definition at line 33 of file command_buffer.cc.

33 {
34 return OnWaitUntilCompleted();
35 }
impeller::CommandBuffer::OnWaitUntilCompleted
virtual void OnWaitUntilCompleted()=0

References OnWaitUntilCompleted().

## ◆ WaitUntilScheduled()

void impeller::CommandBuffer::WaitUntilScheduled | ( |  | ) |

Block the current thread until the GPU has completed scheduling execution of the commands.

Definition at line 37 of file command_buffer.cc.

37 {
38 return OnWaitUntilScheduled();
39 }
impeller::CommandBuffer::OnWaitUntilScheduled
virtual void OnWaitUntilScheduled()=0

References OnWaitUntilScheduled().

## Friends And Related Function Documentation

## ◆ CommandQueue

friend class CommandQueue
| friend

Definition at line 119 of file command_buffer.h.

## ◆ testing::CommandBufferMock

friend class testing::CommandBufferMock
| friend

Definition at line 46 of file command_buffer.h.

## Member Data Documentation

## ◆ context_

std::weak_ptr<const Context> impeller::CommandBuffer::context_
| protected

Definition at line 101 of file command_buffer.h.

The documentation for this class was generated from the following files:

- impeller/renderer/command_buffer.h
- impeller/renderer/command_buffer.cc