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 #ifndef GrVkTransferBuffer_DEFINED
      9 #define GrVkTransferBuffer_DEFINED
     10 
     11 #include "GrGpuBuffer.h"
     12 #include "GrVkBuffer.h"
     13 #include "vk/GrVkTypes.h"
     14 
     15 class GrVkGpu;
     16 
     17 class GrVkTransferBuffer : public GrGpuBuffer, public GrVkBuffer {
     18 public:
     19     static sk_sp<GrVkTransferBuffer> Make(GrVkGpu* gpu, size_t size, GrVkBuffer::Type type);
     20 
     21 protected:
     22     void onAbandon() override;
     23     void onRelease() override;
     24 
     25 private:
     26     GrVkTransferBuffer(GrVkGpu* gpu, const GrVkBuffer::Desc& desc,
     27                        const GrVkBuffer::Resource* resource);
     28     void setMemoryBacking(SkTraceMemoryDump* traceMemoryDump,
     29                           const SkString& dumpName) const override;
     30 
     31     void onMap() override {
     32         if (!this->wasDestroyed()) {
     33             this->GrGpuBuffer::fMapPtr = this->vkMap(this->getVkGpu());
     34         }
     35     }
     36 
     37     void onUnmap() override {
     38         if (!this->wasDestroyed()) {
     39             this->vkUnmap(this->getVkGpu());
     40         }
     41     }
     42 
     43     bool onUpdateData(const void* src, size_t srcSizeInBytes) override {
     44         SK_ABORT("Not implemented for transfer buffers.");
     45         return false;
     46     }
     47 
     48     GrVkGpu* getVkGpu() const {
     49         SkASSERT(!this->wasDestroyed());
     50         return reinterpret_cast<GrVkGpu*>(this->getGpu());
     51     }
     52 
     53     typedef GrGpuBuffer INHERITED;
     54 };
     55 
     56 #endif
     57