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

#include <blit_command_vk.h>

Inheritance diagram for impeller::BlitCopyTextureToBufferCommandVK:
impeller::BlitCopyTextureToBufferCommand impeller::BlitEncodeVK impeller::BlitCommand impeller::BackendCast< BlitEncodeVK, BlitCommand >

Public Member Functions

 ~BlitCopyTextureToBufferCommandVK () override
 
std::string GetLabel () const override
 
bool Encode (CommandEncoderVK &encoder) const override
 
- Public Member Functions inherited from impeller::BlitEncodeVK
virtual ~BlitEncodeVK ()
 

Additional Inherited Members

- Static Public Member Functions inherited from impeller::BackendCast< BlitEncodeVK, BlitCommand >
static BlitEncodeVKCast (BlitCommand &base)
 
static const BlitEncodeVKCast (const BlitCommand &base)
 
static BlitEncodeVKCast (BlitCommand *base)
 
static const BlitEncodeVKCast (const BlitCommand *base)
 
- Public Attributes inherited from impeller::BlitCopyTextureToBufferCommand
std::shared_ptr< Texturesource
 
std::shared_ptr< DeviceBufferdestination
 
IRect source_region
 
size_t destination_offset
 
- Public Attributes inherited from impeller::BlitCommand
std::string label
 

Detailed Description

Definition at line 38 of file blit_command_vk.h.

Constructor & Destructor Documentation

◆ ~BlitCopyTextureToBufferCommandVK()

impeller::BlitCopyTextureToBufferCommandVK::~BlitCopyTextureToBufferCommandVK ( )
overridedefault

Member Function Documentation

◆ Encode()

bool impeller::BlitCopyTextureToBufferCommandVK::Encode ( CommandEncoderVK encoder) const
overridevirtual

Implements impeller::BlitEncodeVK.

Definition at line 150 of file blit_command_vk.cc.

150 {
151 const auto& cmd_buffer = encoder.GetCommandBuffer();
152
153 // cast source and destination to TextureVK
154 const auto& src = TextureVK::Cast(*source);
155
156 if (!encoder.Track(source) || !encoder.Track(destination)) {
157 return false;
158 }
159
160 BarrierVK barrier;
161 barrier.cmd_buffer = cmd_buffer;
162 barrier.new_layout = vk::ImageLayout::eTransferSrcOptimal;
163 barrier.src_access = vk::AccessFlagBits::eShaderWrite |
164 vk::AccessFlagBits::eTransferWrite |
165 vk::AccessFlagBits::eColorAttachmentWrite;
166 barrier.src_stage = vk::PipelineStageFlagBits::eFragmentShader |
167 vk::PipelineStageFlagBits::eTransfer |
168 vk::PipelineStageFlagBits::eColorAttachmentOutput;
169 barrier.dst_access = vk::AccessFlagBits::eShaderRead;
170 barrier.dst_stage = vk::PipelineStageFlagBits::eVertexShader |
171 vk::PipelineStageFlagBits::eFragmentShader;
172
173 const auto& dst = DeviceBufferVK::Cast(*destination);
174
175 vk::BufferImageCopy image_copy;
176 image_copy.setBufferOffset(destination_offset);
177 image_copy.setBufferRowLength(0);
178 image_copy.setBufferImageHeight(0);
179 image_copy.setImageSubresource(
180 vk::ImageSubresourceLayers(vk::ImageAspectFlagBits::eColor, 0, 0, 1));
181 image_copy.setImageOffset(
182 vk::Offset3D(source_region.GetX(), source_region.GetY(), 0));
183 image_copy.setImageExtent(
184 vk::Extent3D(source_region.GetWidth(), source_region.GetHeight(), 1));
185
186 if (!src.SetLayout(barrier)) {
187 VALIDATION_LOG << "Could not encode layout transition.";
188 return false;
189 }
190
191 cmd_buffer.copyImageToBuffer(src.GetImage(), //
192 barrier.new_layout, //
193 dst.GetBuffer(), //
194 image_copy //
195 );
196
197 // If the buffer is used for readback, then apply a transfer -> host memory
198 // barrier.
199 if (destination->GetDeviceBufferDescriptor().readback) {
200 vk::MemoryBarrier barrier;
201 barrier.srcAccessMask = vk::AccessFlagBits::eTransferWrite;
202 barrier.dstAccessMask = vk::AccessFlagBits::eHostRead;
203
204 cmd_buffer.pipelineBarrier(vk::PipelineStageFlagBits::eTransfer,
205 vk::PipelineStageFlagBits::eHost, {}, 1,
206 &barrier, 0, {}, 0, {});
207 }
208
209 return true;
210}
static TextureVK & Cast(Texture &base)
dst
Definition cp.py:12
std::shared_ptr< DeviceBuffer > destination
std::shared_ptr< Texture > source
constexpr Type GetY() const
Returns the Y coordinate of the upper left corner, equivalent to |GetOrigin().y|.
Definition rect.h:304
constexpr Type GetHeight() const
Returns the height of the rectangle, equivalent to |GetSize().height|.
Definition rect.h:314
constexpr Type GetX() const
Returns the X coordinate of the upper left corner, equivalent to |GetOrigin().x|.
Definition rect.h:300
constexpr Type GetWidth() const
Returns the width of the rectangle, equivalent to |GetSize().width|.
Definition rect.h:308
#define VALIDATION_LOG
Definition validation.h:73

◆ GetLabel()

std::string impeller::BlitCopyTextureToBufferCommandVK::GetLabel ( ) const
overridevirtual

Implements impeller::BlitEncodeVK.

Definition at line 146 of file blit_command_vk.cc.

146 {
147 return label;
148}

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