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 |