refactor(srp): make stage capability follow selected renderer

This commit is contained in:
2026-04-21 01:11:03 +08:00
parent 7f1089fb0a
commit c60f3db80d
12 changed files with 322 additions and 12 deletions

View File

@@ -29,6 +29,14 @@ bool IsManagedPipelineAsset(
pipelineAsset.get()) != nullptr;
}
RenderPipelineStageSupportContext BuildStageSupportContext(
const CameraFramePlan& plan,
CameraFrameStage stage) {
return RenderPipelineStageSupportContext{
stage,
plan.request.rendererIndex };
}
} // namespace
CameraRenderer::CameraRenderer()
@@ -194,7 +202,10 @@ bool CameraRenderer::Render(
}
if (plan.UsesGraphManagedOutputColor(CameraFrameStage::MainScene) &&
(m_pipeline == nullptr ||
!m_pipeline->SupportsStageRenderGraph(CameraFrameStage::MainScene))) {
!m_pipeline->SupportsStageRenderGraph(
BuildStageSupportContext(
plan,
CameraFrameStage::MainScene)))) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
"CameraRenderer::Render failed: graph-managed main scene color requires pipeline main-scene render-graph support");
@@ -211,7 +222,10 @@ bool CameraRenderer::Render(
{ CameraFrameStage::PostProcess, CameraFrameStage::FinalOutput }) {
if (RequiresPipelineStageRecording(plan, stage) &&
(m_pipeline == nullptr ||
!m_pipeline->SupportsStageRenderGraph(stage))) {
!m_pipeline->SupportsStageRenderGraph(
BuildStageSupportContext(
plan,
stage)))) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
Containers::String(

View File

@@ -11,6 +11,18 @@
namespace XCEngine {
namespace Rendering {
namespace {
RenderPipelineStageSupportContext BuildStageSupportContext(
const CameraFrameRenderGraphStageContext& context,
CameraFrameStage stage) {
return RenderPipelineStageSupportContext{
stage,
context.plan.request.rendererIndex };
}
} // namespace
bool TryRecordCameraFrameStageStandaloneRenderGraphPass(
const CameraFrameStageGraphBuildState& stageState,
const CameraFrameRenderGraphStageContext& context,
@@ -55,7 +67,9 @@ bool TryRecordCameraFramePipelineStageGraphPass(
CameraFrameRenderGraphBuilderContext& builder = context.builder;
if (builder.executionState.pipeline == nullptr ||
!builder.executionState.pipeline->SupportsStageRenderGraph(
stageState.stage)) {
BuildStageSupportContext(
context,
stageState.stage))) {
handled = false;
return true;
}