Home | History | Annotate | Download | only in vk
      1 /*
      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 
     12 
     13 GrVkTransferBuffer* GrVkTransferBuffer::Create(GrVkGpu* gpu, size_t size, GrVkBuffer::Type type) {
     14     GrVkBuffer::Desc desc;
     15     desc.fDynamic = true;
     16     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     }
     29     return buffer;
     30 }
     31 
     32 GrVkTransferBuffer::GrVkTransferBuffer(GrVkGpu* gpu, const GrVkBuffer::Desc& desc,
     33                                        const GrVkBuffer::Resource* bufferResource)
     34     : INHERITED(gpu, desc.fSizeInBytes,
     35                 kCopyRead_Type == desc.fType ?
     36                     kXferCpuToGpu_GrBufferType : kXferGpuToCpu_GrBufferType,
     37                 kStream_GrAccessPattern)
     38     , GrVkBuffer(desc, bufferResource) {
     39     this->registerWithCache(SkBudgeted::kYes);
     40 }
     41 
     42 void GrVkTransferBuffer::onRelease() {
     43     if (!this->wasDestroyed()) {
     44         this->vkRelease(this->getVkGpu());
     45     }
     46 
     47     INHERITED::onRelease();
     48 }
     49 
     50 void GrVkTransferBuffer::onAbandon() {
     51     this->vkAbandon();
     52     INHERITED::onAbandon();
     53 }
     54 
     55 void 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 }
     62