Separate request and frame-stage execution contracts
This commit is contained in:
@@ -581,48 +581,49 @@ TEST(CameraRenderRequest_Test, ReportsFormalFrameStageContract) {
|
||||
EXPECT_STREQ(GetCameraFrameStageName(CameraFrameStage::FinalOutput), "FinalOutput");
|
||||
EXPECT_STREQ(GetCameraFrameStageName(CameraFrameStage::OverlayPasses), "OverlayPasses");
|
||||
|
||||
EXPECT_TRUE(request.HasFrameStage(CameraFrameStage::PreScenePasses));
|
||||
EXPECT_TRUE(request.HasFrameStage(CameraFrameStage::ShadowCaster));
|
||||
EXPECT_TRUE(request.HasFrameStage(CameraFrameStage::DepthOnly));
|
||||
EXPECT_TRUE(request.HasFrameStage(CameraFrameStage::MainScene));
|
||||
EXPECT_TRUE(request.HasFrameStage(CameraFrameStage::PostProcess));
|
||||
EXPECT_TRUE(request.HasFrameStage(CameraFrameStage::FinalOutput));
|
||||
EXPECT_TRUE(request.HasFrameStage(CameraFrameStage::ObjectId));
|
||||
EXPECT_TRUE(request.HasFrameStage(CameraFrameStage::PostScenePasses));
|
||||
EXPECT_TRUE(request.HasFrameStage(CameraFrameStage::OverlayPasses));
|
||||
const CameraFramePlan plan = CameraFramePlan::FromRequest(request);
|
||||
EXPECT_TRUE(plan.HasFrameStage(CameraFrameStage::PreScenePasses));
|
||||
EXPECT_TRUE(plan.HasFrameStage(CameraFrameStage::ShadowCaster));
|
||||
EXPECT_TRUE(plan.HasFrameStage(CameraFrameStage::DepthOnly));
|
||||
EXPECT_TRUE(plan.HasFrameStage(CameraFrameStage::MainScene));
|
||||
EXPECT_TRUE(plan.HasFrameStage(CameraFrameStage::PostProcess));
|
||||
EXPECT_TRUE(plan.HasFrameStage(CameraFrameStage::FinalOutput));
|
||||
EXPECT_TRUE(plan.HasFrameStage(CameraFrameStage::ObjectId));
|
||||
EXPECT_TRUE(plan.HasFrameStage(CameraFrameStage::PostScenePasses));
|
||||
EXPECT_TRUE(plan.HasFrameStage(CameraFrameStage::OverlayPasses));
|
||||
|
||||
EXPECT_EQ(request.GetPassSequence(CameraFrameStage::PreScenePasses), &prePasses);
|
||||
EXPECT_EQ(request.GetPassSequence(CameraFrameStage::PostProcess), &postProcessPasses);
|
||||
EXPECT_EQ(request.GetPassSequence(CameraFrameStage::FinalOutput), &finalOutputPasses);
|
||||
EXPECT_EQ(request.GetPassSequence(CameraFrameStage::PostScenePasses), &postPasses);
|
||||
EXPECT_EQ(request.GetPassSequence(CameraFrameStage::OverlayPasses), &overlayPasses);
|
||||
EXPECT_EQ(request.GetScenePassRequest(CameraFrameStage::ShadowCaster), &request.shadowCaster);
|
||||
EXPECT_EQ(request.GetScenePassRequest(CameraFrameStage::DepthOnly), &request.depthOnly);
|
||||
EXPECT_EQ(request.GetScenePassRequest(CameraFrameStage::MainScene), nullptr);
|
||||
EXPECT_EQ(request.GetObjectIdRequest(CameraFrameStage::ObjectId), &request.objectId);
|
||||
EXPECT_EQ(request.GetObjectIdRequest(CameraFrameStage::MainScene), nullptr);
|
||||
EXPECT_TRUE(request.RequiresIntermediateSceneColor());
|
||||
EXPECT_EQ(request.GetMainSceneSurface().GetRenderAreaWidth(), 256u);
|
||||
EXPECT_EQ(request.GetMainSceneSurface().GetRenderAreaHeight(), 128u);
|
||||
EXPECT_EQ(request.GetFinalCompositedSurface().GetRenderAreaWidth(), 640u);
|
||||
EXPECT_EQ(request.GetFinalCompositedSurface().GetRenderAreaHeight(), 360u);
|
||||
ASSERT_NE(request.GetOutputSurface(CameraFrameStage::PostProcess), nullptr);
|
||||
EXPECT_EQ(request.GetOutputSurface(CameraFrameStage::PostProcess)->GetRenderAreaWidth(), 512u);
|
||||
ASSERT_NE(request.GetSourceSurface(CameraFrameStage::PostProcess), nullptr);
|
||||
EXPECT_EQ(request.GetSourceSurface(CameraFrameStage::PostProcess)->GetRenderAreaWidth(), 256u);
|
||||
EXPECT_EQ(plan.GetPassSequence(CameraFrameStage::PreScenePasses), &prePasses);
|
||||
EXPECT_EQ(plan.GetPassSequence(CameraFrameStage::PostProcess), &postProcessPasses);
|
||||
EXPECT_EQ(plan.GetPassSequence(CameraFrameStage::FinalOutput), &finalOutputPasses);
|
||||
EXPECT_EQ(plan.GetPassSequence(CameraFrameStage::PostScenePasses), &postPasses);
|
||||
EXPECT_EQ(plan.GetPassSequence(CameraFrameStage::OverlayPasses), &overlayPasses);
|
||||
EXPECT_EQ(plan.GetScenePassRequest(CameraFrameStage::ShadowCaster), &plan.shadowCaster);
|
||||
EXPECT_EQ(plan.GetScenePassRequest(CameraFrameStage::DepthOnly), &plan.request.depthOnly);
|
||||
EXPECT_EQ(plan.GetScenePassRequest(CameraFrameStage::MainScene), nullptr);
|
||||
EXPECT_EQ(plan.GetObjectIdRequest(CameraFrameStage::ObjectId), &plan.request.objectId);
|
||||
EXPECT_EQ(plan.GetObjectIdRequest(CameraFrameStage::MainScene), nullptr);
|
||||
EXPECT_TRUE(plan.RequiresIntermediateSceneColor());
|
||||
EXPECT_EQ(plan.GetMainSceneSurface().GetRenderAreaWidth(), 256u);
|
||||
EXPECT_EQ(plan.GetMainSceneSurface().GetRenderAreaHeight(), 128u);
|
||||
EXPECT_EQ(plan.GetFinalCompositedSurface().GetRenderAreaWidth(), 640u);
|
||||
EXPECT_EQ(plan.GetFinalCompositedSurface().GetRenderAreaHeight(), 360u);
|
||||
ASSERT_NE(plan.GetOutputSurface(CameraFrameStage::PostProcess), nullptr);
|
||||
EXPECT_EQ(plan.GetOutputSurface(CameraFrameStage::PostProcess)->GetRenderAreaWidth(), 512u);
|
||||
ASSERT_NE(plan.GetSourceSurface(CameraFrameStage::PostProcess), nullptr);
|
||||
EXPECT_EQ(plan.GetSourceSurface(CameraFrameStage::PostProcess)->GetRenderAreaWidth(), 256u);
|
||||
EXPECT_EQ(
|
||||
request.GetSourceColorView(CameraFrameStage::PostProcess),
|
||||
plan.GetSourceColorView(CameraFrameStage::PostProcess),
|
||||
reinterpret_cast<XCEngine::RHI::RHIResourceView*>(20));
|
||||
EXPECT_EQ(
|
||||
request.GetSourceColorState(CameraFrameStage::PostProcess),
|
||||
plan.GetSourceColorState(CameraFrameStage::PostProcess),
|
||||
XCEngine::RHI::ResourceStates::PixelShaderResource);
|
||||
ASSERT_NE(request.GetSourceSurface(CameraFrameStage::FinalOutput), nullptr);
|
||||
EXPECT_EQ(request.GetSourceSurface(CameraFrameStage::FinalOutput)->GetRenderAreaWidth(), 512u);
|
||||
ASSERT_NE(plan.GetSourceSurface(CameraFrameStage::FinalOutput), nullptr);
|
||||
EXPECT_EQ(plan.GetSourceSurface(CameraFrameStage::FinalOutput)->GetRenderAreaWidth(), 512u);
|
||||
EXPECT_EQ(
|
||||
request.GetSourceColorView(CameraFrameStage::FinalOutput),
|
||||
plan.GetSourceColorView(CameraFrameStage::FinalOutput),
|
||||
reinterpret_cast<XCEngine::RHI::RHIResourceView*>(40));
|
||||
EXPECT_EQ(
|
||||
request.GetSourceColorState(CameraFrameStage::FinalOutput),
|
||||
plan.GetSourceColorState(CameraFrameStage::FinalOutput),
|
||||
XCEngine::RHI::ResourceStates::PixelShaderResource);
|
||||
}
|
||||
|
||||
@@ -2334,8 +2335,9 @@ TEST(SceneRenderer_Test, ReusesTrackedSceneColorStateAcrossFramesWhenPostProcess
|
||||
std::vector<CameraRenderRequest> firstFrameRequests =
|
||||
renderer.BuildRenderRequests(scene, nullptr, context, surface);
|
||||
ASSERT_EQ(firstFrameRequests.size(), 1u);
|
||||
CameraFramePlan firstFramePlan = CameraFramePlan::FromRequest(firstFrameRequests[0]);
|
||||
EXPECT_EQ(
|
||||
firstFrameRequests[0].GetMainSceneSurface().GetColorStateBefore(),
|
||||
firstFramePlan.GetMainSceneSurface().GetColorStateBefore(),
|
||||
XCEngine::RHI::ResourceStates::Common);
|
||||
|
||||
RenderPassSequence postProcessPasses;
|
||||
@@ -2347,11 +2349,12 @@ TEST(SceneRenderer_Test, ReusesTrackedSceneColorStateAcrossFramesWhenPostProcess
|
||||
const std::vector<CameraRenderRequest> secondFrameRequests =
|
||||
renderer.BuildRenderRequests(scene, nullptr, context, surface);
|
||||
ASSERT_EQ(secondFrameRequests.size(), 1u);
|
||||
const CameraFramePlan secondFramePlan = CameraFramePlan::FromRequest(secondFrameRequests[0]);
|
||||
EXPECT_EQ(
|
||||
secondFrameRequests[0].GetMainSceneSurface().GetColorStateBefore(),
|
||||
secondFramePlan.GetMainSceneSurface().GetColorStateBefore(),
|
||||
XCEngine::RHI::ResourceStates::PixelShaderResource);
|
||||
EXPECT_EQ(
|
||||
secondFrameRequests[0].GetMainSceneSurface().GetColorStateAfter(),
|
||||
secondFramePlan.GetMainSceneSurface().GetColorStateAfter(),
|
||||
XCEngine::RHI::ResourceStates::PixelShaderResource);
|
||||
|
||||
delete depthView;
|
||||
@@ -2402,13 +2405,14 @@ TEST(SceneRenderer_Test, ReusesTrackedPostProcessOutputStateAcrossFramesWhenFina
|
||||
std::vector<CameraRenderRequest> firstFrameRequests =
|
||||
renderer.BuildRenderRequests(scene, nullptr, context, surface);
|
||||
ASSERT_EQ(firstFrameRequests.size(), 1u);
|
||||
CameraFramePlan firstFramePlan = CameraFramePlan::FromRequest(firstFrameRequests[0]);
|
||||
EXPECT_TRUE(firstFrameRequests[0].postProcess.IsRequested());
|
||||
EXPECT_TRUE(firstFrameRequests[0].finalOutput.IsRequested());
|
||||
EXPECT_EQ(
|
||||
firstFrameRequests[0].GetMainSceneSurface().GetColorStateBefore(),
|
||||
firstFramePlan.GetMainSceneSurface().GetColorStateBefore(),
|
||||
XCEngine::RHI::ResourceStates::Common);
|
||||
EXPECT_EQ(
|
||||
firstFrameRequests[0].postProcess.destinationSurface.GetColorStateBefore(),
|
||||
firstFramePlan.postProcess.destinationSurface.GetColorStateBefore(),
|
||||
XCEngine::RHI::ResourceStates::Common);
|
||||
|
||||
RenderPassSequence postProcessPasses;
|
||||
@@ -2423,14 +2427,15 @@ TEST(SceneRenderer_Test, ReusesTrackedPostProcessOutputStateAcrossFramesWhenFina
|
||||
const std::vector<CameraRenderRequest> secondFrameRequests =
|
||||
renderer.BuildRenderRequests(scene, nullptr, context, surface);
|
||||
ASSERT_EQ(secondFrameRequests.size(), 1u);
|
||||
const CameraFramePlan secondFramePlan = CameraFramePlan::FromRequest(secondFrameRequests[0]);
|
||||
EXPECT_EQ(
|
||||
secondFrameRequests[0].GetMainSceneSurface().GetColorStateBefore(),
|
||||
secondFramePlan.GetMainSceneSurface().GetColorStateBefore(),
|
||||
XCEngine::RHI::ResourceStates::PixelShaderResource);
|
||||
EXPECT_EQ(
|
||||
secondFrameRequests[0].postProcess.destinationSurface.GetColorStateBefore(),
|
||||
secondFramePlan.postProcess.destinationSurface.GetColorStateBefore(),
|
||||
XCEngine::RHI::ResourceStates::PixelShaderResource);
|
||||
EXPECT_EQ(
|
||||
secondFrameRequests[0].finalOutput.sourceSurface.GetColorStateBefore(),
|
||||
secondFramePlan.finalOutput.sourceSurface.GetColorStateBefore(),
|
||||
XCEngine::RHI::ResourceStates::PixelShaderResource);
|
||||
|
||||
delete depthView;
|
||||
|
||||
Reference in New Issue
Block a user