xref: /aosp_15_r20/external/skia/src/gpu/graphite/UploadBufferManager.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2022 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 skgpu_graphite_UploadBufferManager_DEFINED
9 #define skgpu_graphite_UploadBufferManager_DEFINED
10 
11 #include "include/core/SkRefCnt.h"
12 #include "src/gpu/BufferWriter.h"
13 #include "src/gpu/graphite/DrawTypes.h"
14 
15 #include <string_view>
16 #include <tuple>
17 #include <vector>
18 
19 namespace skgpu::graphite {
20 
21 class Buffer;
22 class Caps;
23 class CommandBuffer;
24 class Recording;
25 class ResourceProvider;
26 
27 class UploadBufferManager {
28 public:
29     UploadBufferManager(ResourceProvider*, const Caps*);
30     ~UploadBufferManager();
31 
32     std::tuple<TextureUploadWriter, BindBufferInfo> getTextureUploadWriter(
33             size_t requiredBytes, size_t requiredAlignment);
34 
35     // Finalizes all buffers and transfers ownership of them to a Recording.
36     void transferToRecording(Recording*);
37     void transferToCommandBuffer(CommandBuffer*);
38 
39 private:
40     friend class DrawBufferManager; // to access makeBindInfo
41     friend class StaticBufferManager; // to access makeBindInfo
42 
43 
44     std::tuple<void*/*mappedPtr*/, BindBufferInfo> makeBindInfo(size_t requiredBytes,
45                                                                 size_t requiredAlignment,
46                                                                 std::string_view label);
47 
48     ResourceProvider* fResourceProvider;
49 
50     sk_sp<Buffer> fReusedBuffer;
51     const uint32_t fMinAlignment;
52     uint32_t fReusedBufferOffset = 0;
53 
54     std::vector<sk_sp<Buffer>> fUsedBuffers;
55 };
56 
57 }  // namespace skgpu::graphite
58 
59 #endif  // skgpu_graphite_UploadBufferManager_DEFINED
60