Home | History | Annotate | Download | only in vk
      1 /*
      2  * Copyright 2017 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 "GrVkTexelBuffer.h"
      9 
     10 #include "GrVkGpu.h"
     11 
     12 GrVkTexelBuffer::GrVkTexelBuffer(GrVkGpu* gpu, const GrVkBuffer::Desc& desc,
     13                                    const GrVkBuffer::Resource* bufferResource)
     14     : INHERITED(gpu, desc.fSizeInBytes, kTexel_GrBufferType,
     15                 kDynamic_GrAccessPattern)
     16     , GrVkBuffer(desc, bufferResource) {
     17     this->registerWithCache(SkBudgeted::kYes);
     18 }
     19 
     20 GrVkTexelBuffer* GrVkTexelBuffer::Create(GrVkGpu* gpu, size_t size, bool dynamic) {
     21     GrVkBuffer::Desc desc;
     22     desc.fDynamic = dynamic;
     23     desc.fType = GrVkBuffer::kTexel_Type;
     24     desc.fSizeInBytes = size;
     25 
     26     const GrVkBuffer::Resource* bufferResource = GrVkBuffer::Create(gpu, desc);
     27     if (!bufferResource) {
     28         return nullptr;
     29     }
     30     GrVkTexelBuffer* buffer = new GrVkTexelBuffer(gpu, desc, bufferResource);
     31     if (!buffer) {
     32         bufferResource->unref(gpu);
     33     }
     34     return buffer;
     35 }
     36 
     37 void GrVkTexelBuffer::onRelease() {
     38     if (!this->wasDestroyed()) {
     39         this->vkRelease(this->getVkGpu());
     40     }
     41 
     42     INHERITED::onRelease();
     43 }
     44 
     45 void GrVkTexelBuffer::onAbandon() {
     46     this->vkAbandon();
     47     INHERITED::onAbandon();
     48 }
     49 
     50 void GrVkTexelBuffer::onMap() {
     51     if (!this->wasDestroyed()) {
     52         this->GrBuffer::fMapPtr = this->vkMap(this->getVkGpu());
     53     }
     54 }
     55 
     56 void GrVkTexelBuffer::onUnmap() {
     57     if (!this->wasDestroyed()) {
     58         this->vkUnmap(this->getVkGpu());
     59     }
     60 }
     61 
     62 bool GrVkTexelBuffer::onUpdateData(const void* src, size_t srcSizeInBytes) {
     63     if (!this->wasDestroyed()) {
     64         return this->vkUpdateData(this->getVkGpu(), src, srcSizeInBytes);
     65     } else {
     66         return false;
     67     }
     68 }
     69 
     70 GrVkGpu* GrVkTexelBuffer::getVkGpu() const {
     71     SkASSERT(!this->wasDestroyed());
     72     return static_cast<GrVkGpu*>(this->getGpu());
     73 }
     74