|
| virtual | ~BlitPass () |
| |
| virtual bool | IsValid () const =0 |
| |
| void | SetLabel (std::string label) |
| |
| virtual bool | ConvertTextureToShaderRead (const std::shared_ptr< Texture > &texture) |
| | If the texture is not already in a shader read internal state, then convert it to that state. More...
|
| |
| bool | AddCopy (std::shared_ptr< Texture > source, std::shared_ptr< Texture > destination, std::optional< IRect > source_region=std::nullopt, IPoint destination_origin={}, std::string label="") |
| | Record a command to copy the contents of one texture to another texture. The blit area is limited by the intersection of the texture coverage with respect the source region and destination origin. More...
|
| |
| bool | AddCopy (std::shared_ptr< Texture > source, std::shared_ptr< DeviceBuffer > destination, std::optional< IRect > source_region=std::nullopt, size_t destination_offset=0, std::string label="") |
| | Record a command to copy the contents of the buffer to the texture. More...
|
| |
| bool | AddCopy (BufferView source, std::shared_ptr< Texture > destination, std::optional< IRect > destination_region=std::nullopt, std::string label="", uint32_t slice=0, bool convert_to_read=true) |
| | Record a command to copy the contents of the buffer to the texture. More...
|
| |
| bool | GenerateMipmap (std::shared_ptr< Texture > texture, std::string label="") |
| | Record a command to generate all mip levels for a texture. More...
|
| |
| virtual bool | EncodeCommands (const std::shared_ptr< Allocator > &transients_allocator) const =0 |
| | Encode the recorded commands to the underlying command buffer. More...
|
| |
|
| | BlitPass () |
| |
| virtual void | OnSetLabel (std::string label)=0 |
| |
| virtual bool | OnCopyTextureToTextureCommand (std::shared_ptr< Texture > source, std::shared_ptr< Texture > destination, IRect source_region, IPoint destination_origin, std::string label)=0 |
| |
| virtual bool | OnCopyTextureToBufferCommand (std::shared_ptr< Texture > source, std::shared_ptr< DeviceBuffer > destination, IRect source_region, size_t destination_offset, std::string label)=0 |
| |
| virtual bool | OnCopyBufferToTextureCommand (BufferView source, std::shared_ptr< Texture > destination, IRect destination_region, std::string label, uint32_t slice, bool convert_to_read)=0 |
| |
| virtual bool | OnGenerateMipmapCommand (std::shared_ptr< Texture > texture, std::string label)=0 |
| |
Blit passes encode blit into the underlying command buffer.
Blit passes can be obtained from the command buffer in which
the pass is meant to encode commands into.
- See also
CommandBuffer
Definition at line 26 of file blit_pass.h.
| bool impeller::BlitPass::AddCopy |
( |
BufferView |
source, |
|
|
std::shared_ptr< Texture > |
destination, |
|
|
std::optional< IRect > |
destination_region = std::nullopt, |
|
|
std::string |
label = "", |
|
|
uint32_t |
slice = 0, |
|
|
bool |
convert_to_read = true |
|
) |
| |
Record a command to copy the contents of the buffer to the texture.
- Parameters
-
| [in] | source | The buffer view to read for copying. |
| [in] | destination | The texture to overwrite using the source contents. |
| [in] | destination_region | The offset to start writing to in the destination texture. If not provided, this defaults to the entire texture. |
| [in] | label | The optional debug label to give the command. |
| [in] | slice | For cubemap textures, the slice to write data to. |
| [in] | convert_to_read | Whether to convert the texture to a shader read state. Defaults to true. |
- Returns
- If the command was valid for subsequent commitment.
If a region smaller than the texture size is provided, the contents are treated as containing tightly packed pixel data of that region. Only the portion of the texture in this region is replaced and existing data is preserved.
For example, to replace the top left 10 x 10 region of a larger 100 x 100 texture, the region is {0, 0, 10, 10} and the expected buffer size in bytes is 100 x bpp.
Definition at line 123 of file blit_pass.cc.
130 VALIDATION_LOG <<
"Attempted to add a texture blit with no destination.";
133 ISize destination_size = destination->GetSize();
134 IRect destination_region_value =
136 if (destination_region_value.GetX() < 0 ||
137 destination_region_value.GetY() < 0 ||
138 destination_region_value.GetRight() > destination_size.width ||
139 destination_region_value.GetBottom() > destination_size.height) {
140 VALIDATION_LOG <<
"Blit region cannot be larger than destination texture.";
144 auto bytes_per_pixel =
146 auto bytes_per_region = destination_region_value.Area() * bytes_per_pixel;
148 if (source.range.length != bytes_per_region) {
150 <<
"Attempted to add a texture blit with out of bounds access.";
159 destination_region_value,
160 std::move(label), slice, convert_to_read);
References impeller::TRect< T >::Area(), impeller::BytesPerPixelForPixelFormat(), impeller::TRect< T >::GetBottom(), impeller::TRect< T >::GetRight(), impeller::TRect< T >::GetX(), impeller::TRect< T >::GetY(), impeller::TSize< T >::height, impeller::Range::length, impeller::TRect< T >::MakeSize(), OnCopyBufferToTextureCommand(), impeller::BufferView::range, VALIDATION_LOG, and impeller::TSize< T >::width.
| bool impeller::BlitPass::AddCopy |
( |
std::shared_ptr< Texture > |
source, |
|
|
std::shared_ptr< Texture > |
destination, |
|
|
std::optional< IRect > |
source_region = std::nullopt, |
|
|
IPoint |
destination_origin = {}, |
|
|
std::string |
label = "" |
|
) |
| |
Record a command to copy the contents of one texture to another texture. The blit area is limited by the intersection of the texture coverage with respect the source region and destination origin.
- Parameters
-
| [in] | source | The texture to read for copying. |
| [in] | destination | The texture to overwrite using the source contents. |
| [in] | source_region | The optional region of the source texture to use for copying. If not specified, the full size of the source texture is used. |
| [in] | destination_origin | The origin to start writing to in the destination texture. |
| [in] | label | The optional debug label to give the command. |
- Returns
- If the command was valid for subsequent commitment.
Definition at line 26 of file blit_pass.cc.
32 VALIDATION_LOG <<
"Attempted to add a texture blit with no source.";
36 VALIDATION_LOG <<
"Attempted to add a texture blit with no destination.";
40 if (source->GetTextureDescriptor().sample_count !=
41 destination->GetTextureDescriptor().sample_count) {
43 "The source sample count (%d) must match the destination sample count "
45 static_cast<int>(source->GetTextureDescriptor().sample_count),
46 static_cast<int>(destination->GetTextureDescriptor().sample_count));
49 if (source->GetTextureDescriptor().format !=
50 destination->GetTextureDescriptor().format) {
52 "The source pixel format (%s) must match the destination pixel format "
60 if (!source_region.has_value()) {
67 if (!source_region.has_value()) {
72 source_region = source_region->Intersection(
74 if (!source_region.has_value()) {
79 std::move(source), std::move(destination), source_region.value(),
80 destination_origin, std::move(label));
References impeller::TRect< T >::MakeOriginSize(), impeller::TRect< T >::MakeSize(), OnCopyTextureToTextureCommand(), impeller::PixelFormatToString(), impeller::SPrintF(), and VALIDATION_LOG.