Centralize render-graph recording context builders

This commit is contained in:
2026-04-15 01:18:15 +08:00
parent 65b3078c7f
commit d0ce2d7883
7 changed files with 331 additions and 67 deletions

View File

@@ -3,6 +3,7 @@
#include "Debug/Logger.h"
#include "Rendering/Graph/RenderGraph.h"
#include "Rendering/Internal/RenderPassGraphUtils.h"
#include "Rendering/Internal/RenderGraphRecordingContextBuilders.h"
#include "Rendering/Pipelines/BuiltinForwardPipeline.h"
#include "Rendering/Pipelines/Internal/BuiltinForwardSceneSetup.h"
#include "Rendering/RenderSurface.h"
@@ -131,28 +132,31 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
[&pipeline](const RenderPassContext& passContext) {
pipeline.EndForwardScenePass(passContext);
};
const ::XCEngine::Rendering::Internal::RenderGraphRecordingContextCommon commonContext = {
context.graphBuilder,
passName,
renderContext,
*sceneData,
surfaceTemplate,
hasSourceSurface ? &sourceSurface : nullptr,
sourceColorView,
sourceColorState,
{},
colorTargets,
depthTarget,
executionSucceeded,
context.blackboard
};
bool clearAttachments = true;
for (const ForwardSceneStep& step : GetBuiltinForwardSceneSteps()) {
if (step.type == ForwardSceneStepType::InjectionPoint) {
const SceneRenderFeaturePassRenderGraphContext featureContext = {
context.graphBuilder,
passName,
renderContext,
*sceneData,
surfaceTemplate,
hasSourceSurface ? &sourceSurface : nullptr,
sourceColorView,
sourceColorState,
{},
colorTargets,
depthTarget,
clearAttachments,
executionSucceeded,
beginRecordedPass,
endRecordedPass,
context.blackboard
};
const SceneRenderFeaturePassRenderGraphContext featureContext =
::XCEngine::Rendering::Internal::BuildSceneRenderFeaturePassRenderGraphContext(
commonContext,
clearAttachments,
beginRecordedPass,
endRecordedPass);
bool recordedAnyPass = false;
if (!pipeline.m_forwardSceneFeatureHost.Record(
featureContext,
@@ -178,23 +182,13 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
mainDirectionalShadowTexture.IsValid()
? std::vector<RenderGraphTextureHandle>{ mainDirectionalShadowTexture }
: std::vector<RenderGraphTextureHandle>{};
const RenderPassRenderGraphContext phaseContext = {
context.graphBuilder,
phasePassName,
renderContext,
*sceneData,
surfaceTemplate,
hasSourceSurface ? &sourceSurface : nullptr,
sourceColorView,
sourceColorState,
{},
colorTargets,
depthTarget,
executionSucceeded,
beginPhasePass,
endRecordedPass,
context.blackboard
};
::XCEngine::Rendering::Internal::RenderGraphRecordingContextCommon phaseCommonContext = commonContext;
phaseCommonContext.passName = phasePassName;
const RenderPassRenderGraphContext phaseContext =
::XCEngine::Rendering::Internal::BuildRenderPassRenderGraphContext(
phaseCommonContext,
beginPhasePass,
endRecordedPass);
if (!::XCEngine::Rendering::Internal::RecordCallbackRasterRenderPass(
phaseContext,
{