Grindstone Game Engine
v0.2.0
An open source game engine and toolkit.
Toggle main menu visibility
Loading...
Searching...
No Matches
RenderGraphPass.hpp
1
#pragma once
2
3
#include <vector>
4
#include <variant>
5
#include <functional>
6
7
#include <Common/HashedString.hpp>
8
#include <Common/Graphics/CommandBuffer.hpp>
9
10
#include "GpuPassType.hpp"
11
#include "RenderGraphContext.hpp"
12
#include "AttachmentInfo.hpp"
13
#include "BufferInfo.hpp"
14
#include "RenderGraphFrameResources.hpp"
15
16
namespace
Grindstone::GraphicsAPI {
17
class
Sampler
;
18
}
19
20
namespace
Grindstone::Renderer {
21
using
UnionResourceDescription = std::variant<Grindstone::Renderer::ImageDescription, Grindstone::Renderer::BufferDescription>;
22
23
class
RenderGraphPass
{
24
public
:
25
virtual
void
RealizeResources(
26
Grindstone::Renderer::RenderGraphContext
& context,
27
Grindstone::Renderer::RenderGraphFrameResources
& frameResources
28
) = 0;
29
virtual
void
Execute(
30
Grindstone::Renderer::RenderGraphContext
& context,
31
Grindstone::Renderer::RenderGraphFrameResources
& frameResources
32
) = 0;
33
34
Grindstone::String name;
35
GpuPassType type;
36
37
std::vector<Grindstone::GraphicsAPI::ImageBarrier> imageBarriers;
38
std::vector<Grindstone::GraphicsAPI::BufferBarrier> bufferBarriers;
39
40
protected
:
41
42
void
SubmitBarriers(
Grindstone::Renderer::RenderGraphContext
& context);
43
44
};
45
46
class
PipelineRenderGraphPass
:
public
RenderGraphPass
{
47
public
:
48
49
std::vector<GraphicsAPI::Sampler*> samplers;
50
std::vector<PassImageDesc> imageDescs;
51
std::vector<PassBufferDesc> bufferDescs;
52
Grindstone::GraphicsAPI::DescriptorSet
* passDescriptorSet =
nullptr
;
53
Grindstone::GraphicsAPI::PipelineLayout
* pipelineLayout =
nullptr
;
54
55
virtual
void
RealizeResources(
56
Grindstone::Renderer::RenderGraphContext
& context,
57
Grindstone::Renderer::RenderGraphFrameResources
& frameResources
58
)
override
;
59
60
};
61
62
class
GraphicsRenderGraphPassBase
:
public
PipelineRenderGraphPass
{
63
public
:
64
65
Grindstone::Renderer::MetaRect
metaRenderingArea;
66
67
virtual
Grindstone::Math::IntRect2D
PrepareGraphicsPass(
68
Grindstone::Renderer::RenderGraphContext
& context,
69
Grindstone::Renderer::RenderGraphFrameResources
& frameResources
70
);
71
virtual
void
EndGraphicsPass(
Grindstone::Renderer::RenderGraphContext
& context);
72
73
};
74
75
template
<
typename
ReturnType>
76
class
GraphicsRenderGraphPass
:
public
GraphicsRenderGraphPassBase
{
77
public
:
78
using
ExecutionCallbackFn = std::function<void(
Grindstone::Math::IntRect2D
,
Grindstone::Renderer::RenderGraphContext
&,
const
Grindstone::Renderer::RenderGraphFrameResources
&, ReturnType&)>;
79
ExecutionCallbackFn executionCallback;
80
ReturnType returnData;
81
82
virtual
void
Execute(
83
Grindstone::Renderer::RenderGraphContext
& context,
84
Grindstone::Renderer::RenderGraphFrameResources
& frameResources
85
)
override
{
86
GS_ASSERT_ENGINE_WITH_MESSAGE(executionCallback !=
nullptr
,
"Execution callback for rendergraph pass %s is not set."
, name.c_str());
87
88
Grindstone::Math::IntRect2D
renderingArea = PrepareGraphicsPass(context, frameResources);
89
executionCallback(renderingArea, context, frameResources, returnData);
90
EndGraphicsPass(context);
91
}
92
93
};
94
95
class
ComputeRenderGraphPassBase
:
public
PipelineRenderGraphPass
{
96
public
:
97
98
protected
:
99
100
void
PrepareComputePass(
Grindstone::Renderer::RenderGraphContext
& context);
101
102
};
103
104
template
<
typename
ReturnType>
105
class
ComputeRenderGraphPass
:
public
ComputeRenderGraphPassBase
{
106
public
:
107
using
ExecutionCallbackFn = std::function<void(
Grindstone::Renderer::RenderGraphContext
&,
const
Grindstone::Renderer::RenderGraphFrameResources
&, ReturnType&)>;
108
ExecutionCallbackFn executionCallback;
109
ReturnType returnData;
110
111
virtual
void
Execute(
112
Grindstone::Renderer::RenderGraphContext
& context,
113
Grindstone::Renderer::RenderGraphFrameResources
& frameResources
114
)
override
{
115
GS_ASSERT_ENGINE_WITH_MESSAGE(executionCallback !=
nullptr
,
"Execution callback for rendergraph pass %s is not set."
, name.c_str());
116
117
context.commandBuffer->BeginDebugLabelSection(name.c_str());
118
PrepareComputePass(context);
119
executionCallback(context, frameResources, returnData);
120
context.commandBuffer->EndDebugLabelSection();
121
}
122
123
};
124
125
struct
ImageTransfer
{
126
Grindstone::GraphicsAPI::Image
* dst;
127
Grindstone::GraphicsAPI::Image
* src;
128
GraphicsAPI::TextureFilter filter;
129
Grindstone::Math::IntBox3D
srcRegion;
130
Grindstone::Math::IntBox3D
dstRegion;
131
};
132
133
struct
BufferTransfer
{
134
Grindstone::GraphicsAPI::Buffer
* dstBuff;
135
Grindstone::GraphicsAPI::Buffer
* srcBuff;
136
uint64_t dstOffset;
137
uint64_t srcOffset;
138
uint64_t size;
139
};
140
141
class
TransferRenderGraphPass
:
public
RenderGraphPass
{
142
public
:
143
144
virtual
void
RealizeResources(
145
Grindstone::Renderer::RenderGraphContext
& context,
146
Grindstone::Renderer::RenderGraphFrameResources
& frameResources
147
)
override
;
148
virtual
void
Execute(
149
Grindstone::Renderer::RenderGraphContext
& context,
150
Grindstone::Renderer::RenderGraphFrameResources
& frameResources
151
)
override
;
152
153
protected
:
154
std::vector<ImageTransfer> imageTransfers;
155
std::vector<BufferTransfer> bufferTransfers;
156
};
157
158
class
PresentRenderGraphPass
:
public
RenderGraphPass
{
159
public
:
160
virtual
void
RealizeResources(
161
Grindstone::Renderer::RenderGraphContext
& context,
162
Grindstone::Renderer::RenderGraphFrameResources
& frameResources
163
)
override
;
164
virtual
void
Execute(
165
Grindstone::Renderer::RenderGraphContext
& context,
166
Grindstone::Renderer::RenderGraphFrameResources
& frameResources
167
)
override
;
168
169
};
170
}
Grindstone::GraphicsAPI::Buffer
Definition
Buffer.hpp:49
Grindstone::GraphicsAPI::DescriptorSet
Definition
DescriptorSet.hpp:15
Grindstone::GraphicsAPI::Image
Definition
Image.hpp:49
Grindstone::GraphicsAPI::PipelineLayout
Definition
PipelineLayout.hpp:18
Grindstone::GraphicsAPI::Sampler
Definition
Sampler.hpp:49
Grindstone::Renderer::ComputeRenderGraphPassBase
Definition
RenderGraphPass.hpp:95
Grindstone::Renderer::ComputeRenderGraphPass
Definition
RenderGraphPass.hpp:105
Grindstone::Renderer::GraphicsRenderGraphPassBase
Definition
RenderGraphPass.hpp:62
Grindstone::Renderer::GraphicsRenderGraphPass
Definition
RenderGraphPass.hpp:76
Grindstone::Renderer::PipelineRenderGraphPass
Definition
RenderGraphPass.hpp:46
Grindstone::Renderer::PresentRenderGraphPass
Definition
RenderGraphPass.hpp:158
Grindstone::Renderer::RenderGraphPass
Definition
RenderGraphPass.hpp:23
Grindstone::Renderer::TransferRenderGraphPass
Definition
RenderGraphPass.hpp:141
Grindstone::Math::IntBox3D
Definition
Rect.hpp:77
Grindstone::Math::IntRect2D
Definition
Rect.hpp:33
Grindstone::Renderer::BufferTransfer
Definition
RenderGraphPass.hpp:133
Grindstone::Renderer::ImageTransfer
Definition
RenderGraphPass.hpp:125
Grindstone::Renderer::MetaRect
Definition
AttachmentInfo.hpp:131
Grindstone::Renderer::RenderGraphContext
Definition
RenderGraphContext.hpp:24
Grindstone::Renderer::RenderGraphFrameResources
Definition
RenderGraphFrameResources.hpp:8
sources
code
Common
Rendering
RenderGraphPass.hpp
Generated by
1.17.0