refactor(srp): model shared native backend substrate
This commit is contained in:
@@ -1498,9 +1498,7 @@ public:
|
||||
bool TryGetDefaultFinalColorSettings(
|
||||
Rendering::FinalColorSettings& settings) const override;
|
||||
std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
GetPipelineBackendAsset() const override;
|
||||
std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
GetPipelineBackendAsset(int32_t rendererIndex) const override;
|
||||
GetSharedPipelineBackendAsset() const override;
|
||||
bool UsesNativeCameraFramePlanBaseline() const override;
|
||||
bool UsesNativeCameraFramePlanBaseline(
|
||||
int32_t rendererIndex) const override;
|
||||
@@ -1571,9 +1569,9 @@ private:
|
||||
mutable int32_t m_runtimeResourceVersion = 0;
|
||||
mutable uint32_t m_pipelineHandle = 0;
|
||||
mutable bool m_pipelineCreationAttempted = false;
|
||||
mutable bool m_pipelineBackendAssetResolved = false;
|
||||
mutable bool m_sharedPipelineBackendAssetResolved = false;
|
||||
mutable std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
m_pipelineBackendAsset = nullptr;
|
||||
m_sharedPipelineBackendAsset = nullptr;
|
||||
};
|
||||
|
||||
class MonoManagedRenderPipelineStageRecorder final
|
||||
@@ -1607,7 +1605,7 @@ public:
|
||||
if (m_ownedSceneDrawBackend != nullptr) {
|
||||
m_ownedSceneDrawBackend->Shutdown();
|
||||
}
|
||||
m_ownedPipelineBackendAsset.reset();
|
||||
m_ownedSharedPipelineBackendAsset.reset();
|
||||
m_supportsStageContextualMethod = nullptr;
|
||||
m_supportsStageMethod = nullptr;
|
||||
m_recordStageMethod = nullptr;
|
||||
@@ -1718,7 +1716,7 @@ public:
|
||||
managedContextState.stage = context.stage;
|
||||
managedContextState.graphContext = &context;
|
||||
Rendering::SceneDrawBackend* const sceneDrawBackend =
|
||||
ResolveSceneDrawBackend(context.rendererIndex);
|
||||
ResolveSceneDrawBackend();
|
||||
if (sceneDrawBackend == nullptr) {
|
||||
return false;
|
||||
}
|
||||
@@ -1904,40 +1902,31 @@ private:
|
||||
return true;
|
||||
}
|
||||
|
||||
Rendering::SceneDrawBackend* ResolveSceneDrawBackend(
|
||||
int32_t rendererIndex) {
|
||||
const std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
contextualPipelineBackendAsset =
|
||||
m_assetRuntime != nullptr
|
||||
? m_assetRuntime->GetPipelineBackendAsset(
|
||||
rendererIndex)
|
||||
: nullptr;
|
||||
const std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
defaultPipelineBackendAsset =
|
||||
m_assetRuntime != nullptr
|
||||
? m_assetRuntime->GetPipelineBackendAsset()
|
||||
: nullptr;
|
||||
if (m_boundSceneDrawBackend != nullptr &&
|
||||
contextualPipelineBackendAsset != nullptr &&
|
||||
contextualPipelineBackendAsset ==
|
||||
defaultPipelineBackendAsset) {
|
||||
Rendering::SceneDrawBackend* ResolveSceneDrawBackend() {
|
||||
if (m_boundSceneDrawBackend != nullptr) {
|
||||
return m_boundSceneDrawBackend;
|
||||
}
|
||||
|
||||
if (contextualPipelineBackendAsset == nullptr) {
|
||||
const std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
sharedPipelineBackendAsset =
|
||||
m_assetRuntime != nullptr
|
||||
? m_assetRuntime->GetSharedPipelineBackendAsset()
|
||||
: nullptr;
|
||||
if (sharedPipelineBackendAsset == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (m_ownedSceneDrawBackend == nullptr ||
|
||||
contextualPipelineBackendAsset != m_ownedPipelineBackendAsset) {
|
||||
sharedPipelineBackendAsset !=
|
||||
m_ownedSharedPipelineBackendAsset) {
|
||||
if (m_ownedSceneDrawBackend != nullptr) {
|
||||
m_ownedSceneDrawBackend->Shutdown();
|
||||
}
|
||||
m_ownedSceneDrawBackend =
|
||||
Rendering::Internal::CreateSceneDrawBackendFromAsset(
|
||||
contextualPipelineBackendAsset);
|
||||
m_ownedPipelineBackendAsset =
|
||||
contextualPipelineBackendAsset;
|
||||
sharedPipelineBackendAsset);
|
||||
m_ownedSharedPipelineBackendAsset =
|
||||
sharedPipelineBackendAsset;
|
||||
}
|
||||
|
||||
return m_ownedSceneDrawBackend.get();
|
||||
@@ -1952,7 +1941,7 @@ private:
|
||||
std::vector<std::unique_ptr<Rendering::RenderPass>> m_fullscreenPassPool = {};
|
||||
Rendering::SceneDrawBackend* m_boundSceneDrawBackend = nullptr;
|
||||
std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
m_ownedPipelineBackendAsset = nullptr;
|
||||
m_ownedSharedPipelineBackendAsset = nullptr;
|
||||
std::unique_ptr<Rendering::SceneDrawBackend> m_ownedSceneDrawBackend =
|
||||
nullptr;
|
||||
};
|
||||
@@ -2195,29 +2184,23 @@ bool MonoManagedRenderPipelineAssetRuntime::TryGetDefaultFinalColorSettings(
|
||||
}
|
||||
|
||||
std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
MonoManagedRenderPipelineAssetRuntime::GetPipelineBackendAsset() const {
|
||||
return GetPipelineBackendAsset(-1);
|
||||
}
|
||||
|
||||
std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
MonoManagedRenderPipelineAssetRuntime::GetPipelineBackendAsset(
|
||||
int32_t rendererIndex) const {
|
||||
MonoManagedRenderPipelineAssetRuntime::GetSharedPipelineBackendAsset() const {
|
||||
if (!SyncManagedAssetRuntimeState()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (m_pipelineBackendAssetResolved) {
|
||||
return m_pipelineBackendAsset;
|
||||
if (m_sharedPipelineBackendAssetResolved) {
|
||||
return m_sharedPipelineBackendAsset;
|
||||
}
|
||||
|
||||
if (GetManagedAssetObject() == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
m_pipelineBackendAssetResolved = true;
|
||||
m_pipelineBackendAsset =
|
||||
m_sharedPipelineBackendAssetResolved = true;
|
||||
m_sharedPipelineBackendAsset =
|
||||
Rendering::Internal::CreateDefaultPipelineBackendAsset();
|
||||
return m_pipelineBackendAsset;
|
||||
return m_sharedPipelineBackendAsset;
|
||||
}
|
||||
|
||||
bool MonoManagedRenderPipelineAssetRuntime::UsesNativeCameraFramePlanBaseline()
|
||||
@@ -2417,8 +2400,8 @@ bool MonoManagedRenderPipelineAssetRuntime::SyncManagedAssetRuntimeState() const
|
||||
}
|
||||
|
||||
ReleaseManagedPipeline();
|
||||
m_pipelineBackendAsset.reset();
|
||||
m_pipelineBackendAssetResolved = false;
|
||||
m_sharedPipelineBackendAsset.reset();
|
||||
m_sharedPipelineBackendAssetResolved = false;
|
||||
m_runtimeResourceVersion = runtimeResourceVersion;
|
||||
return true;
|
||||
}
|
||||
@@ -2488,8 +2471,8 @@ void MonoManagedRenderPipelineAssetRuntime::ReleaseManagedAsset() const {
|
||||
m_usesNativeCameraFramePlanBaselineContextualMethod = nullptr;
|
||||
m_configureRenderSceneSetupMethod = nullptr;
|
||||
m_configureDirectionalShadowExecutionStateMethod = nullptr;
|
||||
m_pipelineBackendAsset.reset();
|
||||
m_pipelineBackendAssetResolved = false;
|
||||
m_sharedPipelineBackendAsset.reset();
|
||||
m_sharedPipelineBackendAssetResolved = false;
|
||||
m_runtimeResourceVersionResolved = false;
|
||||
m_runtimeResourceVersion = 0;
|
||||
const bool ownsManagedAssetHandle = m_ownsManagedAssetHandle;
|
||||
|
||||
Reference in New Issue
Block a user