Skip to content

Commit 5d22705

Browse files
* d3d12book 第六章 step1
+ 恢复渲染管线相关的代码。 - 去掉工程中x86的编译项(因为本项目仅支持x64)
1 parent 7967844 commit 5d22705

File tree

200 files changed

+13397
-506
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

200 files changed

+13397
-506
lines changed

Chapter 6 Drawing in Direct3D/Chapter 6 Drawing in Direct3D.vcxproj.filters

Lines changed: 587 additions & 0 deletions
Large diffs are not rendered by default.

Chapter 6 Drawing in Direct3D/Core/BufferManager.cpp

Lines changed: 154 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
namespace Graphics
2121
{
2222
DepthBuffer g_SceneDepthBuffer;
23+
ColorBuffer g_SceneColorBuffer;
24+
ColorBuffer g_OverlayBuffer;
25+
ColorBuffer g_HorizontalBuffer;
26+
27+
DXGI_FORMAT DefaultHdrColorFormat = DXGI_FORMAT_R11G11B10_FLOAT;
2328
}
2429

2530
#define T2X_COLOR_FORMAT DXGI_FORMAT_R10G10B10A2_UNORM
@@ -28,9 +33,157 @@ namespace Graphics
2833

2934
void Graphics::InitializeRenderingBuffers( uint32_t bufferWidth, uint32_t bufferHeight )
3035
{
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);
32181
}
182+
33183
void Graphics::DestroyRenderingBuffers()
34184
{
35185
g_SceneDepthBuffer.Destroy();
186+
g_SceneColorBuffer.Destroy();
187+
g_OverlayBuffer.Destroy();
188+
g_HorizontalBuffer.Destroy();
36189
}

Chapter 6 Drawing in Direct3D/Core/BufferManager.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,18 @@
1515

1616
#include "ColorBuffer.h"
1717
#include "DepthBuffer.h"
18+
#include "GpuBuffer.h"
1819
#include "GraphicsCore.h"
1920

2021
namespace Graphics
2122
{
2223
extern DepthBuffer g_SceneDepthBuffer; // D32_FLOAT_S8_UINT
24+
extern ColorBuffer g_SceneColorBuffer; // R11G11B10_FLOAT
25+
extern ColorBuffer g_OverlayBuffer; // R8G8B8A8_UNORM
26+
extern ColorBuffer g_HorizontalBuffer; // For separable (bicubic) upsampling
2327

2428
void InitializeRenderingBuffers(uint32_t NativeWidth, uint32_t NativeHeight );
29+
void ResizeDisplayDependentBuffers(uint32_t NativeWidth, uint32_t NativeHeight);
2530
void DestroyRenderingBuffers();
2631

2732
} // namespace Graphics

0 commit comments

Comments
 (0)