7 #include "flutter/fml/logging.h"
16 MTLStorageMode storage_mode)
17 : DeviceBuffer(desc), buffer_(buffer), storage_mode_(storage_mode) {}
25 uint8_t* DeviceBufferMTL::OnGetContents()
const {
26 if (storage_mode_ != MTLStorageModeShared) {
29 return reinterpret_cast<uint8_t*
>(buffer_.contents);
32 std::shared_ptr<Texture> DeviceBufferMTL::AsTexture(
34 const TextureDescriptor& descriptor,
35 uint16_t row_bytes)
const {
38 if (!mtl_texture_desc) {
43 if (@available(iOS 13.0, macos 10.15, *)) {
44 mtl_texture_desc.resourceOptions = buffer_.resourceOptions;
47 auto texture = [buffer_ newTextureWithDescriptor:mtl_texture_desc
49 bytesPerRow:row_bytes];
56 [[nodiscard]]
bool DeviceBufferMTL::OnCopyHostBuffer(
const uint8_t* source,
59 auto dest =
static_cast<uint8_t*
>(buffer_.contents);
66 ::memmove(dest +
offset, source + source_range.offset, source_range.length);
73 if (storage_mode_ == MTLStorageModeManaged) {
74 [buffer_ didModifyRange:NSMakeRange(
offset, source_range.length)];
81 void DeviceBufferMTL::Flush(std::optional<Range> range)
const {
84 if (storage_mode_ == MTLStorageModeManaged) {
86 didModifyRange:NSMakeRange(flush_range.offset, flush_range.length)];
91 bool DeviceBufferMTL::SetLabel(
const std::string& label) {
95 [buffer_ setLabel:@(label.c_str())];
99 bool DeviceBufferMTL::SetLabel(
const std::string& label, Range range) {
103 [buffer_ addDebugMarker:@(label.c_str())
104 range:NSMakeRange(range.offset, range.length)];