GrVkTransferBuffer.cpp 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. #include "include/core/SkTraceMemoryDump.h"
  8. #include "src/gpu/vk/GrVkGpu.h"
  9. #include "src/gpu/vk/GrVkTransferBuffer.h"
  10. sk_sp<GrVkTransferBuffer> GrVkTransferBuffer::Make(GrVkGpu* gpu, size_t size,
  11. GrVkBuffer::Type type) {
  12. GrVkBuffer::Desc desc;
  13. desc.fDynamic = true;
  14. SkASSERT(GrVkBuffer::kCopyRead_Type == type || GrVkBuffer::kCopyWrite_Type == type);
  15. desc.fType = type;
  16. desc.fSizeInBytes = size;
  17. const GrVkBuffer::Resource* bufferResource = GrVkBuffer::Create(gpu, desc);
  18. if (!bufferResource) {
  19. return nullptr;
  20. }
  21. GrVkTransferBuffer* buffer = new GrVkTransferBuffer(gpu, desc, bufferResource);
  22. if (!buffer) {
  23. bufferResource->unref(gpu);
  24. }
  25. return sk_sp<GrVkTransferBuffer>(buffer);
  26. }
  27. GrVkTransferBuffer::GrVkTransferBuffer(GrVkGpu* gpu, const GrVkBuffer::Desc& desc,
  28. const GrVkBuffer::Resource* bufferResource)
  29. : INHERITED(gpu, desc.fSizeInBytes,
  30. kCopyRead_Type == desc.fType ? GrGpuBufferType::kXferCpuToGpu
  31. : GrGpuBufferType::kXferGpuToCpu,
  32. kStream_GrAccessPattern)
  33. , GrVkBuffer(desc, bufferResource) {
  34. this->registerWithCache(SkBudgeted::kYes);
  35. }
  36. void GrVkTransferBuffer::onRelease() {
  37. if (!this->wasDestroyed()) {
  38. this->vkRelease(this->getVkGpu());
  39. }
  40. INHERITED::onRelease();
  41. }
  42. void GrVkTransferBuffer::onAbandon() {
  43. this->vkAbandon();
  44. INHERITED::onAbandon();
  45. }
  46. void GrVkTransferBuffer::setMemoryBacking(SkTraceMemoryDump* traceMemoryDump,
  47. const SkString& dumpName) const {
  48. SkString buffer_id;
  49. buffer_id.appendU64((uint64_t)this->buffer());
  50. traceMemoryDump->setMemoryBacking(dumpName.c_str(), "vk_buffer",
  51. buffer_id.c_str());
  52. }