From e9da6b290d760651d983bbe0f4c810b55c19bda6 Mon Sep 17 00:00:00 2001 From: ssdfasd <2156608475@qq.com> Date: Wed, 15 Apr 2026 22:32:21 +0800 Subject: [PATCH] refactor(rendering): shrink render pass graph compatibility helpers --- .../Rendering/RenderPassGraphContract.h | 36 ----------- .../CameraFrameGraph/StageContract.cpp | 46 ++++++++++----- .../src/Rendering/RenderPassGraphContract.cpp | 19 +----- .../test_render_graph_recording_context.cpp | 59 +++---------------- 4 files changed, 40 insertions(+), 120 deletions(-) diff --git a/engine/include/XCEngine/Rendering/RenderPassGraphContract.h b/engine/include/XCEngine/Rendering/RenderPassGraphContract.h index b0746e8d..94980ec9 100644 --- a/engine/include/XCEngine/Rendering/RenderPassGraphContract.h +++ b/engine/include/XCEngine/Rendering/RenderPassGraphContract.h @@ -59,15 +59,6 @@ bool RecordRasterRenderPass( const RenderPassRenderGraphContext& context, const RenderPassGraphIO& io); -inline bool RecordCompatibleRasterRenderPass( - RenderPass& pass, - const RenderPassRenderGraphContext& context, - const RenderPassGraphIO& io) { - return pass.SupportsRenderGraph() - ? pass.RecordRenderGraph(context) - : RecordRasterRenderPass(pass, context, io); -} - inline bool RecordSourceColorFullscreenRasterPass( RenderPass& pass, const RenderPassRenderGraphContext& context) { @@ -95,33 +86,6 @@ inline bool RecordDeclaredRasterPass( BuildDeclaredRasterPassGraphIO(context)); } -inline bool RecordCompatibleSourceColorFullscreenRasterPass( - RenderPass& pass, - const RenderPassRenderGraphContext& context) { - return RecordCompatibleRasterRenderPass( - pass, - context, - BuildSourceColorFullscreenRasterPassGraphIO()); -} - -inline bool RecordCompatibleColorDepthRasterPass( - RenderPass& pass, - const RenderPassRenderGraphContext& context) { - return RecordCompatibleRasterRenderPass( - pass, - context, - BuildColorDepthRasterPassGraphIO()); -} - -inline bool RecordCompatibleDeclaredRasterPass( - RenderPass& pass, - const RenderPassRenderGraphContext& context) { - return RecordCompatibleRasterRenderPass( - pass, - context, - BuildDeclaredRasterPassGraphIO(context)); -} - inline bool RecordSourceColorFullscreenCallbackRasterPass( const RenderPassRenderGraphContext& context, RenderPassGraphExecutePassCallback executePassCallback, diff --git a/engine/src/Rendering/Execution/Internal/CameraFrameGraph/StageContract.cpp b/engine/src/Rendering/Execution/Internal/CameraFrameGraph/StageContract.cpp index 22e7df7e..0043825d 100644 --- a/engine/src/Rendering/Execution/Internal/CameraFrameGraph/StageContract.cpp +++ b/engine/src/Rendering/Execution/Internal/CameraFrameGraph/StageContract.cpp @@ -92,6 +92,18 @@ bool ExecuteCameraFrameStandaloneStagePass( }); } +bool RecordCameraFrameFallbackCompatibleRenderPass( + RenderPass& pass, + const RenderPassRenderGraphContext& renderGraphContext, + const RenderPassGraphIO& fallbackIo) { + return pass.SupportsRenderGraph() + ? pass.RecordRenderGraph(renderGraphContext) + : RecordRasterRenderPass( + pass, + renderGraphContext, + fallbackIo); +} + std::vector BuildCameraFrameStageGraphDefaultColorTargets( const CameraFrameStageGraphBuildState& stageState) { if (stageState.outputColor.IsValid()) { @@ -335,8 +347,7 @@ bool RecordCameraFrameRegularSequenceStageRenderGraphPass( const RenderGraphImportedSurface& outputSurface, const RenderPassGraphBeginCallback& beginPassCallback, RenderPass& pass) { - return RecordCompatibleDeclaredRasterPass( - pass, + const RenderPassRenderGraphContext renderGraphContext = BuildRenderPassRenderGraphContext( BuildCameraFrameStageGraphRecordingContext( context, @@ -346,7 +357,11 @@ bool RecordCameraFrameRegularSequenceStageRenderGraphPass( BuildCameraFrameStageGraphSourceBinding(stageState), outputSurface.colorTextures, outputSurface.depthTexture), - beginPassCallback)); + beginPassCallback); + return RecordCameraFrameFallbackCompatibleRenderPass( + pass, + renderGraphContext, + BuildDeclaredRasterPassGraphIO(renderGraphContext)); } CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding( @@ -494,19 +509,22 @@ bool RecordCameraFrameFullscreenSequenceStageGraphPass( : RHI::ResourceStates::PixelShaderResource, currentSourceColor }; + const RenderPassRenderGraphContext renderGraphContext = + BuildRenderPassRenderGraphContext( + BuildCameraFrameStageGraphRecordingContext( + context, + stageState, + passName, + context.sceneData, + passSourceBinding, + std::vector{ passOutputColor }, + {}), + beginPassCallback); const bool recordSucceeded = - RecordCompatibleSourceColorFullscreenRasterPass( + RecordCameraFrameFallbackCompatibleRenderPass( pass, - BuildRenderPassRenderGraphContext( - BuildCameraFrameStageGraphRecordingContext( - context, - stageState, - passName, - context.sceneData, - passSourceBinding, - std::vector{ passOutputColor }, - {}), - beginPassCallback)); + renderGraphContext, + BuildSourceColorFullscreenRasterPassGraphIO()); if (recordSucceeded) { currentSourceColor = passOutputColor; } diff --git a/engine/src/Rendering/RenderPassGraphContract.cpp b/engine/src/Rendering/RenderPassGraphContract.cpp index 3b1fa3fe..d1bd8616 100644 --- a/engine/src/Rendering/RenderPassGraphContract.cpp +++ b/engine/src/Rendering/RenderPassGraphContract.cpp @@ -1,5 +1,6 @@ #include +#include "Rendering/Execution/Internal/CameraFrameGraph/SurfaceUtils.h" #include "Rendering/FrameData/RenderSceneData.h" #include "Rendering/Graph/RenderGraph.h" @@ -10,24 +11,6 @@ namespace XCEngine { namespace Rendering { namespace { -RenderSurface BuildGraphManagedImportedSurface( - const RenderSurface& templateSurface, - RHI::ResourceStates colorStateBefore, - RHI::ResourceStates colorStateAfter) { - RenderSurface surface = templateSurface; - surface.SetAutoTransitionEnabled(false); - surface.SetColorStateBefore(colorStateBefore); - surface.SetColorStateAfter(colorStateAfter); - return surface; -} - -RenderSurface BuildGraphManagedPassSurface( - const RenderSurface& templateSurface) { - RenderSurface surface = templateSurface; - surface.SetAutoTransitionEnabled(false); - return surface; -} - bool ResolveGraphManagedSourceSurface( const RenderSurface* sourceSurfaceTemplate, RHI::RHIResourceView* sourceColorView, diff --git a/tests/Rendering/unit/test_render_graph_recording_context.cpp b/tests/Rendering/unit/test_render_graph_recording_context.cpp index 36a1dd67..81bb82d7 100644 --- a/tests/Rendering/unit/test_render_graph_recording_context.cpp +++ b/tests/Rendering/unit/test_render_graph_recording_context.cpp @@ -49,30 +49,17 @@ RenderPassContext BuildPassContext( }; } -class CompatibleRecordingRenderPass final : public RenderPass { +class RasterRecordingRenderPass final : public RenderPass { public: const char* GetName() const override { - return "CompatibleRecordingRenderPass"; - } - - bool SupportsRenderGraph() const override { - return supportsRenderGraph; - } - - bool RecordRenderGraph(const RenderPassRenderGraphContext& context) override { - ++recordRenderGraphCalls; - lastPassName = context.passName; - return recordRenderGraphResult; + return "RasterRecordingRenderPass"; } bool Execute(const RenderPassContext&) override { - return true; + return executeResult; } - bool supportsRenderGraph = false; - bool recordRenderGraphResult = true; - int recordRenderGraphCalls = 0; - XCEngine::Containers::String lastPassName = {}; + bool executeResult = true; }; } // namespace @@ -124,7 +111,7 @@ TEST(RenderPassGraphContract_Test, BuildsDeclaredRasterPassGraphIOFromContextRes EXPECT_TRUE(io.writeDepth); } -TEST(RenderPassGraphContract_Test, RecordCompatibleDeclaredRasterPassUsesRenderGraphPathWhenSupported) { +TEST(RenderPassGraphContract_Test, RecordDeclaredRasterPassAddsRasterPassToGraph) { RenderGraph graph = {}; RenderGraphBuilder builder(graph); RenderGraphBlackboard blackboard = {}; @@ -144,40 +131,8 @@ TEST(RenderPassGraphContract_Test, RecordCompatibleDeclaredRasterPassUsesRenderG sourceSurface, executionSucceeded)); - CompatibleRecordingRenderPass pass = {}; - pass.supportsRenderGraph = true; - - EXPECT_TRUE(RecordCompatibleDeclaredRasterPass(pass, passContext)); - EXPECT_EQ(pass.recordRenderGraphCalls, 1); - EXPECT_EQ(pass.lastPassName, XCEngine::Containers::String("Recording.Pass")); - EXPECT_EQ(graph.GetPassCount(), 0u); -} - -TEST(RenderPassGraphContract_Test, RecordCompatibleDeclaredRasterPassFallsBackToNativeRasterRecording) { - RenderGraph graph = {}; - RenderGraphBuilder builder(graph); - RenderGraphBlackboard blackboard = {}; - RenderContext renderContext = {}; - RenderSceneData sceneData = {}; - RenderSurface surface(1280u, 720u); - RenderSurface sourceSurface(640u, 360u); - bool executionSucceeded = true; - const RenderPassRenderGraphContext passContext = - BuildRenderPassRenderGraphContext( - BuildCommonContext( - builder, - blackboard, - renderContext, - sceneData, - surface, - sourceSurface, - executionSucceeded)); - - CompatibleRecordingRenderPass pass = {}; - pass.supportsRenderGraph = false; - - EXPECT_TRUE(RecordCompatibleDeclaredRasterPass(pass, passContext)); - EXPECT_EQ(pass.recordRenderGraphCalls, 0); + RasterRecordingRenderPass pass = {}; + EXPECT_TRUE(RecordDeclaredRasterPass(pass, passContext)); EXPECT_EQ(graph.GetPassCount(), 1u); }