From e93196c7d0f22c7b41d35bce804a12dc6a204764 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Wed, 15 Apr 2026 15:55:16 +0800 Subject: [PATCH] refactor(rendering): share stage runtime request resolution --- .../CameraFrameGraph/StageContract.cpp | 30 +++++------------ .../CameraFrameGraph/SurfaceResolver.h | 32 +++++++++++++++---- 2 files changed, 34 insertions(+), 28 deletions(-) diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameGraph/StageContract.cpp b/engine/src/Rendering/Execution/Internal/CameraFrameGraph/StageContract.cpp index 96f65a5b..4b589682 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameGraph/StageContract.cpp +++ b/engine/src/Rendering/Execution/Internal/CameraFrameGraph/StageContract.cpp @@ -1,6 +1,7 @@ #include "Rendering/Execution/Internal/CameraFrameGraph/StageContract.h" #include "Rendering/Execution/Internal/CameraFrameGraph/BuilderContext.h" +#include "Rendering/Execution/Internal/CameraFrameGraph/SurfaceResolver.h" #include "Rendering/Execution/Internal/CameraFrameGraph/SurfaceUtils.h" #include "Rendering/Execution/DirectionalShadowExecutionState.h" #include "Rendering/Graph/RenderGraph.h" @@ -31,20 +32,6 @@ struct CameraFrameStageRuntimeRequestBinding { } }; -const ScenePassRenderRequest* ResolveRequestedScenePassRequest( - const ScenePassRenderRequest* request) { - return request != nullptr && request->IsRequested() - ? request - : nullptr; -} - -const ObjectIdRenderRequest* ResolveRequestedObjectIdRequest( - const ObjectIdRenderRequest* request) { - return request != nullptr && request->IsRequested() - ? request - : nullptr; -} - CameraFrameStageRuntimeRequestBinding ResolveCameraFrameStageRuntimeRequestBinding( CameraFrameStage stage, const CameraFrameRenderGraphStageContext& context) { @@ -52,19 +39,18 @@ CameraFrameStageRuntimeRequestBinding ResolveCameraFrameStageRuntimeRequestBindi binding.requestKind = GetCameraFrameStageRequestKind(stage); switch (binding.requestKind) { case CameraFrameStageRequestKind::ShadowCaster: - binding.scenePassRequest = - ResolveRequestedScenePassRequest( - &context.shadowState.shadowCasterRequest); - break; case CameraFrameStageRequestKind::DepthOnly: binding.scenePassRequest = - ResolveRequestedScenePassRequest( - context.plan.GetScenePassRequest(stage)); + ResolveCameraFrameStageRuntimeScenePassRequest( + stage, + context.plan, + context.shadowState); break; case CameraFrameStageRequestKind::ObjectId: binding.objectIdRequest = - ResolveRequestedObjectIdRequest( - context.plan.GetObjectIdRequest(stage)); + ResolveCameraFrameStageRuntimeObjectIdRequest( + stage, + context.plan); break; default: break; diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameGraph/SurfaceResolver.h b/engine/src/Rendering/Execution/Internal/CameraFrameGraph/SurfaceResolver.h index 17a84743..4b584afe 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameGraph/SurfaceResolver.h +++ b/engine/src/Rendering/Execution/Internal/CameraFrameGraph/SurfaceResolver.h @@ -13,7 +13,7 @@ struct CameraFrameStageSourceBinding { RHI::ResourceStates sourceColorState = RHI::ResourceStates::Common; }; -inline const ScenePassRenderRequest* ResolveCameraFrameStageOutputScenePassRequest( +inline const ScenePassRenderRequest* ResolveCameraFrameStageRuntimeScenePassRequest( CameraFrameStage stage, const CameraFramePlan& plan, const DirectionalShadowExecutionState& shadowState) { @@ -23,12 +23,30 @@ inline const ScenePassRenderRequest* ResolveCameraFrameStageOutputScenePassReque ? &shadowState.shadowCasterRequest : nullptr; case CameraFrameStageRequestKind::DepthOnly: - return plan.GetScenePassRequest(stage); + if (const ScenePassRenderRequest* request = + plan.GetScenePassRequest(stage); + request != nullptr && request->IsRequested()) { + return request; + } + + return nullptr; default: return nullptr; } } +inline const ObjectIdRenderRequest* ResolveCameraFrameStageRuntimeObjectIdRequest( + CameraFrameStage stage, + const CameraFramePlan& plan) { + if (const ObjectIdRenderRequest* request = + plan.GetObjectIdRequest(stage); + request != nullptr && request->IsRequested()) { + return request; + } + + return nullptr; +} + inline const RenderSurface* ResolveCameraFrameStageOutputSurface( CameraFrameStage stage, const CameraFramePlan& plan, @@ -40,11 +58,11 @@ inline const RenderSurface* ResolveCameraFrameStageOutputSurface( } if (const ScenePassRenderRequest* scenePassRequest = - ResolveCameraFrameStageOutputScenePassRequest( + ResolveCameraFrameStageRuntimeScenePassRequest( stage, plan, shadowState); - scenePassRequest != nullptr && scenePassRequest->IsRequested()) { + scenePassRequest != nullptr) { return &scenePassRequest->surface; } @@ -57,8 +75,10 @@ inline const RenderSurface* ResolveCameraFrameStageOutputSurface( } if (const ObjectIdRenderRequest* objectIdRequest = - plan.GetObjectIdRequest(stage); - objectIdRequest != nullptr && objectIdRequest->IsRequested()) { + ResolveCameraFrameStageRuntimeObjectIdRequest( + stage, + plan); + objectIdRequest != nullptr) { return &objectIdRequest->surface; }