Group camera frame fullscreen color chain intent

This commit is contained in:
2026-04-15 00:32:23 +08:00
parent ac836ae961
commit 00fa6fffa0
7 changed files with 108 additions and 60 deletions

View File

@@ -1877,11 +1877,11 @@ TEST(CameraRenderer_Test, ResolvesGraphManagedFullscreenSequenceSourcesFromFrame
request.finalOutput.destinationSurface = request.surface;
CameraFramePlan plan = CameraFramePlan::FromRequest(request);
plan.usesGraphManagedMainSceneColor = true;
plan.colorChain.usesGraphManagedMainSceneColor = true;
plan.ConfigureGraphManagedMainSceneSurface();
plan.usesGraphManagedPostProcessColor = true;
plan.postProcessSource = CameraFrameColorSource::MainSceneColor;
plan.finalOutputSource = CameraFrameColorSource::PostProcessColor;
plan.colorChain.postProcess.usesGraphManagedOutputColor = true;
plan.colorChain.postProcess.source = CameraFrameColorSource::MainSceneColor;
plan.colorChain.finalOutput.source = CameraFrameColorSource::PostProcessColor;
ASSERT_TRUE(plan.IsPostProcessStageValid());
ASSERT_TRUE(plan.IsFinalOutputStageValid());
@@ -2877,9 +2877,11 @@ TEST(SceneRenderer_Test, BuildsCameraColorScalePostProcessRequestFromCameraPassS
EXPECT_TRUE(plan.IsPostProcessStageValid());
EXPECT_NE(plan.postProcess.passes, nullptr);
ASSERT_EQ(plan.postProcess.passes->GetPassCount(), 2u);
EXPECT_TRUE(plan.usesGraphManagedMainSceneColor);
EXPECT_FALSE(plan.usesGraphManagedPostProcessColor);
EXPECT_EQ(plan.postProcessSource, CameraFrameColorSource::MainSceneColor);
EXPECT_TRUE(plan.UsesGraphManagedMainSceneColor());
EXPECT_FALSE(plan.UsesGraphManagedOutputColor(CameraFrameStage::PostProcess));
EXPECT_EQ(
plan.ResolveStageColorSource(CameraFrameStage::PostProcess),
CameraFrameColorSource::MainSceneColor);
EXPECT_EQ(plan.postProcess.destinationSurface.GetColorAttachments()[0], backBufferColorView);
EXPECT_EQ(plan.postProcess.destinationSurface.GetDepthAttachment(), depthView);
EXPECT_EQ(
@@ -3015,8 +3017,10 @@ TEST(SceneRenderer_Test, BuildsFinalOutputRequestFromResolvedFinalColorPolicy) {
EXPECT_TRUE(plan.IsFinalOutputStageValid());
ASSERT_NE(plan.finalOutput.passes, nullptr);
EXPECT_EQ(plan.finalOutput.passes->GetPassCount(), 1u);
EXPECT_TRUE(plan.usesGraphManagedMainSceneColor);
EXPECT_EQ(plan.finalOutputSource, CameraFrameColorSource::MainSceneColor);
EXPECT_TRUE(plan.UsesGraphManagedMainSceneColor());
EXPECT_EQ(
plan.ResolveStageColorSource(CameraFrameStage::FinalOutput),
CameraFrameColorSource::MainSceneColor);
EXPECT_EQ(plan.finalOutput.destinationSurface.GetColorAttachments()[0], backBufferColorView);
EXPECT_EQ(plan.finalOutput.destinationSurface.GetDepthAttachment(), depthView);
EXPECT_EQ(
@@ -3106,10 +3110,14 @@ TEST(SceneRenderer_Test, RoutesPostProcessIntoIntermediateSurfaceBeforeFinalOutp
ASSERT_NE(plan.finalOutput.passes, nullptr);
EXPECT_EQ(plan.postProcess.passes->GetPassCount(), 1u);
EXPECT_EQ(plan.finalOutput.passes->GetPassCount(), 1u);
EXPECT_TRUE(plan.usesGraphManagedMainSceneColor);
EXPECT_TRUE(plan.usesGraphManagedPostProcessColor);
EXPECT_EQ(plan.postProcessSource, CameraFrameColorSource::MainSceneColor);
EXPECT_EQ(plan.finalOutputSource, CameraFrameColorSource::PostProcessColor);
EXPECT_TRUE(plan.UsesGraphManagedMainSceneColor());
EXPECT_TRUE(plan.UsesGraphManagedOutputColor(CameraFrameStage::PostProcess));
EXPECT_EQ(
plan.ResolveStageColorSource(CameraFrameStage::PostProcess),
CameraFrameColorSource::MainSceneColor);
EXPECT_EQ(
plan.ResolveStageColorSource(CameraFrameStage::FinalOutput),
CameraFrameColorSource::PostProcessColor);
const CameraFrameStageSourceBinding postProcessSource =
ResolveStageSourceBinding(CameraFrameStage::PostProcess, plan);
@@ -3251,8 +3259,10 @@ TEST(SceneRenderer_Test, KeepsMainSceneGraphManagedWhenPostProcessIsEnabledAcros
renderer.BuildFramePlans(scene, nullptr, context, surface);
ASSERT_EQ(firstFramePlans.size(), 1u);
CameraFramePlan firstFramePlan = firstFramePlans[0];
EXPECT_TRUE(firstFramePlan.usesGraphManagedMainSceneColor);
EXPECT_EQ(firstFramePlan.postProcessSource, CameraFrameColorSource::MainSceneColor);
EXPECT_TRUE(firstFramePlan.UsesGraphManagedMainSceneColor());
EXPECT_EQ(
firstFramePlan.ResolveStageColorSource(CameraFrameStage::PostProcess),
CameraFrameColorSource::MainSceneColor);
EXPECT_EQ(
firstFramePlan.GetMainSceneSurface().GetColorStateBefore(),
XCEngine::RHI::ResourceStates::Common);
@@ -3271,8 +3281,10 @@ TEST(SceneRenderer_Test, KeepsMainSceneGraphManagedWhenPostProcessIsEnabledAcros
renderer.BuildFramePlans(scene, nullptr, context, surface);
ASSERT_EQ(secondFramePlans.size(), 1u);
const CameraFramePlan secondFramePlan = secondFramePlans[0];
EXPECT_TRUE(secondFramePlan.usesGraphManagedMainSceneColor);
EXPECT_EQ(secondFramePlan.postProcessSource, CameraFrameColorSource::MainSceneColor);
EXPECT_TRUE(secondFramePlan.UsesGraphManagedMainSceneColor());
EXPECT_EQ(
secondFramePlan.ResolveStageColorSource(CameraFrameStage::PostProcess),
CameraFrameColorSource::MainSceneColor);
EXPECT_EQ(
secondFramePlan.GetMainSceneSurface().GetColorStateBefore(),
XCEngine::RHI::ResourceStates::Common);
@@ -3334,10 +3346,14 @@ TEST(SceneRenderer_Test, KeepsPostProcessOutputGraphManagedWhenFinalOutputIsEnab
CameraFramePlan firstFramePlan = firstFramePlans[0];
EXPECT_TRUE(firstFramePlans[0].postProcess.IsRequested());
EXPECT_TRUE(firstFramePlans[0].finalOutput.IsRequested());
EXPECT_TRUE(firstFramePlan.usesGraphManagedMainSceneColor);
EXPECT_TRUE(firstFramePlan.usesGraphManagedPostProcessColor);
EXPECT_EQ(firstFramePlan.postProcessSource, CameraFrameColorSource::MainSceneColor);
EXPECT_EQ(firstFramePlan.finalOutputSource, CameraFrameColorSource::PostProcessColor);
EXPECT_TRUE(firstFramePlan.UsesGraphManagedMainSceneColor());
EXPECT_TRUE(firstFramePlan.UsesGraphManagedOutputColor(CameraFrameStage::PostProcess));
EXPECT_EQ(
firstFramePlan.ResolveStageColorSource(CameraFrameStage::PostProcess),
CameraFrameColorSource::MainSceneColor);
EXPECT_EQ(
firstFramePlan.ResolveStageColorSource(CameraFrameStage::FinalOutput),
CameraFrameColorSource::PostProcessColor);
EXPECT_EQ(
firstFramePlan.GetMainSceneSurface().GetColorStateBefore(),
XCEngine::RHI::ResourceStates::Common);
@@ -3362,10 +3378,14 @@ TEST(SceneRenderer_Test, KeepsPostProcessOutputGraphManagedWhenFinalOutputIsEnab
renderer.BuildFramePlans(scene, nullptr, context, surface);
ASSERT_EQ(secondFramePlans.size(), 1u);
const CameraFramePlan secondFramePlan = secondFramePlans[0];
EXPECT_TRUE(secondFramePlan.usesGraphManagedMainSceneColor);
EXPECT_TRUE(secondFramePlan.usesGraphManagedPostProcessColor);
EXPECT_EQ(secondFramePlan.postProcessSource, CameraFrameColorSource::MainSceneColor);
EXPECT_EQ(secondFramePlan.finalOutputSource, CameraFrameColorSource::PostProcessColor);
EXPECT_TRUE(secondFramePlan.UsesGraphManagedMainSceneColor());
EXPECT_TRUE(secondFramePlan.UsesGraphManagedOutputColor(CameraFrameStage::PostProcess));
EXPECT_EQ(
secondFramePlan.ResolveStageColorSource(CameraFrameStage::PostProcess),
CameraFrameColorSource::MainSceneColor);
EXPECT_EQ(
secondFramePlan.ResolveStageColorSource(CameraFrameStage::FinalOutput),
CameraFrameColorSource::PostProcessColor);
EXPECT_EQ(
secondFramePlan.GetMainSceneSurface().GetColorStateBefore(),
XCEngine::RHI::ResourceStates::Common);