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