xref: /aosp_15_r20/external/skia/src/gpu/ganesh/mtl/GrMtlBuffer.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
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