7 #include "flutter/fml/logging.h"
16 MTLStorageMode storage_mode)
17 : DeviceBuffer(desc), buffer_(buffer), storage_mode_(storage_mode) {}
19 DeviceBufferMTL::~DeviceBufferMTL() =
default;
21 id<MTLBuffer> DeviceBufferMTL::GetMTLBuffer()
const {
25 uint8_t* DeviceBufferMTL::OnGetContents()
const {
27 if (storage_mode_ != MTLStorageModeShared &&
28 storage_mode_ != MTLStorageModeManaged) {
32 if (storage_mode_ != MTLStorageModeShared) {
37 return reinterpret_cast<uint8_t*
>(buffer_.contents);
40 [[nodiscard]]
bool DeviceBufferMTL::OnCopyHostBuffer(
const uint8_t* source,
43 auto dest =
static_cast<uint8_t*
>(buffer_.contents);
50 ::memmove(dest + offset, source + source_range.offset, source_range.length);
57 if (storage_mode_ == MTLStorageModeManaged) {
58 [buffer_ didModifyRange:NSMakeRange(offset, source_range.length)];
65 void DeviceBufferMTL::Flush(std::optional<Range> range)
const {
67 auto flush_range = range.value_or(Range{0, GetDeviceBufferDescriptor().size});
68 if (storage_mode_ == MTLStorageModeManaged) {
70 didModifyRange:NSMakeRange(flush_range.offset, flush_range.length)];
75 bool DeviceBufferMTL::SetLabel(std::string_view label) {
80 [buffer_ setLabel:@(label.data())];
85 bool DeviceBufferMTL::SetLabel(std::string_view label, Range range) {
90 [buffer_ addDebugMarker:@(label.data())
91 range:NSMakeRange(range.offset, range.length)];