diff --git a/engine/include/XCEngine/Rendering/Execution/CameraFrameStage.h b/engine/include/XCEngine/Rendering/Execution/CameraFrameStage.h index fcdcb050..23ec12be 100644 --- a/engine/include/XCEngine/Rendering/Execution/CameraFrameStage.h +++ b/engine/include/XCEngine/Rendering/Execution/CameraFrameStage.h @@ -116,6 +116,12 @@ inline constexpr bool SupportsCameraFrameStandalonePass(CameraFrameStage stage) CameraFrameStageExecutionKind::StandalonePass; } +inline constexpr bool SupportsCameraFramePipelineGraphRecording( + CameraFrameStage stage) { + return GetCameraFrameStageExecutionKind(stage) == + CameraFrameStageExecutionKind::MainScenePipeline; +} + inline constexpr bool IsCameraFrameScenePassRequestStage(CameraFrameStage stage) { const CameraFrameStageRequestKind requestKind = GetCameraFrameStageRequestKind(stage); diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameGraph/PassRecorder.cpp b/engine/src/Rendering/Execution/Internal/CameraFrameGraph/PassRecorder.cpp index 9eeaa518..d6329389 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameGraph/PassRecorder.cpp +++ b/engine/src/Rendering/Execution/Internal/CameraFrameGraph/PassRecorder.cpp @@ -53,7 +53,7 @@ bool TryRecordCameraFrameMainSceneGraphPass( const CameraFrameRenderGraphStageContext& context, bool& handled) { CameraFrameRenderGraphBuilderContext& builder = context.builder; - if (stageState.stage != CameraFrameStage::MainScene || + if (!SupportsCameraFramePipelineGraphRecording(stageState.stage) || builder.executionState.pipeline == nullptr || !builder.executionState.pipeline->SupportsMainSceneRenderGraph()) { handled = false; diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameGraph/Recorder.cpp b/engine/src/Rendering/Execution/Internal/CameraFrameGraph/Recorder.cpp index c1a85113..297e369c 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameGraph/Recorder.cpp +++ b/engine/src/Rendering/Execution/Internal/CameraFrameGraph/Recorder.cpp @@ -37,8 +37,7 @@ bool RecordCameraFrameRenderGraphStages( builderContext }; for (const CameraFrameStageInfo& stageInfo : kOrderedCameraFrameStages) { - if (!plan.HasFrameStage(stageInfo.stage) && - stageInfo.stage != CameraFrameStage::MainScene) { + if (!plan.HasFrameStage(stageInfo.stage)) { continue; } diff --git a/tests/Rendering/unit/test_camera_frame_graph_stage_policy.cpp b/tests/Rendering/unit/test_camera_frame_graph_stage_policy.cpp index 1e8ed6b3..aa8c6806 100644 --- a/tests/Rendering/unit/test_camera_frame_graph_stage_policy.cpp +++ b/tests/Rendering/unit/test_camera_frame_graph_stage_policy.cpp @@ -93,6 +93,8 @@ TEST(CameraFrameRenderGraphStagePolicy_Test, ReportsStageFullscreenAndTransition EXPECT_TRUE(SupportsCameraFrameStandalonePass(CameraFrameStage::ObjectId)); EXPECT_FALSE(SupportsCameraFrameStandalonePass(CameraFrameStage::MainScene)); EXPECT_FALSE(SupportsCameraFrameStandalonePass(CameraFrameStage::OverlayPasses)); + EXPECT_TRUE(SupportsCameraFramePipelineGraphRecording(CameraFrameStage::MainScene)); + EXPECT_FALSE(SupportsCameraFramePipelineGraphRecording(CameraFrameStage::PostProcess)); } TEST(CameraFrameRenderGraphStagePolicy_Test, ReportsGraphManagedOutputColorStagesFromPlan) {