Class VkGraphicsPipelineCreateInfo

  • All Implemented Interfaces:
    java.lang.AutoCloseable, NativeResource, Pointer


    public class VkGraphicsPipelineCreateInfo
    extends Struct
    Khronos Reference Page
    Vulkan Specification

    Includes an array of shader create info structures containing all the desired active shader stages, as well as creation info to define all relevant fixed-function stages, and a pipeline layout.

    Valid Usage
    • sType must be STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
    • pNext must be NULL
    • flags must be a valid combination of VkPipelineCreateFlagBits values
    • pStages must be a pointer to an array of stageCount valid VkPipelineShaderStageCreateInfo structures
    • pVertexInputState must be a pointer to a valid VkPipelineVertexInputStateCreateInfo structure
    • pInputAssemblyState must be a pointer to a valid VkPipelineInputAssemblyStateCreateInfo structure
    • pRasterizationState must be a pointer to a valid VkPipelineRasterizationStateCreateInfo structure
    • If pDynamicState is not NULL, pDynamicState must be a pointer to a valid VkPipelineDynamicStateCreateInfo structure
    • layout must be a valid VkPipelineLayout handle
    • renderPass must be a valid VkRenderPass handle
    • stageCount must be greater than 0
    • Each of layout, renderPass and basePipelineHandle that are valid handles must have been created, allocated or retrieved from the same VkDevice
    • If flags contains the PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineIndex is not -1, basePipelineHandle must be NULL_HANDLE
    • If flags contains the PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineIndex is not -1, it must be a valid index into the calling command's pCreateInfos parameter
    • If flags contains the PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineHandle is not NULL_HANDLE, basePipelineIndex must be -1
    • If flags contains the PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineHandle is not NULL_HANDLE, basePipelineHandle must be a valid VkPipeline handle
    • If flags contains the PIPELINE_CREATE_DERIVATIVE_BIT flag, and basePipelineHandle is not NULL_HANDLE, it must be a valid handle to a graphics VkPipeline
    • The stage member of each element of pStages must be unique
    • The stage member of one element of pStages must be SHADER_STAGE_VERTEX_BIT
    • The stage member of any given element of pStages must not be SHADER_STAGE_COMPUTE_BIT
    • If pStages includes a tessellation control shader stage, it must include a tessellation evaluation shader stage
    • If pStages includes a tessellation evaluation shader stage, it must include a tessellation control shader stage
    • If pStages includes a tessellation control shader stage and a tessellation evaluation shader stage, pTessellationState must not be NULL
    • If pStages includes both a tessellation control shader stage and a tessellation evaluation shader stage, the shader code of at least one must contain an OpExecutionMode instruction that specifies the type of subdivision in the pipeline
    • If pStages includes both a tessellation control shader stage and a tessellation evaluation shader stage, and the shader code of both contain an OpExecutionMode instruction that specifies the type of subdivision in the pipeline, they must both specify the same subdivision mode
    • If pStages includes both a tessellation control shader stage and a tessellation evaluation shader stage, the shader code of at least one must contain an OpExecutionMode instruction that specifies the output patch size in the pipeline
    • If pStages includes both a tessellation control shader stage and a tessellation evaluation shader stage, and the shader code of both contain an OpExecutionMode instruction that specifies the out patch size in the pipeline, they must both specify the same patch size
    • If pStages includes tessellation shader stages, the topology member of pInputAssembly must be PRIMITIVE_TOPOLOGY_PATCH_LIST
    • If pStages includes a geometry shader stage, and doesn't include any tessellation shader stages, its shader code must contain an OpExecutionMode instruction that specifies an input primitive type that is compatible with the primitive topology specified in pInputAssembly
    • If pStages includes a geometry shader stage, and also includes tessellation shader stages, its shader code must contain an OpExecutionMode instruction that specifies an input primitive type that is compatible with the primitive topology that is output by the tessellation stages
    • If pStages includes a fragment shader stage and a geometry shader stage, and the fragment shader code reads from an input variable that is decorated with PrimitiveID, then the geometry shader code must write to a matching output variable, decorated with PrimitiveID, in all execution paths
    • If pStages includes a fragment shader stage, its shader code must not read from any input attachment that is defined as ATTACHMENT_UNUSED in subpass
    • The shader code for the entry points identified by pStages, and the rest of the state identified by this structure must adhere to the pipeline linking rules described in the Shader Interfaces chapter
    • If subpass uses a depth/stencil attachment in renderpass that has a layout of IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL in the VkAttachmentReference defined by subpass, and pDepthStencilState is not NULL, the depthWriteEnable member of pDepthStencilState must be FALSE
    • If subpass uses a depth/stencil attachment in renderpass that has a layout of IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL in the VkAttachmentReference defined by subpass, and pDepthStencilState is not NULL, the failOp, passOp and depthFailOp members of each of the front and back members of pDepthStencilState must be STENCIL_OP_KEEP
    • If pColorBlendState is not NULL, the blendEnable member of each element of the pAttachment member of pColorBlendState must be FALSE if the format of the attachment referred to in subpass of renderPass does not support color blend operations, as specified by the FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT flag in VkFormatProperties::linearTilingFeatures or VkFormatProperties::optimalTilingFeatures returned by GetPhysicalDeviceFormatProperties
    • If pColorBlendState is not NULL, The attachmentCount member of pColorBlendState must be equal to the colorAttachmentCount used to create subpass
    • If no element of the pDynamicStates member of pDynamicState is DYNAMIC_STATE_VIEWPORT, the pViewports member of pViewportState must be a pointer to an array of pViewportState->viewportCount VkViewport structures
    • If no element of the pDynamicStates member of pDynamicState is DYNAMIC_STATE_SCISSOR, the pScissors member of pViewportState must be a pointer to an array of pViewportState->scissorCount VkRect2D structures
    • If the wide lines feature is not enabled, and no element of the pDynamicStates member of pDynamicState is DYNAMIC_STATE_LINE_WIDTH, the lineWidth member of pRasterizationState must be 1.0
    • If the rasterizerDiscardEnable member of pRasterizationState is FALSE, pViewportState must be a pointer to a valid VkPipelineViewportStateCreateInfo structure
    • If the rasterizerDiscardEnable member of pRasterizationState is FALSE, pMultisampleState must be a pointer to a valid VkPipelineMultisampleStateCreateInfo structure
    • If the rasterizerDiscardEnable member of pRasterizationState is FALSE, and subpass uses a depth/stencil attachment, pDepthStencilState must be a pointer to a valid VkPipelineDepthStencilStateCreateInfo structure
    • If the rasterizerDiscardEnable member of pRasterizationState is FALSE, and subpass uses color attachments, pColorBlendState must be a pointer to a valid VkPipelineColorBlendStateCreateInfo structure
    • If the depth bias clamping feature is not enabled, no element of the pDynamicStates member of pDynamicState is DYNAMIC_STATE_DEPTH_BIAS, and the depthBiasEnable member of pDepthStencil is TRUE, the depthBiasClamp member of pDepthStencil must be 0.0
    • If no element of the pDynamicStates member of pDynamicState is DYNAMIC_STATE_DEPTH_BOUNDS, and the depthBoundsTestEnable member of pDepthStencil is TRUE, the minDepthBounds and maxDepthBounds members of pDepthStencil must be between 0.0 and 1.0, inclusive
    • layout must be consistent with all shaders specified in pStages
    • If subpass uses color and/or depth/stencil attachments, then the rasterizationSamples member of pMultisampleState must be the same as the sample count for those subpass attachments
    • If subpass does not use any color and/or depth/stencil attachments, then the rasterizationSamples member of pMultisampleState must follow the rules for a zero-attachment subpass
    • subpass must be a valid subpass within renderpass

    Member documentation

    • sType – the type of this structure. Must be: STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
    • pNext – reserved for use by extensions
    • flags – a bitfield of VkPipelineCreateFlagBits controlling how the pipeline will be generated. One or more of:
      PIPELINE_CREATE_ALLOW_DERIVATIVES_BITPIPELINE_CREATE_DERIVATIVE_BIT
      PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT
    • stageCount – the number of entries in the pStages array
    • pStages – an array of size stageCount structures of type VkPipelineShaderStageCreateInfo describing the set of the shader stages to be included in the graphics pipeline
    • pVertexInputState – a pointer to an instance of the VkPipelineVertexInputStateCreateInfo structure
    • pInputAssemblyState – a pointer to an instance of the VkPipelineInputAssemblyStateCreateInfo structure which determines input assembly behavior
    • pTessellationState – a pointer to an instance of the VkPipelineTessellationStateCreateInfo structure, or NULL if the pipeline does not include a tessellation control shader stage and tessellation evaluation shader stage
    • pViewportState – a pointer to an instance of the VkPipelineViewportStateCreateInfo structure, or NULL if the pipeline has rasterization disabled
    • pRasterizationState – a pointer to an instance of the VkPipelineRasterizationStateCreateInfo structure
    • pMultisampleState – a pointer to an instance of the VkPipelineMultisampleStateCreateInfo, or NULL if the pipeline has rasterization disabled
    • pDepthStencilState – a pointer to an instance of the VkPipelineDepthStencilStateCreateInfo structure, or NULL if the pipeline has rasterization disabled or if the subpass of the render pass the pipeline is created against does not use a depth/stencil attachment
    • pColorBlendState – a pointer to an instance of the VkPipelineColorBlendStateCreateInfo structure, or NULL if the pipeline has rasterization disabled or if the subpass of the render pass the pipeline is created against does not use any color attachments
    • pDynamicState – a pointer to VkPipelineDynamicStateCreateInfo and is used to indicate which properties of the pipeline state object are dynamic and can be changed independently of the pipeline state. This can be NULL, which means no state in the pipeline is considered dynamic.
    • layout – the description of binding locations used by both the pipeline and descriptor sets used with the pipeline
    • renderPass – a handle to a render pass object describing the environment in which the pipeline will be used; the pipeline can be used with an instance of any render pass compatible with the one provided
    • subpass – the index of the subpass in renderPass where this pipeline will be used
    • basePipelineHandle – a pipeline to derive from
    • basePipelineIndex – an index into the pCreateInfos parameter to use as a pipeline to derive from

    Layout

    struct VkGraphicsPipelineCreateInfo {
        VkStructureType sType;
        const void * pNext;
        VkPipelineCreateFlags flags;
        uint32_t stageCount;
        const VkPipelineShaderStageCreateInfo * pStages;
        const VkPipelineVertexInputStateCreateInfo * pVertexInputState;
        const VkPipelineInputAssemblyStateCreateInfo * pInputAssemblyState;
        const VkPipelineTessellationStateCreateInfo * pTessellationState;
        const VkPipelineViewportStateCreateInfo * pViewportState;
        const VkPipelineRasterizationStateCreateInfo * pRasterizationState;
        const VkPipelineMultisampleStateCreateInfo * pMultisampleState;
        const VkPipelineDepthStencilStateCreateInfo * pDepthStencilState;
        const VkPipelineColorBlendStateCreateInfo * pColorBlendState;
        const VkPipelineDynamicStateCreateInfo * pDynamicState;
        VkPipelineLayout layout;
        VkRenderPass renderPass;
        uint32_t subpass;
        VkPipeline basePipelineHandle;
        int32_t basePipelineIndex;
    }