Move fullscreen graph ownership out of pass transitions

This commit is contained in:
2026-04-14 13:48:59 +08:00
parent 8bd375cd24
commit 9950e0a44f
6 changed files with 108 additions and 7 deletions

View File

@@ -517,10 +517,13 @@ public:
lastWorldPosition = context.sceneData.cameraData.worldPosition;
lastSurfaceWidth = context.surface.GetRenderAreaWidth();
lastSurfaceHeight = context.surface.GetRenderAreaHeight();
lastSurfaceAutoTransitionEnabled = context.surface.IsAutoTransitionEnabled();
lastHasSourceSurface = context.sourceSurface != nullptr;
if (context.sourceSurface != nullptr) {
lastSourceSurfaceWidth = context.sourceSurface->GetRenderAreaWidth();
lastSourceSurfaceHeight = context.sourceSurface->GetRenderAreaHeight();
lastSourceSurfaceAutoTransitionEnabled =
context.sourceSurface->IsAutoTransitionEnabled();
}
lastSourceColorView = context.sourceColorView;
lastSourceColorState = context.sourceColorState;
@@ -538,9 +541,11 @@ public:
XCEngine::Math::Vector3 lastWorldPosition = XCEngine::Math::Vector3::Zero();
uint32_t lastSurfaceWidth = 0;
uint32_t lastSurfaceHeight = 0;
bool lastSurfaceAutoTransitionEnabled = true;
bool lastHasSourceSurface = false;
uint32_t lastSourceSurfaceWidth = 0;
uint32_t lastSourceSurfaceHeight = 0;
bool lastSourceSurfaceAutoTransitionEnabled = true;
XCEngine::RHI::RHIResourceView* lastSourceColorView = nullptr;
XCEngine::RHI::ResourceStates lastSourceColorState = XCEngine::RHI::ResourceStates::Common;
@@ -1071,18 +1076,28 @@ TEST(CameraRenderer_Test, ChainsMultiPassPostProcessThroughIntermediateSurface)
EXPECT_TRUE(firstPassRaw->lastHasSourceSurface);
EXPECT_EQ(firstPassRaw->lastSourceSurfaceWidth, 256u);
EXPECT_EQ(firstPassRaw->lastSourceSurfaceHeight, 128u);
EXPECT_FALSE(firstPassRaw->lastSourceSurfaceAutoTransitionEnabled);
EXPECT_EQ(firstPassRaw->lastSourceColorView, sourceColorShaderView);
EXPECT_EQ(
firstPassRaw->lastSourceColorState,
XCEngine::RHI::ResourceStates::PixelShaderResource);
EXPECT_EQ(firstPassRaw->lastSurfaceWidth, 512u);
EXPECT_EQ(firstPassRaw->lastSurfaceHeight, 256u);
EXPECT_FALSE(firstPassRaw->lastSurfaceAutoTransitionEnabled);
ASSERT_NE(secondPassRaw, nullptr);
EXPECT_TRUE(secondPassRaw->lastHasSourceSurface);
EXPECT_EQ(secondPassRaw->lastSourceSurfaceWidth, 512u);
EXPECT_EQ(secondPassRaw->lastSourceSurfaceHeight, 256u);
EXPECT_FALSE(secondPassRaw->lastSourceSurfaceAutoTransitionEnabled);
EXPECT_NE(secondPassRaw->lastSourceColorView, nullptr);
EXPECT_NE(secondPassRaw->lastSourceColorView, sourceColorShaderView);
EXPECT_EQ(
secondPassRaw->lastSourceColorState,
XCEngine::RHI::ResourceStates::PixelShaderResource);
EXPECT_EQ(secondPassRaw->lastSurfaceWidth, 512u);
EXPECT_EQ(secondPassRaw->lastSurfaceHeight, 256u);
EXPECT_FALSE(secondPassRaw->lastSurfaceAutoTransitionEnabled);
EXPECT_EQ(allocationState->createTextureCalls, 1);
EXPECT_EQ(allocationState->createRenderTargetViewCalls, 1);
@@ -1182,15 +1197,30 @@ TEST(CameraRenderer_Test, KeepsPostProcessAndFinalOutputScratchSurfacesIndepende
ASSERT_NE(postSecondPassRaw, nullptr);
EXPECT_EQ(postSecondPassRaw->lastSourceSurfaceWidth, 512u);
EXPECT_EQ(postSecondPassRaw->lastSourceSurfaceHeight, 256u);
EXPECT_FALSE(postSecondPassRaw->lastSourceSurfaceAutoTransitionEnabled);
EXPECT_EQ(
postSecondPassRaw->lastSourceColorState,
XCEngine::RHI::ResourceStates::PixelShaderResource);
EXPECT_FALSE(postSecondPassRaw->lastSurfaceAutoTransitionEnabled);
ASSERT_NE(finalFirstPassRaw, nullptr);
EXPECT_EQ(finalFirstPassRaw->lastSourceSurfaceWidth, 512u);
EXPECT_EQ(finalFirstPassRaw->lastSourceSurfaceHeight, 256u);
EXPECT_FALSE(finalFirstPassRaw->lastSourceSurfaceAutoTransitionEnabled);
EXPECT_EQ(finalFirstPassRaw->lastSourceColorView, finalOutputSource);
EXPECT_EQ(
finalFirstPassRaw->lastSourceColorState,
XCEngine::RHI::ResourceStates::PixelShaderResource);
EXPECT_FALSE(finalFirstPassRaw->lastSurfaceAutoTransitionEnabled);
ASSERT_NE(finalSecondPassRaw, nullptr);
EXPECT_EQ(finalSecondPassRaw->lastSourceSurfaceWidth, 800u);
EXPECT_EQ(finalSecondPassRaw->lastSourceSurfaceHeight, 600u);
EXPECT_FALSE(finalSecondPassRaw->lastSourceSurfaceAutoTransitionEnabled);
EXPECT_NE(finalSecondPassRaw->lastSourceColorView, nullptr);
EXPECT_NE(finalSecondPassRaw->lastSourceColorView, finalOutputSource);
EXPECT_EQ(
finalSecondPassRaw->lastSourceColorState,
XCEngine::RHI::ResourceStates::PixelShaderResource);
EXPECT_FALSE(finalSecondPassRaw->lastSurfaceAutoTransitionEnabled);
EXPECT_EQ(allocationState->createTextureCalls, 2);
EXPECT_EQ(allocationState->createRenderTargetViewCalls, 2);