| 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 (std::string_view label)=0
virtual bool | SetLabel (std::string_view 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) {}
impeller::DeviceBuffer::desc_
const DeviceBufferDescriptor desc_
Definition: device_buffer.h:49

## 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 Range range = {0u, buffer->desc_.size};
20 return BufferView(std::move(buffer), range);
21 }

Referenced by impeller::testing::CreateTestYUVTextures(), impeller::CreateTexture(), impeller::Playground::CreateTextureCubeForFixture(), impeller::CreateTextureForDecompressedImage(), ImGui_ImplImpeller_Init(), and impeller::testing::TEST_P().

## ◆ CopyHostBuffer()

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

Definition at line 27 of file device_buffer.cc.

29 {
30 if (source_range.length == 0u) {
31 // Nothing to copy. Bail.
32 return true;
33 }
34
35 if (source == nullptr) {
36 // Attempted to copy data from a null buffer.
37 return false;
38 }
39
40 if (desc_.storage_mode != StorageMode::kHostVisible) {
41 // One of the storage modes where a transfer queue must be used.
42 return false;
43 }
44
45 if (offset + source_range.length > desc_.size) {
46 // Out of bounds of this buffer.
47 return false;
48 }
49
50 return OnCopyHostBuffer(source, source_range, offset);
51 }
impeller::DeviceBuffer::OnCopyHostBuffer
virtual bool OnCopyHostBuffer(const uint8_t *source, Range source_range, size_t offset)=0
impeller::StorageMode::kHostVisible
@ kHostVisible
impeller::DeviceBufferDescriptor::storage_mode
StorageMode storage_mode
Definition: device_buffer_descriptor.h:15
impeller::DeviceBufferDescriptor::size
size_t size
Definition: device_buffer_descriptor.h:16

References desc_, impeller::kHostVisible, impeller::Range::length, 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, and impeller::testing::FlushTestDeviceBuffer.

Definition at line 13 of file device_buffer.cc.

13 {}

Referenced by impeller::ConvexTessellatorImpl< IndexT >::TessellateConvex().

## ◆ GetDeviceBufferDescriptor()

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

Definition at line 23 of file device_buffer.cc.

23 {
24 return desc_;
25 }

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

Implemented in impeller::testing::FlushTestDeviceBuffer.

Referenced by CopyHostBuffer().

## ◆ OnGetContents()

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

Implemented in impeller::testing::FlushTestDeviceBuffer.

Referenced by impeller::testing::CopyBufferView(), impeller::ConvexTessellatorImpl< IndexT >::TessellateConvex(), and impeller::testing::TEST_P().

## ◆ SetLabel() [1/2]

virtual bool impeller::DeviceBuffer::SetLabel | ( | std::string_view | label | ) |
| pure virtual

Implemented in impeller::testing::FlushTestDeviceBuffer.

## ◆ SetLabel() [2/2]

virtual bool impeller::DeviceBuffer::SetLabel | ( | std::string_view | label,
|  | Range | range
| ) |  |
| pure virtual

Implemented in impeller::testing::FlushTestDeviceBuffer.

## 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