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);
312 VertexInputState& addDivisors (deUint32 vertexBindingDivisorCount = 0,
313 const vk::VkVertexInputBindingDivisorDescriptionEXT* pVertexBindingDivisors = NULL);
315 vk::VkPipelineVertexInputDivisorStateCreateInfoEXT m_divisorState;
318 class InputAssemblerState : public vk::VkPipelineInputAssemblyStateCreateInfo
321 InputAssemblerState (vk::VkPrimitiveTopology topology, vk::VkBool32 primitiveRestartEnable = false);
324 class TessellationState : public vk::VkPipelineTessellationStateCreateInfo
327 TessellationState (deUint32 patchControlPoints = 0);
330 class ViewportState : public vk::VkPipelineViewportStateCreateInfo
333 ViewportState (deUint32 viewportCount,
334 std::vector<vk::VkViewport> viewports = std::vector<vk::VkViewport>(0),
335 std::vector<vk::VkRect2D> scissors = std::vector<vk::VkRect2D>(0));
337 ViewportState (const ViewportState& other);
338 ViewportState& operator= (const ViewportState& other);
340 std::vector<vk::VkViewport> m_viewports;
341 std::vector<vk::VkRect2D> m_scissors;
344 class RasterizerState : public vk::VkPipelineRasterizationStateCreateInfo
347 RasterizerState (vk::VkBool32 depthClampEnable = false,
348 vk::VkBool32 rasterizerDiscardEnable = false,
349 vk::VkPolygonMode polygonMode = vk::VK_POLYGON_MODE_FILL,
350 vk::VkCullModeFlags cullMode = vk::VK_CULL_MODE_NONE,
351 vk::VkFrontFace frontFace = vk::VK_FRONT_FACE_CLOCKWISE,
352 vk::VkBool32 depthBiasEnable = true,
353 float depthBiasConstantFactor = 0.0f,
354 float depthBiasClamp = 0.0f,
355 float depthBiasSlopeFactor = 0.0f,
356 float lineWidth = 1.0f);
359 class MultiSampleState : public vk::VkPipelineMultisampleStateCreateInfo
362 MultiSampleState (vk::VkSampleCountFlagBits rasterizationSamples = vk::VK_SAMPLE_COUNT_1_BIT,
363 vk::VkBool32 sampleShadingEnable = false,
364 float minSampleShading = 0.0f,
365 const std::vector<vk::VkSampleMask>& sampleMask = std::vector<vk::VkSampleMask>(1, 0xffffffffu),
366 bool alphaToCoverageEnable = false,
367 bool alphaToOneEnable = false);
369 MultiSampleState (const MultiSampleState& other);
370 MultiSampleState& operator= (const MultiSampleState& other);
373 std::vector<vk::VkSampleMask> m_sampleMask;
376 class ColorBlendState : public vk::VkPipelineColorBlendStateCreateInfo
379 class Attachment : public vk::VkPipelineColorBlendAttachmentState
382 Attachment (vk::VkBool32 blendEnable = false,
383 vk::VkBlendFactor srcColorBlendFactor = vk::VK_BLEND_FACTOR_SRC_COLOR,
384 vk::VkBlendFactor dstColorBlendFactor = vk::VK_BLEND_FACTOR_DST_COLOR,
385 vk::VkBlendOp colorBlendOp = vk::VK_BLEND_OP_ADD,
386 vk::VkBlendFactor srcAlphaBlendFactor = vk::VK_BLEND_FACTOR_SRC_COLOR,
387 vk::VkBlendFactor dstAlphaBlendFactor = vk::VK_BLEND_FACTOR_DST_COLOR,
388 vk::VkBlendOp alphaBlendOp = vk::VK_BLEND_OP_ADD,
389 vk::VkColorComponentFlags colorWriteMask = vk::VK_COLOR_COMPONENT_R_BIT|
390 vk::VK_COLOR_COMPONENT_G_BIT|
391 vk::VK_COLOR_COMPONENT_B_BIT|
392 vk::VK_COLOR_COMPONENT_A_BIT);
395 ColorBlendState (const std::vector<vk::VkPipelineColorBlendAttachmentState>& attachments,
396 vk::VkBool32 alphaToCoverageEnable = false,
397 vk::VkLogicOp logicOp = vk::VK_LOGIC_OP_COPY);
399 ColorBlendState (deUint32 attachmentCount,
400 const vk::VkPipelineColorBlendAttachmentState* attachments,
401 vk::VkBool32 logicOpEnable = false,
402 vk::VkLogicOp logicOp = vk::VK_LOGIC_OP_COPY);
404 ColorBlendState (const vk::VkPipelineColorBlendStateCreateInfo& createInfo);
405 ColorBlendState (const ColorBlendState& createInfo,
406 std::vector<float> blendConstants = std::vector<float>(4));
409 std::vector<vk::VkPipelineColorBlendAttachmentState> m_attachments;
412 class DepthStencilState : public vk::VkPipelineDepthStencilStateCreateInfo
415 class StencilOpState : public vk::VkStencilOpState
418 StencilOpState (vk::VkStencilOp failOp = vk::VK_STENCIL_OP_REPLACE,
419 vk::VkStencilOp passOp = vk::VK_STENCIL_OP_REPLACE,
420 vk::VkStencilOp depthFailOp = vk::VK_STENCIL_OP_REPLACE,
421 vk::VkCompareOp compareOp = vk::VK_COMPARE_OP_ALWAYS,
422 deUint32 compareMask = 0xffffffffu,
423 deUint32 writeMask = 0xffffffffu,
424 deUint32 reference = 0u);
427 DepthStencilState (vk::VkBool32 depthTestEnable = false,
428 vk::VkBool32 depthWriteEnable = false,
429 vk::VkCompareOp depthCompareOp = vk::VK_COMPARE_OP_ALWAYS,
430 vk::VkBool32 depthBoundsTestEnable = false,
431 vk::VkBool32 stencilTestEnable = false,
432 StencilOpState front = StencilOpState(),
433 StencilOpState back = StencilOpState(),
434 float minDepthBounds = 0.0f,
435 float maxDepthBounds = 1.0f);
438 class PipelineShaderStage : public vk::VkPipelineShaderStageCreateInfo
441 PipelineShaderStage (vk::VkShaderModule shaderModule, const char* pName, vk::VkShaderStageFlagBits stage);
444 class DynamicState : public vk::VkPipelineDynamicStateCreateInfo
447 DynamicState (const std::vector<vk::VkDynamicState>& dynamicStates = std::vector<vk::VkDynamicState>(0));
449 DynamicState (const DynamicState& other);
450 DynamicState& operator= (const DynamicState& other);
452 std::vector<vk::VkDynamicState> m_dynamicStates;
455 PipelineCreateInfo (vk::VkPipelineLayout layout,
456 vk::VkRenderPass renderPass,
458 vk::VkPipelineCreateFlags flags);
460 PipelineCreateInfo& addShader (const vk::VkPipelineShaderStageCreateInfo& shader);
462 PipelineCreateInfo& addState (const vk::VkPipelineVertexInputStateCreateInfo& state);
463 PipelineCreateInfo& addState (const vk::VkPipelineInputAssemblyStateCreateInfo& state);
464 PipelineCreateInfo& addState (const vk::VkPipelineColorBlendStateCreateInfo& state);
465 PipelineCreateInfo& addState (const vk::VkPipelineViewportStateCreateInfo& state);
466 PipelineCreateInfo& addState (const vk::VkPipelineDepthStencilStateCreateInfo& state);
467 PipelineCreateInfo& addState (const vk::VkPipelineTessellationStateCreateInfo& state);
468 PipelineCreateInfo& addState (const vk::VkPipelineRasterizationStateCreateInfo& state);
469 PipelineCreateInfo& addState (const vk::VkPipelineMultisampleStateCreateInfo& state);
470 PipelineCreateInfo& addState (const vk::VkPipelineDynamicStateCreateInfo& state);
473 std::vector<vk::VkPipelineShaderStageCreateInfo> m_shaders;
475 vk::VkPipelineVertexInputStateCreateInfo m_vertexInputState;
476 vk::VkPipelineInputAssemblyStateCreateInfo m_inputAssemblyState;
477 std::vector<vk::VkPipelineColorBlendAttachmentState> m_colorBlendStateAttachments;
478 vk::VkPipelineColorBlendStateCreateInfo m_colorBlendState;
479 vk::VkPipelineViewportStateCreateInfo m_viewportState;
480 vk::VkPipelineDepthStencilStateCreateInfo m_dynamicDepthStencilState;
481 vk::VkPipelineTessellationStateCreateInfo m_tessState;
482 vk::VkPipelineRasterizationStateCreateInfo m_rasterState;
483 vk::VkPipelineMultisampleStateCreateInfo m_multisampleState;
484 vk::VkPipelineDynamicStateCreateInfo m_dynamicState;
486 std::vector<vk::VkDynamicState> m_dynamicStates;
487 std::vector<vk::VkViewport> m_viewports;
488 std::vector<vk::VkRect2D> m_scissors;
489 std::vector<vk::VkSampleMask> m_multisampleStateSampleMask;
492 class SamplerCreateInfo : public vk::VkSamplerCreateInfo
495 SamplerCreateInfo (vk::VkFilter magFilter = vk::VK_FILTER_NEAREST,
496 vk::VkFilter minFilter = vk::VK_FILTER_NEAREST,
497 vk::VkSamplerMipmapMode mipmapMode = vk::VK_SAMPLER_MIPMAP_MODE_NEAREST,
498 vk::VkSamplerAddressMode addressU = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
499 vk::VkSamplerAddressMode addressV = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
500 vk::VkSamplerAddressMode addressW = vk::VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT,
501 float mipLodBias = 0.0f,
502 vk::VkBool32 anisotropyEnable = VK_FALSE,
503 float maxAnisotropy = 1.0f,
504 vk::VkBool32 compareEnable = false,
505 vk::VkCompareOp compareOp = vk::VK_COMPARE_OP_ALWAYS,
507 float maxLod = 16.0f,
508 vk::VkBorderColor borderColor = vk::VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE,
509 vk::VkBool32 unnormalizedCoordinates = false);
515 #endif // _VKTDRAWCREATEINFOUTIL_HPP