Shader modules contain shader code and one or more entry points. Shaders are selected from a shader module by specifying an entry point as part of pipeline creation. The stages of a pipeline can use shaders that come from different modules. The shader code defining a shader module must be in the SPIR-V format, as described by the Vulkan Environment for SPIR-V appendix.
Shader modules are represented by VkShaderModule
handles:
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)
To create a shader module, call:
VkResult vkCreateShaderModule( VkDevice device, const VkShaderModuleCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkShaderModule* pShaderModule);
device
is the logical device that creates the shader module.
pCreateInfo
parameter is a pointer to an instance of the
VkShaderModuleCreateInfo
structure.
pAllocator
controls host memory allocation as described in the
Memory Allocation chapter.
pShaderModule
points to a VkShaderModule
handle in which the
resulting shader module object is returned.
Once a shader module has been created, any entry points it contains can be used in pipeline shader stages as described in Compute Pipelines and Graphics Pipelines.
The VkShaderModuleCreateInfo
structure is defined as:
typedef struct VkShaderModuleCreateInfo { VkStructureType sType; const void* pNext; VkShaderModuleCreateFlags flags; size_t codeSize; const uint32_t* pCode; } VkShaderModuleCreateInfo;
sType
is the type of this structure.
pNext
is NULL
or a pointer to an extension-specific structure.
flags
is reserved for future use.
codeSize
is the size, in bytes, of the code pointed to by
pCode
.
pCode
points to code that is used to create the shader module.
The type and format of the code is determined from the content of the
memory addressed by pCode
.
To destroy a shader module, call:
void vkDestroyShaderModule( VkDevice device, VkShaderModule shaderModule, const VkAllocationCallbacks* pAllocator);
device
is the logical device that destroys the shader module.
shaderModule
is the handle of the shader module to destroy.
pAllocator
controls host memory allocation as described in the
Memory Allocation chapter.
A shader module can be destroyed while pipelines created using its shaders are still in use.