Tighten SRP fallback creation semantics

This commit is contained in:
2026-04-26 18:45:15 +08:00
parent 703eaa3b8e
commit 244bdd78c2
3 changed files with 40 additions and 33 deletions

View File

@@ -42,6 +42,15 @@ CreateDefaultNativePipelineBackendAsset() {
return s_defaultNativePipelineBackendAsset;
}
std::unique_ptr<RenderPipeline> TryCreateRenderPipelineFromAsset(
const std::shared_ptr<const RenderPipelineAsset>& asset) {
if (asset == nullptr) {
return nullptr;
}
return asset->CreatePipeline();
}
std::unique_ptr<RenderPipelineBackend> TryCreatePipelineBackendFromAsset(
const std::shared_ptr<const RenderPipelineAsset>& asset) {
if (asset == nullptr) {
@@ -111,36 +120,20 @@ std::unique_ptr<RenderPipeline> CreateRenderPipelineOrDefault(
std::shared_ptr<const RenderPipelineAsset>* outResolvedAsset) {
const std::shared_ptr<const RenderPipelineAsset> resolvedAsset =
ResolveRenderPipelineAssetOrDefault(preferredAsset);
if (resolvedAsset != nullptr) {
if (std::unique_ptr<RenderPipeline> pipeline =
resolvedAsset->CreatePipeline()) {
if (outResolvedAsset != nullptr) {
*outResolvedAsset = resolvedAsset;
}
return pipeline;
}
}
const std::shared_ptr<const RenderPipelineAsset> defaultAsset =
ResolveRenderPipelineAssetOrDefault(nullptr);
if (defaultAsset != nullptr &&
defaultAsset != resolvedAsset) {
if (std::unique_ptr<RenderPipeline> pipeline =
defaultAsset->CreatePipeline()) {
if (outResolvedAsset != nullptr) {
*outResolvedAsset = defaultAsset;
}
return pipeline;
if (std::unique_ptr<RenderPipeline> pipeline =
TryCreateRenderPipelineFromAsset(resolvedAsset)) {
if (outResolvedAsset != nullptr) {
*outResolvedAsset = resolvedAsset;
}
return pipeline;
}
const std::shared_ptr<const RenderPipelineAsset> fallbackAsset =
CreateFallbackRenderPipelineAsset();
if (fallbackAsset != nullptr &&
fallbackAsset != resolvedAsset &&
fallbackAsset != defaultAsset) {
fallbackAsset != resolvedAsset) {
if (std::unique_ptr<RenderPipeline> pipeline =
fallbackAsset->CreatePipeline()) {
TryCreateRenderPipelineFromAsset(fallbackAsset)) {
if (outResolvedAsset != nullptr) {
*outResolvedAsset = fallbackAsset;
}
@@ -152,9 +145,7 @@ std::unique_ptr<RenderPipeline> CreateRenderPipelineOrDefault(
*outResolvedAsset =
fallbackAsset != nullptr
? fallbackAsset
: (defaultAsset != nullptr
? defaultAsset
: resolvedAsset);
: resolvedAsset;
}
return Pipelines::Internal::CreateConfiguredBuiltinForwardPipeline();
}