vkCmdBindShadersEXT
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 thepStages
andpShaders
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 thepShaders
array.pShaders
is a pointer to an array ofVkShaderEXT
handles and/or VK_NULL_HANDLE values describing the shader binding operations to be performed on each stage inpStages
.
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-None-08462
The shaderObject
feature must be
enabled
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 pStages
must 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 pStages
must 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-commandBuffer-parameter
commandBuffer
must be a valid VkCommandBuffer handle
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-recording
commandBuffer
must be in the recording state
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
thatcommandBuffer
was allocated from must be externally synchronized ::