blob: 7ccf221f016737d11022200cd1d0a1fe8129468a [file] [log] [blame]
Greg Daniel164a9f02016-02-22 09:56:40 -05001/*
2* Copyright 2015 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#include "GrVkTransferBuffer.h"
9#include "GrVkGpu.h"
10#include "SkTraceMemoryDump.h"
11
Brian Salomon12d22642019-01-29 14:38:50 -050012sk_sp<GrVkTransferBuffer> GrVkTransferBuffer::Make(GrVkGpu* gpu, size_t size,
13 GrVkBuffer::Type type) {
Greg Daniel164a9f02016-02-22 09:56:40 -050014 GrVkBuffer::Desc desc;
jvanvertha584de92016-06-30 09:10:52 -070015 desc.fDynamic = true;
Greg Daniel164a9f02016-02-22 09:56:40 -050016 SkASSERT(GrVkBuffer::kCopyRead_Type == type || GrVkBuffer::kCopyWrite_Type == type);
17 desc.fType = type;
18 desc.fSizeInBytes = size;
19
20 const GrVkBuffer::Resource* bufferResource = GrVkBuffer::Create(gpu, desc);
21 if (!bufferResource) {
22 return nullptr;
23 }
24
25 GrVkTransferBuffer* buffer = new GrVkTransferBuffer(gpu, desc, bufferResource);
26 if (!buffer) {
27 bufferResource->unref(gpu);
28 }
Brian Salomon12d22642019-01-29 14:38:50 -050029 return sk_sp<GrVkTransferBuffer>(buffer);
Greg Daniel164a9f02016-02-22 09:56:40 -050030}
31
32GrVkTransferBuffer::GrVkTransferBuffer(GrVkGpu* gpu, const GrVkBuffer::Desc& desc,
33 const GrVkBuffer::Resource* bufferResource)
Brian Salomonae64c192019-02-05 09:41:37 -050034 : INHERITED(gpu, desc.fSizeInBytes,
35 kCopyRead_Type == desc.fType ? GrGpuBufferType::kXferCpuToGpu
36 : GrGpuBufferType::kXferGpuToCpu,
37 kStream_GrAccessPattern)
38 , GrVkBuffer(desc, bufferResource) {
kkinnunen2e6055b2016-04-22 01:48:29 -070039 this->registerWithCache(SkBudgeted::kYes);
Greg Daniel164a9f02016-02-22 09:56:40 -050040}
41
42void GrVkTransferBuffer::onRelease() {
43 if (!this->wasDestroyed()) {
44 this->vkRelease(this->getVkGpu());
45 }
46
47 INHERITED::onRelease();
48}
49
50void GrVkTransferBuffer::onAbandon() {
51 this->vkAbandon();
52 INHERITED::onAbandon();
53}
54
55void GrVkTransferBuffer::setMemoryBacking(SkTraceMemoryDump* traceMemoryDump,
56 const SkString& dumpName) const {
57 SkString buffer_id;
58 buffer_id.appendU64((uint64_t)this->buffer());
59 traceMemoryDump->setMemoryBacking(dumpName.c_str(), "vk_buffer",
60 buffer_id.c_str());
61}