2
3
4
5
9#include "Render/Vulkan/VulkanRenderBackend.h"
10#include "Render/Renderer/DescriptorSetManager/DescriptorSetManager.h"
15 const std::string& subPassName ,
26 m_Statistics = std::make_shared<RenderPassStatistics>(VulkanRenderBackend::GetState(), flags);
30 const VkAttachmentReference& attachmentReference,
31 const VkPipelineColorBlendAttachmentState& colorBlend
36 m_ColorAttachmentReference.push_back(attachmentReference);
37 m_ColorBlends.push_back(colorBlend);
41 const VkAttachmentReference& attachmentReference
46 m_DepthAttachmentReference.push_back(attachmentReference);
50 const VkAttachmentReference& attachmentReference
55 m_InputAttachmentReference.push_back(attachmentReference);
62 m_SubPassDescriptions.pipelineBindPoint = VK_PIPELINE_BIND_POINT_GRAPHICS;
63 m_SubPassDescriptions.colorAttachmentCount =
static_cast<uint32_t>(m_ColorAttachmentReference.size());
64 m_SubPassDescriptions.pColorAttachments = m_ColorAttachmentReference.data();
65 m_SubPassDescriptions.pDepthStencilAttachment = m_DepthAttachmentReference.empty() ?
nullptr : m_DepthAttachmentReference.data();
66 m_SubPassDescriptions.inputAttachmentCount =
static_cast<uint32_t>(m_InputAttachmentReference.size());
67 m_SubPassDescriptions.pInputAttachments = m_InputAttachmentReference.data();
74 VkSubpassDependency dependency{};
75 dependency.srcSubpass = VK_SUBPASS_EXTERNAL;
76 dependency.dstSubpass = 0;
77 dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;
78 dependency.dstStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;
79 dependency.srcAccessMask = 0;
80 dependency.dstAccessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
81 dependency.dependencyFlags = 0;
83 m_SubPassDependency.push_back(std::move(dependency));
90 VkSubpassDependency dependency{};
91 dependency.srcSubpass = index - 1;
92 dependency.dstSubpass = index;
93 dependency.srcStageMask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
94 dependency.dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT;
95 dependency.srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
96 dependency.dstAccessMask = VK_ACCESS_INPUT_ATTACHMENT_READ_BIT;
97 dependency.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
99 m_SubPassDependency.push_back(std::move(dependency));
103 uint32_t srcsubpass ,
104 uint32_t dstsubpass ,
105 VkAccessFlags srcAccessMask ,
106 VkAccessFlags dstAccessMask ,
107 VkPipelineStageFlags srcStageMask ,
108 VkPipelineStageFlags dstStageMask
113 VkSubpassDependency dependency{};
114 dependency.srcSubpass = srcsubpass;
115 dependency.dstSubpass = dstsubpass;
116 dependency.srcStageMask = srcStageMask;
117 dependency.dstStageMask = dstStageMask;
118 dependency.srcAccessMask = srcAccessMask;
119 dependency.dstAccessMask = dstAccessMask;
120 dependency.dependencyFlags = VK_DEPENDENCY_BY_REGION_BIT;
122 m_SubPassDependency.push_back(std::move(dependency));
129 m_Buffers[i2]->WriteToBuffer(data, size, offset);
130 m_Buffers[i2]->Flush();
137 if (m_Statistics) m_Statistics->BeginStatistics(commandBuffer, flags);
144 if (m_Statistics) m_Statistics->EndStatistics(commandBuffer, flags);
151 if (m_Statistics) m_Statistics->StoreStatistics();
#define SPICES_PROFILE_ZONE
Basic interface of Queries.
void SetBuffer(const UInt2 &i2, void *data, uint64_t size=VK_WHOLE_SIZE, uint64_t offset=0)
Set Buffer data.
void StoreStatistics() const
Store statistics this frame.
std::string m_SubpassName
Sub pass Name.
void EndStatistics(VkCommandBuffer commandBuffer, Querier::StatisticsFlags flags=Querier::ALL) const
End Statistics this frame.
void AddInputAttachmentReference(const VkAttachmentReference &attachmentReference)
Add a Input Attachment to sub pass.
void AddSubPassDependency(uint32_t srcsubpass, uint32_t dstsubpass, VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask)
Add VkSubpassDependency.
uint32_t m_Index
Index of sub pass in pass.
void AddColorAttachmentReference(const VkAttachmentReference &attachmentReference, const VkPipelineColorBlendAttachmentState &colorBlend)
Add a Color Attachment to sub pass.
void AddFirstSubPassDependency()
Add First VkSubpassDependency.
void BeginStatistics(VkCommandBuffer commandBuffer, Querier::StatisticsFlags flags=Querier::ALL) const
Begin Statistics this frame.
void BuildSubPassDescription()
Build VkSubpassDescription.
RendererSubPass(const std::string &subPassName, uint32_t index, Querier::StatisticsFlags flags)
Constructor Function.
void AddDepthAttachmentReference(const VkAttachmentReference &attachmentReference)
Add a Depth Attachment to sub pass.
void BuildSubPassDependency(uint32_t index)
Build VkSubpassDependency.
This Class Combines some data relative to sub pass. Usually as a member variable of RendererPass.