| Flutter Impeller |

Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
impeller::DeviceBuffer Class Referenceabstract

`#include <device_buffer.h>`

Inheritance diagram for impeller::DeviceBuffer:

## Public Member Functions
virtual | ~DeviceBuffer ()
bool | CopyHostBuffer (const uint8_t *source, Range source_range, size_t offset=0u)
virtual bool | SetLabel (const std::string &label)=0
virtual bool | SetLabel (const std::string &label, Range range)=0
const DeviceBufferDescriptor & | GetDeviceBufferDescriptor () const
virtual uint8_t * | OnGetContents () const =0
virtual void | Flush (std::optional< Range > range=std::nullopt) const
virtual void | Invalidate (std::optional< Range > range=std::nullopt) const

## Static Public Member Functions
static BufferView | AsBufferView (std::shared_ptr< DeviceBuffer > buffer)
| Create a buffer view of this entire buffer. More...

## Protected Member Functions
| DeviceBuffer (DeviceBufferDescriptor desc)
virtual bool | OnCopyHostBuffer (const uint8_t *source, Range source_range, size_t offset)=0

## Protected Attributes
const DeviceBufferDescriptor | desc_

## Detailed Description

Definition at line 18 of file device_buffer.h.

## Constructor & Destructor Documentation

## ◆ ~DeviceBuffer()

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

## ◆ DeviceBuffer()

impeller::DeviceBuffer::DeviceBuffer | ( | DeviceBufferDescriptor | desc | ) |
| explicit protected

Definition at line 9 of file device_buffer.cc.

9 : desc_(desc) {}

## Member Function Documentation

## ◆ AsBufferView()

BufferView impeller::DeviceBuffer::AsBufferView | ( | std::shared_ptr< DeviceBuffer > | buffer | ) |
| static

Create a buffer view of this entire buffer.

Definition at line 18 of file device_buffer.cc.

18 {
19 BufferView view;
20 view.buffer = std::move(buffer);
21 view.range = {0u, view.buffer->desc_.size};
22 return view;
23 }

References impeller::BufferView::buffer, and impeller::BufferView::range.

Referenced by impeller::CreateGradientTexture(), impeller::testing::CreateTestYUVTextures(), impeller::Playground::CreateTextureCubeForFixture(), impeller::CreateTextureForDecompressedImage(), impeller::testing::TEST_P(), impeller::UpdateGlyphTextureAtlas(), and impeller::UploadGlyphTextureAtlas().

## ◆ CopyHostBuffer()

bool impeller::DeviceBuffer::CopyHostBuffer | ( | const uint8_t * | source,
|  | Range | source_range,
|  | size_t | offset = `0u`
| ) |  |

Definition at line 29 of file device_buffer.cc.

31 {
32 if (source_range.length == 0u) {
33 // Nothing to copy. Bail.
34 return true;
35 }
36
37 if (source == nullptr) {
38 // Attempted to copy data from a null buffer.
39 return false;
40 }
41
42 if (desc_.storage_mode != StorageMode::kHostVisible) {
43 // One of the storage modes where a transfer queue must be used.
44 return false;
45 }
46
47 if (offset + source_range.length > desc_.size) {
48 // Out of bounds of this buffer.
49 return false;
50 }
51
52 return OnCopyHostBuffer(source, source_range, offset);
53 }

References desc_, impeller::kHostVisible, impeller::Range::length, offset, OnCopyHostBuffer(), impeller::DeviceBufferDescriptor::size, and impeller::DeviceBufferDescriptor::storage_mode.

## ◆ Flush()

void impeller::DeviceBuffer::Flush | ( | std::optional< Range > | range = `std::nullopt` | ) | const
| virtual

Make any pending writes visible to the GPU.

This method must be called if the device pointer provided by [OnGetContents] is written to without using [CopyHostBuffer]. On Devices with coherent host memory, this method will not perform extra work.

If the range is not provided, the entire buffer is flushed.

Reimplemented in impeller::DeviceBufferGLES.

Definition at line 13 of file device_buffer.cc.

13 {}

## ◆ GetDeviceBufferDescriptor()

const DeviceBufferDescriptor & impeller::DeviceBuffer::GetDeviceBufferDescriptor | ( |  | ) | const

Definition at line 25 of file device_buffer.cc.

25 {
26 return desc_;
27 }

References desc_.

## ◆ Invalidate()

void impeller::DeviceBuffer::Invalidate | ( | std::optional< Range > | range = `std::nullopt` | ) | const
| virtual

Definition at line 15 of file device_buffer.cc.

15 {}

## ◆ OnCopyHostBuffer()

virtual bool impeller::DeviceBuffer::OnCopyHostBuffer | ( | const uint8_t * | source,
|  | Range | source_range,
|  | size_t | offset
| ) |  |
| protected pure virtual

Referenced by CopyHostBuffer().

## ◆ OnGetContents()

virtual uint8_t* impeller::DeviceBuffer::OnGetContents | ( |  | ) | const
| pure virtual

## ◆ SetLabel() [1/2]

virtual bool impeller::DeviceBuffer::SetLabel | ( | const std::string & | label | ) |
| pure virtual

## ◆ SetLabel() [2/2]

virtual bool impeller::DeviceBuffer::SetLabel | ( | const std::string & | label,
|  | Range | range
| ) |  |
| pure virtual

## Member Data Documentation

## ◆ desc_

const DeviceBufferDescriptor impeller::DeviceBuffer::desc_
| protected

Definition at line 49 of file device_buffer.h.

Referenced by CopyHostBuffer(), and GetDeviceBufferDescriptor().

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

- impeller/core/device_buffer.h
- impeller/core/device_buffer.cc

impeller::DeviceBufferDescriptor::size
size_t size
Definition: device_buffer_descriptor.h:16
impeller::StorageMode::kHostVisible
@ kHostVisible
offset
SeparatedVector2 offset
Definition: stroke_path_geometry.cc:311
impeller::DeviceBufferDescriptor::storage_mode
StorageMode storage_mode
Definition: device_buffer_descriptor.h:15
impeller::DeviceBuffer::desc_
const DeviceBufferDescriptor desc_
Definition: device_buffer.h:49
impeller::DeviceBuffer::OnCopyHostBuffer
virtual bool OnCopyHostBuffer(const uint8_t *source, Range source_range, size_t offset)=0