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

@@ -820,10 +820,14 @@ struct MockManagedRenderPipelineAssetRuntimeState {
int getPipelineRendererAssetCalls = 0;
int getDefaultFinalColorSettingsCalls = 0;
bool hasDefaultFinalColorSettings = false;
bool hasPipelineRendererAssetPolicyOverride = false;
FinalColorSettings defaultFinalColorSettings = {};
size_t lastRenderedBaseCameraCount = 0u;
size_t lastRenderedRequestCount = 0u;
std::shared_ptr<const RenderPipelineAsset> pipelineRendererAsset = nullptr;
Pipelines::ManagedPipelineRendererAssetPolicy
pipelineRendererAssetPolicy =
Pipelines::ManagedPipelineRendererAssetPolicy::Unspecified;
std::shared_ptr<MockStageRecorderState> lastCreatedStageRecorderState;
std::function<void(
CameraRenderRequest&,
@@ -872,6 +876,15 @@ public:
return m_state->pipelineRendererAsset;
}
Pipelines::ManagedPipelineRendererAssetPolicy
GetPipelineRendererAssetPolicy() const override {
if (m_state->hasPipelineRendererAssetPolicyOverride) {
return m_state->pipelineRendererAssetPolicy;
}
return ManagedRenderPipelineAssetRuntime::GetPipelineRendererAssetPolicy();
}
bool TryGetDefaultFinalColorSettings(
FinalColorSettings& settings) const override {
++m_state->getDefaultFinalColorSettingsCalls;
@@ -892,8 +905,12 @@ struct MockManagedRenderPipelineBridgeState {
Pipelines::ManagedRenderPipelineAssetDescriptor lastDescriptor = {};
std::shared_ptr<MockManagedRenderPipelineAssetRuntimeState> lastCreatedRuntimeState;
bool hasDefaultFinalColorSettings = false;
bool hasPipelineRendererAssetPolicyOverride = false;
FinalColorSettings defaultFinalColorSettings = {};
std::shared_ptr<const RenderPipelineAsset> pipelineRendererAsset = nullptr;
Pipelines::ManagedPipelineRendererAssetPolicy
pipelineRendererAssetPolicy =
Pipelines::ManagedPipelineRendererAssetPolicy::Unspecified;
std::function<void(
CameraRenderRequest&,
size_t,
@@ -918,10 +935,15 @@ public:
std::make_shared<MockManagedRenderPipelineAssetRuntimeState>();
m_state->lastCreatedRuntimeState->hasDefaultFinalColorSettings =
m_state->hasDefaultFinalColorSettings;
m_state->lastCreatedRuntimeState
->hasPipelineRendererAssetPolicyOverride =
m_state->hasPipelineRendererAssetPolicyOverride;
m_state->lastCreatedRuntimeState->defaultFinalColorSettings =
m_state->defaultFinalColorSettings;
m_state->lastCreatedRuntimeState->pipelineRendererAsset =
m_state->pipelineRendererAsset;
m_state->lastCreatedRuntimeState->pipelineRendererAssetPolicy =
m_state->pipelineRendererAssetPolicy;
m_state->lastCreatedRuntimeState->configureCameraRenderRequest =
m_state->configureCameraRenderRequest;
return std::make_shared<MockManagedRenderPipelineAssetRuntime>(
@@ -4775,6 +4797,42 @@ TEST(
Pipelines::ClearManagedRenderPipelineBridge();
}
TEST(
ManagedScriptableRenderPipelineAsset_Test,
UsesDefaultNativeBackendForHostCompositionWhenRuntimeDeclaresDefaultNativeBackendPolicy) {
Pipelines::ClearManagedRenderPipelineBridge();
const Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
"GameScripts",
"Gameplay",
"ManagedRenderPipelineProbeAsset"
};
auto bridgeState = std::make_shared<MockManagedRenderPipelineBridgeState>();
bridgeState->hasPipelineRendererAssetPolicyOverride = true;
bridgeState->pipelineRendererAssetPolicy =
Pipelines::ManagedPipelineRendererAssetPolicy::DefaultNativeBackend;
Pipelines::SetManagedRenderPipelineBridge(
std::make_shared<MockManagedRenderPipelineBridge>(bridgeState));
Pipelines::ManagedScriptableRenderPipelineAsset asset(descriptor);
std::unique_ptr<RenderPipeline> pipeline = asset.CreatePipeline();
ASSERT_NE(pipeline, nullptr);
auto runtimeState = bridgeState->lastCreatedRuntimeState;
ASSERT_NE(runtimeState, nullptr);
auto* host =
dynamic_cast<Pipelines::ScriptableRenderPipelineHost*>(pipeline.get());
ASSERT_NE(host, nullptr);
EXPECT_EQ(
host->GetPipelineBackendAsset(),
Internal::CreateDefaultPipelineBackendAsset().get());
EXPECT_NE(host->GetPipelineBackend(), nullptr);
EXPECT_NE(host->GetStageRecorder(), nullptr);
EXPECT_EQ(runtimeState->getPipelineRendererAssetCalls, 0);
Pipelines::ClearManagedRenderPipelineBridge();
}
TEST(ManagedScriptableRenderPipelineAsset_Test, LetsManagedBridgeConfigureCameraRenderRequests) {
Pipelines::ClearManagedRenderPipelineBridge();