Skip to content

Shader Module

The whole process:

write GLSL---> compile it into SPIR-V --->using VkShaderModule tell Vulka: here is the compiled code, keep it

VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkShaderModule)


createShaderModule

void createShaderModule( const std::vector<char>& code, VkShaderModule* shaderModule);

  • code : SPIR-V code
  • VkShaderModule, handle, pointer
void LvePipeline::createShaderModule(
const std::vector<char>& code, VkShaderModule* shaderModule){
VkShaderModuleCreateInfo createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
createInfo.codeSize = code.size();
createInfo.pCode = reinterpret_cast<const uint32_t*>(code.data());
if (vkCreateShaderModule( lveDevice.device() , &createInfo, nullptr, shaderModule) != VK_SUCCESS){
throw std::runtime_error("failed to create shader module");
}
}

VkShaderModule

GLSL container on GPU, VkShaderModule is a handle


VkShaderModuleCreateInfo

this is Vulkan struct

typedef struct VkShaderModuleCreateInfo {
VkStructureType sType;
const void* pNext;
VkShaderModuleCreateFlags flags;
size_t codeSize;
const uint32_t* pCode;
} VkShaderModuleCreateInfo;
  • sType : must be VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
  • pNexr: for extension use
  • codeSize : SPIR-V code file size
  • pCode : pointer point to the shader code

vkCreateShaderModule

VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
VkDevice device,
const VkShaderModuleCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
VkShaderModule* pShaderModule);