refactor(rendering): generalize pipeline stage render graph boundary
This commit is contained in:
@@ -110,7 +110,7 @@ inline RenderGraphRecordingContext BuildRenderGraphRecordingContext(
|
||||
}
|
||||
|
||||
inline RenderGraphRecordingContext BuildRenderGraphRecordingContext(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context) {
|
||||
const RenderPipelineStageRenderGraphContext& context) {
|
||||
return {
|
||||
context.graphBuilder,
|
||||
context.passName,
|
||||
@@ -176,11 +176,13 @@ inline SceneRenderFeaturePassRenderGraphContext BuildSceneRenderFeaturePassRende
|
||||
};
|
||||
}
|
||||
|
||||
inline RenderPipelineMainSceneRenderGraphContext BuildRenderPipelineMainSceneRenderGraphContext(
|
||||
const RenderGraphRecordingContext& common) {
|
||||
inline RenderPipelineStageRenderGraphContext BuildRenderPipelineStageRenderGraphContext(
|
||||
const RenderGraphRecordingContext& common,
|
||||
CameraFrameStage stage) {
|
||||
return {
|
||||
common.graphBuilder,
|
||||
common.passName,
|
||||
stage,
|
||||
common.renderContext,
|
||||
common.sceneData,
|
||||
common.surface,
|
||||
|
||||
@@ -61,9 +61,9 @@ public:
|
||||
|
||||
bool Initialize(const RenderContext& context) override;
|
||||
void Shutdown() override;
|
||||
bool SupportsMainSceneRenderGraph() const override;
|
||||
bool RecordMainSceneRenderGraph(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context) override;
|
||||
bool SupportsStageRenderGraph(CameraFrameStage stage) const override;
|
||||
bool RecordStageRenderGraph(
|
||||
const RenderPipelineStageRenderGraphContext& context) override;
|
||||
bool Render(const FrameExecutionContext& executionContext) override;
|
||||
bool Render(
|
||||
const RenderContext& context,
|
||||
|
||||
@@ -32,9 +32,9 @@ public:
|
||||
|
||||
bool Initialize(const RenderContext& context) override;
|
||||
void Shutdown() override;
|
||||
bool SupportsMainSceneRenderGraph() const override;
|
||||
bool RecordMainSceneRenderGraph(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context) override;
|
||||
bool SupportsStageRenderGraph(CameraFrameStage stage) const override;
|
||||
bool RecordStageRenderGraph(
|
||||
const RenderPipelineStageRenderGraphContext& context) override;
|
||||
bool Render(const FrameExecutionContext& executionContext) override;
|
||||
bool Render(
|
||||
const RenderContext& context,
|
||||
|
||||
@@ -19,9 +19,10 @@ namespace Rendering {
|
||||
|
||||
class RenderGraphBuilder;
|
||||
|
||||
struct RenderPipelineMainSceneRenderGraphContext {
|
||||
struct RenderPipelineStageRenderGraphContext {
|
||||
RenderGraphBuilder& graphBuilder;
|
||||
Containers::String passName = {};
|
||||
CameraFrameStage stage = CameraFrameStage::MainScene;
|
||||
const RenderContext& renderContext;
|
||||
const RenderSceneData& sceneData;
|
||||
RenderSurface surfaceTemplate = {};
|
||||
@@ -41,11 +42,11 @@ public:
|
||||
|
||||
virtual bool Initialize(const RenderContext& context) = 0;
|
||||
virtual void Shutdown() = 0;
|
||||
virtual bool SupportsMainSceneRenderGraph() const {
|
||||
virtual bool SupportsStageRenderGraph(CameraFrameStage) const {
|
||||
return false;
|
||||
}
|
||||
virtual bool RecordMainSceneRenderGraph(
|
||||
const RenderPipelineMainSceneRenderGraphContext&) {
|
||||
virtual bool RecordStageRenderGraph(
|
||||
const RenderPipelineStageRenderGraphContext&) {
|
||||
return false;
|
||||
}
|
||||
virtual bool Render(const FrameExecutionContext& executionContext) {
|
||||
|
||||
@@ -13,12 +13,12 @@ namespace Rendering {
|
||||
|
||||
class SceneRenderFeatureHost;
|
||||
|
||||
Containers::String BuildRenderPipelineMainScenePhasePassName(
|
||||
Containers::String BuildRenderPipelineStagePhasePassName(
|
||||
const Containers::String& baseName,
|
||||
ScenePhase scenePhase);
|
||||
|
||||
bool RecordRenderPipelineMainSceneFeaturePasses(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context,
|
||||
bool RecordRenderPipelineStageFeaturePasses(
|
||||
const RenderPipelineStageRenderGraphContext& context,
|
||||
SceneRenderFeatureHost& featureHost,
|
||||
SceneRenderInjectionPoint injectionPoint,
|
||||
bool clearAttachments,
|
||||
@@ -26,8 +26,8 @@ bool RecordRenderPipelineMainSceneFeaturePasses(
|
||||
SceneRenderFeaturePassEndCallback endPassCallback = {},
|
||||
bool* recordedAnyPass = nullptr);
|
||||
|
||||
bool RecordRenderPipelineMainScenePhasePass(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context,
|
||||
bool RecordRenderPipelineStagePhasePass(
|
||||
const RenderPipelineStageRenderGraphContext& context,
|
||||
ScenePhase scenePhase,
|
||||
RenderPassGraphExecutePassCallback executePassCallback,
|
||||
RenderPassGraphBeginCallback beginPassCallback = {},
|
||||
|
||||
@@ -181,7 +181,8 @@ bool CameraRenderer::Render(
|
||||
return false;
|
||||
}
|
||||
if (plan.UsesGraphManagedOutputColor(CameraFrameStage::MainScene) &&
|
||||
(m_pipeline == nullptr || !m_pipeline->SupportsMainSceneRenderGraph())) {
|
||||
(m_pipeline == nullptr ||
|
||||
!m_pipeline->SupportsStageRenderGraph(CameraFrameStage::MainScene))) {
|
||||
Debug::Logger::Get().Error(
|
||||
Debug::LogCategory::Rendering,
|
||||
"CameraRenderer::Render failed: graph-managed main scene color requires pipeline main-scene render-graph support");
|
||||
|
||||
@@ -48,26 +48,27 @@ bool TryRecordCameraFrameStageStandaloneRenderGraphPass(
|
||||
return true;
|
||||
}
|
||||
|
||||
bool TryRecordCameraFrameMainSceneGraphPass(
|
||||
bool TryRecordCameraFramePipelineStageGraphPass(
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
bool& handled) {
|
||||
CameraFrameRenderGraphBuilderContext& builder = context.builder;
|
||||
if (!SupportsCameraFramePipelineGraphRecording(stageState.stage) ||
|
||||
builder.executionState.pipeline == nullptr ||
|
||||
!builder.executionState.pipeline->SupportsMainSceneRenderGraph()) {
|
||||
!builder.executionState.pipeline->SupportsStageRenderGraph(
|
||||
stageState.stage)) {
|
||||
handled = false;
|
||||
return true;
|
||||
}
|
||||
|
||||
handled = true;
|
||||
if (!RecordCameraFrameMainSceneGraphPass(
|
||||
if (!RecordCameraFramePipelineStageGraphPass(
|
||||
context,
|
||||
stageState,
|
||||
*builder.executionState.pipeline)) {
|
||||
Debug::Logger::Get().Error(
|
||||
Debug::LogCategory::Rendering,
|
||||
"CameraRenderer::Render failed: RenderPipeline::RecordMainSceneRenderGraph returned false");
|
||||
"CameraRenderer::Render failed: RenderPipeline::RecordStageRenderGraph returned false");
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ bool TryRecordCameraFrameStageStandaloneRenderGraphPass(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
bool& handled);
|
||||
|
||||
bool TryRecordCameraFrameMainSceneGraphPass(
|
||||
bool TryRecordCameraFramePipelineStageGraphPass(
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
bool& handled);
|
||||
|
||||
@@ -554,22 +554,23 @@ RenderPassContext BuildCameraFrameStageFallbackPassContext(
|
||||
};
|
||||
}
|
||||
|
||||
RenderPipelineMainSceneRenderGraphContext BuildCameraFrameMainSceneStageRenderGraphContext(
|
||||
RenderPipelineStageRenderGraphContext BuildCameraFramePipelineStageRenderGraphContext(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState) {
|
||||
return BuildRenderPipelineMainSceneRenderGraphContext(
|
||||
return BuildRenderPipelineStageRenderGraphContext(
|
||||
BuildCameraFrameStageGraphRecordingContext(
|
||||
context,
|
||||
stageState,
|
||||
context.sceneData));
|
||||
context.sceneData),
|
||||
stageState.stage);
|
||||
}
|
||||
|
||||
bool RecordCameraFrameMainSceneGraphPass(
|
||||
bool RecordCameraFramePipelineStageGraphPass(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
RenderPipelineRenderer& pipeline) {
|
||||
return pipeline.RecordMainSceneRenderGraph(
|
||||
BuildCameraFrameMainSceneStageRenderGraphContext(
|
||||
return pipeline.RecordStageRenderGraph(
|
||||
BuildCameraFramePipelineStageRenderGraphContext(
|
||||
context,
|
||||
stageState));
|
||||
}
|
||||
|
||||
@@ -146,11 +146,11 @@ RenderPassContext BuildCameraFrameStageFallbackPassContext(
|
||||
const RenderContext& renderContext,
|
||||
const RenderSceneData& sceneData);
|
||||
|
||||
RenderPipelineMainSceneRenderGraphContext BuildCameraFrameMainSceneStageRenderGraphContext(
|
||||
RenderPipelineStageRenderGraphContext BuildCameraFramePipelineStageRenderGraphContext(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState);
|
||||
|
||||
bool RecordCameraFrameMainSceneGraphPass(
|
||||
bool RecordCameraFramePipelineStageGraphPass(
|
||||
const CameraFrameRenderGraphStageContext& context,
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
RenderPipelineRenderer& pipeline);
|
||||
|
||||
@@ -20,7 +20,7 @@ using CameraFrameStageRecordHandler = bool (*)(
|
||||
constexpr std::array<CameraFrameStageRecordHandler, 3u> kCameraFrameStageRecordHandlers = {
|
||||
&TryRecordCameraFrameStageSequence,
|
||||
&TryRecordCameraFrameStageStandaloneRenderGraphPass,
|
||||
&TryRecordCameraFrameMainSceneGraphPass
|
||||
&TryRecordCameraFramePipelineStageGraphPass
|
||||
};
|
||||
|
||||
} // namespace
|
||||
|
||||
@@ -36,7 +36,7 @@ bool ScenePhaseSamplesMainDirectionalShadow(ScenePhase scenePhase) {
|
||||
|
||||
bool BuiltinForwardMainSceneGraphBuilder::Record(
|
||||
BuiltinForwardPipeline& pipeline,
|
||||
const RenderPipelineMainSceneRenderGraphContext& context) {
|
||||
const RenderPipelineStageRenderGraphContext& context) {
|
||||
const RenderSurface graphManagedSurface =
|
||||
BuildGraphManagedForwardSceneSurface(context.surfaceTemplate);
|
||||
const bool hasSourceSurface = context.sourceSurface != nullptr;
|
||||
@@ -58,8 +58,10 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
|
||||
? frameResources->mainDirectionalShadow
|
||||
: RenderGraphTextureHandle{};
|
||||
bool* const executionSucceeded = recordingContext.executionSucceeded;
|
||||
const RenderPipelineMainSceneRenderGraphContext graphContext =
|
||||
BuildRenderPipelineMainSceneRenderGraphContext(recordingContext);
|
||||
const RenderPipelineStageRenderGraphContext graphContext =
|
||||
BuildRenderPipelineStageRenderGraphContext(
|
||||
recordingContext,
|
||||
CameraFrameStage::MainScene);
|
||||
const std::shared_ptr<ForwardSceneGraphExecutionState> graphExecutionState =
|
||||
std::make_shared<ForwardSceneGraphExecutionState>();
|
||||
const SceneRenderFeaturePassBeginCallback beginRecordedPass =
|
||||
@@ -76,7 +78,7 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
|
||||
if (!pipeline.Initialize(passContext.renderContext)) {
|
||||
Debug::Logger::Get().Error(
|
||||
Debug::LogCategory::Rendering,
|
||||
"BuiltinForwardPipeline::RecordMainSceneRenderGraph failed during execution: Initialize returned false");
|
||||
"BuiltinForwardPipeline::RecordStageRenderGraph failed during execution: Initialize returned false");
|
||||
if (executionSucceeded != nullptr) {
|
||||
*executionSucceeded = false;
|
||||
}
|
||||
@@ -93,7 +95,7 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
|
||||
if (!pipeline.m_forwardSceneFeatureHost.Prepare(executionContext)) {
|
||||
Debug::Logger::Get().Error(
|
||||
Debug::LogCategory::Rendering,
|
||||
"BuiltinForwardPipeline::RecordMainSceneRenderGraph failed during execution: SceneRenderFeatureHost::Prepare returned false");
|
||||
"BuiltinForwardPipeline::RecordStageRenderGraph failed during execution: SceneRenderFeatureHost::Prepare returned false");
|
||||
if (executionSucceeded != nullptr) {
|
||||
*executionSucceeded = false;
|
||||
}
|
||||
@@ -106,7 +108,7 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
|
||||
if (!pipeline.BeginForwardScenePass(passContext, clearAttachments)) {
|
||||
Debug::Logger::Get().Error(
|
||||
Debug::LogCategory::Rendering,
|
||||
"BuiltinForwardPipeline::RecordMainSceneRenderGraph failed during execution: BeginForwardScenePass returned false");
|
||||
"BuiltinForwardPipeline::RecordStageRenderGraph failed during execution: BeginForwardScenePass returned false");
|
||||
if (executionSucceeded != nullptr) {
|
||||
*executionSucceeded = false;
|
||||
}
|
||||
@@ -124,7 +126,7 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
|
||||
for (const ForwardSceneStep& step : GetBuiltinForwardSceneSteps()) {
|
||||
if (step.type == ForwardSceneStepType::InjectionPoint) {
|
||||
bool recordedAnyPass = false;
|
||||
if (!::XCEngine::Rendering::RecordRenderPipelineMainSceneFeaturePasses(
|
||||
if (!::XCEngine::Rendering::RecordRenderPipelineStageFeaturePasses(
|
||||
graphContext,
|
||||
pipeline.m_forwardSceneFeatureHost,
|
||||
step.injectionPoint,
|
||||
@@ -150,7 +152,7 @@ bool BuiltinForwardMainSceneGraphBuilder::Record(
|
||||
mainDirectionalShadowTexture.IsValid()
|
||||
? std::vector<RenderGraphTextureHandle>{ mainDirectionalShadowTexture }
|
||||
: std::vector<RenderGraphTextureHandle>{};
|
||||
if (!::XCEngine::Rendering::RecordRenderPipelineMainScenePhasePass(
|
||||
if (!::XCEngine::Rendering::RecordRenderPipelineStagePhasePass(
|
||||
graphContext,
|
||||
step.scenePhase,
|
||||
[&pipeline, scenePhase = step.scenePhase](const RenderPassContext& passContext) {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
namespace XCEngine {
|
||||
namespace Rendering {
|
||||
|
||||
struct RenderPipelineMainSceneRenderGraphContext;
|
||||
struct RenderPipelineStageRenderGraphContext;
|
||||
|
||||
namespace Pipelines {
|
||||
|
||||
@@ -14,7 +14,7 @@ namespace Internal {
|
||||
struct BuiltinForwardMainSceneGraphBuilder {
|
||||
static bool Record(
|
||||
BuiltinForwardPipeline& pipeline,
|
||||
const RenderPipelineMainSceneRenderGraphContext& context);
|
||||
const RenderPipelineStageRenderGraphContext& context);
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -59,13 +59,15 @@ bool BuiltinForwardPipeline::ShouldSampleMainDirectionalShadowMap(const RenderSc
|
||||
IsDepthFormat(sceneData.lighting.mainDirectionalShadow.shadowMap->GetFormat());
|
||||
}
|
||||
|
||||
bool BuiltinForwardPipeline::SupportsMainSceneRenderGraph() const {
|
||||
return true;
|
||||
bool BuiltinForwardPipeline::SupportsStageRenderGraph(
|
||||
CameraFrameStage stage) const {
|
||||
return SupportsCameraFramePipelineGraphRecording(stage);
|
||||
}
|
||||
|
||||
bool BuiltinForwardPipeline::RecordMainSceneRenderGraph(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context) {
|
||||
return Internal::BuiltinForwardMainSceneGraphBuilder::Record(*this, context);
|
||||
bool BuiltinForwardPipeline::RecordStageRenderGraph(
|
||||
const RenderPipelineStageRenderGraphContext& context) {
|
||||
return context.stage == CameraFrameStage::MainScene &&
|
||||
Internal::BuiltinForwardMainSceneGraphBuilder::Record(*this, context);
|
||||
}
|
||||
|
||||
bool BuiltinForwardPipeline::Render(
|
||||
|
||||
@@ -99,15 +99,16 @@ void ScriptableRenderPipelineHost::Shutdown() {
|
||||
ShutdownCameraFrameStandalonePasses();
|
||||
}
|
||||
|
||||
bool ScriptableRenderPipelineHost::SupportsMainSceneRenderGraph() const {
|
||||
bool ScriptableRenderPipelineHost::SupportsStageRenderGraph(
|
||||
CameraFrameStage stage) const {
|
||||
return m_mainSceneRenderer != nullptr &&
|
||||
m_mainSceneRenderer->SupportsMainSceneRenderGraph();
|
||||
m_mainSceneRenderer->SupportsStageRenderGraph(stage);
|
||||
}
|
||||
|
||||
bool ScriptableRenderPipelineHost::RecordMainSceneRenderGraph(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context) {
|
||||
bool ScriptableRenderPipelineHost::RecordStageRenderGraph(
|
||||
const RenderPipelineStageRenderGraphContext& context) {
|
||||
return m_mainSceneRenderer != nullptr &&
|
||||
m_mainSceneRenderer->RecordMainSceneRenderGraph(context);
|
||||
m_mainSceneRenderer->RecordStageRenderGraph(context);
|
||||
}
|
||||
|
||||
bool ScriptableRenderPipelineHost::Render(
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
namespace XCEngine {
|
||||
namespace Rendering {
|
||||
|
||||
Containers::String BuildRenderPipelineMainScenePhasePassName(
|
||||
Containers::String BuildRenderPipelineStagePhasePassName(
|
||||
const Containers::String& baseName,
|
||||
ScenePhase scenePhase) {
|
||||
std::string name = baseName.CStr();
|
||||
@@ -21,8 +21,8 @@ Containers::String BuildRenderPipelineMainScenePhasePassName(
|
||||
return Containers::String(name.c_str());
|
||||
}
|
||||
|
||||
bool RecordRenderPipelineMainSceneFeaturePasses(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context,
|
||||
bool RecordRenderPipelineStageFeaturePasses(
|
||||
const RenderPipelineStageRenderGraphContext& context,
|
||||
SceneRenderFeatureHost& featureHost,
|
||||
SceneRenderInjectionPoint injectionPoint,
|
||||
bool clearAttachments,
|
||||
@@ -41,8 +41,8 @@ bool RecordRenderPipelineMainSceneFeaturePasses(
|
||||
recordedAnyPass);
|
||||
}
|
||||
|
||||
bool RecordRenderPipelineMainScenePhasePass(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context,
|
||||
bool RecordRenderPipelineStagePhasePass(
|
||||
const RenderPipelineStageRenderGraphContext& context,
|
||||
ScenePhase scenePhase,
|
||||
RenderPassGraphExecutePassCallback executePassCallback,
|
||||
RenderPassGraphBeginCallback beginPassCallback,
|
||||
@@ -52,7 +52,7 @@ bool RecordRenderPipelineMainScenePhasePass(
|
||||
BuildRenderPassRenderGraphContext(
|
||||
CloneRenderGraphRecordingContext(
|
||||
BuildRenderGraphRecordingContext(context),
|
||||
BuildRenderPipelineMainScenePhasePassName(
|
||||
BuildRenderPipelineStagePhasePassName(
|
||||
context.passName,
|
||||
scenePhase)),
|
||||
beginPassCallback,
|
||||
|
||||
@@ -577,7 +577,7 @@ TEST(BuiltinForwardPipeline_Test, UsesFloat3PositionInputLayoutForStaticMeshVert
|
||||
|
||||
TEST(BuiltinForwardPipeline_Test, RecordsMainSceneGraphPassWithSampledShadowDependency) {
|
||||
BuiltinForwardPipeline pipeline;
|
||||
EXPECT_TRUE(pipeline.SupportsMainSceneRenderGraph());
|
||||
EXPECT_TRUE(pipeline.SupportsStageRenderGraph(CameraFrameStage::MainScene));
|
||||
|
||||
RenderGraph graph = {};
|
||||
RenderGraphBuilder graphBuilder(graph);
|
||||
@@ -634,9 +634,10 @@ TEST(BuiltinForwardPipeline_Test, RecordsMainSceneGraphPassWithSampledShadowDepe
|
||||
frameResources.mainScene.depth = depthTarget;
|
||||
frameResources.mainDirectionalShadow = shadowTarget;
|
||||
bool executionSucceeded = true;
|
||||
const RenderPipelineMainSceneRenderGraphContext context = {
|
||||
const RenderPipelineStageRenderGraphContext context = {
|
||||
graphBuilder,
|
||||
"MainScene",
|
||||
CameraFrameStage::MainScene,
|
||||
renderContext,
|
||||
sceneData,
|
||||
surface,
|
||||
@@ -650,7 +651,7 @@ TEST(BuiltinForwardPipeline_Test, RecordsMainSceneGraphPassWithSampledShadowDepe
|
||||
&blackboard
|
||||
};
|
||||
|
||||
ASSERT_TRUE(pipeline.RecordMainSceneRenderGraph(context));
|
||||
ASSERT_TRUE(pipeline.RecordStageRenderGraph(context));
|
||||
|
||||
CompiledRenderGraph compiledGraph = {};
|
||||
String errorMessage;
|
||||
@@ -1173,9 +1174,10 @@ TEST(BuiltinForwardPipeline_Test, RecordsActiveFeatureInjectionPassesIntoMainSce
|
||||
frameResources.mainScene.color = colorTarget;
|
||||
frameResources.mainScene.depth = depthTarget;
|
||||
bool executionSucceeded = true;
|
||||
const RenderPipelineMainSceneRenderGraphContext context = {
|
||||
const RenderPipelineStageRenderGraphContext context = {
|
||||
graphBuilder,
|
||||
"MainScene",
|
||||
CameraFrameStage::MainScene,
|
||||
renderContext,
|
||||
sceneData,
|
||||
surface,
|
||||
@@ -1189,7 +1191,7 @@ TEST(BuiltinForwardPipeline_Test, RecordsActiveFeatureInjectionPassesIntoMainSce
|
||||
&blackboard
|
||||
};
|
||||
|
||||
ASSERT_TRUE(pipeline.RecordMainSceneRenderGraph(context));
|
||||
ASSERT_TRUE(pipeline.RecordStageRenderGraph(context));
|
||||
|
||||
CompiledRenderGraph compiledGraph = {};
|
||||
String errorMessage;
|
||||
@@ -1272,9 +1274,10 @@ TEST(BuiltinForwardPipeline_Test, ForwardsSourceColorTextureIntoFeatureInjection
|
||||
RenderSceneData sceneData = {};
|
||||
RenderGraphBlackboard blackboard = {};
|
||||
bool executionSucceeded = true;
|
||||
const RenderPipelineMainSceneRenderGraphContext context = {
|
||||
const RenderPipelineStageRenderGraphContext context = {
|
||||
graphBuilder,
|
||||
"MainScene",
|
||||
CameraFrameStage::MainScene,
|
||||
renderContext,
|
||||
sceneData,
|
||||
surface,
|
||||
@@ -1288,7 +1291,7 @@ TEST(BuiltinForwardPipeline_Test, ForwardsSourceColorTextureIntoFeatureInjection
|
||||
&blackboard
|
||||
};
|
||||
|
||||
ASSERT_TRUE(pipeline.RecordMainSceneRenderGraph(context));
|
||||
ASSERT_TRUE(pipeline.RecordStageRenderGraph(context));
|
||||
EXPECT_EQ(featureRaw->recordGraphCallCount, 1u);
|
||||
EXPECT_TRUE(featureRaw->lastReceivedSourceColorTextureValid);
|
||||
|
||||
|
||||
@@ -100,14 +100,15 @@ public:
|
||||
ShutdownCameraFrameStandalonePasses();
|
||||
}
|
||||
|
||||
bool SupportsMainSceneRenderGraph() const override {
|
||||
return true;
|
||||
bool SupportsStageRenderGraph(CameraFrameStage stage) const override {
|
||||
return SupportsCameraFramePipelineGraphRecording(stage);
|
||||
}
|
||||
|
||||
bool RecordMainSceneRenderGraph(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context) override {
|
||||
bool RecordStageRenderGraph(
|
||||
const RenderPipelineStageRenderGraphContext& context) override {
|
||||
++recordCalls;
|
||||
lastPassName = context.passName.CStr();
|
||||
lastStage = context.stage;
|
||||
lastColorTargets = context.colorTargets;
|
||||
lastDepthTarget = context.depthTarget;
|
||||
lastExecutionSucceeded = context.executionSucceeded;
|
||||
@@ -139,6 +140,7 @@ public:
|
||||
int recordCalls = 0;
|
||||
int renderCalls = 0;
|
||||
std::string lastPassName = {};
|
||||
CameraFrameStage lastStage = CameraFrameStage::PreScenePasses;
|
||||
std::vector<RenderGraphTextureHandle> lastColorTargets = {};
|
||||
RenderGraphTextureHandle lastDepthTarget = {};
|
||||
bool* lastExecutionSucceeded = nullptr;
|
||||
@@ -813,12 +815,13 @@ TEST(CameraFrameRenderGraphStageContract_Test, RecordsMainSceneGraphPassFromStag
|
||||
stageState.outputSurface.depthTexture = RenderGraphTextureHandle{ 43u };
|
||||
|
||||
RecordingPipeline pipeline = {};
|
||||
ASSERT_TRUE(RecordCameraFrameMainSceneGraphPass(
|
||||
ASSERT_TRUE(RecordCameraFramePipelineStageGraphPass(
|
||||
context,
|
||||
stageState,
|
||||
pipeline));
|
||||
ASSERT_EQ(pipeline.recordCalls, 1);
|
||||
EXPECT_STREQ(pipeline.lastPassName.c_str(), "MainScene");
|
||||
EXPECT_EQ(pipeline.lastStage, CameraFrameStage::MainScene);
|
||||
ASSERT_EQ(pipeline.lastColorTargets.size(), 1u);
|
||||
EXPECT_EQ(pipeline.lastColorTargets[0].index, 41u);
|
||||
EXPECT_EQ(pipeline.lastDepthTarget.index, 43u);
|
||||
|
||||
@@ -432,12 +432,13 @@ public:
|
||||
ShutdownCameraFrameStandalonePasses();
|
||||
}
|
||||
|
||||
bool SupportsMainSceneRenderGraph() const override {
|
||||
return m_state->supportsMainSceneRenderGraph;
|
||||
bool SupportsStageRenderGraph(CameraFrameStage stage) const override {
|
||||
return SupportsCameraFramePipelineGraphRecording(stage) &&
|
||||
m_state->supportsMainSceneRenderGraph;
|
||||
}
|
||||
|
||||
bool RecordMainSceneRenderGraph(
|
||||
const RenderPipelineMainSceneRenderGraphContext& context) override {
|
||||
bool RecordStageRenderGraph(
|
||||
const RenderPipelineStageRenderGraphContext& context) override {
|
||||
++m_state->recordMainSceneCalls;
|
||||
m_state->lastReceivedRenderGraphBlackboard = context.blackboard != nullptr;
|
||||
if (const CameraFrameRenderGraphResources* frameResources =
|
||||
@@ -3729,9 +3730,10 @@ TEST(ScriptableRenderPipelineHost_Test, ForwardsRendererLifetimeAndFrameRenderin
|
||||
bool executionSucceeded = true;
|
||||
RenderSceneData graphSceneData =
|
||||
CreateSceneDataForCamera(scene, *camera, request.surface);
|
||||
const RenderPipelineMainSceneRenderGraphContext graphContext = {
|
||||
const RenderPipelineStageRenderGraphContext graphContext = {
|
||||
graphBuilder,
|
||||
"MainScene",
|
||||
CameraFrameStage::MainScene,
|
||||
request.context,
|
||||
graphSceneData,
|
||||
request.surface,
|
||||
@@ -3744,8 +3746,8 @@ TEST(ScriptableRenderPipelineHost_Test, ForwardsRendererLifetimeAndFrameRenderin
|
||||
&executionSucceeded,
|
||||
&blackboard
|
||||
};
|
||||
EXPECT_TRUE(host.SupportsMainSceneRenderGraph());
|
||||
EXPECT_TRUE(host.RecordMainSceneRenderGraph(graphContext));
|
||||
EXPECT_TRUE(host.SupportsStageRenderGraph(CameraFrameStage::MainScene));
|
||||
EXPECT_TRUE(host.RecordStageRenderGraph(graphContext));
|
||||
EXPECT_EQ(replacementState->recordMainSceneCalls, 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -295,7 +295,7 @@ TEST(RenderGraphRecordingContext_Test, BuildsFeaturePassContextAndCloneOverrides
|
||||
EXPECT_TRUE(endCalled);
|
||||
}
|
||||
|
||||
TEST(RenderGraphRecordingContext_Test, BuildsPipelineMainSceneContextFromSharedRecordingData) {
|
||||
TEST(RenderGraphRecordingContext_Test, BuildsPipelineStageContextFromSharedRecordingData) {
|
||||
RenderGraph graph = {};
|
||||
RenderGraphBuilder builder(graph);
|
||||
RenderGraphBlackboard blackboard = {};
|
||||
@@ -314,11 +314,14 @@ TEST(RenderGraphRecordingContext_Test, BuildsPipelineMainSceneContextFromSharedR
|
||||
sourceSurface,
|
||||
executionSucceeded);
|
||||
|
||||
const RenderPipelineMainSceneRenderGraphContext pipelineContext =
|
||||
BuildRenderPipelineMainSceneRenderGraphContext(commonContext);
|
||||
const RenderPipelineStageRenderGraphContext pipelineContext =
|
||||
BuildRenderPipelineStageRenderGraphContext(
|
||||
commonContext,
|
||||
CameraFrameStage::MainScene);
|
||||
|
||||
EXPECT_EQ(&pipelineContext.graphBuilder, &builder);
|
||||
EXPECT_EQ(pipelineContext.passName, XCEngine::Containers::String("Recording.Pass"));
|
||||
EXPECT_EQ(pipelineContext.stage, CameraFrameStage::MainScene);
|
||||
EXPECT_EQ(&pipelineContext.renderContext, &renderContext);
|
||||
EXPECT_EQ(&pipelineContext.sceneData, &sceneData);
|
||||
EXPECT_EQ(pipelineContext.surfaceTemplate.GetWidth(), 800u);
|
||||
@@ -390,7 +393,7 @@ TEST(RenderGraphRecordingContext_Test, CloneOverridesSelectedRecordingContextFie
|
||||
EXPECT_EQ(overriddenContext.blackboard, &blackboard);
|
||||
}
|
||||
|
||||
TEST(RenderGraphRecordingContext_Test, BuildsSharedRecordingDataFromPipelineMainSceneContext) {
|
||||
TEST(RenderGraphRecordingContext_Test, BuildsSharedRecordingDataFromPipelineStageContext) {
|
||||
RenderGraph graph = {};
|
||||
RenderGraphBuilder builder(graph);
|
||||
RenderGraphBlackboard blackboard = {};
|
||||
@@ -408,8 +411,10 @@ TEST(RenderGraphRecordingContext_Test, BuildsSharedRecordingDataFromPipelineMain
|
||||
surface,
|
||||
sourceSurface,
|
||||
executionSucceeded);
|
||||
const RenderPipelineMainSceneRenderGraphContext pipelineContext =
|
||||
BuildRenderPipelineMainSceneRenderGraphContext(commonContext);
|
||||
const RenderPipelineStageRenderGraphContext pipelineContext =
|
||||
BuildRenderPipelineStageRenderGraphContext(
|
||||
commonContext,
|
||||
CameraFrameStage::MainScene);
|
||||
|
||||
const RenderGraphRecordingContext rebuiltCommonContext =
|
||||
BuildRenderGraphRecordingContext(pipelineContext);
|
||||
|
||||
Reference in New Issue
Block a user