Function Prototype

vkCmdBindShadersEXT

Bind shader objects to a command buffer
primary / secondary
both
graphics / compute
state

Once shader objects have been created, they can be bound to the command buffer using the command:

void vkCmdBindShadersEXT(
    VkCommandBuffer commandBuffer,
    uint32_t stageCount,
    const VkShaderStageFlagBits* pStages,
    const VkShaderEXT* pShaders);
  • commandBuffer is the command buffer that the shader object will be bound to.
  • stageCount is the length of the pStages and pShaders arrays.
  • pStages is a pointer to an array of VkShaderStageFlagBits values specifying one stage per array index that is affected by the corresponding value in the pShaders array.
  • pShaders is a pointer to an array of VkShaderEXT handles and/or VK_NULL_HANDLE values describing the shader binding operations to be performed on each stage in pStages.

When binding linked shaders, an application may bind them in any combination of one or more calls to vkCmdBindShadersEXT (i.e., shaders that were created linked together do not need to be bound in the same vkCmdBindShadersEXT call).

Any shader object bound to a particular stage may be unbound by setting its value in pShaders to VK_NULL_HANDLE. If pShaders is NULL, vkCmdBindShadersEXT behaves as if pShaders was an array of stageCount VK_NULL_HANDLE values (i.e., any shaders bound to the stages specified in pStages are unbound).

Valid Usage

VUID-vkCmdBindShadersEXT-pStages-08463

Every element of pStages must be unique

VUID-vkCmdBindShadersEXT-pStages-08464

pStages must not contain VK_SHADER_STAGE_ALL_GRAPHICS or VK_SHADER_STAGE_ALL

VUID-vkCmdBindShadersEXT-pStages-08465

pStages must not contain VK_SHADER_STAGE_RAYGEN_BIT_KHR, VK_SHADER_STAGE_ANY_HIT_BIT_KHR, VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR, VK_SHADER_STAGE_MISS_BIT_KHR, VK_SHADER_STAGE_INTERSECTION_BIT_KHR, or VK_SHADER_STAGE_CALLABLE_BIT_KHR

VUID-vkCmdBindShadersEXT-pStages-08467

pStages must not contain VK_SHADER_STAGE_SUBPASS_SHADING_BIT_HUAWEI

VUID-vkCmdBindShadersEXT-pStages-08468

pStages must not contain VK_SHADER_STAGE_CLUSTER_CULLING_BIT_HUAWEI

VUID-vkCmdBindShadersEXT-pShaders-08469

For each element of pStages, if pShaders is not NULL, and the element of the pShaders array with the same index is not VK_NULL_HANDLE, it must have been created with a stage equal to the corresponding element of pStages

VUID-vkCmdBindShadersEXT-pShaders-08470

If pStages contains both VK_SHADER_STAGE_TASK_BIT_EXT and VK_SHADER_STAGE_VERTEX_BIT, and pShaders is not NULL, and the same index in pShaders as VK_SHADER_STAGE_TASK_BIT_EXT in pStages is not VK_NULL_HANDLE, the same index in pShaders as VK_SHADER_STAGE_VERTEX_BIT in pStagesmust be VK_NULL_HANDLE

VUID-vkCmdBindShadersEXT-pShaders-08471

If pStages contains both VK_SHADER_STAGE_MESH_BIT_EXT and VK_SHADER_STAGE_VERTEX_BIT, and pShaders is not NULL, and the same index in pShaders as VK_SHADER_STAGE_MESH_BIT_EXT in pStages is not VK_NULL_HANDLE, the same index in pShaders as VK_SHADER_STAGE_VERTEX_BIT in pStagesmust be VK_NULL_HANDLE

VUID-vkCmdBindShadersEXT-pShaders-08474

If the tessellationShader feature is not enabled, and pStages contains VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT or VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, and pShaders is not NULL, the same index or indices in pShaders must be VK_NULL_HANDLE

VUID-vkCmdBindShadersEXT-pShaders-08475

If the geometryShader feature is not enabled, and pStages contains VK_SHADER_STAGE_GEOMETRY_BIT, and pShaders is not NULL, the same index in pShaders must be VK_NULL_HANDLE

VUID-vkCmdBindShadersEXT-pShaders-08490

If the taskShader feature is not enabled, and pStages contains VK_SHADER_STAGE_TASK_BIT_EXT, and pShaders is not NULL, the same index in pShaders must be VK_NULL_HANDLE

VUID-vkCmdBindShadersEXT-pShaders-08491

If the meshShader feature is not enabled, and pStages contains VK_SHADER_STAGE_MESH_BIT_EXT, and pShaders is not NULL, the same index in pShaders must be VK_NULL_HANDLE

VUID-vkCmdBindShadersEXT-pShaders-08476

If pStages contains VK_SHADER_STAGE_COMPUTE_BIT, the VkCommandPool that commandBuffer was allocated from must support compute operations

VUID-vkCmdBindShadersEXT-pShaders-08477

If pStages contains VK_SHADER_STAGE_VERTEX_BIT, VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT, VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, VK_SHADER_STAGE_GEOMETRY_BIT, or VK_SHADER_STAGE_FRAGMENT_BIT, the VkCommandPool that commandBuffer was allocated from must support graphics operations

VUID-vkCmdBindShadersEXT-pShaders-08478

If pStages contains VK_SHADER_STAGE_MESH_BIT_EXT or VK_SHADER_STAGE_TASK_BIT_EXT, the VkCommandPool that commandBuffer was allocated from must support graphics operations

Valid Usage (Implicit)

VUID-vkCmdBindShadersEXT-pStages-parameter

pStages must be a valid pointer to an array of stageCount valid VkShaderStageFlagBits values

VUID-vkCmdBindShadersEXT-pShaders-parameter

If pShaders is not NULL, pShaders must be a valid pointer to an array of stageCount valid or VK_NULL_HANDLE VkShaderEXT handles

VUID-vkCmdBindShadersEXT-commandBuffer-cmdpool

The VkCommandPool that commandBuffer was allocated from must support graphics, or compute operations

VUID-vkCmdBindShadersEXT-videocoding

This command must only be called outside of a video coding scope

VUID-vkCmdBindShadersEXT-stageCount-arraylength

stageCount must be greater than 0

VUID-vkCmdBindShadersEXT-commonparent

Both of commandBuffer, and the elements of pShaders that are valid handles of non-ignored parameters must have been created, allocated, or retrieved from the same VkDevice

Host Synchronization

  • Host access to commandBuffer must be externally synchronized
  • Host access to the VkCommandPool that commandBuffer was allocated from must be externally synchronized ::