Constructor Function. Create VkPipeline.
Receive PipelineLayout from parameter.
Instance VkPipelineShaderStageCreateInfo.
Instance a VkPipelineVertexInputStateCreateInfo.
Instance a VkGraphicsPipelineCreateInfo.
Create Pipeline.
Receive PipelineLayout from parameter.
Instance VkPipelineShaderStageCreateInfo.
Instance a VkPipelineVertexInputStateCreateInfo.
Instance a VkGraphicsPipelineCreateInfo.
Create Pipeline.
23 {
25
30
34 std::vector<std::shared_ptr<VulkanShaderModule>> shaderModules;
35 for (auto& pair : shaders)
36 {
37 if (pair.first == "rchit") continue;
38
39 for (size_t i = 0; i < pair.second.size(); i++)
40 {
41 std::stringstream ss;
42 ss << pair.first << "." << pair.second[i];
43
44 shaderModules.push_back(ResourcePool<Shader>::Load<Shader>(ss.str(), pair.second[i], pair.first)->GetShaderModule());
45 }
46 }
47
51 std::vector<VkPipelineShaderStageCreateInfo> shaderStages;
52 for (size_t i = 0; i < shaderModules.size(); i++)
53 {
54 shaderStages.push_back(shaderModules[i]->GetShaderStageCreateInfo());
55 }
56
57 auto& bindingDescriptions = config.bindingDescriptions;
58 auto& attributeDescriptions = config.attributeDescriptions;
59
63 VkPipelineVertexInputStateCreateInfo vertexInputInfo{};
64 vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
65 vertexInputInfo.vertexAttributeDescriptionCount = static_cast<uint32_t>(attributeDescriptions.size());
66 vertexInputInfo.vertexBindingDescriptionCount = static_cast<uint32_t>(bindingDescriptions.size());
67 vertexInputInfo.pVertexAttributeDescriptions = vertexInputInfo.vertexAttributeDescriptionCount > 0 ? attributeDescriptions.data() : nullptr;
68 vertexInputInfo.pVertexBindingDescriptions = vertexInputInfo.vertexBindingDescriptionCount > 0 ? bindingDescriptions.data() : nullptr;
69
73 VkGraphicsPipelineCreateInfo pipelineInfo{};
74 pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
75 pipelineInfo.flags = VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV;
76 pipelineInfo.stageCount = static_cast<uint32_t>(shaderStages.size());
77 pipelineInfo.pStages = shaderStages.data();
78 pipelineInfo.pVertexInputState = &vertexInputInfo;
79 pipelineInfo.pInputAssemblyState = &config.inputAssemblyInfo;
80 pipelineInfo.pViewportState = &config.viewportInfo;
81 pipelineInfo.pRasterizationState = &config.rasterizationInfo;
82 pipelineInfo.pMultisampleState = &config.multisampleInfo;
83 pipelineInfo.pColorBlendState = &config.colorBlendInfo;
84 pipelineInfo.pDepthStencilState = &config.depthStencilInfo;
85 pipelineInfo.pDynamicState = &config.dynamicStateInfo;
86
88 pipelineInfo.renderPass = config.renderPass->Get();
89 pipelineInfo.subpass = config.subpass;
90
91 pipelineInfo.basePipelineIndex = -1;
92 pipelineInfo.basePipelineHandle = VK_NULL_HANDLE;
93
99 }
#define SPICES_PROFILE_ZONE
#define VK_CHECK(expr)
Vulkan Check macro. Verify Vulkan API Effectiveness.
VulkanState & m_VulkanState
The global VulkanState Referenced from VulkanRenderBackend.
VulkanObject(VulkanState &vulkanState)
Constructor Function. Init member variables.
VkPipeline m_Pipeline
The VkPipeline.
VkPipelineLayout m_PipelineLayout
The VkPipelineLayout.