Harden scriptable render pipeline host boundary
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user