Harden render graph pass capture and feature source-color contract

This commit is contained in:
2026-04-14 21:11:04 +08:00
parent 1d171ea61c
commit 9980aa9be5
6 changed files with 204 additions and 102 deletions

View File

@@ -172,11 +172,13 @@ bool RecordRasterRenderPass(
const RenderPassGraphIO& io) {
RenderPass* const renderPass = &pass;
const Containers::String passName = context.passName;
const RenderContext* const renderContext = &context.renderContext;
const RenderContext renderContext = context.renderContext;
const std::shared_ptr<const RenderSceneData> sceneData =
std::make_shared<RenderSceneData>(context.sceneData);
const RenderSurface surface = context.surface;
const RenderSurface* const sourceSurface = context.sourceSurface;
const bool hasSourceSurface = context.sourceSurface != nullptr;
const RenderSurface sourceSurface =
hasSourceSurface ? *context.sourceSurface : RenderSurface();
RHI::RHIResourceView* const sourceColorView = context.sourceColorView;
const RHI::ResourceStates sourceColorState = context.sourceColorState;
const RenderGraphTextureHandle sourceColorTexture = context.sourceColorTexture;
@@ -192,6 +194,7 @@ bool RecordRasterRenderPass(
renderContext,
sceneData,
surface,
hasSourceSurface,
sourceSurface,
sourceColorView,
sourceColorState,
@@ -224,6 +227,7 @@ bool RecordRasterRenderPass(
renderContext,
sceneData,
surface,
hasSourceSurface,
sourceSurface,
sourceColorView,
sourceColorState,
@@ -239,12 +243,13 @@ bool RecordRasterRenderPass(
return;
}
const RenderSurface* resolvedSourceSurface = sourceSurface;
const RenderSurface* resolvedSourceSurface =
hasSourceSurface ? &sourceSurface : nullptr;
RHI::RHIResourceView* resolvedSourceColorView = sourceColorView;
RHI::ResourceStates resolvedSourceColorState = sourceColorState;
RenderSurface graphManagedSourceSurface = {};
if (!ResolveGraphManagedSourceSurface(
sourceSurface,
hasSourceSurface ? &sourceSurface : nullptr,
sourceColorView,
sourceColorState,
sourceColorTexture,
@@ -277,7 +282,7 @@ bool RecordRasterRenderPass(
}
const RenderPassContext passContext = {
*renderContext,
renderContext,
*resolvedSurface,
*sceneData,
resolvedSourceSurface,