• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "include/gpu/vk/GrVkTypes.h"
12 #include "src/gpu/GrGpuBuffer.h"
13 #include "src/gpu/vk/GrVkBuffer.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 
onMap()31     void onMap() override {
32         this->GrGpuBuffer::fMapPtr = this->vkMap(this->getVkGpu());
33         if (this->GrGpuBuffer::fMapPtr &&
34             this->intendedType() == GrGpuBufferType::kXferGpuToCpu) {
35             const GrVkAlloc& alloc = this->alloc();
36             GrVkMemory::InvalidateMappedAlloc(this->getVkGpu(), alloc, 0, alloc.fSize);
37         }
38     }
39 
onUnmap()40     void onUnmap() override { this->vkUnmap(this->getVkGpu()); }
41 
onUpdateData(const void * src,size_t srcSizeInBytes)42     bool onUpdateData(const void* src, size_t srcSizeInBytes) override {
43         SK_ABORT("Not implemented for transfer buffers.");
44     }
45 
getVkGpu()46     GrVkGpu* getVkGpu() const {
47         SkASSERT(!this->wasDestroyed());
48         return reinterpret_cast<GrVkGpu*>(this->getGpu());
49     }
50 
51     typedef GrGpuBuffer INHERITED;
52 };
53 
54 #endif
55