blob: 651cf1a0592b97ac6b376ae6bde230036cf15383 [file] [log] [blame]
Timothy Liang49528b62018-08-02 14:18:37 -04001/*
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 "GrBuffer.h"
12
13#import <metal/metal.h>
14
15class GrMtlCaps;
16class GrMtlGpu;
17
18class GrMtlBuffer: public GrBuffer {
19public:
20 static GrMtlBuffer* Create(GrMtlGpu*, size_t size, GrBufferType intendedType, GrAccessPattern,
21 const void* data = nullptr);
22
23 ~GrMtlBuffer() override;
24
25 id<MTLBuffer> mtlBuffer() const { return fMtlBuffer; }
26
27protected:
28 GrMtlBuffer(GrMtlGpu*, size_t size, GrBufferType intendedType, GrAccessPattern);
29
30 void onAbandon() override;
31 void onRelease() override;
32
33private:
34 GrMtlGpu* mtlGpu() const;
35
36 void onMap() override;
37 void onUnmap() override;
38 bool onUpdateData(const void* src, size_t srcSizeInBytes) override;
39
40 void internalMap(size_t sizeInBytes);
41 void internalUnmap(size_t sizeInBytes);
42
43#ifdef SK_DEBUG
44 void validate() const;
45#endif
46
47 GrBufferType fIntendedType;
48 bool fIsDynamic;
49 id<MTLBuffer> fMtlBuffer;
50 id<MTLBuffer> fMappedBuffer;
51
52 typedef GrBuffer INHERITED;
53};
54
55#endif