20
20
namespace Graphics
21
21
{
22
22
DepthBuffer g_SceneDepthBuffer;
23
+ ColorBuffer g_SceneColorBuffer;
24
+ ColorBuffer g_OverlayBuffer;
25
+ ColorBuffer g_HorizontalBuffer;
26
+
27
+ DXGI_FORMAT DefaultHdrColorFormat = DXGI_FORMAT_R11G11B10_FLOAT;
23
28
}
24
29
25
30
#define T2X_COLOR_FORMAT DXGI_FORMAT_R10G10B10A2_UNORM
@@ -28,9 +33,157 @@ namespace Graphics
28
33
29
34
void Graphics::InitializeRenderingBuffers ( uint32_t bufferWidth, uint32_t bufferHeight )
30
35
{
31
- g_SceneDepthBuffer.Create ( L" Scene Depth Buffer" , bufferWidth, bufferHeight, DSV_FORMAT );
36
+ GraphicsContext& InitContext = GraphicsContext::Begin ();
37
+
38
+ // const uint32_t bufferWidth1 = (bufferWidth + 1) / 2;
39
+ // const uint32_t bufferWidth2 = (bufferWidth + 3) / 4;
40
+ // const uint32_t bufferWidth3 = (bufferWidth + 7) / 8;
41
+ // const uint32_t bufferWidth4 = (bufferWidth + 15) / 16;
42
+ // const uint32_t bufferWidth5 = (bufferWidth + 31) / 32;
43
+ // const uint32_t bufferWidth6 = (bufferWidth + 63) / 64;
44
+ // const uint32_t bufferHeight1 = (bufferHeight + 1) / 2;
45
+ // const uint32_t bufferHeight2 = (bufferHeight + 3) / 4;
46
+ // const uint32_t bufferHeight3 = (bufferHeight + 7) / 8;
47
+ // const uint32_t bufferHeight4 = (bufferHeight + 15) / 16;
48
+ // const uint32_t bufferHeight5 = (bufferHeight + 31) / 32;
49
+ // const uint32_t bufferHeight6 = (bufferHeight + 63) / 64;
50
+
51
+ EsramAllocator esram;
52
+
53
+ esram.PushStack ();
54
+
55
+ g_SceneColorBuffer.Create (L" Main Color Buffer" , bufferWidth, bufferHeight, 1 , DefaultHdrColorFormat, esram);
56
+ // g_VelocityBuffer.Create(L"Motion Vectors", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT);
57
+ // g_PostEffectsBuffer.Create(L"Post Effects Buffer", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R32_UINT);
58
+
59
+ esram.PushStack (); // Render HDR image
60
+
61
+ // g_LinearDepth[0].Create(L"Linear Depth 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM);
62
+ // g_LinearDepth[1].Create(L"Linear Depth 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16_UNORM);
63
+ // g_MinMaxDepth8.Create(L"MinMaxDepth 8x8", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_UINT, esram);
64
+ // g_MinMaxDepth16.Create(L"MinMaxDepth 16x16", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_UINT, esram);
65
+ // g_MinMaxDepth32.Create(L"MinMaxDepth 32x32", bufferWidth5, bufferHeight5, 1, DXGI_FORMAT_R32_UINT, esram);
66
+
67
+ g_SceneDepthBuffer.Create (L" Scene Depth Buffer" , bufferWidth, bufferHeight, DSV_FORMAT, esram);
68
+
69
+ // esram.PushStack(); // Begin opaque geometry
70
+ //
71
+ // esram.PushStack(); // Begin Shading
72
+ //
73
+ // g_SSAOFullScreen.Create(L"SSAO Full Res", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM);
74
+ //
75
+ // esram.PushStack(); // Begin generating SSAO
76
+ // g_DepthDownsize1.Create(L"Depth Down-Sized 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R32_FLOAT, esram);
77
+ // g_DepthDownsize2.Create(L"Depth Down-Sized 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R32_FLOAT, esram);
78
+ // g_DepthDownsize3.Create(L"Depth Down-Sized 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R32_FLOAT, esram);
79
+ // g_DepthDownsize4.Create(L"Depth Down-Sized 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R32_FLOAT, esram);
80
+ // g_DepthTiled1.CreateArray(L"Depth De-Interleaved 1", bufferWidth3, bufferHeight3, 16, DXGI_FORMAT_R16_FLOAT, esram);
81
+ // g_DepthTiled2.CreateArray(L"Depth De-Interleaved 2", bufferWidth4, bufferHeight4, 16, DXGI_FORMAT_R16_FLOAT, esram);
82
+ // g_DepthTiled3.CreateArray(L"Depth De-Interleaved 3", bufferWidth5, bufferHeight5, 16, DXGI_FORMAT_R16_FLOAT, esram);
83
+ // g_DepthTiled4.CreateArray(L"Depth De-Interleaved 4", bufferWidth6, bufferHeight6, 16, DXGI_FORMAT_R16_FLOAT, esram);
84
+ // g_AOMerged1.Create(L"AO Re-Interleaved 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram);
85
+ // g_AOMerged2.Create(L"AO Re-Interleaved 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram);
86
+ // g_AOMerged3.Create(L"AO Re-Interleaved 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram);
87
+ // g_AOMerged4.Create(L"AO Re-Interleaved 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram);
88
+ // g_AOSmooth1.Create(L"AO Smoothed 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram);
89
+ // g_AOSmooth2.Create(L"AO Smoothed 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram);
90
+ // g_AOSmooth3.Create(L"AO Smoothed 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram);
91
+ // g_AOHighQuality1.Create(L"AO High Quality 1", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram);
92
+ // g_AOHighQuality2.Create(L"AO High Quality 2", bufferWidth2, bufferHeight2, 1, DXGI_FORMAT_R8_UNORM, esram);
93
+ // g_AOHighQuality3.Create(L"AO High Quality 3", bufferWidth3, bufferHeight3, 1, DXGI_FORMAT_R8_UNORM, esram);
94
+ // g_AOHighQuality4.Create(L"AO High Quality 4", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R8_UNORM, esram);
95
+ // esram.PopStack(); // End generating SSAO
96
+ //
97
+ // g_ShadowBuffer.Create(L"Shadow Map", 2048, 2048, esram);
98
+ //
99
+ // esram.PopStack(); // End Shading
100
+ //
101
+ // esram.PushStack(); // Begin depth of field
102
+ // g_DoFTileClass[0].Create(L"DoF Tile Classification Buffer 0", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT);
103
+ // g_DoFTileClass[1].Create(L"DoF Tile Classification Buffer 1", bufferWidth4, bufferHeight4, 1, DXGI_FORMAT_R11G11B10_FLOAT);
104
+ //
105
+ // g_DoFPresortBuffer.Create(L"DoF Presort Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram);
106
+ // g_DoFPrefilter.Create(L"DoF PreFilter Buffer", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram);
107
+ // g_DoFBlurColor[0].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram);
108
+ // g_DoFBlurColor[1].Create(L"DoF Blur Color", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R11G11B10_FLOAT, esram);
109
+ // g_DoFBlurAlpha[0].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram);
110
+ // g_DoFBlurAlpha[1].Create(L"DoF FG Alpha", bufferWidth1, bufferHeight1, 1, DXGI_FORMAT_R8_UNORM, esram);
111
+ // g_DoFWorkQueue.Create(L"DoF Work Queue", bufferWidth4 * bufferHeight4, 4, esram);
112
+ // g_DoFFastQueue.Create(L"DoF Fast Queue", bufferWidth4 * bufferHeight4, 4, esram);
113
+ // g_DoFFixupQueue.Create(L"DoF Fixup Queue", bufferWidth4 * bufferHeight4, 4, esram);
114
+ // esram.PopStack(); // End depth of field
115
+ //
116
+ // g_TemporalColor[0].Create(L"Temporal Color 0", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT);
117
+ // g_TemporalColor[1].Create(L"Temporal Color 1", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R16G16B16A16_FLOAT);
118
+ // TemporalEffects::ClearHistory(InitContext);
119
+ //
120
+ // esram.PushStack(); // Begin motion blur
121
+ // g_MotionPrepBuffer.Create(L"Motion Blur Prep", bufferWidth1, bufferHeight1, 1, HDR_MOTION_FORMAT, esram);
122
+ // esram.PopStack(); // End motion blur
123
+ //
124
+ // esram.PopStack(); // End opaque geometry
125
+ //
126
+ // esram.PopStack(); // End HDR image
127
+ //
128
+ // esram.PushStack(); // Begin post processing
129
+ //
130
+ // // This is useful for storing per-pixel weights such as motion strength or pixel luminance
131
+ // g_LumaBuffer.Create(L"Luminance", bufferWidth, bufferHeight, 1, DXGI_FORMAT_R8_UNORM, esram);
132
+ // g_Histogram.Create(L"Histogram", 256, 4, esram);
133
+ //
134
+ // // Divisible by 128 so that after dividing by 16, we still have multiples of 8x8 tiles. The bloom
135
+ // // dimensions must be at least 1/4 native resolution to avoid undersampling.
136
+ // //uint32_t kBloomWidth = bufferWidth > 2560 ? Math::AlignUp(bufferWidth / 4, 128) : 640;
137
+ // //uint32_t kBloomHeight = bufferHeight > 1440 ? Math::AlignUp(bufferHeight / 4, 128) : 384;
138
+ // uint32_t kBloomWidth = bufferWidth > 2560 ? 1280 : 640;
139
+ // uint32_t kBloomHeight = bufferHeight > 1440 ? 768 : 384;
140
+ //
141
+ // esram.PushStack(); // Begin bloom and tone mapping
142
+ // g_LumaLR.Create(L"Luma Buffer", kBloomWidth, kBloomHeight, 1, DXGI_FORMAT_R8_UINT, esram);
143
+ // g_aBloomUAV1[0].Create(L"Bloom Buffer 1a", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram);
144
+ // g_aBloomUAV1[1].Create(L"Bloom Buffer 1b", kBloomWidth, kBloomHeight, 1, DefaultHdrColorFormat, esram);
145
+ // g_aBloomUAV2[0].Create(L"Bloom Buffer 2a", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram);
146
+ // g_aBloomUAV2[1].Create(L"Bloom Buffer 2b", kBloomWidth / 2, kBloomHeight / 2, 1, DefaultHdrColorFormat, esram);
147
+ // g_aBloomUAV3[0].Create(L"Bloom Buffer 3a", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram);
148
+ // g_aBloomUAV3[1].Create(L"Bloom Buffer 3b", kBloomWidth / 4, kBloomHeight / 4, 1, DefaultHdrColorFormat, esram);
149
+ // g_aBloomUAV4[0].Create(L"Bloom Buffer 4a", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram);
150
+ // g_aBloomUAV4[1].Create(L"Bloom Buffer 4b", kBloomWidth / 8, kBloomHeight / 8, 1, DefaultHdrColorFormat, esram);
151
+ // g_aBloomUAV5[0].Create(L"Bloom Buffer 5a", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram);
152
+ // g_aBloomUAV5[1].Create(L"Bloom Buffer 5b", kBloomWidth / 16, kBloomHeight / 16, 1, DefaultHdrColorFormat, esram);
153
+ // esram.PopStack(); // End tone mapping
154
+ //
155
+ // esram.PushStack(); // Begin antialiasing
156
+ // const uint32_t kFXAAWorkSize = bufferWidth * bufferHeight / 4 + 128;
157
+ // g_FXAAWorkQueue.Create(L"FXAA Work Queue", kFXAAWorkSize, sizeof(uint32_t), esram);
158
+ // g_FXAAColorQueue.Create(L"FXAA Color Queue", kFXAAWorkSize, sizeof(uint32_t), esram);
159
+ // g_FXAAWorkCounters.Create(L"FXAA Work Counters", 2, sizeof(uint32_t));
160
+ // InitContext.ClearUAV(g_FXAAWorkCounters);
161
+ // esram.PopStack(); // End antialiasing
162
+ //
163
+ // esram.PopStack(); // End post processing
164
+ //
165
+ // esram.PushStack(); // GenerateMipMaps() test
166
+ // g_GenMipsBuffer.Create(L"GenMips", bufferWidth, bufferHeight, 0, DXGI_FORMAT_R11G11B10_FLOAT, esram);
167
+ // esram.PopStack();
168
+
169
+ g_OverlayBuffer.Create (L" UI Overlay" , g_DisplayWidth, g_DisplayHeight, 1 , DXGI_FORMAT_R8G8B8A8_UNORM, esram);
170
+ g_HorizontalBuffer.Create (L" Bicubic Intermediate" , g_DisplayWidth, bufferHeight, 1 , DefaultHdrColorFormat, esram);
171
+
172
+ esram.PopStack (); // End final image
173
+
174
+ InitContext.Finish ();
175
+ }
176
+
177
+ void Graphics::ResizeDisplayDependentBuffers (uint32_t NativeWidth, uint32_t NativeHeight)
178
+ {
179
+ g_OverlayBuffer.Create (L" UI Overlay" , g_DisplayWidth, g_DisplayHeight, 1 , DXGI_FORMAT_R8G8B8A8_UNORM);
180
+ g_HorizontalBuffer.Create (L" Bicubic Intermediate" , g_DisplayWidth, NativeHeight, 1 , DefaultHdrColorFormat);
32
181
}
182
+
33
183
void Graphics::DestroyRenderingBuffers ()
34
184
{
35
185
g_SceneDepthBuffer.Destroy ();
186
+ g_SceneColorBuffer.Destroy ();
187
+ g_OverlayBuffer.Destroy ();
188
+ g_HorizontalBuffer.Destroy ();
36
189
}
0 commit comments