Skip to content

Commit ed852b9

Browse files
SSR and SSAO: fixed toggling of reverse depth at run time
1 parent 0f26754 commit ed852b9

File tree

4 files changed

+113
-93
lines changed

4 files changed

+113
-93
lines changed

PostProcess/ScreenSpaceAmbientOcclusion/interface/ScreenSpaceAmbientOcclusion.hpp

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ class ScreenSpaceAmbientOcclusion
140140
RESOURCE_IDENTIFIER_COUNT
141141
};
142142

143-
bool PrepareShadersAndPSO(const RenderAttributes& RenderAttribs, FEATURE_FLAGS FeatureFlags);
143+
bool PrepareShadersAndPSO(const RenderAttributes& RenderAttribs);
144144

145145
void UpdateConstantBuffer(const RenderAttributes& RenderAttribs, bool ResetTimer);
146146

@@ -162,30 +162,33 @@ class ScreenSpaceAmbientOcclusion
162162

163163
void ComputePlaceholderTexture(const RenderAttributes& RenderAttribs);
164164

165-
RenderTechnique& GetRenderTechnique(RENDER_TECH RenderTech, FEATURE_FLAGS FeatureFlags);
165+
RenderTechnique& GetRenderTechnique(RENDER_TECH RenderTech);
166166

167167
private:
168168
struct RenderTechniqueKey
169169
{
170170
const RENDER_TECH RenderTech;
171171
const FEATURE_FLAGS FeatureFlags;
172+
const bool UseReverseDepth;
172173

173-
RenderTechniqueKey(RENDER_TECH _RenderTech, FEATURE_FLAGS _FeatureFlags) :
174+
RenderTechniqueKey(RENDER_TECH _RenderTech, FEATURE_FLAGS _FeatureFlags, bool _UseReverseDepth) :
174175
RenderTech{_RenderTech},
175-
FeatureFlags{_FeatureFlags}
176+
FeatureFlags{_FeatureFlags},
177+
UseReverseDepth{_UseReverseDepth}
176178
{}
177179

178180
constexpr bool operator==(const RenderTechniqueKey& RHS) const
179181
{
180182
return RenderTech == RHS.RenderTech &&
181-
FeatureFlags == RHS.FeatureFlags;
183+
FeatureFlags == RHS.FeatureFlags &&
184+
UseReverseDepth == RHS.UseReverseDepth;
182185
}
183186

184187
struct Hasher
185188
{
186189
size_t operator()(const RenderTechniqueKey& Key) const
187190
{
188-
return ComputeHash(Key.FeatureFlags, Key.FeatureFlags);
191+
return ComputeHash(Key.FeatureFlags, Key.FeatureFlags, Key.UseReverseDepth);
189192
}
190193
};
191194
};
@@ -220,7 +223,8 @@ class ScreenSpaceAmbientOcclusion
220223
Uint32 m_CurrentFrameIdx = 0;
221224
Uint32 m_LastFrameIdx = ~0u;
222225

223-
FEATURE_FLAGS m_FeatureFlags = FEATURE_FLAG_NONE;
226+
FEATURE_FLAGS m_FeatureFlags = FEATURE_FLAG_NONE;
227+
bool m_UseReverseDepth = false;
224228
CreateInfo m_Settings;
225229

226230
Timer m_FrameTimer;

PostProcess/ScreenSpaceAmbientOcclusion/src/ScreenSpaceAmbientOcclusion.cpp

