/* * Copyright 2015 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "GrVkTransferBuffer.h" #include "GrVkGpu.h" #include "SkTraceMemoryDump.h" sk_sp GrVkTransferBuffer::Make(GrVkGpu* gpu, size_t size, GrVkBuffer::Type type) { GrVkBuffer::Desc desc; desc.fDynamic = true; SkASSERT(GrVkBuffer::kCopyRead_Type == type || GrVkBuffer::kCopyWrite_Type == type); desc.fType = type; desc.fSizeInBytes = size; const GrVkBuffer::Resource* bufferResource = GrVkBuffer::Create(gpu, desc); if (!bufferResource) { return nullptr; } GrVkTransferBuffer* buffer = new GrVkTransferBuffer(gpu, desc, bufferResource); if (!buffer) { bufferResource->unref(gpu); } return sk_sp(buffer); } GrVkTransferBuffer::GrVkTransferBuffer(GrVkGpu* gpu, const GrVkBuffer::Desc& desc, const GrVkBuffer::Resource* bufferResource) : INHERITED(gpu, desc.fSizeInBytes, kCopyRead_Type == desc.fType ? kXferCpuToGpu_GrBufferType : kXferGpuToCpu_GrBufferType, kStream_GrAccessPattern) , GrVkBuffer(desc, bufferResource) { this->registerWithCache(SkBudgeted::kYes); } void GrVkTransferBuffer::onRelease() { if (!this->wasDestroyed()) { this->vkRelease(this->getVkGpu()); } INHERITED::onRelease(); } void GrVkTransferBuffer::onAbandon() { this->vkAbandon(); INHERITED::onAbandon(); } void GrVkTransferBuffer::setMemoryBacking(SkTraceMemoryDump* traceMemoryDump, const SkString& dumpName) const { SkString buffer_id; buffer_id.appendU64((uint64_t)this->buffer()); traceMemoryDump->setMemoryBacking(dumpName.c_str(), "vk_buffer", buffer_id.c_str()); }