実際にシェーダーをパイプラインで使用できるようにするには、パイプラインステージにシェーダーを割り当てる必要があります。
VkPipelineShaderStageCreateInfo shaderStageCreateInfoVert;
shaderStageCreateInfoVert.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
shaderStageCreateInfoVert.pNext = nullptr;
shaderStageCreateInfoVert.flags = 0;
shaderStageCreateInfoVert.stage = VK_SHADER_STAGE_VERTEX_BIT;
shaderStageCreateInfoVert.module = _shaderModuleVert;
shaderStageCreateInfoVert.pName = "main";
shaderStageCreateInfoVert.pSpecializationInfo = nullptr;
stype... 構造体のタイプ
stage... どのタイプのシェーダーか指定します。VKShaderStageFlagBitsから指定する。下記
module...このステージで含む、シェーダーモジュール
pName...このシェーダーのエントリーポイント名を指定するポインター
typedef enum VkShaderStageFlagBits {
VK_SHADER_STAGE_VERTEX_BIT = 0x00000001,
VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = 0x00000002,
VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = 0x00000004,
VK_SHADER_STAGE_GEOMETRY_BIT = 0x00000008,
VK_SHADER_STAGE_FRAGMENT_BIT = 0x00000010,
VK_SHADER_STAGE_COMPUTE_BIT = 0x00000020
}
同様にフラグメントシェーダのステージを作成します。
VkPipelineShaderStageCreateInfo shaderStageCreateInfoFrag;
shaderStageCreateInfoFrag.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
shaderStageCreateInfoFrag.pNext = nullptr;
shaderStageCreateInfoFrag.flags = 0;
shaderStageCreateInfoFrag.stage = VK_SHADER_STAGE_FRAGMENT_BIT;
shaderStageCreateInfoFrag.module = _shaderModuleFrag;
shaderStageCreateInfoFrag.pName = "main";
shaderStageCreateInfoFrag.pSpecializationInfo = nullptr;