• 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 
61 Move<VkPipeline> makeGraphicsPipeline (const DeviceInterface&							vk,
62 									   const VkDevice									device,
63 									   const VkPipelineLayout							pipelineLayout,
64 									   const VkShaderModule								vertexShaderModule,
65 									   const VkShaderModule								tessellationControlShaderModule,
66 									   const VkShaderModule								tessellationEvalShaderModule,
67 									   const VkShaderModule								geometryShaderModule,
68 									   const VkShaderModule								fragmentShaderModule,
69 									   const VkRenderPass								renderPass,
70 									   const deUint32									subpass = 0u,
71 									   const VkPipelineVertexInputStateCreateInfo*		vertexInputStateCreateInfo = DE_NULL,
72 									   const VkPipelineInputAssemblyStateCreateInfo*	inputAssemblyStateCreateInfo = DE_NULL,
73 									   const VkPipelineTessellationStateCreateInfo*		tessStateCreateInfo = DE_NULL,
74 									   const VkPipelineViewportStateCreateInfo*			viewportStateCreateInfo = DE_NULL,
75 									   const VkPipelineRasterizationStateCreateInfo*	rasterizationStateCreateInfo = DE_NULL,
76 									   const VkPipelineMultisampleStateCreateInfo*		multisampleStateCreateInfo = DE_NULL,
77 									   const VkPipelineDepthStencilStateCreateInfo*		depthStencilStateCreateInfo = DE_NULL,
78 									   const VkPipelineColorBlendStateCreateInfo*		colorBlendStateCreateInfo = DE_NULL,
79 									   const VkPipelineDynamicStateCreateInfo*			dynamicStateCreateInfo = DE_NULL);
80 
81 Move<VkRenderPass> makeRenderPass (const DeviceInterface&				vk,
82 								   const VkDevice						device,
83 								   const VkFormat						colorFormat					= VK_FORMAT_UNDEFINED,
84 								   const VkFormat						depthStencilFormat			= VK_FORMAT_UNDEFINED,
85 								   const VkAttachmentLoadOp				loadOperation				= VK_ATTACHMENT_LOAD_OP_CLEAR,
86 								   const VkImageLayout					finalLayoutColor			= VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
87 								   const VkImageLayout					finalLayoutDepthStencil		= VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
88 								   const VkImageLayout					subpassLayoutColor			= VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
89 								   const VkImageLayout					subpassLayoutDepthStencil	= VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
90 								   const VkAllocationCallbacks* const	allocationCallbacks			= DE_NULL);
91 
92 Move<VkImageView> makeImageView (const DeviceInterface&					vk,
93 								 const VkDevice							vkDevice,
94 								 const VkImage							image,
95 								 const VkImageViewType					imageViewType,
96 								 const VkFormat							format,
97 								 const VkImageSubresourceRange			subresourceRange,
98 								 const vk::VkImageViewUsageCreateInfo*	imageUsageCreateInfo = DE_NULL);
99 
100 Move<VkBufferView> makeBufferView (const DeviceInterface&	vk,
101 								   const VkDevice			vkDevice,
102 								   const VkBuffer			buffer,
103 								   const VkFormat			format,
104 								   const VkDeviceSize		offset,
105 								   const VkDeviceSize		size);
106 
107 Move<VkDescriptorSet> makeDescriptorSet (const DeviceInterface&			vk,
108 										 const VkDevice					device,
109 										 const VkDescriptorPool			descriptorPool,
110 										 const VkDescriptorSetLayout	setLayout,
111 										 const void*					pNext = DE_NULL);
112 
113 VkBufferCreateInfo makeBufferCreateInfo (const VkDeviceSize			size,
114 										 const VkBufferUsageFlags	usage);
115 
116 VkBufferCreateInfo makeBufferCreateInfo (const VkDeviceSize				size,
117 										 const VkBufferUsageFlags		usage,
118 										 const std::vector<deUint32>&	queueFamilyIndices);
119 
120 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&		vk,
121 										   const VkDevice				device,
122 										   const VkDescriptorSetLayout	descriptorSetLayout = DE_NULL);
123 
124 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&								vk,
125 										   const VkDevice										device,
126 										   const std::vector<vk::Move<VkDescriptorSetLayout>>	&descriptorSetLayouts);
127 
128 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&		vk,
129 										   const VkDevice				device,
130 										   const deUint32				setLayoutCount,
131 										   const VkDescriptorSetLayout*	descriptorSetLayout);
132 
133 Move<VkPipelineLayout> makePipelineLayout (const DeviceInterface&		vk,
134 										   const VkDevice				device,
135 										   const deUint32				setLayoutCount,
136 										   const VkDescriptorSetLayout*	descriptorSetLayout,
137 										   const deUint32               pushConstantRangeCount,
138 										   const VkPushConstantRange*   pPushConstantRanges);
139 
140 Move<VkFramebuffer> makeFramebuffer (const DeviceInterface&	vk,
141 									 const VkDevice			device,
142 									 const VkRenderPass		renderPass,
143 									 const VkImageView		colorAttachment,
144 									 const deUint32			width,
145 									 const deUint32			height,
146 									 const deUint32			layers = 1u);
147 
148 Move<VkFramebuffer> makeFramebuffer (const DeviceInterface&	vk,
149 									 const VkDevice			device,
150 									 const VkRenderPass		renderPass,
151 									 const deUint32			attachmentCount,
152 									 const VkImageView*		attachmentsArray,
153 									 const deUint32			width,
154 									 const deUint32			height,
155 									 const deUint32			layers = 1u);
156 
157 Move<VkCommandPool> makeCommandPool (const DeviceInterface&	vk,
158 									 const VkDevice			device,
159 									 const deUint32			queueFamilyIndex);
160 
makeBuffer(const DeviceInterface & vk,const VkDevice device,const VkDeviceSize bufferSize,const VkBufferUsageFlags usage)161 inline Move<VkBuffer> makeBuffer (const DeviceInterface&	vk,
162 								  const VkDevice			device,
163 								  const VkDeviceSize		bufferSize,
164 								  const VkBufferUsageFlags	usage)
165 {
166 	const VkBufferCreateInfo bufferCreateInfo = makeBufferCreateInfo(bufferSize, usage);
167 	return createBuffer(vk, device, &bufferCreateInfo);
168 }
169 
makeBuffer(const vk::DeviceInterface & vk,const vk::VkDevice device,const vk::VkBufferCreateInfo & createInfo)170 inline Move<VkBuffer> makeBuffer (const vk::DeviceInterface&	vk,
171 								  const vk::VkDevice			device,
172 								  const vk::VkBufferCreateInfo&	createInfo)
173 {
174 	return createBuffer(vk, device, &createInfo);
175 }
176 
makeImage(const DeviceInterface & vk,const VkDevice device,const VkImageCreateInfo & createInfo)177 inline Move<VkImage> makeImage (const DeviceInterface&		vk,
178 								const VkDevice				device,
179 								const VkImageCreateInfo&	createInfo)
180 {
181 	return createImage(vk, device, &createInfo);
182 }
183 
184 VkBufferImageCopy makeBufferImageCopy (const VkExtent3D					extent,
185 									   const VkImageSubresourceLayers	subresourceLayers);
186 
187 } // vk
188 
189 #endif // _VKOBJUTIL_HPP
190