Lines changed: 48 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,34 @@ void ScreenSpaceAmbientOcclusion::PrepareResources(IRenderDevice* pDevice, IDevi
6363
DEV_CHECK_ERR(pDevice != nullptr, "pDevice must not be null");
6464
DEV_CHECK_ERR(pPostFXContext != nullptr, "pPostFXContext must not be null");
6565

66-
const PostFXContext::FrameDesc& FrameDesc = pPostFXContext->GetFrameDesc();
67-
const PostFXContext::SupportedDeviceFeatures& SupportedFeatures = pPostFXContext->GetSupportedFeatures();
66+
const PostFXContext::FrameDesc& FrameDesc = pPostFXContext->GetFrameDesc();
67+
const PostFXContext::SupportedDeviceFeatures& SupportedFeatures = pPostFXContext->GetSupportedFeatures();
68+
const PostFXContext::FEATURE_FLAGS PostFXFeatureFlags = pPostFXContext->GetFeatureFlags();
6869

6970
m_CurrentFrameIdx = FrameDesc.Index;
7071

71-
if (m_BackBufferWidth == FrameDesc.Width && m_BackBufferHeight == FrameDesc.Height && m_FeatureFlags == FeatureFlags)
72-
return;
72+
const bool UseReverseDepth = (PostFXFeatureFlags & PostFXContext::FEATURE_FLAG_REVERSED_DEPTH) != 0;
73+
if (m_FeatureFlags != FeatureFlags || m_UseReverseDepth != UseReverseDepth)
74+
{
75+
for (auto& Iter : m_RenderTech)
76+
Iter.second.SRB.Release();
77+
78+
if ((m_FeatureFlags & (FEATURE_FLAG_HALF_PRECISION_DEPTH | FEATURE_FLAG_HALF_RESOLUTION)) !=
79+
(FeatureFlags & (FEATURE_FLAG_HALF_PRECISION_DEPTH | FEATURE_FLAG_HALF_RESOLUTION)))
80+
{
81+
m_BackBufferWidth = 0;
82+
m_BackBufferHeight = 0;
83+
}
7384

74-
for (auto& Iter : m_RenderTech)
75-
Iter.second.SRB.Release();
85+
m_FeatureFlags = FeatureFlags;
86+
m_UseReverseDepth = UseReverseDepth;
87+
}
88+
89+
if (m_BackBufferWidth == FrameDesc.Width && m_BackBufferHeight == FrameDesc.Height)
90+
return;
7691

7792
m_BackBufferWidth = FrameDesc.Width;
7893
m_BackBufferHeight = FrameDesc.Height;
79-
m_FeatureFlags = FeatureFlags;
8094

8195
bool Unorm16Supported = pDevice->GetTextureFormatInfoExt(TEX_FORMAT_R16_UNORM).BindFlags & BIND_RENDER_TARGET;
8296
m_BackBufferFormats.ConvolutionDepth = (FeatureFlags & FEATURE_FLAG_HALF_PRECISION_DEPTH) && Unorm16Supported ? TEX_FORMAT_R16_UNORM : TEX_FORMAT_R32_FLOAT;
@@ -346,7 +360,7 @@ void ScreenSpaceAmbientOcclusion::Execute(const RenderAttributes& RenderAttribs)
346360

347361
ScopedDebugGroup DebugGroupGlobal{RenderAttribs.pDeviceContext, "ScreenSpaceAmbientOcclusion"};
348362

349-
bool AllPSOsReady = PrepareShadersAndPSO(RenderAttribs, m_FeatureFlags) && RenderAttribs.pPostFXContext->IsPSOsReady();
363+
bool AllPSOsReady = PrepareShadersAndPSO(RenderAttribs) && RenderAttribs.pPostFXContext->IsPSOsReady();
350364
UpdateConstantBuffer(RenderAttribs, !AllPSOsReady);
351365

352366
if (AllPSOsReady)
@@ -436,25 +450,23 @@ ITextureView* ScreenSpaceAmbientOcclusion::GetAmbientOcclusionSRV() const
436450
return m_Resources[RESOURCE_IDENTIFIER_OCCLUSION_HISTORY_RESOLVED].GetTextureSRV();
437451
}
438452

