• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _VKOBJUTIL_HPP
2 #define _VKOBJUTIL_HPP
3 /*-------------------------------------------------------------------------
4  * Vulkan CTS Framework
5  * --------------------
6  *
7  * Copyright (c) 2015 Google 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 Utilities for creating commonly used Vulkan objects
24  *//*--------------------------------------------------------------------*/
25 
26 #include <vector>
27 #include "vkRef.hpp"
28 #include "vkRefUtil.hpp"
29 
30 namespace vk
31 {
32 Move<VkPipeline> makeComputePipeline (const DeviceInterface&					vk,
33 									  const VkDevice							device,
34 									  const VkPipelineLayout					pipelineLayout,
35 									  const VkPipelineCreateFlags				pipelineFlags,
36 									  const VkShaderModule						shaderModule,
37 									  const VkPipelineShaderStageCreateFlags	shaderFlags,
38 									  const VkSpecializationInfo*				specializationInfo);
39 
40 Move<VkPipeline> makeGraphicsPipeline (const DeviceInterface&							vk,
41 									   const VkDevice									device,
42 									   const VkPipelineLayout							pipelineLayout,
43 									   const VkShaderModule								vertexShaderModule,
44 									   const VkShaderModule								tessellationControlShaderModule,
45 									   const VkShaderModule								tessellationEvalShaderModule,
46 									   const VkShaderModule								geometryShaderModule,
47 									   const VkShaderModule								fragmentShaderModule,
48 									   const VkRenderPass								renderPass,
49 									   const std::vector<VkViewport>&					viewports,
50 									   const std::vector<VkRect2D>&						scissors,
51 									   const VkPrimitiveTopology						topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST,
52 									   const deUint32									subpass = 0u,
53 									   const deUint32									patchControlPoints = 0u,
54 									   const VkPipelineVertexInputStateCreateInfo*		vertexInputStateCreateInfo = DE_NULL,
55 									   const VkPipelineRasterizationStateCreateInfo*	rasterizationStateCreateInfo = DE_NULL,
56 									   const VkPipelineMultisampleStateCreateInfo*		multisampleStateCreateInfo = DE_NULL,
57 									   const VkPipelineDepthStencilStateCreateInfo*		depthStencilStateCreateInfo = DE_NULL,
58 									   const VkPipelineColorBlendStateCreateInfo*		colorBlendStateCreateInfo = DE_NULL,
59 									   const VkPipelineDynamicStateCreateInfo*			dynamicStateCreateInfo = DE_NULL,
60 									   const void*										pNext = DE_NULL);
61 
62 Move<VkPipeline> makeGraphicsPipeline (const DeviceInterface&							vk,
63 									   const VkDevice									device,
64 									   const VkPipelineLayout							pipelineLayout,
65 									   const VkShaderModule								vertexShaderModule,
66 									   const VkShaderModule								tessellationControlShaderModule,
67 									   const VkShaderModule								tessellationEvalShaderModule,
68 									   const VkShaderModule								geometryShaderModule,
69 									   const VkShaderModule								fragmentShaderModule,
70 									   const VkRenderPass								renderPass,
71 									   const deUint32									subpass = 0u,
72 									   const VkPipelineVertexInputStateCreateInfo*		vertexInputStateCreateInfo = DE_NULL,
73 									   const VkPipelineInputAssemblyStateCreateInfo*	inputAssemblyStateCreateInfo = DE_NULL,
74 									   const VkPipelineTessellationStateCreateInfo*		tessStateCreateInfo = DE_NULL,
75 									   const VkPipelineViewportStateCreateInfo*			viewportStateCreateInfo = DE_NULL,
76 									   const VkPipelineRasterizationStateCreateInfo*	rasterizationStateCreateInfo = DE_NULL,
77 									   const VkPipelineMultisampleStateCreateInfo*		multisampleStateCreateInfo = DE_NULL,
78 									   const VkPipelineDepthStencilStateCreateInfo*		depthStencilStateCreateInfo = DE_NULL,
79 									   const VkPipelineColorBlendStateCreateInfo*		colorBlendStateCreateInfo = DE_NULL,
80 									   const VkPipelineDynamicStateCreateInfo*			dynamicStateCreateInfo = DE_NULL,
81 									   const void*										pNext = DE_NULL);
82 
83 Move<VkPipeline> makeGraphicsPipeline (const DeviceInterface&							vk,
84 									   const VkDevice									device,
85 									   const VkPipelineLayout							pipelineLayout,
86 									   const VkShaderModule								taskShaderModule,
87 									   const VkShaderModule								meshShaderModule,
88 									   const VkShaderModule								fragmentShaderModule,
89 									   const VkRenderPass								renderPass,
90 									   const std::vector<VkViewport>&					viewports,
91 									   const std::vector<VkRect2D>&						scissors,
92 									   const deUint32									subpass = 0u,
93 									   const VkPipelineRasterizationStateCreateInfo*	rasterizationStateCreateInfo = nullptr,
94 									   const VkPipelineMultisampleStateCreateInfo*		multisampleStateCreateInfo = nullptr,
95 									   const VkPipelineDepthStencilStateCreateInfo*		depthStencilStateCreateInfo = nullptr,
96 									   const VkPipelineColorBlendStateCreateInfo*		colorBlendStateCreateInfo = nullptr,
97 									   const VkPipelineDynamicStateCreateInfo*			dynamicStateCreateInfo = nullptr);
98 
99 Move<VkRenderPass> makeRenderPass (const DeviceInterface&				vk,
100 								   const VkDevice						device,
101 								   const VkFormat						colorFormat					= VK_FORMAT_UNDEFINED,
102 								   const VkFormat						depthStencilFormat			= VK_FORMAT_UNDEFINED,
103 								   const VkAttachmentLoadOp				loadOperation				= VK_ATTACHMENT_LOAD_OP_CLEAR,
104 								   const VkImageLayout					finalLayoutColor			= VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
105 								   const VkImageLayout					finalLayoutDepthStencil		= VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
106 								   const VkImageLayout					subpassLayoutColor			= VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
107 								   const VkImageLayout					subpassLayoutDepthStencil	= VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
108 								   const VkAllocationCallbacks* const	allocationCallbacks			= DE_NULL);
109 
110 Move<VkImageView> makeImageView (const DeviceInterface&					vk,
111 								 const VkDevice							vkDevice,
112 								 const VkImage							image,
113 								 const VkImageViewType					imageViewType,
114 								 const VkFormat							format,
115 								 const VkImageSubresourceRange			subresourceRange,
116 								 const vk::VkImageViewUsageCreateInfo*	imageUsageCreateInfo = DE_NULL);
117 
118 Move<VkBufferView> makeBufferView (const DeviceInterface&	vk,
119 								   const VkDevice			vkDevice,
120 								   const VkBuffer			buffer,
121 								   const VkFormat			format,
122 								   const VkDeviceSize		offset,
123 								   const VkDeviceSize		size);
124 
125 Move<VkDescriptorSet> makeDescriptorSet (const DeviceInterface&			vk,
126 										 const VkDevice					device,
127 										 const VkDescriptorPool			descriptorPool,
128 										 const VkDescriptorSetLayout	setLayout,
129 										 const void*					pNext = DE_NULL);
130 
131 VkBufferCreateInfo makeBufferCreateInfo (const VkDeviceSize			size,
132 										 const VkBufferUsageFlags	usage);
133 
134 VkBufferCreateInfo makeBufferCreateInfo (const VkDeviceSize				size,
135 										 const VkBufferUsageFlags		usage,
136 										 const std::vector<deUint32>&	queueFamilyIndices);
137 
138 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&		vk,
139 										   const VkDevice				device,
140 										   const VkDescriptorSetLayout	descriptorSetLayout = DE_NULL);
141 
142 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&								vk,
143 										   const VkDevice										device,
144 										   const std::vector<vk::Move<VkDescriptorSetLayout>>	&descriptorSetLayouts);
145 
146 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&		vk,
147 										   const VkDevice				device,
148 										   const deUint32				setLayoutCount,
149 										   const VkDescriptorSetLayout*	descriptorSetLayout);
150 
151 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&		vk,
152 										   const VkDevice				device,
153 										   const deUint32				setLayoutCount,
154 										   const VkDescriptorSetLayout*	descriptorSetLayout,
155 										   const deUint32               pushConstantRangeCount,
156 										   const VkPushConstantRange*   pPushConstantRanges);
157 
158 Move<VkFramebuffer> makeFramebuffer (const DeviceInterface&	vk,
159 									 const VkDevice			device,
160 									 const VkRenderPass		renderPass,
161 									 const VkImageView		colorAttachment,
162 									 const deUint32			width,
163 									 const deUint32			height,
164 									 const deUint32			layers = 1u);
165 
166 Move<VkFramebuffer> makeFramebuffer (const DeviceInterface&	vk,
167 									 const VkDevice			device,
168 									 const VkRenderPass		renderPass,
169 									 const deUint32			attachmentCount,
170 									 const VkImageView*		attachmentsArray,
171 									 const deUint32			width,
172 									 const deUint32			height,
173 									 const deUint32			layers = 1u);
174 
175 Move<VkCommandPool> makeCommandPool (const DeviceInterface&	vk,
176 									 const VkDevice			device,
177 									 const deUint32			queueFamilyIndex);
178 
makeBuffer(const DeviceInterface & vk,const VkDevice device,const VkDeviceSize bufferSize,const VkBufferUsageFlags usage)179 inline Move<VkBuffer> makeBuffer (const DeviceInterface&	vk,
180 								  const VkDevice			device,
181 								  const VkDeviceSize		bufferSize,
182 								  const VkBufferUsageFlags	usage)
183 {
184 	const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(bufferSize, usage);
185 	return createBuffer(vk, device, &bufferCreateInfo);
186 }
187 
makeBuffer(const vk::DeviceInterface & vk,const vk::VkDevice device,const vk::VkBufferCreateInfo & createInfo)188 inline Move<VkBuffer> makeBuffer (const vk::DeviceInterface&	vk,
189 								  const vk::VkDevice			device,
190 								  const vk::VkBufferCreateInfo&	createInfo)
191 {
192 	return createBuffer(vk, device, &createInfo);
193 }
194 
makeImage(const DeviceInterface & vk,const VkDevice device,const VkImageCreateInfo & createInfo)195 inline Move<VkImage> makeImage (const DeviceInterface&		vk,
196 								const VkDevice				device,
197 								const VkImageCreateInfo&	createInfo)
198 {
199 	return createImage(vk, device, &createInfo);
200 }
201 
202 VkBufferImageCopy makeBufferImageCopy (const VkExtent3D					extent,
203 									   const VkImageSubresourceLayers	subresourceLayers);
204 
205 } // vk
206 
207 #endif // _VKOBJUTIL_HPP
208