Tighten SRP stage fallback gate
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
#include "Rendering/Execution/Internal/CameraFrameGraph/PassRecorder.h"
|
||||
#include "Rendering/Execution/Internal/CameraFrameGraph/SequenceRecorder.h"
|
||||
#include "Rendering/Execution/Internal/CameraFrameGraph/State.h"
|
||||
#include "Debug/Logger.h"
|
||||
#include "Rendering/RenderPipeline.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
@@ -23,6 +25,25 @@ constexpr std::array<CameraFrameStageRecordHandler, 3u> kCameraFrameStageRecordH
|
||||
&TryRecordCameraFrameStageStandaloneRenderGraphPass
|
||||
};
|
||||
|
||||
RenderPipelineStageSupportContext BuildStageSupportContext(
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
const CameraFrameRenderGraphStageContext& context) {
|
||||
return RenderPipelineStageSupportContext{
|
||||
stageState.stage,
|
||||
context.plan.request.rendererIndex };
|
||||
}
|
||||
|
||||
bool AllowsCameraFrameStageFallback(
|
||||
const CameraFrameStageGraphBuildState& stageState,
|
||||
const CameraFrameRenderGraphStageContext& context) {
|
||||
RenderPipeline* const pipeline = context.builder.executionState.pipeline;
|
||||
return pipeline == nullptr ||
|
||||
pipeline->AllowsCameraFrameStageFallback(
|
||||
BuildStageSupportContext(
|
||||
stageState,
|
||||
context));
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
bool RecordCameraFrameRenderGraphStage(
|
||||
@@ -44,6 +65,15 @@ bool RecordCameraFrameRenderGraphStage(
|
||||
}
|
||||
}
|
||||
|
||||
if (!AllowsCameraFrameStageFallback(stageState, context)) {
|
||||
Debug::Logger::Get().Error(
|
||||
Debug::LogCategory::Rendering,
|
||||
Containers::String(
|
||||
"CameraRenderer::Render failed: stage has no render-graph recorder or sequence, and the selected pipeline disallows fallback: ") +
|
||||
stageState.stageName);
|
||||
return false;
|
||||
}
|
||||
|
||||
AddCameraFrameStageFallbackRasterPass(stageState, context);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -118,6 +118,24 @@ bool ScriptableRenderPipelineHost::SupportsStageRenderGraph(
|
||||
m_pipelineBackend->SupportsStageRenderGraph(context);
|
||||
}
|
||||
|
||||
bool ScriptableRenderPipelineHost::AllowsCameraFrameStageFallback(
|
||||
CameraFrameStage stage) const {
|
||||
return AllowsCameraFrameStageFallback(
|
||||
RenderPipelineStageSupportContext{ stage, -1 });
|
||||
}
|
||||
|
||||
bool ScriptableRenderPipelineHost::AllowsCameraFrameStageFallback(
|
||||
const RenderPipelineStageSupportContext& context) const {
|
||||
if (UsesAuthoritativeStageRecorder(
|
||||
m_stageRecorder.get(),
|
||||
m_managedAssetRuntime.get())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return m_pipelineBackend != nullptr &&
|
||||
m_pipelineBackend->AllowsCameraFrameStageFallback(context);
|
||||
}
|
||||
|
||||
bool ScriptableRenderPipelineHost::RecordStageRenderGraph(
|
||||
const RenderPipelineStageRenderGraphContext& context) {
|
||||
if (!EnsureInitialized(context.renderContext)) {
|
||||
|
||||
Reference in New Issue
Block a user