Flutter Engine
Loading...
Searching...
No Matches
device_buffer.cc
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
#include "
flutter/lib/gpu/device_buffer.h
"
6
7
#include "dart_api.h"
8
#include "
flutter/lib/gpu/formats.h
"
9
#include "
fml/mapping.h
"
10
#include "
impeller/core/device_buffer.h
"
11
#include "
impeller/core/device_buffer_descriptor.h
"
12
#include "
impeller/core/formats.h
"
13
#include "
impeller/core/range.h
"
14
#include "
third_party/tonic/typed_data/dart_byte_data.h
"
15
#include "
tonic/converter/dart_converter.h
"
16
17
namespace
flutter
{
18
namespace
gpu {
19
20
IMPLEMENT_WRAPPERTYPEINFO
(flutter_gpu,
DeviceBuffer
);
21
22
DeviceBuffer::DeviceBuffer
(
23
std::shared_ptr<impeller::DeviceBuffer> device_buffer)
24
: device_buffer_(
std
::move(device_buffer)) {}
25
26
DeviceBuffer::~DeviceBuffer
() =
default
;
27
28
std::shared_ptr<impeller::DeviceBuffer>
DeviceBuffer::GetBuffer
() {
29
return
device_buffer_;
30
}
31
32
bool
DeviceBuffer::Overwrite
(
const
tonic::DartByteData
& source_bytes,
33
size_t
destination_offset_in_bytes) {
34
if
(!device_buffer_->CopyHostBuffer(
35
reinterpret_cast<
const
uint8_t*
>
(source_bytes.
data
()),
36
impeller::Range
(0, source_bytes.
length_in_bytes
()),
37
destination_offset_in_bytes)) {
38
return
false
;
39
}
40
return
true
;
41
}
42
43
}
// namespace gpu
44
}
// namespace flutter
45
46
//----------------------------------------------------------------------------
47
/// Exports
48
///
49
50
bool
InternalFlutterGpu_DeviceBuffer_Initialize
(
51
Dart_Handle wrapper,
52
flutter::gpu::Context
* gpu_context,
53
int
storage_mode,
54
int
size_in_bytes) {
55
impeller::DeviceBufferDescriptor
desc;
56
desc.
storage_mode
=
flutter::gpu::ToImpellerStorageMode
(storage_mode);
57
desc.
size
= size_in_bytes;
58
auto
device_buffer =
59
gpu_context->
GetContext
().
GetResourceAllocator
()->CreateBuffer(desc);
60
if
(!device_buffer) {
61
FML_LOG
(ERROR) <<
"Failed to create device buffer."
;
62
return
false
;
63
}
64
65
auto
res =
66
fml::MakeRefCounted<flutter::gpu::DeviceBuffer>(std::move(device_buffer));
67
res->AssociateWithDartWrapper(wrapper);
68
69
return
true
;
70
}
71
72
bool
InternalFlutterGpu_DeviceBuffer_InitializeWithHostData
(
73
Dart_Handle wrapper,
74
flutter::gpu::Context
* gpu_context,
75
Dart_Handle byte_data) {
76
std::shared_ptr<impeller::DeviceBuffer> device_buffer =
nullptr
;
77
{
78
// `DartByteData` gets raw pointers into the Dart heap via
79
// `Dart_TypedDataAcquireData`. So it must be destructed before
80
// `AssociateWithDartWrapper` is called, which mutates the heap.
81
auto
data
=
tonic::DartByteData
(byte_data);
82
auto
mapping =
fml::NonOwnedMapping
(
reinterpret_cast<
uint8_t*
>
(
data
.data()),
83
data
.length_in_bytes());
84
device_buffer =
85
gpu_context->
GetContext
().
GetResourceAllocator
()->CreateBufferWithCopy(
86
mapping);
87
}
88
if
(!device_buffer) {
89
FML_LOG
(ERROR) <<
"Failed to create device buffer with copy."
;
90
return
false
;
91
}
92
93
auto
res =
94
fml::MakeRefCounted<flutter::gpu::DeviceBuffer>(std::move(device_buffer));
95
res->AssociateWithDartWrapper(wrapper);
96
97
return
true
;
98
}
99
100
bool
InternalFlutterGpu_DeviceBuffer_Overwrite
(
101
flutter::gpu::DeviceBuffer
* device_buffer,
102
Dart_Handle source_byte_data,
103
int
destination_offset_in_bytes) {
104
return
device_buffer->
Overwrite
(
tonic::DartByteData
(source_byte_data),
105
destination_offset_in_bytes);
106
}
107
108
bool
InternalFlutterGpu_DeviceBuffer_Flush
(
109
flutter::gpu::DeviceBuffer
* device_buffer,
110
int
offset_in_bytes,
111
int
size_in_bytes) {
112
device_buffer->
GetBuffer
()->Flush(
113
impeller::Range
(offset_in_bytes, size_in_bytes));
114
return
true
;
115
}
flutter::gpu::Context
Definition
context.h:18
flutter::gpu::Context::GetContext
impeller::Context & GetContext()
Definition
context.cc:77
flutter::gpu::DeviceBuffer
Definition
device_buffer.h:17
flutter::gpu::DeviceBuffer::Overwrite
bool Overwrite(const tonic::DartByteData &source_bytes, size_t destination_offset_in_bytes)
Definition
device_buffer.cc:32
flutter::gpu::DeviceBuffer::GetBuffer
std::shared_ptr< impeller::DeviceBuffer > GetBuffer()
Definition
device_buffer.cc:28
flutter::gpu::DeviceBuffer::~DeviceBuffer
~DeviceBuffer() override
flutter::gpu::DeviceBuffer::DeviceBuffer
DeviceBuffer(std::shared_ptr< impeller::DeviceBuffer > device_buffer)
Definition
device_buffer.cc:22
fml::NonOwnedMapping
Definition
mapping.h:115
impeller::Context::GetResourceAllocator
virtual std::shared_ptr< Allocator > GetResourceAllocator() const =0
Returns the allocator used to create textures and buffers on the device.
tonic::DartByteData
Definition
dart_byte_data.h:15
tonic::DartByteData::data
const void * data() const
Definition
dart_byte_data.h:25
tonic::DartByteData::length_in_bytes
size_t length_in_bytes() const
Definition
dart_byte_data.h:27
dart_byte_data.h
dart_converter.h
IMPLEMENT_WRAPPERTYPEINFO
#define IMPLEMENT_WRAPPERTYPEINFO(LibraryName, ClassName)
Definition
dart_wrappable.h:78
device_buffer_descriptor.h
FML_LOG
#define FML_LOG(severity)
Definition
logging.h:101
device_buffer.h
formats.h
range.h
InternalFlutterGpu_DeviceBuffer_Flush
bool InternalFlutterGpu_DeviceBuffer_Flush(flutter::gpu::DeviceBuffer *device_buffer, int offset_in_bytes, int size_in_bytes)
Definition
device_buffer.cc:108
InternalFlutterGpu_DeviceBuffer_Initialize
bool InternalFlutterGpu_DeviceBuffer_Initialize(Dart_Handle wrapper, flutter::gpu::Context *gpu_context, int storage_mode, int size_in_bytes)
Definition
device_buffer.cc:50
InternalFlutterGpu_DeviceBuffer_InitializeWithHostData
bool InternalFlutterGpu_DeviceBuffer_InitializeWithHostData(Dart_Handle wrapper, flutter::gpu::Context *gpu_context, Dart_Handle byte_data)
Definition
device_buffer.cc:72
InternalFlutterGpu_DeviceBuffer_Overwrite
bool InternalFlutterGpu_DeviceBuffer_Overwrite(flutter::gpu::DeviceBuffer *device_buffer, Dart_Handle source_byte_data, int destination_offset_in_bytes)
Definition
device_buffer.cc:100
device_buffer.h
formats.h
mapping.h
flutter::gpu::ToImpellerStorageMode
constexpr impeller::StorageMode ToImpellerStorageMode(FlutterGPUStorageMode value)
Definition
formats.h:25
flutter
Definition
asset_manager.cc:10
std
Definition
ref_ptr.h:261
impeller::DeviceBufferDescriptor
Definition
device_buffer_descriptor.h:14
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
impeller::Range
Definition
range.h:13
data
std::shared_ptr< const fml::Mapping > data
Definition
texture_gles.cc:68
lib
gpu
device_buffer.cc
Generated on Thu Nov 6 2025 16:11:24 for Flutter Engine by
1.9.8