Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
impeller::Command Struct Reference

An object used to specify work to the GPU along with references to resources the GPU will used when doing said work. More...

#include <command.h>

Inheritance diagram for impeller::Command:
impeller::ResourceBinder

Public Member Functions

bool BindVertices (VertexBuffer buffer)
 Specify the vertex and index buffer to use for this command.
 
bool BindResource (ShaderStage stage, DescriptorType type, const ShaderUniformSlot &slot, const ShaderMetadata &metadata, BufferView view) override
 
bool BindResource (ShaderStage stage, DescriptorType type, const ShaderUniformSlot &slot, const std::shared_ptr< const ShaderMetadata > &metadata, BufferView view)
 
bool BindResource (ShaderStage stage, DescriptorType type, const SampledImageSlot &slot, const ShaderMetadata &metadata, std::shared_ptr< const Texture > texture, const std::unique_ptr< const Sampler > &sampler) override
 
bool IsValid () const
 
- Public Member Functions inherited from impeller::ResourceBinder
virtual ~ResourceBinder ()=default
 

Public Attributes

std::shared_ptr< Pipeline< PipelineDescriptor > > pipeline
 
Bindings vertex_bindings
 
Bindings fragment_bindings
 
uint32_t stencil_reference = 0u
 
uint64_t base_vertex = 0u
 
std::optional< Viewportviewport
 
std::optional< IRectscissor
 
size_t instance_count = 1u
 
VertexBuffer vertex_buffer
 The bound per-vertex data and optional index buffer.
 

Detailed Description

An object used to specify work to the GPU along with references to resources the GPU will used when doing said work.

To construct a valid command, follow these steps:

Command can be created frequently and on demand. The resources referenced in commands views into buffers managed by other allocators and resource managers.

Definition at line 92 of file command.h.

Member Function Documentation

◆ BindResource() [1/3]

bool impeller::Command::BindResource ( ShaderStage  stage,
DescriptorType  type,
const SampledImageSlot slot,
const ShaderMetadata metadata,
std::shared_ptr< const Texture texture,
const std::unique_ptr< const Sampler > &  sampler 
)
overridevirtual

Implements impeller::ResourceBinder.

Definition at line 70 of file command.cc.

75 {
76 if (!sampler) {
77 return false;
78 }
79 if (!texture || !texture->IsValid()) {
80 return false;
81 }
82
83 switch (stage) {
85 vertex_bindings.sampled_images.emplace_back(TextureAndSampler{
86 .slot = slot,
87 .texture = {&metadata, std::move(texture)},
88 .sampler = sampler,
89 });
90 return true;
92 fragment_bindings.sampled_images.emplace_back(TextureAndSampler{
93 .slot = slot,
94 .texture = {&metadata, std::move(texture)},
95 .sampler = sampler,
96 });
97 return true;
99 VALIDATION_LOG << "Use ComputeCommands for compute shader stages.";
101 return false;
102 }
103
104 return false;
105}
FlTexture * texture
std::vector< TextureAndSampler > sampled_images
Definition command.h:74
Bindings fragment_bindings
Definition command.h:106
Bindings vertex_bindings
Definition command.h:101
#define VALIDATION_LOG
Definition validation.h:73

◆ BindResource() [2/3]

bool impeller::Command::BindResource ( ShaderStage  stage,
DescriptorType  type,
const ShaderUniformSlot slot,
const ShaderMetadata metadata,
BufferView  view 
)
overridevirtual

Implements impeller::ResourceBinder.

Definition at line 25 of file command.cc.

29 {
30 return DoBindResource(stage, slot, &metadata, std::move(view));
31}

◆ BindResource() [3/3]

bool impeller::Command::BindResource ( ShaderStage  stage,
DescriptorType  type,
const ShaderUniformSlot slot,
const std::shared_ptr< const ShaderMetadata > &  metadata,
BufferView  view 
)

Definition at line 33 of file command.cc.

38 {
39 return DoBindResource(stage, slot, metadata, std::move(view));
40}

◆ BindVertices()

bool impeller::Command::BindVertices ( VertexBuffer  buffer)

Specify the vertex and index buffer to use for this command.

Parameters
[in]bufferThe vertex and index buffer definition. If possible, this value should be moved and not copied.
Returns
returns if the binding was updated.

Definition at line 15 of file command.cc.

15 {
16 if (buffer.index_type == IndexType::kUnknown) {
17 VALIDATION_LOG << "Cannot bind vertex buffer with an unknown index type.";
18 return false;
19 }
20
21 vertex_buffer = std::move(buffer);
22 return true;
23}
static const uint8_t buffer[]
VertexBuffer vertex_buffer
The bound per-vertex data and optional index buffer.
Definition command.h:151

◆ IsValid()

bool impeller::Command::IsValid ( ) const
inline

Definition at line 184 of file command.h.

184{ return pipeline && pipeline->IsValid(); }
std::shared_ptr< Pipeline< PipelineDescriptor > > pipeline
Definition command.h:96

Member Data Documentation

◆ base_vertex

uint64_t impeller::Command::base_vertex = 0u

The offset used when indexing into the vertex buffer.

Definition at line 126 of file command.h.

◆ fragment_bindings

Bindings impeller::Command::fragment_bindings

The buffer, texture, and sampler bindings used by the fragment pipeline stage.

Definition at line 106 of file command.h.

◆ instance_count

size_t impeller::Command::instance_count = 1u

The number of instances of the given set of vertices to render. Not all backends support rendering more than one instance at a time.

Warning
Setting this to more than one will limit the availability of backends to use with this command.

Definition at line 147 of file command.h.

◆ pipeline

std::shared_ptr<Pipeline<PipelineDescriptor> > impeller::Command::pipeline

The pipeline to use for this command.

Definition at line 96 of file command.h.

◆ scissor

std::optional<IRect> impeller::Command::scissor

The scissor rect to use for clipping writes to the render target. The scissor rect must lie entirely within the render target. If unset, no scissor is applied.

Definition at line 139 of file command.h.

◆ stencil_reference

uint32_t impeller::Command::stencil_reference = 0u

The reference value to use in stenciling operations. Stencil configuration is part of pipeline setup and can be read from the pipelines descriptor.

See also
Pipeline
PipelineDescriptor

Definition at line 122 of file command.h.

◆ vertex_bindings

Bindings impeller::Command::vertex_bindings

The buffer, texture, and sampler bindings used by the vertex pipeline stage.

Definition at line 101 of file command.h.

◆ vertex_buffer

VertexBuffer impeller::Command::vertex_buffer

The bound per-vertex data and optional index buffer.

Definition at line 151 of file command.h.

◆ viewport

std::optional<Viewport> impeller::Command::viewport

The viewport coordinates that the rasterizer linearly maps normalized device coordinates to. If unset, the viewport is the size of the render target with a zero origin, znear=0, and zfar=1.

Definition at line 133 of file command.h.


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