SpiecsEngine
 
Loading...
Searching...
No Matches
RendererSubPass.cpp
Go to the documentation of this file.
1/**
2* @file RendererSubPass.cpp.
3* @brief The RendererSubPass Class Implementation.
4* @author Spices.
5*/
6
7#include "Pchheader.h"
9#include "Render/Vulkan/VulkanRenderBackend.h"
10#include "Render/Renderer/DescriptorSetManager/DescriptorSetManager.h"
11
12namespace Spices {
13
15 const std::string& subPassName ,
16 uint32_t index ,
18 )
19 : m_SubpassName(subPassName)
20 , m_Index (index)
21 , m_Statistics {nullptr}
22 {
24
25 if (flags == Querier::None) return;
26 m_Statistics = std::make_shared<RenderPassStatistics>(VulkanRenderBackend::GetState(), flags);
27 }
28
30 const VkAttachmentReference& attachmentReference,
31 const VkPipelineColorBlendAttachmentState& colorBlend
32 )
33 {
35
36 m_ColorAttachmentReference.push_back(attachmentReference);
37 m_ColorBlends.push_back(colorBlend);
38 }
39
41 const VkAttachmentReference& attachmentReference
42 )
43 {
45
46 m_DepthAttachmentReference.push_back(attachmentReference);
47 }
48
50 const VkAttachmentReference& attachmentReference
51 )
52 {
54
55 m_InputAttachmentReference.push_back(attachmentReference);
56 }
57
59 {
61
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();
68 }
69
71 {
73
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;
82
83 m_SubPassDependency.push_back(std::move(dependency));
84 }
85
87 {
89
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;
98
99 m_SubPassDependency.push_back(std::move(dependency));
100 }
101
103 uint32_t srcsubpass ,
104 uint32_t dstsubpass ,
105 VkAccessFlags srcAccessMask ,
106 VkAccessFlags dstAccessMask ,
107 VkPipelineStageFlags srcStageMask ,
108 VkPipelineStageFlags dstStageMask
109 )
110 {
112
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;
121
122 m_SubPassDependency.push_back(std::move(dependency));
123 }
124
125 void RendererSubPass::SetBuffer(const UInt2& i2, void* data, uint64_t size, uint64_t offset)
126 {
128
129 m_Buffers[i2]->WriteToBuffer(data, size, offset);
130 m_Buffers[i2]->Flush();
131 }
132
133 void RendererSubPass::BeginStatistics(VkCommandBuffer commandBuffer, Querier::StatisticsFlags flags) const
134 {
136
137 if (m_Statistics) m_Statistics->BeginStatistics(commandBuffer, flags);
138 }
139
140 void RendererSubPass::EndStatistics(VkCommandBuffer commandBuffer, Querier::StatisticsFlags flags) const
141 {
143
144 if (m_Statistics) m_Statistics->EndStatistics(commandBuffer, flags);
145 }
146
148 {
150
151 if (m_Statistics) m_Statistics->StoreStatistics();
152 }
153}
#define SPICES_PROFILE_ZONE
uint32_t StatisticsFlags
Definition Querier.h:32
Basic interface of Queries.
Definition Querier.h:17
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.
double unsigned int
Definition Math.h:17