rendering: close out backend contract phase 4.1

This commit is contained in:
2026-04-26 01:48:19 +08:00
parent 1ff0ddcacc
commit b13cb6506c
6 changed files with 236 additions and 45 deletions

View File

@@ -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;

View File

@@ -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;