refactor(rendering): move fullscreen stage source binding into contract

This commit is contained in:
2026-04-15 08:38:58 +08:00
parent f049d9d29e
commit 9f3ea11dbc
5 changed files with 136 additions and 130 deletions

View File

@@ -19,6 +19,41 @@ CameraFrameRenderGraphSourceBinding BuildCameraFrameStageGraphSourceBinding(
};
}
CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding(
const CameraFramePlan& plan,
CameraFrameStage stage,
const RenderSurface& stageSurfaceTemplate,
const RenderSurface* explicitSourceSurfaceTemplate,
RHI::RHIResourceView* explicitSourceColorView,
const RHI::ResourceStates explicitSourceColorState,
const RenderGraphTextureHandle explicitSourceColor,
const RenderGraphBlackboard* blackboard) {
CameraFrameRenderGraphSourceBinding binding = {};
binding.sourceSurfaceTemplate = explicitSourceSurfaceTemplate;
binding.sourceColorView = explicitSourceColorView;
binding.sourceColorState = explicitSourceColorState;
binding.sourceColor = explicitSourceColor;
const CameraFrameColorSource graphManagedSource =
ResolveCameraFrameStageGraphManagedColorSource(plan, stage);
if (graphManagedSource != CameraFrameColorSource::ExplicitSurface) {
binding.sourceSurfaceTemplate = &stageSurfaceTemplate;
binding.sourceColorView = nullptr;
binding.sourceColorState = RHI::ResourceStates::PixelShaderResource;
binding.sourceColor =
ResolveCameraFrameRenderGraphColorSource(
blackboard,
graphManagedSource);
}
if (binding.sourceSurfaceTemplate == nullptr &&
binding.sourceColor.IsValid()) {
binding.sourceSurfaceTemplate = &stageSurfaceTemplate;
}
return binding;
}
RenderGraphRecordingContext BuildCameraFrameStageGraphRecordingContext(
const CameraFrameRenderGraphStageContext& context,
const CameraFrameStageGraphBuildState& stageState,

View File

@@ -23,6 +23,16 @@ struct CameraFrameStageFallbackSurfaceResolution {
CameraFrameRenderGraphSourceBinding BuildCameraFrameStageGraphSourceBinding(
const CameraFrameStageGraphBuildState& stageState);
CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding(
const CameraFramePlan& plan,
CameraFrameStage stage,
const RenderSurface& stageSurfaceTemplate,
const RenderSurface* explicitSourceSurfaceTemplate,
RHI::RHIResourceView* explicitSourceColorView,
RHI::ResourceStates explicitSourceColorState,
RenderGraphTextureHandle explicitSourceColor,
const RenderGraphBlackboard* blackboard);
RenderGraphRecordingContext BuildCameraFrameStageGraphRecordingContext(
const CameraFrameRenderGraphStageContext& context,
const CameraFrameStageGraphBuildState& stageState,

View File

@@ -52,40 +52,5 @@ inline CameraFrameColorSource ResolveCameraFrameStageGraphManagedColorSource(
return plan.ResolveStageColorSource(stage);
}
inline CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding(
const CameraFramePlan& plan,
CameraFrameStage stage,
const RenderSurface& stageSurfaceTemplate,
const RenderSurface* explicitSourceSurfaceTemplate,
RHI::RHIResourceView* explicitSourceColorView,
RHI::ResourceStates explicitSourceColorState,
RenderGraphTextureHandle explicitSourceColor,
const RenderGraphBlackboard* blackboard) {
CameraFrameRenderGraphSourceBinding binding = {};
binding.sourceSurfaceTemplate = explicitSourceSurfaceTemplate;
binding.sourceColorView = explicitSourceColorView;
binding.sourceColorState = explicitSourceColorState;
binding.sourceColor = explicitSourceColor;
const CameraFrameColorSource graphManagedSource =
ResolveCameraFrameStageGraphManagedColorSource(plan, stage);
if (graphManagedSource != CameraFrameColorSource::ExplicitSurface) {
binding.sourceSurfaceTemplate = &stageSurfaceTemplate;
binding.sourceColorView = nullptr;
binding.sourceColorState = RHI::ResourceStates::PixelShaderResource;
binding.sourceColor =
ResolveCameraFrameRenderGraphColorSource(
blackboard,
graphManagedSource);
}
if (binding.sourceSurfaceTemplate == nullptr &&
binding.sourceColor.IsValid()) {
binding.sourceSurfaceTemplate = &stageSurfaceTemplate;
}
return binding;
}
} // namespace Rendering
} // namespace XCEngine