Integrate graph-managed depth surfaces into camera stages

This commit is contained in:
2026-04-14 14:27:30 +08:00
parent 31a8125fc1
commit 4ee1bcc599
2 changed files with 150 additions and 23 deletions

View File

@@ -472,8 +472,11 @@ public:
return "MockObjectIdPass";
}
bool Execute(const RenderPassContext&) override {
bool Execute(const RenderPassContext& context) override {
m_state->eventLog.push_back("objectId");
lastSurfaceAutoTransitionEnabled = context.surface.IsAutoTransitionEnabled();
lastSurfaceWidth = context.surface.GetRenderAreaWidth();
lastSurfaceHeight = context.surface.GetRenderAreaHeight();
return m_renderResult;
}
@@ -484,6 +487,11 @@ public:
private:
std::shared_ptr<MockPipelineState> m_state;
bool m_renderResult = true;
public:
bool lastSurfaceAutoTransitionEnabled = true;
uint32_t lastSurfaceWidth = 0;
uint32_t lastSurfaceHeight = 0;
};
class MockScenePass final : public RenderPass {
@@ -908,9 +916,11 @@ TEST(CameraRenderer_Test, ExecutesObjectIdPassBetweenPipelineAndPostPassesWhenRe
camera->SetDepth(3.0f);
auto state = std::make_shared<MockPipelineState>();
auto objectIdPass = std::make_unique<MockObjectIdPass>(state);
MockObjectIdPass* objectIdPassRaw = objectIdPass.get();
CameraRenderer renderer(
std::make_unique<MockPipeline>(state),
std::make_unique<MockObjectIdPass>(state));
std::move(objectIdPass));
RenderPassSequence prePasses;
prePasses.AddPass(std::make_unique<TrackingPass>(state, "pre"));
@@ -940,6 +950,10 @@ TEST(CameraRenderer_Test, ExecutesObjectIdPassBetweenPipelineAndPostPassesWhenRe
"objectId",
"init:post",
"post" }));
ASSERT_NE(objectIdPassRaw, nullptr);
EXPECT_FALSE(objectIdPassRaw->lastSurfaceAutoTransitionEnabled);
EXPECT_EQ(objectIdPassRaw->lastSurfaceWidth, 320u);
EXPECT_EQ(objectIdPassRaw->lastSurfaceHeight, 180u);
}
TEST(CameraRenderer_Test, RoutesSceneColorThroughPostProcessAndFinalOutputStages) {
@@ -1386,10 +1400,12 @@ TEST(CameraRenderer_Test, ExecutesShadowCasterAndDepthOnlyRequestsBeforeMainPipe
EXPECT_EQ(shadowPassRaw->lastViewportHeight, 64u);
EXPECT_EQ(shadowPassRaw->lastSurfaceWidth, 128u);
EXPECT_EQ(shadowPassRaw->lastSurfaceHeight, 64u);
EXPECT_FALSE(shadowPassRaw->lastSurfaceAutoTransitionEnabled);
EXPECT_EQ(shadowPassRaw->lastClearFlags, RenderClearFlags::Depth);
EXPECT_EQ(shadowPassRaw->lastWorldPosition, XCEngine::Math::Vector3(7.0f, 8.0f, 9.0f));
EXPECT_EQ(depthPassRaw->lastViewportWidth, 96u);
EXPECT_EQ(depthPassRaw->lastViewportHeight, 48u);
EXPECT_FALSE(depthPassRaw->lastSurfaceAutoTransitionEnabled);
EXPECT_EQ(depthPassRaw->lastClearFlags, RenderClearFlags::Depth);
EXPECT_FLOAT_EQ(depthPassRaw->lastClearColor.r, 0.3f);
EXPECT_FLOAT_EQ(depthPassRaw->lastClearColor.g, 0.2f);
@@ -1448,6 +1464,7 @@ TEST(CameraRenderer_Test, AutoAllocatesDirectionalShadowSurfaceFromShadowPlan) {
EXPECT_EQ(shadowPassRaw->lastViewportHeight, 128u);
EXPECT_EQ(shadowPassRaw->lastSurfaceWidth, 256u);
EXPECT_EQ(shadowPassRaw->lastSurfaceHeight, 128u);
EXPECT_FALSE(shadowPassRaw->lastSurfaceAutoTransitionEnabled);
EXPECT_EQ(shadowPassRaw->lastClearFlags, RenderClearFlags::Depth);
EXPECT_EQ(shadowPassRaw->lastWorldPosition, XCEngine::Math::Vector3(3.0f, 4.0f, 5.0f));
EXPECT_EQ(allocationState->createTextureCalls, 1);