Flutter Engine
 
Loading...
Searching...
No Matches
command.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_COMMAND_H_
6#define FLUTTER_IMPELLER_RENDERER_COMMAND_H_
7
8#include <cstdint>
9#include <memory>
10#include <optional>
11#include <string>
12
20
21namespace impeller {
22
23template <class T>
24class Resource {
25 public:
26 using ResourceType = T;
28
30
31 Resource(const ShaderMetadata* metadata, ResourceType p_resource)
32 : resource(std::move(p_resource)), metadata_(metadata) {}
33
34 const ShaderMetadata* GetMetadata() const {
35 return dynamic_metadata_ ? dynamic_metadata_.get() : metadata_;
36 }
37
38 static Resource MakeDynamic(std::unique_ptr<ShaderMetadata> metadata,
39 ResourceType p_resource) {
40 return Resource(std::move(metadata), std::move(p_resource));
41 }
42
43 private:
44 Resource(std::unique_ptr<ShaderMetadata> metadata, ResourceType p_resource)
45 : resource(std::move(p_resource)),
46 dynamic_metadata_(std::move(metadata)) {}
47
48 // Static shader metadata (typically generated by ImpellerC).
49 const ShaderMetadata* metadata_ = nullptr;
50
51 // Dynamically generated shader metadata.
52 std::unique_ptr<const ShaderMetadata> dynamic_metadata_ = nullptr;
53};
54
57
58/// @brief combines the texture, sampler and sampler slot information.
65
66//------------------------------------------------------------------------------
67/// @brief An object used to specify work to the GPU along with references
68/// to resources the GPU will used when doing said work.
69///
70/// To construct a valid command, follow these steps:
71/// * Specify a valid pipeline.
72/// * Specify vertex information via a call `BindVertices`
73/// * Specify any stage bindings.
74/// * (Optional) Specify a debug label.
75///
76/// Command can be created frequently and on demand. The resources
77/// referenced in commands views into buffers managed by other
78/// allocators and resource managers.
79///
80struct Command {
81 //----------------------------------------------------------------------------
82 /// The pipeline to use for this command.
83 ///
85
86 //----------------------------------------------------------------------------
87 /// The index buffer binding used by the vertex shader stage.
89
90 /// An offset into render pass storage where bound buffers/texture metadata is
91 /// stored.
94
95 //----------------------------------------------------------------------------
96 /// An offset and range of vertex buffers bound for this draw call.
97 ///
98 /// The vertex buffers are stored on the render pass object.
100
101 //----------------------------------------------------------------------------
102 /// The viewport coordinates that the rasterizer linearly maps normalized
103 /// device coordinates to.
104 /// If unset, the viewport is the size of the render target with a zero
105 /// origin, znear=0, and zfar=1.
106 ///
107 std::optional<Viewport> viewport;
108
109 //----------------------------------------------------------------------------
110 /// The scissor rect to use for clipping writes to the render target. The
111 /// scissor rect must lie entirely within the render target.
112 /// If unset, no scissor is applied.
113 ///
114 std::optional<IRect32> scissor;
115
116#ifdef IMPELLER_DEBUG
117 //----------------------------------------------------------------------------
118 /// The debugging label to use for the command.
119 ///
120 std::string label;
121#endif // IMPELLER_DEBUG
122
123 //----------------------------------------------------------------------------
124 /// The offset used when indexing into the vertex buffer.
125 ///
126 uint64_t base_vertex = 0u;
127
128 //----------------------------------------------------------------------------
129 /// The number of elements to draw. When only a vertex buffer is set, this is
130 /// the vertex count. When an index buffer is set, this is the index count.
131 uint32_t element_count = 0u;
132
133 //----------------------------------------------------------------------------
134 /// The number of instances of the given set of vertices to render. Not all
135 /// backends support rendering more than one instance at a time.
136 ///
137 /// @warning Setting this to more than one will limit the availability of
138 /// backends to use with this command.
139 ///
140 uint32_t instance_count = 1u;
141
142 //----------------------------------------------------------------------------
143 /// The reference value to use in stenciling operations. Stencil configuration
144 /// is part of pipeline setup and can be read from the pipelines descriptor.
145 ///
146 /// @see `Pipeline`
147 /// @see `PipelineDescriptor`
148 ///
149 uint32_t stencil_reference = 0u;
150
151 //----------------------------------------------------------------------------
152 /// The type of indices in the index buffer. The indices must be tightly
153 /// packed in the index buffer.
155
156 bool IsValid() const { return pipeline && pipeline->IsValid(); }
157};
158
159} // namespace impeller
160
161#endif // FLUTTER_IMPELLER_RENDERER_COMMAND_H_
virtual bool IsValid() const =0
static Resource MakeDynamic(std::unique_ptr< ShaderMetadata > metadata, ResourceType p_resource)
Definition command.h:38
const ShaderMetadata * GetMetadata() const
Definition command.h:34
Resource(const ShaderMetadata *metadata, ResourceType p_resource)
Definition command.h:31
ResourceType resource
Definition command.h:27
A wrapper around a raw ptr that adds additional unopt mode only checks.
Definition raw_ptr.h:15
Definition ref_ptr.h:261
An object used to specify work to the GPU along with references to resources the GPU will used when d...
Definition command.h:80
Range bound_textures
Definition command.h:93
uint32_t element_count
Definition command.h:131
std::optional< IRect32 > scissor
Definition command.h:114
uint64_t base_vertex
Definition command.h:126
uint32_t stencil_reference
Definition command.h:149
BufferView index_buffer
The index buffer binding used by the vertex shader stage.
Definition command.h:88
std::optional< Viewport > viewport
Definition command.h:107
uint32_t instance_count
Definition command.h:140
Range vertex_buffers
Definition command.h:99
Range bound_buffers
Definition command.h:92
PipelineRef pipeline
Definition command.h:84
IndexType index_type
Definition command.h:154
bool IsValid() const
Definition command.h:156
Metadata required to bind a combined texture and sampler.
combines the texture, sampler and sampler slot information.
Definition command.h:59
raw_ptr< const Sampler > sampler
Definition command.h:63
SampledImageSlot slot
Definition command.h:60
TextureResource texture
Definition command.h:62