1 /* 2 * Copyright 2018 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #ifndef GrMtlBuffer_DEFINED 9 #define GrMtlBuffer_DEFINED 10 11 #include "src/gpu/ganesh/GrGpuBuffer.h" 12 #include "src/gpu/ganesh/mtl/GrMtlUniformHandler.h" 13 14 #import <Metal/Metal.h> 15 16 class GrMtlCaps; 17 class GrMtlGpu; 18 19 class GrMtlBuffer: public GrGpuBuffer { 20 public: 21 static sk_sp<GrMtlBuffer> Make(GrMtlGpu*, 22 size_t size, 23 GrGpuBufferType intendedType, 24 GrAccessPattern); 25 26 ~GrMtlBuffer() override; 27 mtlBuffer()28 id<MTLBuffer> mtlBuffer() const { return fMtlBuffer; } 29 30 protected: 31 GrMtlBuffer(GrMtlGpu*, 32 size_t size, 33 GrGpuBufferType intendedType, 34 GrAccessPattern, 35 std::string_view label); 36 37 void onAbandon() override; 38 void onRelease() override; 39 40 private: 41 GrMtlGpu* mtlGpu() const; 42 43 void onMap(MapType) override; 44 bool onClearToZero() override; 45 void onUnmap(MapType) override; 46 bool onUpdateData(const void* src, size_t offset, size_t size, bool preserve) override; 47 48 void internalMap(); 49 void internalUnmap(size_t writtenOffset, size_t writtenSize); 50 51 #ifdef SK_DEBUG 52 void validate() const; 53 #endif 54 55 void onSetLabel() override; 56 57 bool fIsDynamic; 58 id<MTLBuffer> fMtlBuffer; 59 60 using INHERITED = GrGpuBuffer; 61 }; 62 63 #endif 64