refactor(rendering): generalize pipeline stage render graph boundary

This commit is contained in:
2026-04-15 19:31:52 +08:00
parent df8f433fbb
commit 7671663b12
20 changed files with 108 additions and 84 deletions

View File

@@ -110,7 +110,7 @@ inline RenderGraphRecordingContext BuildRenderGraphRecordingContext(
}
inline RenderGraphRecordingContext BuildRenderGraphRecordingContext(
const RenderPipelineMainSceneRenderGraphContext& context) {
const RenderPipelineStageRenderGraphContext& context) {
return {
context.graphBuilder,
context.passName,
@@ -176,11 +176,13 @@ inline SceneRenderFeaturePassRenderGraphContext BuildSceneRenderFeaturePassRende
};
}
inline RenderPipelineMainSceneRenderGraphContext BuildRenderPipelineMainSceneRenderGraphContext(
const RenderGraphRecordingContext& common) {
inline RenderPipelineStageRenderGraphContext BuildRenderPipelineStageRenderGraphContext(
const RenderGraphRecordingContext& common,
CameraFrameStage stage) {
return {
common.graphBuilder,
common.passName,
stage,
common.renderContext,
common.sceneData,
common.surface,

View File

@@ -61,9 +61,9 @@ public:
bool Initialize(const RenderContext& context) override;
void Shutdown() override;
bool SupportsMainSceneRenderGraph() const override;
bool RecordMainSceneRenderGraph(
const RenderPipelineMainSceneRenderGraphContext& context) override;
bool SupportsStageRenderGraph(CameraFrameStage stage) const override;
bool RecordStageRenderGraph(
const RenderPipelineStageRenderGraphContext& context) override;
bool Render(const FrameExecutionContext& executionContext) override;
bool Render(
const RenderContext& context,

View File

@@ -32,9 +32,9 @@ public:
bool Initialize(const RenderContext& context) override;
void Shutdown() override;
bool SupportsMainSceneRenderGraph() const override;
bool RecordMainSceneRenderGraph(
const RenderPipelineMainSceneRenderGraphContext& context) override;
bool SupportsStageRenderGraph(CameraFrameStage stage) const override;
bool RecordStageRenderGraph(
const RenderPipelineStageRenderGraphContext& context) override;
bool Render(const FrameExecutionContext& executionContext) override;
bool Render(
const RenderContext& context,

View File

@@ -19,9 +19,10 @@ namespace Rendering {
class RenderGraphBuilder;
struct RenderPipelineMainSceneRenderGraphContext {
struct RenderPipelineStageRenderGraphContext {
RenderGraphBuilder& graphBuilder;
Containers::String passName = {};
CameraFrameStage stage = CameraFrameStage::MainScene;
const RenderContext& renderContext;
const RenderSceneData& sceneData;
RenderSurface surfaceTemplate = {};
@@ -41,11 +42,11 @@ public:
virtual bool Initialize(const RenderContext& context) = 0;
virtual void Shutdown() = 0;
virtual bool SupportsMainSceneRenderGraph() const {
virtual bool SupportsStageRenderGraph(CameraFrameStage) const {
return false;
}
virtual bool RecordMainSceneRenderGraph(
const RenderPipelineMainSceneRenderGraphContext&) {
virtual bool RecordStageRenderGraph(
const RenderPipelineStageRenderGraphContext&) {
return false;
}
virtual bool Render(const FrameExecutionContext& executionContext) {

View File

@@ -13,12 +13,12 @@ namespace Rendering {
class SceneRenderFeatureHost;
Containers::String BuildRenderPipelineMainScenePhasePassName(
Containers::String BuildRenderPipelineStagePhasePassName(
const Containers::String& baseName,
ScenePhase scenePhase);
bool RecordRenderPipelineMainSceneFeaturePasses(
const RenderPipelineMainSceneRenderGraphContext& context,
bool RecordRenderPipelineStageFeaturePasses(
const RenderPipelineStageRenderGraphContext& context,
SceneRenderFeatureHost& featureHost,
SceneRenderInjectionPoint injectionPoint,
bool clearAttachments,
@@ -26,8 +26,8 @@ bool RecordRenderPipelineMainSceneFeaturePasses(
SceneRenderFeaturePassEndCallback endPassCallback = {},
bool* recordedAnyPass = nullptr);
bool RecordRenderPipelineMainScenePhasePass(
const RenderPipelineMainSceneRenderGraphContext& context,
bool RecordRenderPipelineStagePhasePass(
const RenderPipelineStageRenderGraphContext& context,
ScenePhase scenePhase,
RenderPassGraphExecutePassCallback executePassCallback,
RenderPassGraphBeginCallback beginPassCallback = {},

View File

@@ -181,7 +181,8 @@ bool CameraRenderer::Render(
return false;
}
if (plan.UsesGraphManagedOutputColor(CameraFrameStage::MainScene) &&
(m_pipeline == nullptr || !m_pipeline->SupportsMainSceneRenderGraph())) {
(m_pipeline == nullptr ||
!m_pipeline->SupportsStageRenderGraph(CameraFrameStage::MainScene))) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
"CameraRenderer::Render failed: graph-managed main scene color requires pipeline main-scene render-graph support");

View File

@@ -48,26 +48,27 @@ bool TryRecordCameraFrameStageStandaloneRenderGraphPass(
return true;
}
bool TryRecordCameraFrameMainSceneGraphPass(
bool TryRecordCameraFramePipelineStageGraphPass(
const CameraFrameStageGraphBuildState& stageState,
const CameraFrameRenderGraphStageContext& context,
bool& handled) {
CameraFrameRenderGraphBuilderContext& builder = context.builder;
if (!SupportsCameraFramePipelineGraphRecording(stageState.stage) ||
builder.executionState.pipeline == nullptr ||
!builder.executionState.pipeline->SupportsMainSceneRenderGraph()) {
!builder.executionState.pipeline->SupportsStageRenderGraph(
stageState.stage)) {
handled = false;
return true;
}
handled = true;
if (!RecordCameraFrameMainSceneGraphPass(
if (!RecordCameraFramePipelineStageGraphPass(
context,
stageState,
*builder.executionState.pipeline)) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
"CameraRenderer::Render failed: RenderPipeline::RecordMainSceneRenderGraph returned false");
"CameraRenderer::Render failed: RenderPipeline::RecordStageRenderGraph returned false");
return false;
}

View File

@@ -11,7 +11,7 @@ bool TryRecordCameraFrameStageStandaloneRenderGraphPass(
const CameraFrameRenderGraphStageContext& context,
bool& handled);
bool TryRecordCameraFrameMainSceneGraphPass(
bool TryRecordCameraFramePipelineStageGraphPass(
const CameraFrameStageGraphBuildState& stageState,
const CameraFrameRenderGraphStageContext& context,
bool& handled);

View File

@@ -554,22 +554,23 @@ RenderPassContext BuildCameraFrameStageFallbackPassContext(
};
}
RenderPipelineMainSceneRenderGraphContext BuildCameraFrameMainSceneStageRenderGraphContext(
RenderPipelineStageRenderGraphContext BuildCameraFramePipelineStageRenderGraphContext(
const CameraFrameRenderGraphStageContext& context,
const CameraFrameStageGraphBuildState& stageState) {
return BuildRenderPipelineMainSceneRenderGraphContext(
return BuildRenderPipelineStageRenderGraphContext(
BuildCameraFrameStageGraphRecordingContext(
context,
stageState,
context.sceneData));
context.sceneData),
stageState.stage);
}
bool RecordCameraFrameMainSceneGraphPass(
bool RecordCameraFramePipelineStageGraphPass(
const CameraFrameRenderGraphStageContext& context,
const CameraFrameStageGraphBuildState& stageState,
RenderPipelineRenderer& pipeline) {
return pipeline.RecordMainSceneRenderGraph(
BuildCameraFrameMainSceneStageRenderGraphContext(
return pipeline.RecordStageRenderGraph(
BuildCameraFramePipelineStageRenderGraphContext(
context,
stageState));
}

View File

@@ -146,11 +146,11 @@ RenderPassContext BuildCameraFrameStageFallbackPassContext(
const RenderContext& renderContext,
const RenderSceneData& sceneData);
RenderPipelineMainSceneRenderGraphContext BuildCameraFrameMainSceneStageRenderGraphContext(
RenderPipelineStageRenderGraphContext BuildCameraFramePipelineStageRenderGraphContext(
const CameraFrameRenderGraphStageContext& context,
const CameraFrameStageGraphBuildState& stageState);
bool RecordCameraFrameMainSceneGraphPass(
bool RecordCameraFramePipelineStageGraphPass(
const CameraFrameRenderGraphStageContext& context,
const CameraFrameStageGraphBuildState& stageState,
RenderPipelineRenderer& pipeline);

View File

@@ -20,7 +20,7 @@ using CameraFrameStageRecordHandler = bool (*)(
constexpr std::array<CameraFrameStageRecordHandler, 3u> kCameraFrameStageRecordHandlers = {
&TryRecordCameraFrameStageSequence,
&TryRecordCameraFrameStageStandaloneRenderGraphPass,
&TryRecordCameraFrameMainSceneGraphPass
&TryRecordCameraFramePipelineStageGraphPass
};
} // namespace

View File

@@ -36,7 +36,7 @@ bool ScenePhaseSamplesMainDirectionalShadow(ScenePhase scenePhase) {
bool BuiltinForwardMainSceneGraphBuilder::Record(
BuiltinForwardPipeline& pipeline,
const RenderPipelineMainSceneRenderGraphContext& context) {
const RenderPipelineStageRenderGraphContext& context) {
const RenderSurface graphManagedSurface =
BuildGraphManagedForwardSceneSurface(context.surfaceTemplate);
const bool hasSourceSurface = context.sourceSurface != nullptr;
@@ -58,8 +58,10 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
? frameResources->mainDirectionalShadow
: RenderGraphTextureHandle{};
bool* const executionSucceeded = recordingContext.executionSucceeded;
const RenderPipelineMainSceneRenderGraphContext graphContext =
BuildRenderPipelineMainSceneRenderGraphContext(recordingContext);
const RenderPipelineStageRenderGraphContext graphContext =
BuildRenderPipelineStageRenderGraphContext(
recordingContext,
CameraFrameStage::MainScene);
const std::shared_ptr<ForwardSceneGraphExecutionState> graphExecutionState =
std::make_shared<ForwardSceneGraphExecutionState>();
const SceneRenderFeaturePassBeginCallback beginRecordedPass =
@@ -76,7 +78,7 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
if (!pipeline.Initialize(passContext.renderContext)) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
"BuiltinForwardPipeline::RecordMainSceneRenderGraph failed during execution: Initialize returned false");
"BuiltinForwardPipeline::RecordStageRenderGraph failed during execution: Initialize returned false");
if (executionSucceeded != nullptr) {
*executionSucceeded = false;
}
@@ -93,7 +95,7 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
if (!pipeline.m_forwardSceneFeatureHost.Prepare(executionContext)) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
"BuiltinForwardPipeline::RecordMainSceneRenderGraph failed during execution: SceneRenderFeatureHost::Prepare returned false");
"BuiltinForwardPipeline::RecordStageRenderGraph failed during execution: SceneRenderFeatureHost::Prepare returned false");
if (executionSucceeded != nullptr) {
*executionSucceeded = false;
}
@@ -106,7 +108,7 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
if (!pipeline.BeginForwardScenePass(passContext, clearAttachments)) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
"BuiltinForwardPipeline::RecordMainSceneRenderGraph failed during execution: BeginForwardScenePass returned false");
"BuiltinForwardPipeline::RecordStageRenderGraph failed during execution: BeginForwardScenePass returned false");
if (executionSucceeded != nullptr) {
*executionSucceeded = false;
}
@@ -124,7 +126,7 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
for (const ForwardSceneStep& step : GetBuiltinForwardSceneSteps()) {
if (step.type == ForwardSceneStepType::InjectionPoint) {
bool recordedAnyPass = false;
if (!::XCEngine::Rendering::RecordRenderPipelineMainSceneFeaturePasses(
if (!::XCEngine::Rendering::RecordRenderPipelineStageFeaturePasses(
graphContext,
pipeline.m_forwardSceneFeatureHost,
step.injectionPoint,
@@ -150,7 +152,7 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
mainDirectionalShadowTexture.IsValid()
? std::vector<RenderGraphTextureHandle>{ mainDirectionalShadowTexture }
: std::vector<RenderGraphTextureHandle>{};
if (!::XCEngine::Rendering::RecordRenderPipelineMainScenePhasePass(
if (!::XCEngine::Rendering::RecordRenderPipelineStagePhasePass(
graphContext,
step.scenePhase,
[&pipeline, scenePhase = step.scenePhase](const RenderPassContext& passContext) {

View File

@@ -3,7 +3,7 @@
namespace XCEngine {
namespace Rendering {
struct RenderPipelineMainSceneRenderGraphContext;
struct RenderPipelineStageRenderGraphContext;
namespace Pipelines {
@@ -14,7 +14,7 @@ namespace Internal {
struct BuiltinForwardMainSceneGraphBuilder {
static bool Record(
BuiltinForwardPipeline& pipeline,
const RenderPipelineMainSceneRenderGraphContext& context);
const RenderPipelineStageRenderGraphContext& context);
};
} // namespace Internal

View File

@@ -59,13 +59,15 @@ bool BuiltinForwardPipeline::ShouldSampleMainDirectionalShadowMap(const RenderSc
IsDepthFormat(sceneData.lighting.mainDirectionalShadow.shadowMap->GetFormat());
}
bool BuiltinForwardPipeline::SupportsMainSceneRenderGraph() const {
return true;
bool BuiltinForwardPipeline::SupportsStageRenderGraph(
CameraFrameStage stage) const {
return SupportsCameraFramePipelineGraphRecording(stage);
}
bool BuiltinForwardPipeline::RecordMainSceneRenderGraph(
const RenderPipelineMainSceneRenderGraphContext& context) {
return Internal::BuiltinForwardMainSceneGraphBuilder::Record(*this, context);
bool BuiltinForwardPipeline::RecordStageRenderGraph(
const RenderPipelineStageRenderGraphContext& context) {
return context.stage == CameraFrameStage::MainScene &&
Internal::BuiltinForwardMainSceneGraphBuilder::Record(*this, context);
}
bool BuiltinForwardPipeline::Render(

View File

@@ -99,15 +99,16 @@ void ScriptableRenderPipelineHost::Shutdown() {
ShutdownCameraFrameStandalonePasses();
}
bool ScriptableRenderPipelineHost::SupportsMainSceneRenderGraph() const {
bool ScriptableRenderPipelineHost::SupportsStageRenderGraph(
CameraFrameStage stage) const {
return m_mainSceneRenderer != nullptr &&
m_mainSceneRenderer->SupportsMainSceneRenderGraph();
m_mainSceneRenderer->SupportsStageRenderGraph(stage);
}
bool ScriptableRenderPipelineHost::RecordMainSceneRenderGraph(
const RenderPipelineMainSceneRenderGraphContext& context) {
bool ScriptableRenderPipelineHost::RecordStageRenderGraph(
const RenderPipelineStageRenderGraphContext& context) {
return m_mainSceneRenderer != nullptr &&
m_mainSceneRenderer->RecordMainSceneRenderGraph(context);
m_mainSceneRenderer->RecordStageRenderGraph(context);
}
bool ScriptableRenderPipelineHost::Render(

View File

@@ -9,7 +9,7 @@
namespace XCEngine {
namespace Rendering {
Containers::String BuildRenderPipelineMainScenePhasePassName(
Containers::String BuildRenderPipelineStagePhasePassName(
const Containers::String& baseName,
ScenePhase scenePhase) {
std::string name = baseName.CStr();
@@ -21,8 +21,8 @@ Containers::String BuildRenderPipelineMainScenePhasePassName(
return Containers::String(name.c_str());
}
bool RecordRenderPipelineMainSceneFeaturePasses(
const RenderPipelineMainSceneRenderGraphContext& context,
bool RecordRenderPipelineStageFeaturePasses(
const RenderPipelineStageRenderGraphContext& context,
SceneRenderFeatureHost& featureHost,
SceneRenderInjectionPoint injectionPoint,
bool clearAttachments,
@@ -41,8 +41,8 @@ bool RecordRenderPipelineMainSceneFeaturePasses(
recordedAnyPass);
}
bool RecordRenderPipelineMainScenePhasePass(
const RenderPipelineMainSceneRenderGraphContext& context,
bool RecordRenderPipelineStagePhasePass(
const RenderPipelineStageRenderGraphContext& context,
ScenePhase scenePhase,
RenderPassGraphExecutePassCallback executePassCallback,
RenderPassGraphBeginCallback beginPassCallback,
@@ -52,7 +52,7 @@ bool RecordRenderPipelineMainScenePhasePass(
BuildRenderPassRenderGraphContext(
CloneRenderGraphRecordingContext(
BuildRenderGraphRecordingContext(context),
BuildRenderPipelineMainScenePhasePassName(
BuildRenderPipelineStagePhasePassName(
context.passName,
scenePhase)),
beginPassCallback,

View File

@@ -577,7 +577,7 @@ TEST(BuiltinForwardPipeline_Test, UsesFloat3PositionInputLayoutForStaticMeshVert
TEST(BuiltinForwardPipeline_Test, RecordsMainSceneGraphPassWithSampledShadowDependency) {
BuiltinForwardPipeline pipeline;
EXPECT_TRUE(pipeline.SupportsMainSceneRenderGraph());
EXPECT_TRUE(pipeline.SupportsStageRenderGraph(CameraFrameStage::MainScene));
RenderGraph graph = {};
RenderGraphBuilder graphBuilder(graph);
@@ -634,9 +634,10 @@ TEST(BuiltinForwardPipeline_Test, RecordsMainSceneGraphPassWithSampledShadowDepe
frameResources.mainScene.depth = depthTarget;
frameResources.mainDirectionalShadow = shadowTarget;
bool executionSucceeded = true;
const RenderPipelineMainSceneRenderGraphContext context = {
const RenderPipelineStageRenderGraphContext context = {
graphBuilder,
"MainScene",
CameraFrameStage::MainScene,
renderContext,
sceneData,
surface,
@@ -650,7 +651,7 @@ TEST(BuiltinForwardPipeline_Test, RecordsMainSceneGraphPassWithSampledShadowDepe
&blackboard
};
ASSERT_TRUE(pipeline.RecordMainSceneRenderGraph(context));
ASSERT_TRUE(pipeline.RecordStageRenderGraph(context));
CompiledRenderGraph compiledGraph = {};
String errorMessage;
@@ -1173,9 +1174,10 @@ TEST(BuiltinForwardPipeline_Test, RecordsActiveFeatureInjectionPassesIntoMainSce
frameResources.mainScene.color = colorTarget;
frameResources.mainScene.depth = depthTarget;
bool executionSucceeded = true;
const RenderPipelineMainSceneRenderGraphContext context = {
const RenderPipelineStageRenderGraphContext context = {
graphBuilder,
"MainScene",
CameraFrameStage::MainScene,
renderContext,
sceneData,
surface,
@@ -1189,7 +1191,7 @@ TEST(BuiltinForwardPipeline_Test, RecordsActiveFeatureInjectionPassesIntoMainSce
&blackboard
};
ASSERT_TRUE(pipeline.RecordMainSceneRenderGraph(context));
ASSERT_TRUE(pipeline.RecordStageRenderGraph(context));
CompiledRenderGraph compiledGraph = {};
String errorMessage;
@@ -1272,9 +1274,10 @@ TEST(BuiltinForwardPipeline_Test, ForwardsSourceColorTextureIntoFeatureInjection
RenderSceneData sceneData = {};
RenderGraphBlackboard blackboard = {};
bool executionSucceeded = true;
const RenderPipelineMainSceneRenderGraphContext context = {
const RenderPipelineStageRenderGraphContext context = {
graphBuilder,
"MainScene",
CameraFrameStage::MainScene,
renderContext,
sceneData,
surface,
@@ -1288,7 +1291,7 @@ TEST(BuiltinForwardPipeline_Test, ForwardsSourceColorTextureIntoFeatureInjection
&blackboard
};
ASSERT_TRUE(pipeline.RecordMainSceneRenderGraph(context));
ASSERT_TRUE(pipeline.RecordStageRenderGraph(context));
EXPECT_EQ(featureRaw->recordGraphCallCount, 1u);
EXPECT_TRUE(featureRaw->lastReceivedSourceColorTextureValid);

View File

@@ -100,14 +100,15 @@ public:
ShutdownCameraFrameStandalonePasses();
}
bool SupportsMainSceneRenderGraph() const override {
return true;
bool SupportsStageRenderGraph(CameraFrameStage stage) const override {
return SupportsCameraFramePipelineGraphRecording(stage);
}
bool RecordMainSceneRenderGraph(
const RenderPipelineMainSceneRenderGraphContext& context) override {
bool RecordStageRenderGraph(
const RenderPipelineStageRenderGraphContext& context) override {
++recordCalls;
lastPassName = context.passName.CStr();
lastStage = context.stage;
lastColorTargets = context.colorTargets;
lastDepthTarget = context.depthTarget;
lastExecutionSucceeded = context.executionSucceeded;
@@ -139,6 +140,7 @@ public:
int recordCalls = 0;
int renderCalls = 0;
std::string lastPassName = {};
CameraFrameStage lastStage = CameraFrameStage::PreScenePasses;
std::vector<RenderGraphTextureHandle> lastColorTargets = {};
RenderGraphTextureHandle lastDepthTarget = {};
bool* lastExecutionSucceeded = nullptr;
@@ -813,12 +815,13 @@ TEST(CameraFrameRenderGraphStageContract_Test, RecordsMainSceneGraphPassFromStag
stageState.outputSurface.depthTexture = RenderGraphTextureHandle{ 43u };
RecordingPipeline pipeline = {};
ASSERT_TRUE(RecordCameraFrameMainSceneGraphPass(
ASSERT_TRUE(RecordCameraFramePipelineStageGraphPass(
context,
stageState,
pipeline));
ASSERT_EQ(pipeline.recordCalls, 1);
EXPECT_STREQ(pipeline.lastPassName.c_str(), "MainScene");
EXPECT_EQ(pipeline.lastStage, CameraFrameStage::MainScene);
ASSERT_EQ(pipeline.lastColorTargets.size(), 1u);
EXPECT_EQ(pipeline.lastColorTargets[0].index, 41u);
EXPECT_EQ(pipeline.lastDepthTarget.index, 43u);

View File

@@ -432,12 +432,13 @@ public:
ShutdownCameraFrameStandalonePasses();
}
bool SupportsMainSceneRenderGraph() const override {
return m_state->supportsMainSceneRenderGraph;
bool SupportsStageRenderGraph(CameraFrameStage stage) const override {
return SupportsCameraFramePipelineGraphRecording(stage) &&
m_state->supportsMainSceneRenderGraph;
}
bool RecordMainSceneRenderGraph(
const RenderPipelineMainSceneRenderGraphContext& context) override {
bool RecordStageRenderGraph(
const RenderPipelineStageRenderGraphContext& context) override {
++m_state->recordMainSceneCalls;
m_state->lastReceivedRenderGraphBlackboard = context.blackboard != nullptr;
if (const CameraFrameRenderGraphResources* frameResources =
@@ -3729,9 +3730,10 @@ TEST(ScriptableRenderPipelineHost_Test, ForwardsRendererLifetimeAndFrameRenderin
bool executionSucceeded = true;
RenderSceneData graphSceneData =
CreateSceneDataForCamera(scene, *camera, request.surface);
const RenderPipelineMainSceneRenderGraphContext graphContext = {
const RenderPipelineStageRenderGraphContext graphContext = {
graphBuilder,
"MainScene",
CameraFrameStage::MainScene,
request.context,
graphSceneData,
request.surface,
@@ -3744,8 +3746,8 @@ TEST(ScriptableRenderPipelineHost_Test, ForwardsRendererLifetimeAndFrameRenderin
&executionSucceeded,
&blackboard
};
EXPECT_TRUE(host.SupportsMainSceneRenderGraph());
EXPECT_TRUE(host.RecordMainSceneRenderGraph(graphContext));
EXPECT_TRUE(host.SupportsStageRenderGraph(CameraFrameStage::MainScene));
EXPECT_TRUE(host.RecordStageRenderGraph(graphContext));
EXPECT_EQ(replacementState->recordMainSceneCalls, 1);
}

View File

@@ -295,7 +295,7 @@ TEST(RenderGraphRecordingContext_Test, BuildsFeaturePassContextAndCloneOverrides
EXPECT_TRUE(endCalled);
}
TEST(RenderGraphRecordingContext_Test, BuildsPipelineMainSceneContextFromSharedRecordingData) {
TEST(RenderGraphRecordingContext_Test, BuildsPipelineStageContextFromSharedRecordingData) {
RenderGraph graph = {};
RenderGraphBuilder builder(graph);
RenderGraphBlackboard blackboard = {};
@@ -314,11 +314,14 @@ TEST(RenderGraphRecordingContext_Test, BuildsPipelineMainSceneContextFromSharedR
sourceSurface,
executionSucceeded);
const RenderPipelineMainSceneRenderGraphContext pipelineContext =
BuildRenderPipelineMainSceneRenderGraphContext(commonContext);
const RenderPipelineStageRenderGraphContext pipelineContext =
BuildRenderPipelineStageRenderGraphContext(
commonContext,
CameraFrameStage::MainScene);
EXPECT_EQ(&pipelineContext.graphBuilder, &builder);
EXPECT_EQ(pipelineContext.passName, XCEngine::Containers::String("Recording.Pass"));
EXPECT_EQ(pipelineContext.stage, CameraFrameStage::MainScene);
EXPECT_EQ(&pipelineContext.renderContext, &renderContext);
EXPECT_EQ(&pipelineContext.sceneData, &sceneData);
EXPECT_EQ(pipelineContext.surfaceTemplate.GetWidth(), 800u);
@@ -390,7 +393,7 @@ TEST(RenderGraphRecordingContext_Test, CloneOverridesSelectedRecordingContextFie
EXPECT_EQ(overriddenContext.blackboard, &blackboard);
}
TEST(RenderGraphRecordingContext_Test, BuildsSharedRecordingDataFromPipelineMainSceneContext) {
TEST(RenderGraphRecordingContext_Test, BuildsSharedRecordingDataFromPipelineStageContext) {
RenderGraph graph = {};
RenderGraphBuilder builder(graph);
RenderGraphBlackboard blackboard = {};
@@ -408,8 +411,10 @@ TEST(RenderGraphRecordingContext_Test, BuildsSharedRecordingDataFromPipelineMain
surface,
sourceSurface,
executionSucceeded);
const RenderPipelineMainSceneRenderGraphContext pipelineContext =
BuildRenderPipelineMainSceneRenderGraphContext(commonContext);
const RenderPipelineStageRenderGraphContext pipelineContext =
BuildRenderPipelineStageRenderGraphContext(
commonContext,
CameraFrameStage::MainScene);
const RenderGraphRecordingContext rebuiltCommonContext =
BuildRenderGraphRecordingContext(pipelineContext);