refactor(rendering): formalize native graph recording helpers

This commit is contained in:
2026-04-15 20:46:00 +08:00
parent 7b9e172dbf
commit 8798e63e32
7 changed files with 258 additions and 42 deletions

View File

@@ -425,19 +425,26 @@ RenderGraphRecordingContext BuildCameraFrameStageGraphRecordingContext(
const CameraFrameRenderGraphSourceBinding& sourceBinding,
std::vector<RenderGraphTextureHandle> colorTargets,
RenderGraphTextureHandle depthTarget) {
RenderGraphRecordingContextOverrides overrides = {};
overrides.passName = &passName;
overrides.overrideColorTargets = true;
overrides.colorTargets = std::move(colorTargets);
overrides.overrideDepthTarget = true;
overrides.depthTarget = depthTarget;
return CloneRenderGraphRecordingContext(
RenderGraphRecordingContextBuildParams recordingParams = {};
recordingParams.passName = &passName;
recordingParams.overrideSourceBinding = true;
recordingParams.sourceBinding =
MakeRenderGraphRecordingSourceBinding(
sourceBinding.sourceSurfaceTemplate,
sourceBinding.sourceColorView,
sourceBinding.sourceColorState,
sourceBinding.sourceColor);
recordingParams.overrideColorTargets = true;
recordingParams.colorTargets = std::move(colorTargets);
recordingParams.overrideDepthTarget = true;
recordingParams.depthTarget = depthTarget;
return BuildRenderGraphRecordingContext(
BuildCameraFrameStageGraphRecordingContext(
context,
stageState,
sceneData,
sourceBinding),
overrides);
std::move(recordingParams));
}
RenderGraphRecordingContext BuildCameraFrameStageGraphRecordingContext(

View File

@@ -17,12 +17,6 @@ namespace Internal {
namespace {
RenderSurface BuildGraphManagedForwardSceneSurface(const RenderSurface& templateSurface) {
RenderSurface surface = templateSurface;
surface.SetAutoTransitionEnabled(false);
return surface;
}
struct ForwardSceneGraphExecutionState {
bool initialized = false;
};
@@ -38,18 +32,18 @@ bool BuiltinForwardStageGraphBuilder::Record(
BuiltinForwardPipeline& pipeline,
const RenderPipelineStageRenderGraphContext& context) {
const RenderSurface graphManagedSurface =
BuildGraphManagedForwardSceneSurface(context.surfaceTemplate);
const bool hasSourceSurface = context.sourceSurface != nullptr;
const RenderSurface sourceSurface =
hasSourceSurface ? *context.sourceSurface : RenderSurface();
RenderGraphRecordingContextOverrides overrides = {};
overrides.surface = &graphManagedSurface;
overrides.overrideSourceSurface = true;
overrides.sourceSurface = hasSourceSurface ? &sourceSurface : nullptr;
BuildRenderGraphManagedSurfaceTemplate(context.surfaceTemplate);
const RenderGraphRecordingContext baseRecordingContext =
BuildRenderGraphRecordingContext(context);
RenderGraphRecordingContextBuildParams recordingParams = {};
recordingParams.surface = &graphManagedSurface;
recordingParams.overrideSourceBinding = true;
recordingParams.sourceBinding =
BuildRenderGraphRecordingSourceBinding(baseRecordingContext);
RenderGraphRecordingContext recordingContext =
CloneRenderGraphRecordingContext(
BuildRenderGraphRecordingContext(context),
overrides);
BuildRenderGraphRecordingContext(
baseRecordingContext,
std::move(recordingParams));
const CameraFrameRenderGraphResources* const frameResources =
TryGetCameraFrameRenderGraphResources(recordingContext.blackboard);

View File

@@ -48,13 +48,17 @@ bool RecordRenderPipelineStagePhasePass(
RenderPassGraphBeginCallback beginPassCallback,
RenderPassGraphEndCallback endPassCallback,
std::vector<RenderGraphTextureHandle> additionalReadTextures) {
const Containers::String phasePassName =
BuildRenderPipelineStagePhasePassName(
context.passName,
scenePhase);
RenderGraphRecordingContextBuildParams recordingParams = {};
recordingParams.passName = &phasePassName;
const RenderPassRenderGraphContext passContext =
BuildRenderPassRenderGraphContext(
CloneRenderGraphRecordingContext(
BuildRenderGraphRecordingContext(
BuildRenderGraphRecordingContext(context),
BuildRenderPipelineStagePhasePassName(
context.passName,
scenePhase)),
std::move(recordingParams)),
beginPassCallback,
endPassCallback);
return RecordColorDepthCallbackRasterPass(

View File

@@ -10,22 +10,20 @@ namespace Rendering {
bool SceneRenderFeaturePass::RecordRenderGraph(
const SceneRenderFeaturePassRenderGraphContext& context) {
const bool usesSourceColor = context.sourceColorTexture.IsValid();
const RenderGraphRecordingContext baseRecordingContext =
BuildRenderGraphRecordingContext(context);
const RenderSurface sourceSurfaceTemplate =
baseRecordingContext.sourceSurface != nullptr
? *baseRecordingContext.sourceSurface
: (usesSourceColor ? context.surface : RenderSurface());
RenderGraphRecordingContextOverrides overrides = {};
overrides.overrideSourceSurface =
baseRecordingContext.sourceSurface == nullptr && usesSourceColor;
overrides.sourceSurface =
overrides.overrideSourceSurface ? &sourceSurfaceTemplate : nullptr;
const RenderGraphRecordingContext recordingContext =
CloneRenderGraphRecordingContext(
RenderSurface sourceSurfaceTemplate = {};
RenderGraphRecordingContextBuildParams recordingParams = {};
recordingParams.overrideSourceBinding = true;
recordingParams.sourceBinding =
ResolveRenderGraphRecordingSourceBinding(
baseRecordingContext,
overrides);
&baseRecordingContext.surface,
&sourceSurfaceTemplate);
const RenderGraphRecordingContext recordingContext =
BuildRenderGraphRecordingContext(
baseRecordingContext,
std::move(recordingParams));
const RenderPassGraphBeginCallback beginPassCallback =
context.beginPassCallback