rendering: close out backend contract phase 4.1
This commit is contained in:
@@ -9,6 +9,24 @@ namespace XCEngine {
|
||||
namespace Rendering {
|
||||
namespace Pipelines {
|
||||
|
||||
namespace {
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset>
|
||||
ResolveManagedPipelineBackendAsset(
|
||||
const ManagedRenderPipelineAssetRuntime& runtime) {
|
||||
switch (runtime.GetPipelineRendererAssetPolicy()) {
|
||||
case ManagedPipelineRendererAssetPolicy::ExplicitAsset:
|
||||
return runtime.GetSharedPipelineBackendAsset();
|
||||
case ManagedPipelineRendererAssetPolicy::DefaultNativeBackend:
|
||||
return Internal::CreateDefaultPipelineBackendAsset();
|
||||
case ManagedPipelineRendererAssetPolicy::Unspecified:
|
||||
default:
|
||||
return runtime.GetSharedPipelineBackendAsset();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
ManagedScriptableRenderPipelineAsset::ManagedScriptableRenderPipelineAsset(
|
||||
ManagedRenderPipelineAssetDescriptor descriptor)
|
||||
: m_descriptor(std::move(descriptor)) {
|
||||
@@ -43,21 +61,7 @@ ManagedScriptableRenderPipelineAsset::ResolveSharedPipelineBackendAsset() const
|
||||
if (const std::shared_ptr<const ManagedRenderPipelineAssetRuntime> runtime =
|
||||
ResolveManagedAssetRuntime();
|
||||
runtime != nullptr) {
|
||||
if (const std::shared_ptr<const RenderPipelineAsset> rendererAsset =
|
||||
runtime->GetPipelineRendererAsset();
|
||||
rendererAsset != nullptr) {
|
||||
return rendererAsset;
|
||||
}
|
||||
|
||||
switch (runtime->GetPipelineRendererAssetPolicy()) {
|
||||
case ManagedPipelineRendererAssetPolicy::ExplicitAsset:
|
||||
return runtime->GetSharedPipelineBackendAsset();
|
||||
case ManagedPipelineRendererAssetPolicy::DefaultNativeBackend:
|
||||
return Internal::CreateDefaultPipelineBackendAsset();
|
||||
case ManagedPipelineRendererAssetPolicy::Unspecified:
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
return ResolveManagedPipelineBackendAsset(*runtime);
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
|
||||
@@ -1702,9 +1702,6 @@ private:
|
||||
mutable int32_t m_runtimeResourceVersion = 0;
|
||||
mutable uint32_t m_pipelineHandle = 0;
|
||||
mutable bool m_pipelineCreationAttempted = false;
|
||||
mutable bool m_sharedPipelineBackendAssetResolved = false;
|
||||
mutable std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
m_sharedPipelineBackendAsset = nullptr;
|
||||
};
|
||||
|
||||
class MonoManagedRenderPipelineStageRecorder final
|
||||
@@ -2043,21 +2040,15 @@ private:
|
||||
return m_boundSceneDrawBackend;
|
||||
}
|
||||
|
||||
const std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
sharedPipelineBackendAsset =
|
||||
m_assetRuntime != nullptr
|
||||
? m_assetRuntime->GetPipelineRendererAsset()
|
||||
: nullptr;
|
||||
const std::shared_ptr<const Rendering::RenderPipelineAsset>
|
||||
resolvedPipelineBackendAsset =
|
||||
sharedPipelineBackendAsset != nullptr
|
||||
? sharedPipelineBackendAsset
|
||||
: m_assetRuntime != nullptr &&
|
||||
m_assetRuntime->GetPipelineRendererAssetPolicy() ==
|
||||
m_assetRuntime == nullptr
|
||||
? nullptr
|
||||
: m_assetRuntime->GetPipelineRendererAssetPolicy() ==
|
||||
Rendering::Pipelines::ManagedPipelineRendererAssetPolicy::
|
||||
DefaultNativeBackend
|
||||
? Rendering::Internal::CreateDefaultPipelineBackendAsset()
|
||||
: nullptr;
|
||||
: m_assetRuntime->GetSharedPipelineBackendAsset();
|
||||
if (resolvedPipelineBackendAsset == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
@@ -2335,21 +2326,15 @@ MonoManagedRenderPipelineAssetRuntime::GetPipelineRendererAsset() const {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (m_sharedPipelineBackendAssetResolved) {
|
||||
return m_sharedPipelineBackendAsset;
|
||||
}
|
||||
|
||||
if (GetManagedAssetObject() == nullptr) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
m_sharedPipelineBackendAssetResolved = true;
|
||||
return m_sharedPipelineBackendAsset;
|
||||
// Current Mono-backed SRP assets do not materialize a shared native
|
||||
// backend asset. They bind the engine default native backend explicitly
|
||||
// through DefaultNativeBackend.
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Rendering::Pipelines::ManagedPipelineRendererAssetPolicy
|
||||
MonoManagedRenderPipelineAssetRuntime::GetPipelineRendererAssetPolicy() const {
|
||||
return EnsureManagedAsset()
|
||||
return SyncManagedAssetRuntimeState()
|
||||
? Rendering::Pipelines::ManagedPipelineRendererAssetPolicy::DefaultNativeBackend
|
||||
: Rendering::Pipelines::ManagedPipelineRendererAssetPolicy::Unspecified;
|
||||
}
|
||||
@@ -2491,8 +2476,6 @@ bool MonoManagedRenderPipelineAssetRuntime::SyncManagedAssetRuntimeState() const
|
||||
}
|
||||
|
||||
ReleaseManagedPipeline();
|
||||
m_sharedPipelineBackendAsset.reset();
|
||||
m_sharedPipelineBackendAssetResolved = false;
|
||||
m_runtimeResourceVersion = runtimeResourceVersion;
|
||||
return true;
|
||||
}
|
||||
@@ -2560,8 +2543,6 @@ void MonoManagedRenderPipelineAssetRuntime::ReleaseManagedAsset() const {
|
||||
m_getRuntimeResourceVersionMethod = nullptr;
|
||||
m_configureRenderSceneSetupMethod = nullptr;
|
||||
m_configureDirectionalShadowExecutionStateMethod = nullptr;
|
||||
m_sharedPipelineBackendAsset.reset();
|
||||
m_sharedPipelineBackendAssetResolved = false;
|
||||
m_runtimeResourceVersionResolved = false;
|
||||
m_runtimeResourceVersion = 0;
|
||||
const bool ownsManagedAssetHandle = m_ownsManagedAssetHandle;
|
||||
|
||||
Reference in New Issue
Block a user