Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
GrStagingBufferManager.h
Go to the documentation of this file.
1/*
2 * Copyright 2020 Google LLC
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 GrStagingBufferManager_DEFINED
9#define GrStagingBufferManager_DEFINED
10
13#include <vector>
14
15class GrGpu;
16
18public:
19 GrStagingBufferManager(GrGpu* gpu) : fGpu(gpu) {}
20
21 struct Slice {
22 Slice() {}
23 Slice(GrGpuBuffer* buffer, size_t offset, void* offsetMapPtr)
24 : fBuffer(buffer), fOffset(offset), fOffsetMapPtr(offsetMapPtr) {}
25 GrGpuBuffer* fBuffer = nullptr;
26 size_t fOffset = 0;
27 void* fOffsetMapPtr = nullptr;
28 };
29
30 Slice allocateStagingBufferSlice(size_t size, size_t requiredAlignment = 1);
31
32 // This call is used to move all the buffers off of the manager and to backend gpu by calling
33 // the virtual GrGpu::takeOwnershipOfBuffer on each buffer. This is called during
34 // submitToGpu. It is up to the backend to take refs to the buffers in their implemented
35 // takeOwnershipOfBuffer implementation if they need to. After this call returns the
36 // manager will have released all refs to its buffers.
37 void detachBuffers();
38
39 bool hasBuffers() { return !fBuffers.empty(); }
40
41 void reset() {
42 for (size_t i = 0; i < fBuffers.size(); ++i) {
43 fBuffers[i].fBuffer->unmap();
44 }
45 fBuffers.clear();
46 }
47
48private:
49 struct StagingBuffer {
50 StagingBuffer(sk_sp<GrGpuBuffer> buffer, void* mapPtr)
51 : fBuffer(std::move(buffer))
52 , fMapPtr(mapPtr) {}
53
54 sk_sp<GrGpuBuffer> fBuffer;
55 void* fMapPtr;
56 size_t fOffset = 0;
57
58 size_t remaining() { return fBuffer->size() - fOffset; }
59 };
60
61 std::vector<StagingBuffer> fBuffers;
62 GrGpu* fGpu;
63};
64
65#endif
66
Definition GrGpu.h:62
Slice allocateStagingBufferSlice(size_t size, size_t requiredAlignment=1)
static const uint8_t buffer[]
Definition ref_ptr.h:256
Point offset
Slice(GrGpuBuffer *buffer, size_t offset, void *offsetMapPtr)