SpiecsEngine
 
Loading...
Searching...
No Matches

◆ BuildRendererPass()

void Spices::RendererPass::BuildRendererPass ( )

Build RenderPass.

Definition at line 125 of file RendererPass.cpp.

126 {
128
129 std::vector<VkAttachmentDescription> attachmentDescription;
130 m_AttachmentDescriptions.for_each([&](const std::string& name, const VkAttachmentDescription& description) {
131 attachmentDescription.push_back(description);
132 return false;
133 });
134
135 std::vector<VkSubpassDescription> subPassDescription;
136 m_SubPasses->for_each([&](const std::string& name, const std::shared_ptr<RendererSubPass>& subpass) {
137 subPassDescription.push_back(subpass->GetDescription());
138 return false;
139 });
140
141 std::vector<VkSubpassDependency> subPassDependency;
142 (*m_SubPasses->first())->AddFirstSubPassDependency();
143 m_SubPasses->for_each([&](const std::string& name, const std::shared_ptr<RendererSubPass>& subpass) {
144 subPassDependency.insert(subPassDependency.end(), subpass->GetDependency().begin(), subpass->GetDependency().end());
145 return false;
146 });
147
148 VkSubpassDependency outDependency{};
149 outDependency.srcSubpass = static_cast<uint32_t>(m_SubPasses->size() - 1);
150 outDependency.dstSubpass = VK_SUBPASS_EXTERNAL;
151 outDependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
152 outDependency.dstStageMask = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
153 outDependency.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
154 outDependency.dstAccessMask = VK_ACCESS_MEMORY_READ_BIT;
155 outDependency.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
156
157 subPassDependency.push_back(outDependency);
158
159 VkRenderPassCreateInfo renderPassInfo{};
160 renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
161 renderPassInfo.attachmentCount = static_cast<uint32_t>(attachmentDescription.size());
162 renderPassInfo.pAttachments = attachmentDescription.data();
163 renderPassInfo.subpassCount = static_cast<uint32_t>(subPassDescription.size());
164 renderPassInfo.pSubpasses = subPassDescription.data();
165 renderPassInfo.dependencyCount = static_cast<uint32_t>(subPassDependency.size());
166 renderPassInfo.pDependencies = subPassDependency.data();
167
169 {
170 std::stringstream ss;
171 ss << m_PassName << ": RendererPss Create Failed: Not enough imageview for attachment.";
172
173 SPICES_CORE_ERROR(ss.str())
174 }
175
176 m_RenderPass = std::make_unique<VulkanRenderPass>(
179 m_Device,
180 renderPassInfo,
184 );
185 }
#define SPICES_PROFILE_ZONE
uint32_t m_MaxLayers
Max Attachment layer.
scl::linked_unordered_map< std::string, VkAttachmentDescription > m_AttachmentDescriptions
VkAttachmentDescription this RenderPass handled.
std::vector< VkImageView > m_ImageViews
VkImageView this RenderPass handled.
std::shared_ptr< VulkanDevice > m_Device
VulkanDevice.
std::string m_PassName
RenderPass's name.
std::unique_ptr< VulkanRenderPass > m_RenderPass
VulkanRenderPass this RenderPass handled.
std::shared_ptr< scl::linked_unordered_map< std::string, std::shared_ptr< RendererSubPass > > > m_SubPasses
SubPass this RenderPass handled.
bool m_IsSwapChainImageInUse
True if the RendererPass is using swapchain image.
static VulkanState & GetState()
Get VulkanState in use.
size_t size()
The container's element size.
void for_each(F &fn)
Iter the container in order.

References m_PassName.