@@ -114,25 +114,46 @@ static void UpdateRenderPassState(const HnBeginFrameTaskParams& Params,
114114 const TEXTURE_FORMAT* RTVFormats,
115115 Uint32 NumRTVs,
116116 TEXTURE_FORMAT DSVFormat,
117+ const HnRenderParam* RenderParam,
117118 HnRenderPassState& RPState)
118119{
119120 RPState.SetNumRenderTargets (NumRTVs);
120121 for (Uint32 i = 0 ; i < NumRTVs; ++i)
121122 RPState.SetRenderTargetFormat (i, RTVFormats[i]);
123+
122124 RPState.SetDepthStencilFormat (DSVFormat);
123125
124- RPState.SetDepthBias (Params.State .DepthBias , Params.State .SlopeScaledDepthBias );
125- RPState.SetDepthFunc (Params.State .DepthFunc );
126- RPState.SetDepthBiasEnabled (Params.State .DepthBiasEnabled );
127- RPState.SetEnableDepthTest (Params.State .DepthTestEnabled );
128- RPState.SetEnableDepthClamp (Params.State .DepthClampEnabled );
126+ bool FrontFaceCCW = true ;
127+
128+ float DepthBias = 0 ;
129+ float SlopeScaledDepthBias = 0 ;
130+ pxr::HdCompareFunction DepthFunc = RenderParam->GetConfig ().UseReverseDepth ? pxr::HdCmpFuncGreater : pxr::HdCmpFuncLess;
131+ bool DepthBiasEnabled = false ;
132+ bool DepthTestEnabled = true ;
133+ bool DepthClampEnabled = false ;
134+
135+ pxr::HdCullStyle CullStyle = pxr::HdCullStyleBack;
136+
137+ pxr::HdCompareFunction StencilFunc = pxr::HdCmpFuncAlways;
138+ int StencilRef = 0 ;
139+ int StencilMask = 0xFF ;
140+ pxr::HdStencilOp StencilFailOp = pxr::HdStencilOpKeep;
141+ pxr::HdStencilOp StencilZFailOp = pxr::HdStencilOpKeep;
142+ pxr::HdStencilOp StencilZPassOp = pxr::HdStencilOpKeep;
143+ bool StencilEnabled = false ;
129144
130- RPState.SetCullStyle (Params.State .CullStyle );
145+ RPState.SetDepthFunc (DepthFunc);
146+ RPState.SetDepthBias (DepthBias, SlopeScaledDepthBias);
147+ RPState.SetDepthBiasEnabled (DepthBiasEnabled);
148+ RPState.SetEnableDepthTest (DepthTestEnabled);
149+ RPState.SetEnableDepthClamp (DepthClampEnabled);
131150
132- RPState.SetStencil (Params.State .StencilFunc , Params.State .StencilRef , Params.State .StencilMask ,
133- Params.State .StencilFailOp , Params.State .StencilZFailOp , Params.State .StencilZPassOp );
151+ RPState.SetCullStyle (CullStyle);
134152
135- RPState.SetFrontFaceCCW (Params.State .FrontFaceCCW );
153+ RPState.SetStencilEnabled (StencilEnabled);
154+ RPState.SetStencil (StencilFunc, StencilRef, StencilMask, StencilFailOp, StencilZFailOp, StencilZPassOp);
155+
156+ RPState.SetFrontFaceCCW (FrontFaceCCW);
136157}
137158
138159static TEXTURE_FORMAT GetFallbackTextureFormat (TEXTURE_FORMAT Format)
@@ -154,25 +175,35 @@ void HnBeginFrameTask::Sync(pxr::HdSceneDelegate* Delegate,
154175 {
155176 if (GetTaskParams (Delegate, m_Params))
156177 {
178+ pxr::HdRenderIndex& RenderIndex = Delegate->GetRenderIndex ();
179+ const HnRenderDelegate* RenderDelegate = static_cast <const HnRenderDelegate*>(RenderIndex.GetRenderDelegate ());
180+ const HnRenderParam* RenderParam = static_cast <const HnRenderParam*>(RenderDelegate->GetRenderParam ());
181+
157182 UpdateRenderPassState (m_Params,
158183 m_Params.Formats .GBuffer .data (),
159184 m_Params.Formats .GBuffer .size (),
160185 m_Params.Formats .Depth ,
186+ RenderParam,
161187 m_RenderPassStates[HnRenderResourceTokens->renderPass_OpaqueSelected ]);
162188
163189 UpdateRenderPassState (m_Params,
164190 m_Params.Formats .GBuffer .data (),
165191 m_Params.Formats .GBuffer .size (),
166192 m_Params.Formats .Depth ,
193+ RenderParam,
167194 m_RenderPassStates[HnRenderResourceTokens->renderPass_OpaqueUnselected_TransparentAll ]);
168195
169196 UpdateRenderPassState (m_Params,
170197 nullptr ,
171198 0 ,
172199 m_Params.Formats .Depth ,
200+ RenderParam,
173201 m_RenderPassStates[HnRenderResourceTokens->renderPass_TransparentSelected ]);
174202
203+ m_DepthClearValue = RenderParam->GetConfig ().UseReverseDepth ? 0 .f : 1 .f ;
204+
175205 (*TaskCtx)[HnRenderResourceTokens->suspendSuperSampling ] = pxr::VtValue{true };
206+ (*TaskCtx)[HnRenderResourceTokens->backgroundDepth ] = pxr::VtValue{m_DepthClearValue};
176207 }
177208 }
178209
@@ -289,7 +320,7 @@ void HnBeginFrameTask::PrepareRenderTargets(pxr::HdRenderIndex* RenderIndex,
289320
290321 // We first render selected objects using the selection depth buffer.
291322 // Selection depth buffer is copied to the main depth buffer by the HnCopySelectionDepthTask.
292- RP_OpaqueSelected.Begin (HnFrameRenderTargets::GBUFFER_TARGET_COUNT, m_FrameRenderTargets.GBufferRTVs .data (), m_FrameRenderTargets.SelectionDepthDSV , ClearValues.data (), m_Params. ClearDepth , ~0u );
323+ RP_OpaqueSelected.Begin (HnFrameRenderTargets::GBUFFER_TARGET_COUNT, m_FrameRenderTargets.GBufferRTVs .data (), m_FrameRenderTargets.SelectionDepthDSV , ClearValues.data (), m_DepthClearValue , ~0u );
293324 RP_OpaqueUnselected_TransparentAll.Begin (HnFrameRenderTargets::GBUFFER_TARGET_COUNT, m_FrameRenderTargets.GBufferRTVs .data (), m_FrameRenderTargets.DepthDSV );
294325 RP_TransparentSelected.Begin (0 , nullptr , m_FrameRenderTargets.SelectionDepthDSV );
295326
@@ -365,7 +396,6 @@ void HnBeginFrameTask::Prepare(pxr::HdTaskContext* TaskCtx,
365396 (*TaskCtx)[HnRenderResourceTokens->closestSelectedLocation0Target ] = pxr::VtValue{m_ClosestSelLocnTargetId[0 ]};
366397 (*TaskCtx)[HnRenderResourceTokens->closestSelectedLocation1Target ] = pxr::VtValue{m_ClosestSelLocnTargetId[1 ]};
367398 (*TaskCtx)[HnRenderResourceTokens->jitteredFinalColorTarget ] = pxr::VtValue{m_JitteredFinalColorTargetId};
368- (*TaskCtx)[HnRenderResourceTokens->backgroundDepth ] = pxr::VtValue{m_Params.ClearDepth };
369399
370400 bool ResetTAA = false ;
371401 if (!m_Params.CameraId .IsEmpty ())
0 commit comments