refactor(srp): remove managed frame planning hook
- derive fullscreen stage planning from pipeline render-graph support - trim planning-only APIs from the managed SRP bridge and public surface - update probes and tests to lock the slimmer SRP API boundary
This commit is contained in:
@@ -775,7 +775,6 @@ private:
|
||||
struct MockManagedRenderPipelineAssetRuntimeState {
|
||||
int createStageRecorderCalls = 0;
|
||||
int configureCameraRenderRequestCalls = 0;
|
||||
int configureCameraFramePlanCalls = 0;
|
||||
int getDefaultFinalColorSettingsCalls = 0;
|
||||
bool hasDefaultFinalColorSettings = false;
|
||||
FinalColorSettings defaultFinalColorSettings = {};
|
||||
@@ -787,7 +786,6 @@ struct MockManagedRenderPipelineAssetRuntimeState {
|
||||
size_t,
|
||||
size_t,
|
||||
const DirectionalShadowPlanningSettings&)> configureCameraRenderRequest = {};
|
||||
std::function<void(CameraFramePlan&)> configureCameraFramePlan = {};
|
||||
};
|
||||
|
||||
class MockManagedRenderPipelineAssetRuntime final
|
||||
@@ -824,13 +822,6 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void ConfigureCameraFramePlan(CameraFramePlan& plan) const override {
|
||||
++m_state->configureCameraFramePlanCalls;
|
||||
if (m_state->configureCameraFramePlan) {
|
||||
m_state->configureCameraFramePlan(plan);
|
||||
}
|
||||
}
|
||||
|
||||
bool TryGetDefaultFinalColorSettings(
|
||||
FinalColorSettings& settings) const override {
|
||||
++m_state->getDefaultFinalColorSettingsCalls;
|
||||
@@ -857,7 +848,6 @@ struct MockManagedRenderPipelineBridgeState {
|
||||
size_t,
|
||||
size_t,
|
||||
const DirectionalShadowPlanningSettings&)> configureCameraRenderRequest = {};
|
||||
std::function<void(CameraFramePlan&)> configureCameraFramePlan = {};
|
||||
};
|
||||
|
||||
class MockManagedRenderPipelineBridge final
|
||||
@@ -881,8 +871,6 @@ public:
|
||||
m_state->defaultFinalColorSettings;
|
||||
m_state->lastCreatedRuntimeState->configureCameraRenderRequest =
|
||||
m_state->configureCameraRenderRequest;
|
||||
m_state->lastCreatedRuntimeState->configureCameraFramePlan =
|
||||
m_state->configureCameraFramePlan;
|
||||
return std::make_shared<MockManagedRenderPipelineAssetRuntime>(
|
||||
m_state->lastCreatedRuntimeState);
|
||||
}
|
||||
@@ -4184,6 +4172,51 @@ TEST(RenderPipelineHost_Test, BuildsFramePlansFromRequestsUsingPipelineAssetDefa
|
||||
EXPECT_FLOAT_EQ(plan.finalColorPolicy.exposureValue, 1.8f);
|
||||
}
|
||||
|
||||
TEST(RenderPipelineHost_Test, PlansFullscreenStagesFromPipelineRenderGraphSupport) {
|
||||
auto state = std::make_shared<MockPipelineState>();
|
||||
state->supportsPostProcessRenderGraph = true;
|
||||
state->supportsFinalOutputRenderGraph = true;
|
||||
|
||||
auto allocationState = std::make_shared<MockShadowAllocationState>();
|
||||
MockShadowView colorView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::RenderTarget,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
MockShadowView depthView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::DepthStencil,
|
||||
XCEngine::RHI::Format::D24_UNorm_S8_UInt,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
|
||||
CameraRenderRequest request = {};
|
||||
request.context = CreateValidContext();
|
||||
request.surface = RenderSurface(320, 180);
|
||||
request.surface.SetColorAttachment(&colorView);
|
||||
request.surface.SetDepthAttachment(&depthView);
|
||||
|
||||
RenderPipelineHost host(std::make_unique<MockPipeline>(state));
|
||||
const std::vector<CameraFramePlan> plans =
|
||||
host.BuildFramePlans({ request });
|
||||
|
||||
ASSERT_EQ(plans.size(), 1u);
|
||||
const CameraFramePlan& plan = plans[0];
|
||||
EXPECT_TRUE(plan.IsFullscreenStageRequested(CameraFrameStage::PostProcess));
|
||||
EXPECT_TRUE(plan.IsFullscreenStageRequested(CameraFrameStage::FinalOutput));
|
||||
EXPECT_EQ(plan.postProcess.passes, nullptr);
|
||||
EXPECT_EQ(plan.finalOutput.passes, nullptr);
|
||||
EXPECT_TRUE(plan.UsesGraphManagedSceneColor());
|
||||
EXPECT_TRUE(plan.UsesGraphManagedOutputColor(CameraFrameStage::PostProcess));
|
||||
EXPECT_EQ(
|
||||
plan.ResolveStageColorSource(CameraFrameStage::PostProcess),
|
||||
CameraFrameColorSource::MainSceneColor);
|
||||
EXPECT_EQ(
|
||||
plan.ResolveStageColorSource(CameraFrameStage::FinalOutput),
|
||||
CameraFrameColorSource::PostProcessColor);
|
||||
EXPECT_TRUE(plan.IsPostProcessStageValid());
|
||||
EXPECT_TRUE(plan.IsFinalOutputStageValid());
|
||||
}
|
||||
|
||||
TEST(RenderPipelineHost_Test, ForwardsPipelineLifetimeAndRenderCallsToCameraRenderer) {
|
||||
Scene scene("RenderPipelineHostScene");
|
||||
|
||||
@@ -4569,80 +4602,6 @@ TEST(ManagedScriptableRenderPipelineAsset_Test, CreatesHostWithStageRecorderFrom
|
||||
Pipelines::ClearManagedRenderPipelineBridge();
|
||||
}
|
||||
|
||||
TEST(ManagedScriptableRenderPipelineAsset_Test, LetsManagedBridgeRequestFullscreenStagesDuringPlanConfiguration) {
|
||||
Pipelines::ClearManagedRenderPipelineBridge();
|
||||
|
||||
const Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
|
||||
"GameScripts",
|
||||
"Gameplay",
|
||||
"ManagedPlannedFullscreenRenderPipelineProbeAsset"
|
||||
};
|
||||
auto bridgeState = std::make_shared<MockManagedRenderPipelineBridgeState>();
|
||||
bridgeState->configureCameraFramePlan = [](
|
||||
CameraFramePlan& plan) {
|
||||
plan.ClearFullscreenStage(CameraFrameStage::PostProcess);
|
||||
plan.ClearFullscreenStage(CameraFrameStage::FinalOutput);
|
||||
EXPECT_TRUE(
|
||||
plan.RequestFullscreenStage(
|
||||
CameraFrameStage::PostProcess,
|
||||
CameraFrameColorSource::MainSceneColor,
|
||||
true));
|
||||
EXPECT_TRUE(
|
||||
plan.RequestFullscreenStage(
|
||||
CameraFrameStage::FinalOutput,
|
||||
CameraFrameColorSource::PostProcessColor));
|
||||
};
|
||||
Pipelines::SetManagedRenderPipelineBridge(
|
||||
std::make_shared<MockManagedRenderPipelineBridge>(bridgeState));
|
||||
|
||||
auto allocationState = std::make_shared<MockShadowAllocationState>();
|
||||
MockShadowView colorView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::RenderTarget,
|
||||
XCEngine::RHI::Format::R8G8B8A8_UNorm,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
MockShadowView depthView(
|
||||
allocationState,
|
||||
XCEngine::RHI::ResourceViewType::DepthStencil,
|
||||
XCEngine::RHI::Format::D24_UNorm_S8_UInt,
|
||||
XCEngine::RHI::ResourceViewDimension::Texture2D);
|
||||
|
||||
CameraRenderRequest request = {};
|
||||
request.context = CreateValidContext();
|
||||
request.surface = RenderSurface(320, 180);
|
||||
request.surface.SetColorAttachment(&colorView);
|
||||
request.surface.SetDepthAttachment(&depthView);
|
||||
|
||||
CameraFramePlan plan = CameraFramePlan::FromRequest(request);
|
||||
Pipelines::ManagedScriptableRenderPipelineAsset asset(descriptor);
|
||||
asset.ConfigureCameraFramePlan(plan);
|
||||
|
||||
EXPECT_EQ(bridgeState->createAssetRuntimeCalls, 1);
|
||||
ASSERT_NE(bridgeState->lastCreatedRuntimeState, nullptr);
|
||||
EXPECT_EQ(
|
||||
bridgeState->lastCreatedRuntimeState->configureCameraFramePlanCalls,
|
||||
1);
|
||||
EXPECT_EQ(bridgeState->lastDescriptor.assemblyName, "GameScripts");
|
||||
EXPECT_EQ(bridgeState->lastDescriptor.namespaceName, "Gameplay");
|
||||
EXPECT_EQ(bridgeState->lastDescriptor.className, "ManagedPlannedFullscreenRenderPipelineProbeAsset");
|
||||
EXPECT_TRUE(plan.IsFullscreenStageRequested(CameraFrameStage::PostProcess));
|
||||
EXPECT_TRUE(plan.IsFullscreenStageRequested(CameraFrameStage::FinalOutput));
|
||||
EXPECT_EQ(plan.postProcess.passes, nullptr);
|
||||
EXPECT_EQ(plan.finalOutput.passes, nullptr);
|
||||
EXPECT_TRUE(plan.UsesGraphManagedSceneColor());
|
||||
EXPECT_TRUE(plan.UsesGraphManagedOutputColor(CameraFrameStage::PostProcess));
|
||||
EXPECT_EQ(
|
||||
plan.ResolveStageColorSource(CameraFrameStage::PostProcess),
|
||||
CameraFrameColorSource::MainSceneColor);
|
||||
EXPECT_EQ(
|
||||
plan.ResolveStageColorSource(CameraFrameStage::FinalOutput),
|
||||
CameraFrameColorSource::PostProcessColor);
|
||||
EXPECT_TRUE(plan.IsPostProcessStageValid());
|
||||
EXPECT_TRUE(plan.IsFinalOutputStageValid());
|
||||
|
||||
Pipelines::ClearManagedRenderPipelineBridge();
|
||||
}
|
||||
|
||||
TEST(ManagedScriptableRenderPipelineAsset_Test, LetsManagedBridgeConfigureCameraRenderRequests) {
|
||||
Pipelines::ClearManagedRenderPipelineBridge();
|
||||
|
||||
@@ -4755,7 +4714,7 @@ TEST(ManagedScriptableRenderPipelineAsset_Test, LetsManagedBridgeProvideDefaultF
|
||||
Pipelines::ClearManagedRenderPipelineBridge();
|
||||
}
|
||||
|
||||
TEST(ManagedScriptableRenderPipelineAsset_Test, ReusesManagedAssetRuntimeAcrossPipelineRequestAndPlanRequests) {
|
||||
TEST(ManagedScriptableRenderPipelineAsset_Test, ReusesManagedAssetRuntimeAcrossPipelineAndRequestCalls) {
|
||||
Pipelines::ClearManagedRenderPipelineBridge();
|
||||
|
||||
const Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
|
||||
@@ -4796,16 +4755,11 @@ TEST(ManagedScriptableRenderPipelineAsset_Test, ReusesManagedAssetRuntimeAcrossP
|
||||
1u,
|
||||
2u,
|
||||
DirectionalShadowPlanningSettings{});
|
||||
CameraFramePlan firstPlan = CameraFramePlan::FromRequest(request);
|
||||
CameraFramePlan secondPlan = CameraFramePlan::FromRequest(request);
|
||||
asset.ConfigureCameraFramePlan(firstPlan);
|
||||
asset.ConfigureCameraFramePlan(secondPlan);
|
||||
|
||||
EXPECT_EQ(bridgeState->createAssetRuntimeCalls, 1);
|
||||
EXPECT_EQ(runtimeState->configureCameraRenderRequestCalls, 1);
|
||||
EXPECT_EQ(runtimeState->lastRenderedBaseCameraCount, 1u);
|
||||
EXPECT_EQ(runtimeState->lastRenderedRequestCount, 2u);
|
||||
EXPECT_EQ(runtimeState->configureCameraFramePlanCalls, 2);
|
||||
|
||||
Pipelines::ClearManagedRenderPipelineBridge();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user