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