refactor(rendering): route camera-stage graph pass recording through contract
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
#include "Rendering/Execution/Internal/CameraFrameRenderGraphBuilderContext.h"
|
||||
#include "Rendering/Execution/Internal/CameraFrameRenderGraphStagePassRuntime.h"
|
||||
#include "Rendering/Graph/RenderGraph.h"
|
||||
#include <XCEngine/Rendering/Graph/RenderGraphRecordingContext.h>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Rendering {
|
||||
@@ -35,6 +36,52 @@ RenderPassContext BuildCameraFrameStageGraphPassContext(
|
||||
};
|
||||
}
|
||||
|
||||
RenderPassRenderGraphContext BuildCameraFrameStandaloneStageRenderGraphContext(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
const RenderSceneData& sceneData,
|
||||
RenderPass& pass,
|
||||
bool& stageExecutionSucceeded) {
|
||||
bool* const stageExecutionSucceededPtr = &stageExecutionSucceeded;
|
||||
RenderPass* const passPtr = &pass;
|
||||
const RenderPassGraphBeginCallback beginPass =
|
||||
[stageExecutionSucceededPtr, passPtr, renderContext = &context.plan.request.context](
|
||||
const RenderPassContext&) -> bool {
|
||||
if (!InitializeCameraFrameStandalonePass(
|
||||
passPtr,
|
||||
*renderContext)) {
|
||||
*stageExecutionSucceededPtr = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
return BuildRenderPassRenderGraphContext(
|
||||
BuildCameraFrameStageGraphRecordingContext(
|
||||
context,
|
||||
stageState,
|
||||
stageState.stageName,
|
||||
sceneData,
|
||||
std::vector<RenderGraphTextureHandle>{ stageState.outputColor },
|
||||
stageState.outputSurface.depthTexture),
|
||||
beginPass);
|
||||
}
|
||||
|
||||
bool RecordCameraFrameStandaloneStageRenderGraphPass(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
const RenderSceneData& sceneData,
|
||||
RenderPass& pass,
|
||||
bool& stageExecutionSucceeded) {
|
||||
return pass.RecordRenderGraph(
|
||||
BuildCameraFrameStandaloneStageRenderGraphContext(
|
||||
context,
|
||||
stageState,
|
||||
sceneData,
|
||||
pass,
|
||||
stageExecutionSucceeded));
|
||||
}
|
||||
|
||||
CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding(
|
||||
const CameraFramePlan& plan,
|
||||
CameraFrameStage stage,
|
||||
@@ -158,6 +205,29 @@ RenderPassContext BuildCameraFrameStageFallbackPassContext(
|
||||
};
|
||||
}
|
||||
|
||||
RenderPipelineMainSceneRenderGraphContext BuildCameraFrameMainSceneStageRenderGraphContext(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState) {
|
||||
return BuildRenderPipelineMainSceneRenderGraphContext(
|
||||
BuildCameraFrameStageGraphRecordingContext(
|
||||
context,
|
||||
stageState,
|
||||
stageState.stageName,
|
||||
context.sceneData,
|
||||
std::vector<RenderGraphTextureHandle>{ stageState.outputColor },
|
||||
stageState.outputSurface.depthTexture));
|
||||
}
|
||||
|
||||
bool RecordCameraFrameMainSceneGraphPass(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
RenderPipelineRenderer& pipeline) {
|
||||
return pipeline.RecordMainSceneRenderGraph(
|
||||
BuildCameraFrameMainSceneStageRenderGraphContext(
|
||||
context,
|
||||
stageState));
|
||||
}
|
||||
|
||||
void RecordCameraFrameStageFallbackPassIO(
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
RenderGraphPassBuilder& passBuilder) {
|
||||
|
||||
@@ -28,6 +28,20 @@ RenderPassContext BuildCameraFrameStageGraphPassContext(
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
const RenderSceneData& sceneData);
|
||||
|
||||
RenderPassRenderGraphContext BuildCameraFrameStandaloneStageRenderGraphContext(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
const RenderSceneData& sceneData,
|
||||
RenderPass& pass,
|
||||
bool& stageExecutionSucceeded);
|
||||
|
||||
bool RecordCameraFrameStandaloneStageRenderGraphPass(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
const RenderSceneData& sceneData,
|
||||
RenderPass& pass,
|
||||
bool& stageExecutionSucceeded);
|
||||
|
||||
CameraFrameRenderGraphSourceBinding ResolveCameraFrameFullscreenStageGraphSourceBinding(
|
||||
const CameraFramePlan& plan,
|
||||
CameraFrameStage stage,
|
||||
@@ -65,6 +79,15 @@ RenderPassContext BuildCameraFrameStageFallbackPassContext(
|
||||
const RenderContext& renderContext,
|
||||
const RenderSceneData& sceneData);
|
||||
|
||||
RenderPipelineMainSceneRenderGraphContext BuildCameraFrameMainSceneStageRenderGraphContext(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState);
|
||||
|
||||
bool RecordCameraFrameMainSceneGraphPass(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
RenderPipelineRenderer& pipeline);
|
||||
|
||||
void RecordCameraFrameStageFallbackPassIO(
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
RenderGraphPassBuilder& passBuilder);
|
||||
|
||||
@@ -33,30 +33,12 @@ bool TryRecordCameraFrameStageStandaloneRenderGraphPass(
|
||||
stageState.stage,
|
||||
context,
|
||||
stageState.surfaceTemplate);
|
||||
bool* const stageExecutionSucceeded = &builder.stageExecutionSucceeded;
|
||||
const RenderPassGraphBeginCallback beginStandalonePass =
|
||||
[stageExecutionSucceeded, standaloneStagePass, renderContext = &context.plan.request.context](
|
||||
const RenderPassContext&) -> bool {
|
||||
if (!InitializeCameraFrameStandalonePass(
|
||||
standaloneStagePass,
|
||||
*renderContext)) {
|
||||
*stageExecutionSucceeded = false;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
const RenderPassRenderGraphContext standalonePassContext =
|
||||
BuildRenderPassRenderGraphContext(
|
||||
BuildCameraFrameStageGraphRecordingContext(
|
||||
context,
|
||||
stageState,
|
||||
stageState.stageName,
|
||||
stageSceneData,
|
||||
std::vector<RenderGraphTextureHandle>{ stageState.outputColor },
|
||||
stageState.outputSurface.depthTexture),
|
||||
beginStandalonePass);
|
||||
if (!standaloneStagePass->RecordRenderGraph(standalonePassContext)) {
|
||||
if (!RecordCameraFrameStandaloneStageRenderGraphPass(
|
||||
context,
|
||||
stageState,
|
||||
stageSceneData,
|
||||
*standaloneStagePass,
|
||||
builder.stageExecutionSucceeded)) {
|
||||
Debug::Logger::Get().Error(
|
||||
Debug::LogCategory::Rendering,
|
||||
Containers::String("CameraRenderer::Render failed: RenderPass::RecordRenderGraph returned false for ") +
|
||||
@@ -80,16 +62,10 @@ bool TryRecordCameraFrameMainSceneGraphPass(
|
||||
}
|
||||
|
||||
handled = true;
|
||||
const RenderPipelineMainSceneRenderGraphContext mainSceneContext =
|
||||
BuildRenderPipelineMainSceneRenderGraphContext(
|
||||
BuildCameraFrameStageGraphRecordingContext(
|
||||
context,
|
||||
stageState,
|
||||
stageState.stageName,
|
||||
context.sceneData,
|
||||
std::vector<RenderGraphTextureHandle>{ stageState.outputColor },
|
||||
stageState.outputSurface.depthTexture));
|
||||
if (!builder.executionState.pipeline->RecordMainSceneRenderGraph(mainSceneContext)) {
|
||||
if (!RecordCameraFrameMainSceneGraphPass(
|
||||
context,
|
||||
stageState,
|
||||
*builder.executionState.pipeline)) {
|
||||
Debug::Logger::Get().Error(
|
||||
Debug::LogCategory::Rendering,
|
||||
"CameraRenderer::Render failed: RenderPipeline::RecordMainSceneRenderGraph returned false");
|
||||
|
||||
Reference in New Issue
Block a user