Close URP stage planning authority

This commit is contained in:
2026-04-28 00:38:52 +08:00
parent 43a71bd09c
commit 2d91085567
4 changed files with 59 additions and 72 deletions

View File

@@ -5,62 +5,6 @@
namespace XCEngine {
namespace Rendering {
namespace {
bool UsesExplicitFullscreenSource(
const FullscreenPassRenderRequest& request,
CameraFrameColorSource source) {
return source == CameraFrameColorSource::ExplicitSurface &&
HasValidColorTarget(request.sourceSurface);
}
void ConfigureLegacyFullscreenStageRequests(
CameraFramePlan& plan) {
const bool postProcessExplicitlyConfigured =
plan.HasExplicitFullscreenStageConfiguration(
CameraFrameStage::PostProcess);
const bool finalOutputExplicitlyConfigured =
plan.HasExplicitFullscreenStageConfiguration(
CameraFrameStage::FinalOutput);
const bool hasPostProcess =
plan.postProcess.IsRequested();
const bool hasFinalOutput =
plan.finalOutput.IsRequested();
if (!postProcessExplicitlyConfigured &&
hasPostProcess &&
!UsesExplicitFullscreenSource(
plan.postProcess,
plan.ResolveStageColorSource(
CameraFrameStage::PostProcess))) {
plan.RequestFullscreenStage(
CameraFrameStage::PostProcess,
CameraFrameColorSource::MainSceneColor,
hasFinalOutput);
}
const bool canChainFromPostProcess =
hasPostProcess &&
!UsesExplicitFullscreenSource(
plan.postProcess,
plan.ResolveStageColorSource(
CameraFrameStage::PostProcess));
if (!finalOutputExplicitlyConfigured &&
hasFinalOutput &&
!UsesExplicitFullscreenSource(
plan.finalOutput,
plan.ResolveStageColorSource(
CameraFrameStage::FinalOutput))) {
plan.RequestFullscreenStage(
CameraFrameStage::FinalOutput,
canChainFromPostProcess
? CameraFrameColorSource::PostProcessColor
: CameraFrameColorSource::MainSceneColor);
}
}
} // namespace
std::vector<CameraFramePlan> CameraFramePlanBuilder::BuildPlans(
const std::vector<CameraRenderRequest>& requests,
const RenderPipelineAsset* pipelineAsset) {
@@ -89,8 +33,6 @@ void CameraFramePlanBuilder::ConfigurePlans(
} else {
ApplyDefaultRenderPipelineAssetCameraFramePlanPolicy(plan);
}
ConfigureLegacyFullscreenStageRequests(plan);
}
}

View File

@@ -53,27 +53,20 @@ void PlanCameraFrameFullscreenStages(CameraFramePlan& plan) {
if (hasPostProcess) {
plan.SetOwnedPostProcessSequence(
SharePassSequence(std::move(postProcessSequence)));
plan.colorChain.usesGraphManagedSceneColor = true;
plan.colorChain.postProcess.source = CameraFrameColorSource::MainSceneColor;
plan.colorChain.postProcess.usesGraphManagedOutputColor = hasFinalOutput;
if (!hasFinalOutput) {
plan.postProcess.destinationSurface = plan.request.surface;
}
plan.RequestFullscreenStage(
CameraFrameStage::PostProcess,
CameraFrameColorSource::MainSceneColor,
hasFinalOutput);
}
if (hasFinalOutput) {
plan.SetOwnedFinalOutputSequence(
SharePassSequence(std::move(finalOutputSequence)));
plan.colorChain.usesGraphManagedSceneColor = true;
plan.colorChain.finalOutput.source =
plan.RequestFullscreenStage(
CameraFrameStage::FinalOutput,
hasPostProcess
? CameraFrameColorSource::PostProcessColor
: CameraFrameColorSource::MainSceneColor;
plan.finalOutput.destinationSurface = plan.request.surface;
}
if (plan.UsesGraphManagedOutputColor(CameraFrameStage::MainScene)) {
plan.ConfigureGraphManagedSceneSurface();
: CameraFrameColorSource::MainSceneColor);
}
}