OLD | NEW |
(Empty) | |
| 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 GrVkBuffer_DEFINED |
| 9 #define GrVkBuffer_DEFINED |
| 10 |
| 11 #include "vk/GrVkInterface.h" |
| 12 #include "GrVkResource.h" |
| 13 |
| 14 class GrVkGpu; |
| 15 |
| 16 /** |
| 17 * This class serves as the base of GrVk*Buffer classes. It was written to avoid
code |
| 18 * duplication in those classes. |
| 19 */ |
| 20 class GrVkBuffer : public SkNoncopyable { |
| 21 public: |
| 22 ~GrVkBuffer() { |
| 23 // either release or abandon should have been called by the owner of thi
s object. |
| 24 SkASSERT(!fResource); |
| 25 } |
| 26 |
| 27 VkBuffer buffer() const { return fResource->fBuffer; } |
| 28 VkDeviceMemory alloc() const { return fResource->fAlloc; } |
| 29 const GrVkResource* resource() const { return fResource; } |
| 30 size_t size() const { return fDesc.fSizeInBytes; } |
| 31 |
| 32 void addMemoryBarrier(const GrVkGpu* gpu, |
| 33 VkAccessFlags srcAccessMask, |
| 34 VkAccessFlags dstAccessMask, |
| 35 VkPipelineStageFlags srcStageMask, |
| 36 VkPipelineStageFlags dstStageMask, |
| 37 bool byRegion) const; |
| 38 |
| 39 enum Type { |
| 40 kVertex_Type, |
| 41 kIndex_Type, |
| 42 kUniform_Type, |
| 43 kCopyRead_Type, |
| 44 kCopyWrite_Type, |
| 45 }; |
| 46 |
| 47 protected: |
| 48 struct Desc { |
| 49 size_t fSizeInBytes; |
| 50 Type fType; // vertex buffer, index buffer, etc. |
| 51 bool fDynamic; |
| 52 }; |
| 53 |
| 54 class Resource : public GrVkResource { |
| 55 public: |
| 56 Resource(VkBuffer buf, VkDeviceMemory alloc) : INHERITED(), fBuffer(buf)
, fAlloc(alloc) {} |
| 57 |
| 58 VkBuffer fBuffer; |
| 59 VkDeviceMemory fAlloc; |
| 60 private: |
| 61 void freeGPUData(const GrVkGpu* gpu) const; |
| 62 |
| 63 typedef GrVkResource INHERITED; |
| 64 }; |
| 65 |
| 66 // convenience routine for raw buffer creation |
| 67 static const Resource* Create(const GrVkGpu* gpu, |
| 68 const Desc& descriptor); |
| 69 |
| 70 GrVkBuffer(const Desc& desc, const GrVkBuffer::Resource* resource) |
| 71 : fDesc(desc), fResource(resource), fMapPtr(nullptr) { |
| 72 } |
| 73 |
| 74 void* vkMap(const GrVkGpu* gpu); |
| 75 void vkUnmap(const GrVkGpu* gpu); |
| 76 bool vkUpdateData(const GrVkGpu* gpu, const void* src, size_t srcSizeInBytes
); |
| 77 |
| 78 void vkAbandon(); |
| 79 void vkRelease(const GrVkGpu* gpu); |
| 80 |
| 81 private: |
| 82 void validate() const; |
| 83 bool vkIsMapped() const; |
| 84 |
| 85 Desc fDesc; |
| 86 const Resource* fResource; |
| 87 void* fMapPtr; |
| 88 |
| 89 typedef SkRefCnt INHERITED; |
| 90 }; |
| 91 |
| 92 #endif |
OLD | NEW |