Move camera frame render-graph lifecycle into execution module

This commit is contained in:
2026-04-14 23:38:22 +08:00
parent 3e5b7287c7
commit f26b0024f2
3 changed files with 57 additions and 49 deletions

View File

@@ -1,7 +1,12 @@
#include "Rendering/Execution/Internal/CameraFrameRenderGraphExecution.h"
#include "Debug/Logger.h"
#include "Rendering/Execution/DirectionalShadowExecutionState.h"
#include "Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.h"
#include "Rendering/Execution/Internal/CameraFrameRenderGraphStageRuntime.h"
#include "Rendering/Graph/RenderGraph.h"
#include "Rendering/Graph/RenderGraphCompiler.h"
#include "Rendering/Graph/RenderGraphExecutor.h"
namespace XCEngine {
namespace Rendering {
@@ -14,14 +19,47 @@ bool ExecuteCameraFrameRenderGraphPlan(
RenderPass* objectIdPass,
RenderPass* depthOnlyPass,
RenderPass* shadowCasterPass) {
return ExecuteCameraFrameRenderGraphStages(
RenderGraph graph = {};
RenderGraphBuilder graphBuilder(graph);
RenderGraphBlackboard blackboard = {};
CameraFrameExecutionState executionState = {};
executionState.pipeline = pipeline;
executionState.objectIdPass = objectIdPass;
executionState.depthOnlyPass = depthOnlyPass;
executionState.shadowCasterPass = shadowCasterPass;
bool stageExecutionSucceeded = true;
if (!RecordCameraFrameRenderGraphStages(
plan,
shadowState,
sceneData,
pipeline,
objectIdPass,
depthOnlyPass,
shadowCasterPass);
executionState,
graphBuilder,
blackboard,
stageExecutionSucceeded)) {
return false;
}
CompiledRenderGraph compiledGraph = {};
Containers::String errorMessage;
if (!RenderGraphCompiler::Compile(graph, compiledGraph, &errorMessage)) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
Containers::String("CameraRenderer::Render failed: RenderGraph compile failed: ") +
errorMessage);
return false;
}
if (!RenderGraphExecutor::Execute(compiledGraph, plan.request.context, &errorMessage)) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
Containers::String("CameraRenderer::Render failed: RenderGraph execute failed: ") +
errorMessage);
return false;
}
return stageExecutionSucceeded;
}
} // namespace Rendering

View File

@@ -1,6 +1,5 @@
#include "Rendering/Execution/Internal/CameraFrameRenderGraphStageRecording.h"
#include "Debug/Logger.h"
#include "Rendering/Execution/CameraFrameRenderGraphResources.h"
#include "Rendering/Execution/CameraFrameRenderGraphStagePolicy.h"
#include "Rendering/Execution/Internal/CameraFrameRenderGraphStagePassRecording.h"
@@ -8,34 +7,22 @@
#include "Rendering/Execution/Internal/CameraFrameRenderGraphStageSequenceRecording.h"
#include "Rendering/Execution/Internal/CameraFrameRenderGraphStageState.h"
#include "Rendering/Graph/RenderGraph.h"
#include "Rendering/Graph/RenderGraphCompiler.h"
#include "Rendering/Graph/RenderGraphExecutor.h"
namespace XCEngine {
namespace Rendering {
bool ExecuteCameraFrameRenderGraphStages(
bool RecordCameraFrameRenderGraphStages(
const CameraFramePlan& plan,
const DirectionalShadowExecutionState& shadowState,
const RenderSceneData& sceneData,
RenderPipeline* pipeline,
RenderPass* objectIdPass,
RenderPass* depthOnlyPass,
RenderPass* shadowCasterPass) {
RenderGraph graph = {};
RenderGraphBuilder graphBuilder(graph);
RenderGraphBlackboard blackboard = {};
CameraFrameExecutionState& executionState,
RenderGraphBuilder& graphBuilder,
RenderGraphBlackboard& blackboard,
bool& stageExecutionSucceeded) {
CameraFrameRenderGraphResources& frameResources =
blackboard.Emplace<CameraFrameRenderGraphResources>();
CameraFrameExecutionState executionState = {};
executionState.pipeline = pipeline;
executionState.objectIdPass = objectIdPass;
executionState.depthOnlyPass = depthOnlyPass;
executionState.shadowCasterPass = shadowCasterPass;
RenderGraphImportedTextureRegistry importedTextures = {};
bool stageExecutionSucceeded = true;
for (const CameraFrameStageInfo& stageInfo : kOrderedCameraFrameStages) {
if (!plan.HasFrameStage(stageInfo.stage) &&
stageInfo.stage != CameraFrameStage::MainScene) {
@@ -112,25 +99,7 @@ bool ExecuteCameraFrameRenderGraphStages(
stageExecutionSucceeded);
}
CompiledRenderGraph compiledGraph = {};
Containers::String errorMessage;
if (!RenderGraphCompiler::Compile(graph, compiledGraph, &errorMessage)) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
Containers::String("CameraRenderer::Render failed: RenderGraph compile failed: ") +
errorMessage);
return false;
}
if (!RenderGraphExecutor::Execute(compiledGraph, plan.request.context, &errorMessage)) {
Debug::Logger::Get().Error(
Debug::LogCategory::Rendering,
Containers::String("CameraRenderer::Render failed: RenderGraph execute failed: ") +
errorMessage);
return false;
}
return stageExecutionSucceeded;
return true;
}
} // namespace Rendering

View File

@@ -1,22 +1,23 @@
#pragma once
#include <XCEngine/Rendering/Execution/CameraFramePlan.h>
#include <XCEngine/Rendering/RenderPass.h>
#include <XCEngine/Rendering/RenderPipeline.h>
namespace XCEngine {
namespace Rendering {
struct CameraFrameExecutionState;
struct DirectionalShadowExecutionState;
class RenderGraphBuilder;
class RenderGraphBlackboard;
bool ExecuteCameraFrameRenderGraphStages(
bool RecordCameraFrameRenderGraphStages(
const CameraFramePlan& plan,
const DirectionalShadowExecutionState& shadowState,
const RenderSceneData& sceneData,
RenderPipeline* pipeline,
RenderPass* objectIdPass,
RenderPass* depthOnlyPass,
RenderPass* shadowCasterPass);
CameraFrameExecutionState& executionState,
RenderGraphBuilder& graphBuilder,
RenderGraphBlackboard& blackboard,
bool& stageExecutionSucceeded);
} // namespace Rendering
} // namespace XCEngine