24 : fResourceProvider(resourceProvider)
25 , fMinAlignment(caps->requiredTransferBufferAlignment()) {}
30 size_t requiredBytes,
size_t requiredAlignment) {
31 auto[bufferMapPtr, bindInfo] = this->makeBindInfo(requiredBytes,
33 "TextureUploadBuffer");
41std::tuple<
void*,
BindBufferInfo> UploadBufferManager::makeBindInfo(
42 size_t requiredBytes,
size_t requiredAlignment, std::string_view label) {
47 requiredAlignment = std::max(requiredAlignment, fMinAlignment);
48 requiredBytes =
SkAlignTo(requiredBytes, requiredAlignment);
62 return {
nullptr, BindBufferInfo()};
65 BindBufferInfo bindInfo;
66 bindInfo.fBuffer =
buffer.get();
69 fUsedBuffers.push_back(std::move(
buffer));
70 return {bufferMapPtr, bindInfo};
74 fReusedBufferOffset =
SkAlignTo(fReusedBufferOffset, requiredAlignment);
75 if (fReusedBuffer && requiredBytes > fReusedBuffer->size() - fReusedBufferOffset) {
76 fUsedBuffers.push_back(std::move(fReusedBuffer));
84 fReusedBufferOffset = 0;
85 if (!fReusedBuffer || !fReusedBuffer->map()) {
86 fReusedBuffer =
nullptr;
87 return {
nullptr, BindBufferInfo()};
91 BindBufferInfo bindInfo;
92 bindInfo.fBuffer = fReusedBuffer.get();
93 bindInfo.fOffset = fReusedBufferOffset;
95 void* bufferMapPtr = fReusedBuffer->map();
97 bufferMapPtr = SkTAddOffset<void>(bufferMapPtr, fReusedBufferOffset);
99 fReusedBufferOffset += requiredBytes;
101 return {bufferMapPtr, bindInfo};
109 fUsedBuffers.clear();
112 fReusedBuffer->unmap();
122 fUsedBuffers.clear();
125 fReusedBuffer->unmap();
static constexpr size_t SkAlignTo(size_t x, size_t alignment)
void trackResource(sk_sp< Resource > resource)
void addResourceRef(sk_sp< Resource > resource)
sk_sp< Buffer > findOrCreateBuffer(size_t size, BufferType type, AccessPattern, std::string_view label)
std::tuple< TextureUploadWriter, BindBufferInfo > getTextureUploadWriter(size_t requiredBytes, size_t requiredAlignment)
void transferToRecording(Recording *)
UploadBufferManager(ResourceProvider *, const Caps *)
void transferToCommandBuffer(CommandBuffer *)
static const uint8_t buffer[]
static constexpr size_t kReusedBufferSize