1 /* 2 * Copyright 2021 Google LLC 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 GrVkBuffer_DEFINED 9 #define GrVkBuffer_DEFINED 10 11 #include "include/gpu/vk/GrVkTypes.h" 12 #include "src/gpu/GrGpuBuffer.h" 13 14 class GrVkDescriptorSet; 15 class GrVkGpu; 16 17 class GrVkBuffer : public GrGpuBuffer { 18 public: 19 static sk_sp<GrVkBuffer> Make(GrVkGpu* gpu, 20 size_t size, 21 GrGpuBufferType bufferType, 22 GrAccessPattern accessPattern); 23 24 static sk_sp<GrVkBuffer> MakeFromOHNativeBuffer(GrVkGpu* gpu, 25 OH_NativeBuffer *nativeBuffer, 26 size_t bufferSize, 27 GrGpuBufferType bufferType, 28 GrAccessPattern accessPattern); 29 30 // OH ISSUE: Integrate Destroy and Free 31 static void DestroyAndFreeBufferMemory(const GrVkGpu* gpu, const GrVkAlloc& alloc, const VkBuffer& buffer); 32 vkBuffer() const33 VkBuffer vkBuffer() const { return fBuffer; } 34 35 void addMemoryBarrier(VkAccessFlags srcAccessMask, 36 VkAccessFlags dstAccesMask, 37 VkPipelineStageFlags srcStageMask, 38 VkPipelineStageFlags dstStageMask, 39 bool byRegion) const; 40 41 // If the buffer is a uniform buffer, return the descriptor set for that buffer. It is not valid 42 // to call this on non uniform buffers. 43 const VkDescriptorSet* uniformDescriptorSet() const; 44 45 private: 46 GrVkBuffer(GrVkGpu* gpu, 47 size_t sizeInBytes, 48 GrGpuBufferType bufferType, 49 GrAccessPattern accessPattern, 50 VkBuffer buffer, 51 const GrVkAlloc& alloc, 52 const GrVkDescriptorSet* uniformDescriptorSet); 53 isVkMappable() const54 bool isVkMappable() const { return fAlloc.fFlags & GrVkAlloc::kMappable_Flag; } 55 vkIsMapped() const56 bool vkIsMapped() const { return SkToBool(fMapPtr); } 57 void vkMap(size_t size); 58 void vkUnmap(size_t size); 59 void copyCpuDataToGpuBuffer(const void* srcData, size_t size); 60 61 62 void onMap() override; 63 void onUnmap() override; 64 bool onUpdateData(const void* src, size_t srcSizeInBytes) override; 65 66 void vkRelease(); 67 68 void onAbandon() override; 69 void onRelease() override; 70 71 GrVkGpu* getVkGpu() const; 72 73 VkBuffer fBuffer; 74 GrVkAlloc fAlloc; 75 76 const GrVkDescriptorSet* fUniformDescriptorSet; 77 78 using INHERITED = GrGpuBuffer; 79 }; 80 81 #endif 82