Move camera frame render-graph lifecycle into execution module
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user