Structures

VkPipelineRobustnessCreateInfo

Structure controlling the robustness of a newly created pipeline shader stage

The VkPipelineRobustnessCreateInfo structure is defined as:

typedef struct VkPipelineRobustnessCreateInfo {
    VkStructureType sType;
    const void* pNext;
    VkPipelineRobustnessBufferBehavior storageBuffers;
    VkPipelineRobustnessBufferBehavior uniformBuffers;
    VkPipelineRobustnessBufferBehavior vertexInputs;
    VkPipelineRobustnessImageBehavior images;
} VkPipelineRobustnessCreateInfo;

or the equivalent

typedef VkPipelineRobustnessCreateInfo VkPipelineRobustnessCreateInfoEXT;
  • sType is a VkStructureType value identifying this structure.
  • pNext is NULL or a pointer to a structure extending this structure.
  • storageBuffers sets the behavior of out of bounds accesses made to resources bound as:
    • VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
    • VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
    • VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
  • uniformBuffers describes the behavior of out of bounds accesses made to resources bound as:
    • VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
    • VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
    • VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
    • VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK
  • vertexInputs describes the behavior of out of bounds accesses made to vertex input attributes
  • images describes the behavior of out of bounds accesses made to resources bound as:
    • VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
    • VK_DESCRIPTOR_TYPE_STORAGE_IMAGE

Resources bound as VK_DESCRIPTOR_TYPE_MUTABLE_EXT will have the robustness behavior that covers its active descriptor type.

The scope of the effect of VkPipelineRobustnessCreateInfo depends on which structure’s pNext chain it is included in.

  • VkGraphicsPipelineCreateInfo, VkRayTracingPipelineCreateInfoKHR, VkComputePipelineCreateInfo:\
    The robustness behavior described by VkPipelineRobustnessCreateInfo applies to all accesses through this pipeline
  • VkPipelineShaderStageCreateInfo:\
    The robustness behavior described by VkPipelineRobustnessCreateInfo applies to all accesses emanating from the shader code of this shader stage

If VkPipelineRobustnessCreateInfo is specified for both a pipeline and a pipeline stage, the VkPipelineRobustnessCreateInfo specified for the pipeline stage will take precedence.

When VkPipelineRobustnessCreateInfo is specified for a pipeline, it only affects the subset of the pipeline that is specified by the create info, as opposed to subsets linked from pipeline libraries. For VkGraphicsPipelineCreateInfo, that subset is specified by VkGraphicsPipelineLibraryCreateInfoEXT::flags. For VkRayTracingPipelineCreateInfoKHR, that subset is specified by the specific stages in VkRayTracingPipelineCreateInfoKHR::pStages.

Valid Usage

VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06926

If the pipelineRobustness feature is not enabled, storageBuffers must be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT

VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06927

If the pipelineRobustness feature is not enabled, uniformBuffers must be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT

VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06928

If the pipelineRobustness feature is not enabled, vertexInputs must be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_DEVICE_DEFAULT

VUID-VkPipelineRobustnessCreateInfo-pipelineRobustness-06929

If the pipelineRobustness feature is not enabled, images must be VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_DEVICE_DEFAULT

VUID-VkPipelineRobustnessCreateInfo-robustImageAccess-06930

If the robustImageAccess feature is not supported, images must not be VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS

VUID-VkPipelineRobustnessCreateInfo-robustBufferAccess2-06931

If the robustBufferAccess2 feature is not supported, storageBuffers must not be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2

VUID-VkPipelineRobustnessCreateInfo-robustBufferAccess2-06932

If the robustBufferAccess2 feature is not supported, uniformBuffers must not be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2

VUID-VkPipelineRobustnessCreateInfo-robustBufferAccess2-06933

If the robustBufferAccess2 feature is not supported, vertexInputs must not be VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2

VUID-VkPipelineRobustnessCreateInfo-robustImageAccess2-06934

If the robustImageAccess2 feature is not supported, images must not be VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2

VUID-VkPipelineRobustnessCreateInfo-storageBuffers-10636

If storageBuffers is VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2, and either descriptorBindingStorageBufferUpdateAfterBind or descriptorBindingStorageTexelBufferUpdateAfterBind is enabled on the device, robustBufferAccessUpdateAfterBind must be VK_TRUE

VUID-VkPipelineRobustnessCreateInfo-uniformBuffers-10637

If uniformBuffers is VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS or VK_PIPELINE_ROBUSTNESS_BUFFER_BEHAVIOR_ROBUST_BUFFER_ACCESS_2, and either descriptorBindingInlineUniformBlockUpdateAfterBind, descriptorBindingUniformBufferUpdateAfterBind or descriptorBindingUniformTexelBufferUpdateAfterBind is enabled on the device, robustBufferAccessUpdateAfterBind must be VK_TRUE

VUID-VkPipelineRobustnessCreateInfo-images-10638

If images is VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS or VK_PIPELINE_ROBUSTNESS_IMAGE_BEHAVIOR_ROBUST_IMAGE_ACCESS_2, and either descriptorBindingStorageImageUpdateAfterBind or descriptorBindingSampledImageUpdateAfterBind is enabled on the device, robustBufferAccessUpdateAfterBind must be VK_TRUE