vkCreateShadersEXT
To create one or more shader objects, call:
VkResult vkCreateShadersEXT(
VkDevice device,
uint32_t createInfoCount,
const VkShaderCreateInfoEXT* pCreateInfos,
const VkAllocationCallbacks* pAllocator,
VkShaderEXT* pShaders);
pub fn create_shaders_ext(
device: vk::Device,
create_info_count: u32,
p_create_infos: *const vk::ShaderCreateInfoEXT,
p_allocator: *const vk::AllocationCallbacks,
p_shaders: *mut vk::ShaderEXT,
) -> vk::Result;
deviceis the logical device that creates the shader objects.createInfoCountis the length of thepCreateInfosandpShadersarrays.pCreateInfosis a pointer to an array of VkShaderCreateInfoEXT structures.pAllocatorcontrols host memory allocation as described in the Memory Allocation chapter.pShadersis a pointer to an array of VkShaderEXT handles in which the resulting shader objects are returned.
When this function returns, whether or not it succeeds, it is guaranteed
that every element of pShaders will have been overwritten by either
VK_NULL_HANDLE or a valid VkShaderEXT handle.
This means that whenever shader creation fails, the application can
determine which shader the returned error pertains to by locating the first
VK_NULL_HANDLE element in pShaders.
It also means that an application can reliably clean up from a failed call
by iterating over the pShaders array and destroying every element that
is not VK_NULL_HANDLE.
Valid Usage
VUID-vkCreateShadersEXT-stage-09670
If the stage member of any element of pCreateInfos is
VK_SHADER_STAGE_COMPUTE_BIT, device must support at least
one queue family with the VK_QUEUE_COMPUTE_BIT capability
VUID-vkCreateShadersEXT-stage-09671
If the stage member of any element of pCreateInfos is
VK_SHADER_STAGE_TASK_BIT_EXT, VK_SHADER_STAGE_MESH_BIT_EXT,
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, device must support at least
one queue family with the VK_QUEUE_GRAPHICS_BIT capability
VUID-vkCreateShadersEXT-None-08400
The shaderObject feature must be
enabled
VUID-vkCreateShadersEXT-pCreateInfos-08402
If the flags member of any element of pCreateInfos includes
VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, the flags member of all
other elements of pCreateInfos whose stage is
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 must also include
VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
VUID-vkCreateShadersEXT-pCreateInfos-08403
If the flags member of any element of pCreateInfos includes
VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, the flags member of all
other elements of pCreateInfos whose stage is
VK_SHADER_STAGE_TASK_BIT_EXT or VK_SHADER_STAGE_MESH_BIT_EXTmust also include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
VUID-vkCreateShadersEXT-pCreateInfos-08404
If the flags member of any element of pCreateInfos whose
stage is VK_SHADER_STAGE_TASK_BIT_EXT or
VK_SHADER_STAGE_MESH_BIT_EXT includes
VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, there must be no member of
pCreateInfos whose stage is VK_SHADER_STAGE_VERTEX_BIT
and whose flags member includes
VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
VUID-vkCreateShadersEXT-pCreateInfos-08405
If there is any element of pCreateInfos whose stage is
VK_SHADER_STAGE_MESH_BIT_EXT and whose flags member includes
both VK_SHADER_CREATE_LINK_STAGE_BIT_EXT and
VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT, there must be no element
of pCreateInfos whose stage is
VK_SHADER_STAGE_TASK_BIT_EXT and whose flags member includes
VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
VUID-vkCreateShadersEXT-pCreateInfos-08409
For each element of pCreateInfos whose flags member includes
VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, if there is any other element
of pCreateInfos whose stage is logically later than the
stage of the former and whose flags member also includes
VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, the nextStage of the
former must be equal to the stage of the element with the
logically earliest stage following the stage of the former
whose flags member also includes
VK_SHADER_CREATE_LINK_STAGE_BIT_EXT
VUID-vkCreateShadersEXT-pCreateInfos-08410
The stage member of each element of pCreateInfos whose
flags member includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXTmust be unique
VUID-vkCreateShadersEXT-pCreateInfos-08411
The codeType member of all elements of pCreateInfos whose
flags member includes VK_SHADER_CREATE_LINK_STAGE_BIT_EXTmust be the same
VUID-vkCreateShadersEXT-pCreateInfos-12224
If pCreateInfos contains elements with both
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, at
least one must contain an OpExecutionMode instruction specifying
the orientation of triangles generated by the tessellator
VUID-vkCreateShadersEXT-pCreateInfos-12225
If pCreateInfos contains elements with both
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, at
least one must contain an OpExecutionMode instruction specifying
the spacing of segments on the edges of tessellated primitives
VUID-vkCreateShadersEXT-pCreateInfos-08867
If pCreateInfos contains elements with both
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and
both stages contains an OpExecutionMode instruction specifying the
type of subdivision, they must be the same
VUID-vkCreateShadersEXT-pCreateInfos-08868
If pCreateInfos contains elements with both
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and
both stages contains an OpExecutionMode instruction specifying the
orientation of triangles, they must be the same
VUID-vkCreateShadersEXT-pCreateInfos-08870
If pCreateInfos contains elements with both
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and
both stages contains an OpExecutionMode instruction specifying the
spacing of segments on the edges of tessellated primitives, they must
be the same
VUID-vkCreateShadersEXT-pCreateInfos-08871
If pCreateInfos contains elements with both
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT and
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT, both elements'
flags include VK_SHADER_CREATE_LINK_STAGE_BIT_EXT, both
elements' codeType is VK_SHADER_CODE_TYPE_SPIRV_EXT, and
both stages contains an OpExecutionMode instruction specifying the
output patch size, they must be the same
VUID-vkCreateShadersEXT-pCreateInfos-09632
If pCreateInfos contains a VK_SHADER_STAGE_MESH_BIT_EXT with
codeType of VK_SHADER_CODE_TYPE_SPIRV_EXT and
VK_SHADER_CREATE_NO_TASK_SHADER_BIT_EXT is not set, then the mesh
shader’s entry point must not declare a variable with a DrawIndex
BuiltIn decoration
VUID-vkCreateShadersEXT-pCreateInfos-11413
If any element of pCreateInfos sets
VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT and includes embedded
sampler mappings, there must be less than
(maxSamplerAllocationCount
- (minSamplerHeapReservedRangeWithEmbedded /
samplerDescriptorSize))
VkSampler objects currently created on the device
VUID-vkCreateShadersEXT-pCreateInfos-11428
If any element of pCreateInfos sets
VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT and includes embedded
sampler mappings, this command must not cause the total number of
unique embedded samplers in pipelines and shaders on this device to
exceed maxDescriptorHeapEmbeddedSamplers
VUID-vkCreateShadersEXT-flags-11472
If the flags member of any element of pCreateInfos includes
VK_SHADER_CREATE_LINK_STAGE_BIT_EXT and
VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT, the flags member
of all other elements of pCreateInfos whose stage is
VK_SHADER_STAGE_VERTEX_BIT,
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT,
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT,
VK_SHADER_STAGE_GEOMETRY_BIT,
VK_SHADER_STAGE_TASK_BIT_EXT, VK_SHADER_STAGE_MESH_BIT_EXT,
or VK_SHADER_STAGE_FRAGMENT_BIT must also include
VK_SHADER_CREATE_DESCRIPTOR_HEAP_BIT_EXT
Valid Usage (Implicit)
VUID-vkCreateShadersEXT-device-parameter
device must be a valid VkDevice handle
VUID-vkCreateShadersEXT-pCreateInfos-parameter
pCreateInfos must be a valid pointer to an array of createInfoCount valid VkShaderCreateInfoEXT structures
VUID-vkCreateShadersEXT-pAllocator-parameter
If pAllocator is not NULL, pAllocator must be a valid pointer to a valid VkAllocationCallbacks structure
VUID-vkCreateShadersEXT-pShaders-parameter
pShaders must be a valid pointer to an array of createInfoCount VkShaderEXT handles
VUID-vkCreateShadersEXT-createInfoCount-arraylength
createInfoCount must be greater than 0