Index: src/gpu/vk/GrVkTransferBuffer.cpp |
diff --git a/src/gpu/vk/GrVkTransferBuffer.cpp b/src/gpu/vk/GrVkTransferBuffer.cpp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..37306277642468905be01953fefa5be45f9d6690 |
--- /dev/null |
+++ b/src/gpu/vk/GrVkTransferBuffer.cpp |
@@ -0,0 +1,58 @@ |
+/* |
+* Copyright 2015 Google Inc. |
+* |
+* Use of this source code is governed by a BSD-style license that can be |
+* found in the LICENSE file. |
+*/ |
+ |
+#include "GrVkTransferBuffer.h" |
+#include "GrVkGpu.h" |
+#include "SkTraceMemoryDump.h" |
+ |
+ |
+GrVkTransferBuffer* GrVkTransferBuffer::Create(GrVkGpu* gpu, size_t size, GrVkBuffer::Type type) { |
+ GrVkBuffer::Desc desc; |
+ desc.fDynamic = false; |
+ SkASSERT(GrVkBuffer::kCopyRead_Type == type || GrVkBuffer::kCopyWrite_Type == type); |
+ desc.fType = type; |
+ desc.fSizeInBytes = size; |
+ |
+ const GrVkBuffer::Resource* bufferResource = GrVkBuffer::Create(gpu, desc); |
+ if (!bufferResource) { |
+ return nullptr; |
+ } |
+ |
+ GrVkTransferBuffer* buffer = new GrVkTransferBuffer(gpu, desc, bufferResource); |
+ if (!buffer) { |
+ bufferResource->unref(gpu); |
+ } |
+ return buffer; |
+} |
+ |
+GrVkTransferBuffer::GrVkTransferBuffer(GrVkGpu* gpu, const GrVkBuffer::Desc& desc, |
+ const GrVkBuffer::Resource* bufferResource) |
+ : INHERITED(gpu, desc.fSizeInBytes) |
+ , GrVkBuffer(desc, bufferResource) { |
+ this->registerWithCache(); |
+} |
+ |
+void GrVkTransferBuffer::onRelease() { |
+ if (!this->wasDestroyed()) { |
+ this->vkRelease(this->getVkGpu()); |
+ } |
+ |
+ INHERITED::onRelease(); |
+} |
+ |
+void GrVkTransferBuffer::onAbandon() { |
+ this->vkAbandon(); |
+ INHERITED::onAbandon(); |
+} |
+ |
+void GrVkTransferBuffer::setMemoryBacking(SkTraceMemoryDump* traceMemoryDump, |
+ const SkString& dumpName) const { |
+ SkString buffer_id; |
+ buffer_id.appendU64((uint64_t)this->buffer()); |
+ traceMemoryDump->setMemoryBacking(dumpName.c_str(), "vk_buffer", |
+ buffer_id.c_str()); |
+} |