439-
bool ScreenSpaceAmbientOcclusion::PrepareShadersAndPSO(const RenderAttributes& RenderAttribs, FEATURE_FLAGS FeatureFlags)
453+
bool ScreenSpaceAmbientOcclusion::PrepareShadersAndPSO(const RenderAttributes& RenderAttribs)
440454
{
441-
const PostFXContext::SupportedDeviceFeatures& SupportedFeatures = RenderAttribs.pPostFXContext->GetSupportedFeatures();
442-
const PostFXContext::FEATURE_FLAGS PostFXFeatureFlags = RenderAttribs.pPostFXContext->GetFeatureFlags();
443-
444-
const SHADER_COMPILE_FLAGS ShaderFlags = RenderAttribs.pPostFXContext->GetShaderCompileFlags(m_Settings.EnableAsyncCreation);
445-
const PSO_CREATE_FLAGS PSOFlags = m_Settings.EnableAsyncCreation ? PSO_CREATE_FLAG_ASYNCHRONOUS : PSO_CREATE_FLAG_NONE;
455+
const PostFXContext::SupportedDeviceFeatures& SupportedFeatures = RenderAttribs.pPostFXContext->GetSupportedFeatures();
456+
const SHADER_COMPILE_FLAGS ShaderFlags = RenderAttribs.pPostFXContext->GetShaderCompileFlags(m_Settings.EnableAsyncCreation);
457+
const PSO_CREATE_FLAGS PSOFlags = m_Settings.EnableAsyncCreation ? PSO_CREATE_FLAG_ASYNCHRONOUS : PSO_CREATE_FLAG_NONE;
446458

447459
ShaderMacroHelper Macros;
448-
Macros.Add("SSAO_OPTION_INVERTED_DEPTH", (PostFXFeatureFlags & PostFXContext::FEATURE_FLAG_REVERSED_DEPTH) != 0);
460+
Macros.Add("SSAO_OPTION_INVERTED_DEPTH", m_UseReverseDepth);
449461
Macros.Add("SUPPORTED_SHADER_SRV", SupportedFeatures.TextureSubresourceViews);
450-
Macros.Add("SSAO_OPTION_UNIFORM_WEIGHTING", (FeatureFlags & FEATURE_FLAG_UNIFORM_WEIGHTING) != 0);
451-
Macros.Add("SSAO_OPTION_HALF_RESOLUTION", (FeatureFlags & FEATURE_FLAG_HALF_RESOLUTION) != 0);
452-
Macros.Add("SSAO_OPTION_HALF_PRECISION_DEPTH", (FeatureFlags & FEATURE_FLAG_HALF_PRECISION_DEPTH) != 0);
462+
Macros.Add("SSAO_OPTION_UNIFORM_WEIGHTING", (m_FeatureFlags & FEATURE_FLAG_UNIFORM_WEIGHTING) != 0);
463+
Macros.Add("SSAO_OPTION_HALF_RESOLUTION", (m_FeatureFlags & FEATURE_FLAG_HALF_RESOLUTION) != 0);
464+
Macros.Add("SSAO_OPTION_HALF_PRECISION_DEPTH", (m_FeatureFlags & FEATURE_FLAG_HALF_PRECISION_DEPTH) != 0);
453465

454466
bool AllPSOsReady = true;
455467

456468
{
457-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_DOWNSAMPLED_DEPTH_BUFFER, FeatureFlags);
469+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_DOWNSAMPLED_DEPTH_BUFFER);
458470

459471
if (!RenderTech.IsInitializedPSO())
460472
{
@@ -478,7 +490,7 @@ bool ScreenSpaceAmbientOcclusion::PrepareShadersAndPSO(const RenderAttributes& R
478490
}
479491

480492
{
481-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_PREFILTERED_DEPTH_BUFFER, FeatureFlags);
493+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_PREFILTERED_DEPTH_BUFFER);
482494
if (!RenderTech.IsInitializedPSO())
483495
{
484496
RefCntAutoPtr<IShader> VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags);
@@ -514,7 +526,7 @@ bool ScreenSpaceAmbientOcclusion::PrepareShadersAndPSO(const RenderAttributes& R
514526
}
515527

