blob: 22f72861b61ca56cebd5b6c62c39fd91163a604a [file] [log] [blame]
Greg Daniel164a9f02016-02-22 09:56:40 -05001/*
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
Brian Salomondbf70722019-02-07 11:31:24 -050011#include "GrGpuBuffer.h"
Greg Daniel164a9f02016-02-22 09:56:40 -050012#include "GrVkBuffer.h"
Greg Daniel487132b2018-12-20 14:09:36 -050013#include "vk/GrVkTypes.h"
Greg Daniel164a9f02016-02-22 09:56:40 -050014
15class GrVkGpu;
16
Brian Salomondbf70722019-02-07 11:31:24 -050017class GrVkTransferBuffer : public GrGpuBuffer, public GrVkBuffer {
Greg Daniel164a9f02016-02-22 09:56:40 -050018public:
Brian Salomon12d22642019-01-29 14:38:50 -050019 static sk_sp<GrVkTransferBuffer> Make(GrVkGpu* gpu, size_t size, GrVkBuffer::Type type);
Greg Daniel164a9f02016-02-22 09:56:40 -050020
21protected:
22 void onAbandon() override;
23 void onRelease() override;
24
25private:
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
cdalton397536c2016-03-25 12:15:03 -070031 void onMap() override {
Greg Daniel164a9f02016-02-22 09:56:40 -050032 if (!this->wasDestroyed()) {
Brian Salomondbf70722019-02-07 11:31:24 -050033 this->GrGpuBuffer::fMapPtr = this->vkMap(this->getVkGpu());
Greg Daniel164a9f02016-02-22 09:56:40 -050034 }
35 }
36
37 void onUnmap() override {
38 if (!this->wasDestroyed()) {
39 this->vkUnmap(this->getVkGpu());
40 }
41 }
42
cdalton397536c2016-03-25 12:15:03 -070043 bool onUpdateData(const void* src, size_t srcSizeInBytes) override {
Ben Wagnerb4aab9a2017-08-16 10:53:04 -040044 SK_ABORT("Not implemented for transfer buffers.");
cdalton397536c2016-03-25 12:15:03 -070045 return false;
46 }
47
Greg Daniel164a9f02016-02-22 09:56:40 -050048 GrVkGpu* getVkGpu() const {
49 SkASSERT(!this->wasDestroyed());
50 return reinterpret_cast<GrVkGpu*>(this->getGpu());
51 }
52
Brian Salomondbf70722019-02-07 11:31:24 -050053 typedef GrGpuBuffer INHERITED;
Greg Daniel164a9f02016-02-22 09:56:40 -050054};
55
56#endif