1 #ifndef _VKTAPIBUFFERANDIMAGEALLOCATIONUTIL_HPP
2 #define _VKTAPIBUFFERANDIMAGEALLOCATIONUTIL_HPP
3 /*------------------------------------------------------------------------
4  * Vulkan Conformance Tests
5  * ------------------------
6  *
7  * Copyright (c) 2017 The Khronos Group Inc.
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  *//*!
22  * \file
23  * \brief Utility classes for various kinds of allocation memory for buffers and images
24  *//*--------------------------------------------------------------------*/
25 
26 #include "deUniquePtr.hpp"
27 #include "vkDefs.hpp"
28 #include "vkRef.hpp"
29 #include "vktTestCase.hpp"
30 #include "tcuVectorType.hpp"
31 
32 namespace vk
33 {
34 class Allocator;
35 class MemoryRequirement;
36 class Allocation;
37 }
38 
39 namespace vkt
40 {
41 
42 namespace api
43 {
44 
45 using namespace vk;
46 
47 class IBufferAllocator
48 {
49 public:
50 	virtual void						createTestBuffer				(const DeviceInterface&		vk,
51 																		 VkDevice					vkDevice,
52 																		 deUint32					queueFamilyIndex,
53 																		 VkDeviceSize				size,
54 																		 VkBufferUsageFlags			usage,
55 																		 Context&					context,
56 																		 Allocator&					allocator,
57 																		 Move<VkBuffer>&			buffer,
58 																		 const MemoryRequirement&	requirement,
59 																		 de::MovePtr<Allocation>&	memory) const = 0;
60 };
61 
62 class BufferSuballocation : public IBufferAllocator
63 {
64 public:
65 	virtual void						createTestBuffer				(const DeviceInterface&		vk,
66 																		 VkDevice					vkDevice,
67 																		 deUint32					queueFamilyIndex,
68 																		 VkDeviceSize				size,
69 																		 VkBufferUsageFlags			usage,
70 																		 Context&					context,
71 																		 Allocator&					allocator,
72 																		 Move<VkBuffer>&			buffer,
73 																		 const MemoryRequirement&	requirement,
74 																		 de::MovePtr<Allocation>&	memory) const; // override
75 };
76 
77 class BufferDedicatedAllocation	: public IBufferAllocator
78 {
79 public:
80 	virtual void						createTestBuffer				(const DeviceInterface&		vk,
81 																		 VkDevice					vkDevice,
82 																		 deUint32					queueFamilyIndex,
83 																		 VkDeviceSize				size,
84 																		 VkBufferUsageFlags			usage,
85 																		 Context&					context,
86 																		 Allocator&					allocator,
87 																		 Move<VkBuffer>&			buffer,
88 																		 const MemoryRequirement&	requirement,
89 																		 de::MovePtr<Allocation>&	memory) const; // override
90 };
91 
92 class IImageAllocator
93 {
94 public:
95 	virtual void						createTestImage					(tcu::IVec2					size,
96 																		 VkFormat					format,
97 																		 Context&					context,
98 																		 Allocator&					allocator,
99 																		 Move<VkImage>&				image,
100 																		 const MemoryRequirement&	requirement,
101 																		 de::MovePtr<Allocation>&	memory,
102 																		 VkImageTiling				tiling = VK_IMAGE_TILING_OPTIMAL) const = 0;
103 };
104 
105 class ImageSuballocation : public IImageAllocator
106 {
107 public:
108 	virtual void						createTestImage					(tcu::IVec2					size,
109 																		 VkFormat					format,
110 																		 Context&					context,
111 																		 Allocator&					allocator,
112 																		 Move<VkImage>&				image,
113 																		 const MemoryRequirement&	requirement,
114 																		 de::MovePtr<Allocation>&	memory,
115 																		 VkImageTiling				tiling = VK_IMAGE_TILING_OPTIMAL) const; // override
116 };
117 
118 class ImageDedicatedAllocation	: public IImageAllocator
119 {
120 public:
121 	virtual void						createTestImage					(tcu::IVec2					size,
122 																		 VkFormat					format,
123 																		 Context&					context,
124 																		 Allocator&					allocator,
125 																		 Move<VkImage>&				image,
126 																		 const MemoryRequirement&	requirement,
127 																		 de::MovePtr<Allocation>&	memory,
128 																		 VkImageTiling				tiling = VK_IMAGE_TILING_OPTIMAL) const; // override
129 };
130 
131 } // api
132 } // vkt
133 
134 #endif // _VKTAPIBUFFERANDIMAGEALLOCATIONUTIL_HPP
135