516528
{
517-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_AMBIENT_OCCLUSION, FeatureFlags);
529+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_AMBIENT_OCCLUSION);
518530
if (!RenderTech.IsInitializedPSO())
519531
{
520532
RefCntAutoPtr<IShader> VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags);
@@ -542,7 +554,7 @@ bool ScreenSpaceAmbientOcclusion::PrepareShadersAndPSO(const RenderAttributes& R
542554
}
543555

544556
{
545-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_BILATERAL_UPSAMPLING, FeatureFlags);
557+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_BILATERAL_UPSAMPLING);
546558
if (!RenderTech.IsInitializedPSO())
547559
{
548560
RefCntAutoPtr<IShader> VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags);
@@ -573,7 +585,7 @@ bool ScreenSpaceAmbientOcclusion::PrepareShadersAndPSO(const RenderAttributes& R
573585
}
574586

575587
{
576-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_TEMPORAL_ACCUMULATION, FeatureFlags);
588+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_TEMPORAL_ACCUMULATION);
577589
if (!RenderTech.IsInitializedPSO())
578590
{
579591
RefCntAutoPtr<IShader> VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags);
@@ -606,7 +618,7 @@ bool ScreenSpaceAmbientOcclusion::PrepareShadersAndPSO(const RenderAttributes& R
606618
}
607619

608620
{
609-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_CONVOLUTED_DEPTH_HISTORY, FeatureFlags);
621+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_CONVOLUTED_DEPTH_HISTORY);
610622
if (!RenderTech.IsInitializedPSO())
611623
{
612624
RefCntAutoPtr<IShader> VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags);
@@ -643,7 +655,7 @@ bool ScreenSpaceAmbientOcclusion::PrepareShadersAndPSO(const RenderAttributes& R
643655
}
644656

645657
{
646-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_RESAMPLED_HISTORY, FeatureFlags);
658+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_RESAMPLED_HISTORY);
647659
if (!RenderTech.IsInitializedPSO())
648660
{
649661
RefCntAutoPtr<IShader> VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags);
@@ -673,7 +685,7 @@ bool ScreenSpaceAmbientOcclusion::PrepareShadersAndPSO(const RenderAttributes& R
673685
}
674686

675687
{
676-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_SPATIAL_RECONSTRUCTION, FeatureFlags);
688+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_SPATIAL_RECONSTRUCTION);
677689
if (!RenderTech.IsInitializedPSO())
678690
{
679691
RefCntAutoPtr<IShader> VS = PostFXRenderTechnique::CreateShader(RenderAttribs.pDevice, RenderAttribs.pStateCache, "FullScreenTriangleVS.fx", "FullScreenTriangleVS", SHADER_TYPE_VERTEX, {}, ShaderFlags);
@@ -737,7 +749,7 @@ void ScreenSpaceAmbientOcclusion::ComputeDepthCheckerboard(const RenderAttribute
737749
if (!(m_FeatureFlags & FEATURE_FLAG_HALF_RESOLUTION))
738750
return;
739751

740-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_DOWNSAMPLED_DEPTH_BUFFER, m_FeatureFlags);
752+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_DOWNSAMPLED_DEPTH_BUFFER);
741753

742754
if (!RenderTech.IsInitializedSRB())
743755
RenderTech.InitializeSRB(false);
@@ -759,7 +771,7 @@ void ScreenSpaceAmbientOcclusion::ComputeDepthCheckerboard(const RenderAttribute
759771

760772
void ScreenSpaceAmbientOcclusion::ComputePrefilteredDepth(const RenderAttributes& RenderAttribs)
761773
{
762-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_PREFILTERED_DEPTH_BUFFER, m_FeatureFlags);
774+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_PREFILTERED_DEPTH_BUFFER);
763775
const PostFXContext::SupportedDeviceFeatures& SupportedFeatures = RenderAttribs.pPostFXContext->GetSupportedFeatures();
764776

