1 #ifndef _VKTDRAWCREATEINFOUTIL_HPP
2 #define _VKTDRAWCREATEINFOUTIL_HPP
3 /*------------------------------------------------------------------------
4 * Vulkan Conformance Tests
5 * ------------------------
7 * Copyright (c) 2015 The Khronos Group Inc.
8 * Copyright (c) 2015 Intel Corporation
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
24 * \brief CreateInfo utilities
25 *//*--------------------------------------------------------------------*/
28 #include "tcuVector.hpp"
29 #include "deSharedPtr.hpp"
37 class ImageSubresourceRange : public vk::VkImageSubresourceRange
40 ImageSubresourceRange (vk::VkImageAspectFlags aspectMask,
41 deUint32 baseMipLevel = 0,
42 deUint32 levelCount = 1,
43 deUint32 baseArrayLayer = 0,
44 deUint32 layerCount = 1);
47 class ComponentMapping : public vk::VkComponentMapping
50 ComponentMapping (vk::VkComponentSwizzle r = vk::VK_COMPONENT_SWIZZLE_R,
51 vk::VkComponentSwizzle g = vk::VK_COMPONENT_SWIZZLE_G,
52 vk::VkComponentSwizzle b = vk::VK_COMPONENT_SWIZZLE_B,
53 vk::VkComponentSwizzle a = vk::VK_COMPONENT_SWIZZLE_A);
56 class ImageViewCreateInfo : public vk::VkImageViewCreateInfo
59 ImageViewCreateInfo (vk::VkImage image,
60 vk::VkImageViewType viewType,
62 const vk::VkImageSubresourceRange& subresourceRange,
63 const vk::VkComponentMapping& components = ComponentMapping(),
64 vk::VkImageViewCreateFlags flags = 0);
66 ImageViewCreateInfo (vk::VkImage image,
67 vk::VkImageViewType viewType,
69 const vk::VkComponentMapping& components = ComponentMapping(),
70 vk::VkImageViewCreateFlags flags = 0);
73 class BufferViewCreateInfo : public vk::VkBufferViewCreateInfo
76 BufferViewCreateInfo (vk::VkBuffer buffer,
78 vk::VkDeviceSize offset,
79 vk::VkDeviceSize range);
82 class BufferCreateInfo : public vk::VkBufferCreateInfo
85 BufferCreateInfo (vk::VkDeviceSize size,
86 vk::VkBufferCreateFlags usage,
87 vk::VkSharingMode sharingMode = vk::VK_SHARING_MODE_EXCLUSIVE,
88 deUint32 queueFamilyIndexCount = 0,
89 const deUint32* pQueueFamilyIndices = DE_NULL,
90 vk::VkBufferCreateFlags flags = 0);
92 BufferCreateInfo (const BufferCreateInfo& other);
93 BufferCreateInfo& operator= (const BufferCreateInfo& other);
96 std::vector<deUint32> m_queueFamilyIndices;
99 class ImageCreateInfo : public vk::VkImageCreateInfo
102 ImageCreateInfo (vk::VkImageType imageType,
104 vk::VkExtent3D extent,
106 deUint32 arrayLayers,
107 vk::VkSampleCountFlagBits samples,
108 vk::VkImageTiling tiling,
109 vk::VkImageUsageFlags usage,
110 vk::VkSharingMode sharingMode = vk::VK_SHARING_MODE_EXCLUSIVE,
111 deUint32 queueFamilyIndexCount = 0,
112 const deUint32* pQueueFamilyIndices = DE_NULL,
113 vk::VkImageCreateFlags flags = 0,
114 vk::VkImageLayout initialLayout = vk::VK_IMAGE_LAYOUT_UNDEFINED);
117 ImageCreateInfo (const ImageCreateInfo& other);
118 ImageCreateInfo& operator= (const ImageCreateInfo& other);
120 std::vector<deUint32> m_queueFamilyIndices;
123 class FramebufferCreateInfo : public vk::VkFramebufferCreateInfo
126 FramebufferCreateInfo (vk::VkRenderPass renderPass,
127 const std::vector<vk::VkImageView>& attachments,
133 class AttachmentDescription : public vk::VkAttachmentDescription
136 AttachmentDescription (vk::VkFormat format,
137 vk::VkSampleCountFlagBits samples,
138 vk::VkAttachmentLoadOp loadOp,
139 vk::VkAttachmentStoreOp storeOp,
140 vk::VkAttachmentLoadOp stencilLoadOp,
141 vk::VkAttachmentStoreOp stencilStoreOp,
142 vk::VkImageLayout initialLayout,
143 vk::VkImageLayout finalLayout);
145 AttachmentDescription (const vk::VkAttachmentDescription &);
148 class AttachmentReference : public vk::VkAttachmentReference
151 AttachmentReference (deUint32 attachment, vk::VkImageLayout layout);
152 AttachmentReference (void);
155 class SubpassDescription : public vk::VkSubpassDescription
158 SubpassDescription (vk::VkPipelineBindPoint pipelineBindPoint,
159 vk::VkSubpassDescriptionFlags flags,
160 deUint32 inputAttachmentCount,
161 const vk::VkAttachmentReference* inputAttachments,
162 deUint32 colorAttachmentCount,
163 const vk::VkAttachmentReference* colorAttachments,
164 const vk::VkAttachmentReference* resolveAttachments,
165 vk::VkAttachmentReference depthStencilAttachment,
166 deUint32 preserveAttachmentCount,
167 const deUint32* preserveAttachments);
169 SubpassDescription (const vk::VkSubpassDescription& other);
170 SubpassDescription (const SubpassDescription& other);
171 SubpassDescription& operator= (const SubpassDescription& other);
174 std::vector<vk::VkAttachmentReference> m_inputAttachments;
175 std::vector<vk::VkAttachmentReference> m_colorAttachments;
176 std::vector<vk::VkAttachmentReference> m_resolveAttachments;
177 std::vector<deUint32> m_preserveAttachments;
179 vk::VkAttachmentReference m_depthStencilAttachment;
182 class SubpassDependency : public vk::VkSubpassDependency
185 SubpassDependency ( deUint32 srcSubpass,
187 vk::VkPipelineStageFlags srcStageMask,
188 vk::VkPipelineStageFlags dstStageMask,
189 vk::VkAccessFlags srcAccessMask,
190 vk::VkAccessFlags dstAccessMask,
191 vk::VkDependencyFlags dependencyFlags);
193 SubpassDependency (const vk::VkSubpassDependency& other);
196 class RenderPassCreateInfo : public vk::VkRenderPassCreateInfo
199 RenderPassCreateInfo (const std::vector<vk::VkAttachmentDescription>& attachments,
200 const std::vector<vk::VkSubpassDescription>& subpasses,
201 const std::vector<vk::VkSubpassDependency>& dependiences = std::vector<vk::VkSubpassDependency>());
203 RenderPassCreateInfo (deUint32 attachmentCount = 0,
204 const vk::VkAttachmentDescription* pAttachments = DE_NULL,
205 deUint32 subpassCount = 0,
206 const vk::VkSubpassDescription* pSubpasses = DE_NULL,
207 deUint32 dependencyCount = 0,
208 const vk::VkSubpassDependency* pDependiences = DE_NULL);
210 void addAttachment (vk::VkAttachmentDescription attachment);
211 void addSubpass (vk::VkSubpassDescription subpass);
212 void addDependency (vk::VkSubpassDependency dependency);
215 std::vector<AttachmentDescription> m_attachments;
216 std::vector<SubpassDescription> m_subpasses;
217 std::vector<SubpassDependency> m_dependiences;
219 std::vector<vk::VkAttachmentDescription> m_attachmentsStructs;
220 std::vector<vk::VkSubpassDescription> m_subpassesStructs;
221 std::vector<vk::VkSubpassDependency> m_dependiencesStructs;
223 RenderPassCreateInfo (const RenderPassCreateInfo &other); //Not allowed!
224 RenderPassCreateInfo& operator= (const RenderPassCreateInfo &other); //Not allowed!
227 class RenderPassBeginInfo : public vk::VkRenderPassBeginInfo
230 RenderPassBeginInfo (vk::VkRenderPass renderPass,
231 vk::VkFramebuffer framebuffer,
232 vk::VkRect2D renderArea,
233 const std::vector<vk::VkClearValue>& clearValues = std::vector<vk::VkClearValue>());
236 std::vector<vk::VkClearValue> m_clearValues;
238 RenderPassBeginInfo (const RenderPassBeginInfo& other); //Not allowed!
239 RenderPassBeginInfo& operator= (const RenderPassBeginInfo& other); //Not allowed!
242 class CmdPoolCreateInfo : public vk::VkCommandPoolCreateInfo
245 CmdPoolCreateInfo (deUint32 queueFamilyIndex,
246 vk::VkCommandPoolCreateFlags flags = vk::VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
249 class CmdBufferBeginInfo : public vk::VkCommandBufferBeginInfo
252 CmdBufferBeginInfo (vk::VkCommandBufferUsageFlags flags = 0);
255 class DescriptorPoolSize : public vk::VkDescriptorPoolSize
258 DescriptorPoolSize (vk::VkDescriptorType _type, deUint32 _descriptorCount)
261 descriptorCount = _descriptorCount;
265 class DescriptorPoolCreateInfo : public vk::VkDescriptorPoolCreateInfo
268 DescriptorPoolCreateInfo (const std::vector<vk::VkDescriptorPoolSize>& poolSizeCounts,
269 vk::VkDescriptorPoolCreateFlags flags,
272 DescriptorPoolCreateInfo& addDescriptors (vk::VkDescriptorType type, deUint32 count);
275 std::vector<vk::VkDescriptorPoolSize> m_poolSizeCounts;
278 class DescriptorSetLayoutCreateInfo : public vk::VkDescriptorSetLayoutCreateInfo
281 DescriptorSetLayoutCreateInfo (deUint32 bindingCount, const vk::VkDescriptorSetLayoutBinding* pBindings);
284 class PipelineLayoutCreateInfo : public vk::VkPipelineLayoutCreateInfo
287 PipelineLayoutCreateInfo (deUint32 descriptorSetCount,
288 const vk::VkDescriptorSetLayout* pSetLayouts,
289 deUint32 pushConstantRangeCount = 0,
290 const vk::VkPushConstantRange* pPushConstantRanges = DE_NULL);
292 PipelineLayoutCreateInfo (const std::vector<vk::VkDescriptorSetLayout>& setLayouts = std::vector<vk::VkDescriptorSetLayout>(),
293 deUint32 pushConstantRangeCount = 0,
294 const vk::VkPushConstantRange* pPushConstantRanges = DE_NULL);
297 std::vector<vk::VkDescriptorSetLayout> m_setLayouts;
298 std::vector<vk::VkPushConstantRange> m_pushConstantRanges;
301 class PipelineCreateInfo : public vk::VkGraphicsPipelineCreateInfo
304 class VertexInputState : public vk::VkPipelineVertexInputStateCreateInfo
307 VertexInputState (deUint32 vertexBindingDescriptionCount = 0,
308 const vk::VkVertexInputBindingDescription* pVertexBindingDescriptions = NULL,
309 deUint32 vertexAttributeDescriptionCount = 0,
310 const vk::VkVertexInputAttributeDescription* pVertexAttributeDescriptions = NULL);
313 class InputAssemblerState : public vk::VkPipelineInputAssemblyStateCreateInfo
316 InputAssemblerState (vk::VkPrimitiveTopology topology, vk::VkBool32 primitiveRestartEnable = false);
319 class TessellationState : public vk::VkPipelineTessellationStateCreateInfo
322 TessellationState (deUint32 patchControlPoints = 0);
325 class ViewportState : public vk::VkPipelineViewportStateCreateInfo
328 ViewportState (deUint32 viewportCount,
329 std::vector<vk::VkViewport> viewports = std::vector<vk::VkViewport>(0),
330 std::vector<vk::VkRect2D> scissors = std::vector<vk::VkRect2D>(0));
332 ViewportState (const ViewportState& other);
333 ViewportState& operator= (const ViewportState& other);
335 std::vector<vk::VkViewport> m_viewports;
336 std::vector<vk::VkRect2D> m_scissors;
339 class RasterizerState : public vk::VkPipelineRasterizationStateCreateInfo
342 RasterizerState (vk::VkBool32 depthClampEnable = false,
343 vk::VkBool32 rasterizerDiscardEnable = false,
344 vk::VkPolygonMode polygonMode = vk::VK_POLYGON_MODE_FILL,
345 vk::VkCullModeFlags cullMode = vk::VK_CULL_MODE_NONE,
346 vk::VkFrontFace frontFace = vk::VK_FRONT_FACE_CLOCKWISE,
347 vk::VkBool32 depthBiasEnable = true,
348 float depthBiasConstantFactor = 0.0f,
349 float depthBiasClamp = 0.0f,
350 float depthBiasSlopeFactor = 0.0f,
351 float lineWidth = 1.0f);
354 class MultiSampleState : public vk::VkPipelineMultisampleStateCreateInfo
357 MultiSampleState (vk::VkSampleCountFlagBits rasterizationSamples = vk::VK_SAMPLE_COUNT_1_BIT,
358 vk::VkBool32 sampleShadingEnable = false,
359 float minSampleShading = 0.0f,
360 const std::vector<vk::VkSampleMask>& sampleMask = std::vector<vk::VkSampleMask>(1, 0xffffffffu),
361 bool alphaToCoverageEnable = false,
362 bool alphaToOneEnable = false);
364 MultiSampleState (const MultiSampleState& other);
365 MultiSampleState& operator= (const MultiSampleState& other);
368 std::vector<vk::VkSampleMask> m_sampleMask;
371 class ColorBlendState : public vk::VkPipelineColorBlendStateCreateInfo
374 class Attachment : public vk::VkPipelineColorBlendAttachmentState
377 Attachment (vk::VkBool32 blendEnable = false,
378 vk::VkBlendFactor srcColorBlendFactor = vk::VK_BLEND_FACTOR_SRC_COLOR,
379 vk::VkBlendFactor dstColorBlendFactor = vk::VK_BLEND_FACTOR_DST_COLOR,
380 vk::VkBlendOp colorBlendOp = vk::VK_BLEND_OP_ADD,
381 vk::VkBlendFactor srcAlphaBlendFactor = vk::VK_BLEND_FACTOR_SRC_COLOR,
382 vk::VkBlendFactor dstAlphaBlendFactor = vk::VK_BLEND_FACTOR_DST_COLOR,
383 vk::VkBlendOp alphaBlendOp = vk::VK_BLEND_OP_ADD,
384 vk::VkColorComponentFlags colorWriteMask = vk::VK_COLOR_COMPONENT_R_BIT|
385 vk::VK_COLOR_COMPONENT_G_BIT|
386 vk::VK_COLOR_COMPONENT_B_BIT|
387 vk::VK_COLOR_COMPONENT_A_BIT);
390 ColorBlendState (const std::vector<vk::VkPipelineColorBlendAttachmentState>& attachments,
391 vk::VkBool32 alphaToCoverageEnable = false,
392 vk::VkLogicOp logicOp = vk::VK_LOGIC_OP_COPY);
394 ColorBlendState (deUint32 attachmentCount,
395 const vk::VkPipelineColorBlendAttachmentState* attachments,
396 vk::VkBool32 logicOpEnable = false,
397 vk::VkLogicOp logicOp = vk::VK_LOGIC_OP_COPY);
399 ColorBlendState (const vk::VkPipelineColorBlendStateCreateInfo& createInfo);
400 ColorBlendState (const ColorBlendState& createInfo,
401 std::vector<float> blendConstants = std::vector<float>(4));
404 std::vector<vk::VkPipelineColorBlendAttachmentState> m_attachments;
407 class DepthStencilState : public vk::VkPipelineDepthStencilStateCreateInfo
410 class StencilOpState : public vk::VkStencilOpState
413 StencilOpState (vk::VkStencilOp failOp = vk::VK_STENCIL_OP_REPLACE,
414 vk::VkStencilOp passOp = vk::VK_STENCIL_OP_REPLACE,
415 vk::VkStencilOp depthFailOp = vk::VK_STENCIL_OP_REPLACE,
416 vk::VkCompareOp compareOp = vk::VK_COMPARE_OP_ALWAYS,
417 deUint32 compareMask = 0xffffffffu,
418 deUint32 writeMask = 0xffffffffu,
419 deUint32 reference = 0u);
422 DepthStencilState (vk::VkBool32 depthTestEnable = false,
423 vk::VkBool32 depthWriteEnable = false,
424 vk::VkCompareOp depthCompareOp = vk::VK_COMPARE_OP_ALWAYS,
425 vk::VkBool32 depthBoundsTestEnable = false,
426 vk::VkBool32 stencilTestEnable = false,
427 StencilOpState front = StencilOpState(),
428 StencilOpState back = StencilOpState(),
429 float minDepthBounds = 0.0f,
430 float maxDepthBounds = 1.0f);
433 class PipelineShaderStage : public vk::VkPipelineShaderStageCreateInfo
436 PipelineShaderStage (vk::VkShaderModule shaderModule, const char* pName, vk::VkShaderStageFlagBits stage);
439 class DynamicState : public vk::VkPipelineDynamicStateCreateInfo
442 DynamicState (const std::vector<vk::VkDynamicState>& dynamicStates = std::vector<vk::VkDynamicState>(0));
444 DynamicState (const DynamicState& other);
445 DynamicState& operator= (const DynamicState& other);
447 std::vector<vk::VkDynamicState> m_dynamicStates;
450 PipelineCreateInfo (vk::VkPipelineLayout layout,
451 vk::VkRenderPass renderPass,
453 vk::VkPipelineCreateFlags flags);
455 PipelineCreateInfo& addShader (const vk::VkPipelineShaderStageCreateInfo& shader);
457 PipelineCreateInfo& addState (const vk::VkPipelineVertexInputStateCreateInfo& state);
458 PipelineCreateInfo& addState (const vk::VkPipelineInputAssemblyStateCreateInfo& state);
459 PipelineCreateInfo& addState (const vk::VkPipelineColorBlendStateCreateInfo& state);
460 PipelineCreateInfo& addState (const vk::VkPipelineViewportStateCreateInfo& state);
461 PipelineCreateInfo& addState (const vk::VkPipelineDepthStencilStateCreateInfo& state);
462 PipelineCreateInfo& addState (const vk::VkPipelineTessellationStateCreateInfo& state);
463 PipelineCreateInfo& addState (const vk::VkPipelineRasterizationStateCreateInfo& state);
464 PipelineCreateInfo& addState (const vk::VkPipelineMultisampleStateCreateInfo& state);
465 PipelineCreateInfo& addState (const vk::VkPipelineDynamicStateCreateInfo& state);
468 std::vector<vk::VkPipelineShaderStageCreateInfo> m_shaders;
470 vk::VkPipelineVertexInputStateCreateInfo m_vertexInputState;
471 vk::VkPipelineInputAssemblyStateCreateInfo m_inputAssemblyState;
472 std::vector<vk::VkPipelineColorBlendAttachmentState> m_colorBlendStateAttachments;
473 vk::VkPipelineColorBlendStateCreateInfo m_colorBlendState;
474 vk::VkPipelineViewportStateCreateInfo m_viewportState;
475 vk::VkPipelineDepthStencilStateCreateInfo m_dynamicDepthStencilState;
476 vk::VkPipelineTessellationStateCreateInfo m_tessState;
477 vk::VkPipelineRasterizationStateCreateInfo m_rasterState;
478 vk::VkPipelineMultisampleStateCreateInfo m_multisampleState;
479 vk::VkPipelineDynamicStateCreateInfo m_dynamicState;
481 std::vector<vk::VkDynamicState> m_dynamicStates;
482 std::vector<vk::VkViewport> m_viewports;
483 std::vector<vk::VkRect2D> m_scissors;
484 std::vector<vk::VkSampleMask> m_multisampleStateSampleMask;
487 class SamplerCreateInfo : public vk::VkSamplerCreateInfo
490 SamplerCreateInfo (vk::VkFilter magFilter = vk::VK_FILTER_NEAREST,
491 vk::VkFilter minFilter = vk::VK_FILTER_NEAREST,
492 vk::VkSamplerMipmapMode mipmapMode = vk::VK_SAMPLER_MIPMAP_MODE_NEAREST,
493 vk::VkSamplerAddressMode addressU = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
494 vk::VkSamplerAddressMode addressV = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
495 vk::VkSamplerAddressMode addressW = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
496 float mipLodBias = 0.0f,
497 vk::VkBool32 anisotropyEnable = VK_FALSE,
498 float maxAnisotropy = 1.0f,
499 vk::VkBool32 compareEnable = false,
500 vk::VkCompareOp compareOp = vk::VK_COMPARE_OP_ALWAYS,
502 float maxLod = 16.0f,
503 vk::VkBorderColor borderColor = vk::VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE,
504 vk::VkBool32 unnormalizedCoordinates = false);
510 #endif // _VKTDRAWCREATEINFOUTIL_HPP