refactor(rendering): shrink render pass graph compatibility helpers

This commit is contained in:
2026-04-15 22:32:21 +08:00
parent a8c1337774
commit e9da6b290d
4 changed files with 40 additions and 120 deletions

View File

@@ -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,

View File

@@ -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<RenderGraphTextureHandle> 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<RenderGraphTextureHandle>{ passOutputColor },
{}),
beginPassCallback);
const bool recordSucceeded =
RecordCompatibleSourceColorFullscreenRasterPass(
RecordCameraFrameFallbackCompatibleRenderPass(
pass,
BuildRenderPassRenderGraphContext(
BuildCameraFrameStageGraphRecordingContext(
context,
stageState,
passName,
context.sceneData,
passSourceBinding,
std::vector<RenderGraphTextureHandle>{ passOutputColor },
{}),
beginPassCallback));
renderGraphContext,
BuildSourceColorFullscreenRasterPassGraphIO());
if (recordSucceeded) {
currentSourceColor = passOutputColor;
}

View File

@@ -1,5 +1,6 @@
#include <XCEngine/Rendering/RenderPassGraphContract.h>
#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,

View File

@@ -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);
}