765777
if (!RenderTech.IsInitializedSRB())
@@ -877,7 +889,7 @@ void ScreenSpaceAmbientOcclusion::ComputePrefilteredDepth(const RenderAttributes
877889

878890
void ScreenSpaceAmbientOcclusion::ComputeAmbientOcclusion(const RenderAttributes& RenderAttribs)
879891
{
880-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_AMBIENT_OCCLUSION, m_FeatureFlags);
892+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_AMBIENT_OCCLUSION);
881893

882894
if (!RenderTech.IsInitializedSRB())
883895
{
@@ -911,7 +923,7 @@ void ScreenSpaceAmbientOcclusion::ComputeBilateralUpsampling(const RenderAttribu
911923
if (!(m_FeatureFlags & FEATURE_FLAG_HALF_RESOLUTION))
912924
return;
913925

914-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_BILATERAL_UPSAMPLING, m_FeatureFlags);
926+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_BILATERAL_UPSAMPLING);
915927

916928
if (!RenderTech.IsInitializedSRB())
917929
{
@@ -948,7 +960,7 @@ void ScreenSpaceAmbientOcclusion::ComputePlaceholderTexture(const RenderAttribut
948960

949961
void ScreenSpaceAmbientOcclusion::ComputeTemporalAccumulation(const RenderAttributes& RenderAttribs)
950962
{
951-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_TEMPORAL_ACCUMULATION, m_FeatureFlags);
963+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_TEMPORAL_ACCUMULATION);
952964

953965
if (!RenderTech.IsInitializedSRB())
954966
{
@@ -991,7 +1003,7 @@ void ScreenSpaceAmbientOcclusion::ComputeTemporalAccumulation(const RenderAttrib
9911003

9921004
void ScreenSpaceAmbientOcclusion::ComputeConvolutedDepthHistory(const RenderAttributes& RenderAttribs)
9931005
{
994-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_CONVOLUTED_DEPTH_HISTORY, m_FeatureFlags);
1006+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_CONVOLUTED_DEPTH_HISTORY);
9951007
const PostFXContext::SupportedDeviceFeatures& SupportedFeatures = RenderAttribs.pPostFXContext->GetSupportedFeatures();
9961008

9971009
if (!RenderTech.IsInitializedSRB())
@@ -1173,7 +1185,7 @@ void ScreenSpaceAmbientOcclusion::ComputeConvolutedDepthHistory(const RenderAttr
11731185

11741186
void ScreenSpaceAmbientOcclusion::ComputeResampledHistory(const RenderAttributes& RenderAttribs)
11751187
{
1176-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_RESAMPLED_HISTORY, m_FeatureFlags);
1188+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_RESAMPLED_HISTORY);
11771189

11781190
if (!RenderTech.IsInitializedSRB())
11791191
{
@@ -1204,7 +1216,7 @@ void ScreenSpaceAmbientOcclusion::ComputeResampledHistory(const RenderAttributes
12041216

12051217
void ScreenSpaceAmbientOcclusion::ComputeSpatialReconstruction(const RenderAttributes& RenderAttribs)
12061218
{
1207-
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_SPATIAL_RECONSTRUCTION, m_FeatureFlags);
1219+
RenderTechnique& RenderTech = GetRenderTechnique(RENDER_TECH_COMPUTE_SPATIAL_RECONSTRUCTION);
12081220

12091221
if (!RenderTech.IsInitializedSRB())
12101222
{
@@ -1245,14 +1257,9 @@ void ScreenSpaceAmbientOcclusion::ComputeSpatialReconstruction(const RenderAttri
12451257
RenderAttribs.pDeviceContext->CopyTexture(CopyAttribs);
12461258
}
12471259

1248-
ScreenSpaceAmbientOcclusion::RenderTechnique& ScreenSpaceAmbientOcclusion::GetRenderTechnique(RENDER_TECH RenderTech, FEATURE_FLAGS FeatureFlags)
1260+
ScreenSpaceAmbientOcclusion::RenderTechnique& ScreenSpaceAmbientOcclusion::GetRenderTechnique(RENDER_TECH RenderTech)
12491261
{
1250-
auto Iter = m_RenderTech.find({RenderTech, FeatureFlags});
1251-
if (Iter != m_RenderTech.end())
1252-
return Iter->second;
1253-
1254-
auto Condition = m_RenderTech.emplace(RenderTechniqueKey{RenderTech, FeatureFlags}, RenderTechnique{});
1255-
return Condition.first->second;
1262+
return m_RenderTech[{RenderTech, m_FeatureFlags, m_UseReverseDepth}];
12561263
}
12571264

12581265
} // namespace Diligent

PostProcess/ScreenSpaceReflection/interface/ScreenSpaceReflection.hpp

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2023-2024 Diligent Graphics LLC
2+
* Copyright 2023-2025 Diligent Graphics LLC
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -161,7 +161,7 @@ class ScreenSpaceReflection
161161
RESOURCE_IDENTIFIER_COUNT
162162
};
163163

164-
bool PrepareShadersAndPSO(const RenderAttributes& RenderAttribs, FEATURE_FLAGS FeatureFlags);
164+
bool PrepareShadersAndPSO(const RenderAttributes& RenderAttribs);
165165

166166
void UpdateConstantBuffer(const RenderAttributes& RenderAttribs, bool ResetTimer);
167167

@@ -181,30 +181,33 @@ class ScreenSpaceReflection
181181

182182
void ComputePlaceholderTexture(const RenderAttributes& RenderAttribs);
183183

184-
RenderTechnique& GetRenderTechnique(RENDER_TECH RenderTech, FEATURE_FLAGS FeatureFlags);
184+
RenderTechnique& GetRenderTechnique(RENDER_TECH RenderTech);
185185

186186
private:
187187
struct RenderTechniqueKey
188188
{
189189
const RENDER_TECH RenderTech;
190190
const FEATURE_FLAGS FeatureFlags;
191+
const bool UseReverseDepth;
191192

192-
RenderTechniqueKey(RENDER_TECH _RenderTech, FEATURE_FLAGS _FeatureFlags) :
193+
RenderTechniqueKey(RENDER_TECH _RenderTech, FEATURE_FLAGS _FeatureFlags, bool _UseReverseDepth) :
193194
RenderTech{_RenderTech},
194-
FeatureFlags{_FeatureFlags}
195+
FeatureFlags{_FeatureFlags},
196+
UseReverseDepth{_UseReverseDepth}
195197
{}
196198

197199
constexpr bool operator==(const RenderTechniqueKey& RHS) const
198200
{
199201
return RenderTech == RHS.RenderTech &&
200-
FeatureFlags == RHS.FeatureFlags;
202+
FeatureFlags == RHS.FeatureFlags &&
203+
UseReverseDepth == RHS.UseReverseDepth;
201204
}
202205

203206
struct Hasher
204207
{
205208
size_t operator()(const RenderTechniqueKey& Key) const
206209
{
207-
return ComputeHash(Key.FeatureFlags, Key.FeatureFlags);
210+
return ComputeHash(Key.FeatureFlags, Key.FeatureFlags, Key.UseReverseDepth);
208211
}
209212
};
210213
};
@@ -223,7 +226,8 @@ class ScreenSpaceReflection
223226
Uint32 m_BackBufferWidth = 0;
224227
Uint32 m_BackBufferHeight = 0;
225228

226-
FEATURE_FLAGS m_FeatureFlags = FEATURE_FLAG_NONE;
229+
FEATURE_FLAGS m_FeatureFlags = FEATURE_FLAG_NONE;
230+
bool m_UseReverseDepth = false;
227231
CreateInfo m_Settings;
228232

229233
Timer m_FrameTimer;

0 commit comments

Comments
 (0)