Tighten managed SRP asset materialization

This commit is contained in:
2026-04-28 01:57:01 +08:00
parent 4810505af4
commit cadababab5
3 changed files with 68 additions and 35 deletions

View File

@@ -127,6 +127,16 @@ MonoScriptRuntime::Settings CreateMonoSettings() {
return settings;
}
XCEngine::Resources::AssetRef MakeRenderPipelineAssetRefForTest(
uint64_t guidLow = 2u) {
XCEngine::Resources::AssetRef assetRef = {};
assetRef.assetGuid = XCEngine::Resources::AssetGUID(1u, guidLow);
assetRef.localID = XCEngine::Resources::kMainAssetLocalID;
assetRef.resourceType =
XCEngine::Resources::ResourceType::RenderPipelineAsset;
return assetRef;
}
class MonoScriptRuntimeTest : public ::testing::Test {
protected:
void SetUp() override {
@@ -478,7 +488,7 @@ TEST_F(
TEST_F(
MonoScriptRuntimeTest,
ManagedGraphicsSettingsGetterMaterializesConfiguredAssetWithoutExistingHandle) {
ManagedGraphicsSettingsGetterRejectsDescriptorOnlyAssetWithoutSerializedGraph) {
Scene* runtimeScene =
CreateScene("ManagedRenderPipelineGetterMaterializationScene");
GameObject* scriptObject =
@@ -507,11 +517,7 @@ TEST_F(
EXPECT_EQ(resolvedDescriptor.assemblyName, configuredDescriptor.assemblyName);
EXPECT_EQ(resolvedDescriptor.namespaceName, configuredDescriptor.namespaceName);
EXPECT_EQ(resolvedDescriptor.className, configuredDescriptor.className);
EXPECT_NE(resolvedDescriptor.managedAssetHandle, 0u);
EXPECT_NE(
runtime->GetExternalManagedObject(
resolvedDescriptor.managedAssetHandle),
nullptr);
EXPECT_EQ(resolvedDescriptor.managedAssetHandle, 0u);
bool observedAssetWasNull = true;
std::string observedPipelineAssetTypeName;
@@ -519,14 +525,18 @@ TEST_F(
script,
"ObservedAssetWasNull",
observedAssetWasNull));
EXPECT_FALSE(observedAssetWasNull);
EXPECT_TRUE(observedAssetWasNull);
EXPECT_TRUE(runtime->TryGetFieldValue(
script,
"ObservedPipelineAssetTypeName",
observedPipelineAssetTypeName));
EXPECT_EQ(
observedPipelineAssetTypeName,
"Gameplay.RenderPipelineApiProbeAsset");
EXPECT_TRUE(observedPipelineAssetTypeName.empty());
EXPECT_NE(
runtime->GetLastError().find("serialized asset graph"),
std::string::npos);
EXPECT_NE(
runtime->GetLastError().find("GraphicsSettings"),
std::string::npos);
}
TEST_F(
@@ -679,6 +689,36 @@ TEST_F(
EXPECT_FLOAT_EQ(observedFinalColorScale.w, 1.0f);
}
TEST_F(
MonoScriptRuntimeTest,
ManagedRenderPipelineAssetRuntimeRejectsAssetRefWithoutSerializedGraph) {
const auto bridge =
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineBridge();
ASSERT_NE(bridge, nullptr);
XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor
descriptor = {
"GameScripts",
"Gameplay",
"ManagedRenderPipelineProbeAsset"
};
descriptor.assetRef = MakeRenderPipelineAssetRefForTest(17u);
std::shared_ptr<const XCEngine::Rendering::Pipelines::
ManagedRenderPipelineAssetRuntime>
assetRuntime = bridge->CreateAssetRuntime(descriptor);
ASSERT_NE(assetRuntime, nullptr);
XCEngine::Rendering::FinalColorSettings settings = {};
EXPECT_FALSE(assetRuntime->TryGetDefaultFinalColorSettings(settings));
EXPECT_NE(
runtime->GetLastError().find("AssetRef"),
std::string::npos);
EXPECT_NE(
runtime->GetLastError().find("serialized asset graph"),
std::string::npos);
}
TEST_F(
MonoScriptRuntimeTest,
RuntimeStopClearsManagedGraphicsSettingsSelection) {