Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
lib
gpu
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/platform.h
"
14
#include "
impeller/core/range.h
"
15
#include "
third_party/tonic/typed_data/dart_byte_data.h
"
16
#include "
tonic/converter/dart_converter.h
"
17
18
namespace
flutter
{
19
namespace
gpu {
20
21
IMPLEMENT_WRAPPERTYPEINFO
(flutter_gpu,
DeviceBuffer
);
22
23
DeviceBuffer::DeviceBuffer
(
24
std::shared_ptr<impeller::DeviceBuffer> device_buffer)
25
: device_buffer_(
std
::move(device_buffer)) {}
26
27
DeviceBuffer::~DeviceBuffer
() =
default
;
28
29
std::shared_ptr<impeller::DeviceBuffer>
DeviceBuffer::GetBuffer
() {
30
return
device_buffer_;
31
}
32
33
bool
DeviceBuffer::Overwrite
(
const
tonic::DartByteData
& source_bytes,
34
size_t
destination_offset_in_bytes) {
35
if
(!device_buffer_->CopyHostBuffer(
36
reinterpret_cast<
const
uint8_t*
>
(source_bytes.
data
()),
37
impeller::Range
(0, source_bytes.
length_in_bytes
()),
38
destination_offset_in_bytes)) {
39
return
false
;
40
}
41
return
true
;
42
}
43
44
}
// namespace gpu
45
}
// namespace flutter
46
47
//----------------------------------------------------------------------------
48
/// Exports
49
///
50
51
bool
InternalFlutterGpu_DeviceBuffer_Initialize
(
52
Dart_Handle
wrapper,
53
flutter::gpu::Context
* gpu_context,
54
int
storage_mode,
55
int
size_in_bytes) {
56
impeller::DeviceBufferDescriptor
desc;
57
desc.storage_mode =
flutter::gpu::ToImpellerStorageMode
(storage_mode);
58
desc.size = size_in_bytes;
59
auto
device_buffer =
60
gpu_context->
GetContext
()->GetResourceAllocator()->CreateBuffer(desc);
61
if
(!device_buffer) {
62
FML_LOG
(
ERROR
) <<
"Failed to create device buffer."
;
63
return
false
;
64
}
65
66
auto
res =
67
fml::MakeRefCounted<flutter::gpu::DeviceBuffer>(std::move(device_buffer));
68
res->AssociateWithDartWrapper(wrapper);
69
70
return
true
;
71
}
72
73
bool
InternalFlutterGpu_DeviceBuffer_InitializeWithHostData
(
74
Dart_Handle
wrapper,
75
flutter::gpu::Context
* gpu_context,
76
Dart_Handle
byte_data) {
77
auto
data =
tonic::DartByteData
(byte_data);
78
auto
mapping =
fml::NonOwnedMapping
(
reinterpret_cast<
uint8_t*
>
(data.data()),
79
data.length_in_bytes());
80
auto
device_buffer =
81
gpu_context->
GetContext
()->GetResourceAllocator()->CreateBufferWithCopy(
82
mapping);
83
if
(!device_buffer) {
84
FML_LOG
(
ERROR
) <<
"Failed to create device buffer with copy."
;
85
return
false
;
86
}
87
88
auto
res =
89
fml::MakeRefCounted<flutter::gpu::DeviceBuffer>(std::move(device_buffer));
90
res->AssociateWithDartWrapper(wrapper);
91
92
return
true
;
93
}
94
95
bool
InternalFlutterGpu_DeviceBuffer_Overwrite
(
96
flutter::gpu::DeviceBuffer
* device_buffer,
97
Dart_Handle
source_byte_data,
98
int
destination_offset_in_bytes) {
99
return
device_buffer->
Overwrite
(
tonic::DartByteData
(source_byte_data),
100
destination_offset_in_bytes);
101
}
flutter::gpu::Context
Definition
context.h:16
flutter::gpu::Context::GetContext
std::shared_ptr< impeller::Context > GetContext()
Definition
context.cc:65
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:33
flutter::gpu::DeviceBuffer::GetBuffer
std::shared_ptr< impeller::DeviceBuffer > GetBuffer()
Definition
device_buffer.cc:29
flutter::gpu::DeviceBuffer::~DeviceBuffer
~DeviceBuffer() override
flutter::gpu::DeviceBuffer::DeviceBuffer
DeviceBuffer(std::shared_ptr< impeller::DeviceBuffer > device_buffer)
Definition
device_buffer.cc:23
fml::NonOwnedMapping
Definition
mapping.h:115
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_api.h
Dart_Handle
struct _Dart_Handle * Dart_Handle
Definition
dart_api.h:258
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:82
device_buffer.h
formats.h
platform.h
range.h
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:51
InternalFlutterGpu_DeviceBuffer_InitializeWithHostData
bool InternalFlutterGpu_DeviceBuffer_InitializeWithHostData(Dart_Handle wrapper, flutter::gpu::Context *gpu_context, Dart_Handle byte_data)
Definition
device_buffer.cc:73
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:95
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:256
impeller::DeviceBufferDescriptor
Definition
device_buffer_descriptor.h:14
impeller::Range
Definition
range.h:14
ERROR
#define ERROR(message)
Definition
elf_loader.cc:260
Generated on Fri Apr 26 2024 06:14:15 for Flutter Engine by
1.9.8