Harden scriptable render pipeline host boundary

This commit is contained in:
2026-04-26 16:02:01 +08:00
parent ac626d48c4
commit 1751fc4b3c
2 changed files with 36 additions and 9 deletions

View File

@@ -14,6 +14,13 @@ std::shared_ptr<const RenderPipelineAsset> CreateDefaultPipelineBackendAsset() {
return Rendering::Internal::CreateDefaultPipelineBackendAsset();
}
bool UsesAuthoritativeStageRecorder(
const RenderPipelineStageRecorder* stageRecorder,
const ManagedRenderPipelineAssetRuntime* managedAssetRuntime) {
return stageRecorder != nullptr ||
managedAssetRuntime != nullptr;
}
} // namespace
ScriptableRenderPipelineHost::ScriptableRenderPipelineHost()
@@ -103,6 +110,10 @@ bool ScriptableRenderPipelineHost::SupportsStageRenderGraph(
return m_stageRecorder->SupportsStageRenderGraph(context);
}
if (m_managedAssetRuntime != nullptr) {
return false;
}
return m_pipelineBackend != nullptr &&
m_pipelineBackend->SupportsStageRenderGraph(context);
}
@@ -117,9 +128,12 @@ bool ScriptableRenderPipelineHost::RecordStageRenderGraph(
const RenderPipelineStageSupportContext supportContext = {
context.stage,
context.rendererIndex };
if (m_stageRecorder->SupportsStageRenderGraph(supportContext)) {
return m_stageRecorder->RecordStageRenderGraph(context);
}
return m_stageRecorder->SupportsStageRenderGraph(supportContext) &&
m_stageRecorder->RecordStageRenderGraph(context);
}
if (m_managedAssetRuntime != nullptr) {
return false;
}
return m_pipelineBackend != nullptr &&
@@ -128,6 +142,12 @@ bool ScriptableRenderPipelineHost::RecordStageRenderGraph(
bool ScriptableRenderPipelineHost::Render(
const FrameExecutionContext& executionContext) {
if (UsesAuthoritativeStageRecorder(
m_stageRecorder.get(),
m_managedAssetRuntime.get())) {
return false;
}
if (!EnsureInitialized(executionContext.renderContext)) {
return false;
}
@@ -140,6 +160,12 @@ bool ScriptableRenderPipelineHost::Render(
const RenderContext& context,
const RenderSurface& surface,
const RenderSceneData& sceneData) {
if (UsesAuthoritativeStageRecorder(
m_stageRecorder.get(),
m_managedAssetRuntime.get())) {
return false;
}
if (!EnsureInitialized(context)) {
return false;
}
@@ -186,12 +212,10 @@ bool ScriptableRenderPipelineHost::ConfigureDirectionalShadowExecutionState(
RenderPass* ScriptableRenderPipelineHost::GetCameraFrameStandalonePass(
CameraFrameStage stage,
int32_t rendererIndex) const {
if (m_managedAssetRuntime != nullptr &&
IsCameraFrameScenePassRequestStage(stage) &&
SupportsStageRenderGraph(
RenderPipelineStageSupportContext{
stage,
rendererIndex })) {
if (UsesAuthoritativeStageRecorder(
m_stageRecorder.get(),
m_managedAssetRuntime.get()) &&
IsCameraFrameScenePassRequestStage(stage)) {
return nullptr;
}