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