refactor(srp): split universal managed pipeline assembly

This commit is contained in:
2026-04-19 05:03:56 +08:00
parent f45b34a03a
commit 5fa209ab5d
15 changed files with 231 additions and 44 deletions

View File

@@ -60,11 +60,16 @@ if(TARGET xcengine_managed_assemblies)
file(TO_CMAKE_PATH "${XCENGINE_MANAGED_OUTPUT_DIR}" XCENGINE_MANAGED_OUTPUT_DIR_CMAKE)
file(TO_CMAKE_PATH "${XCENGINE_SCRIPT_CORE_DLL}" XCENGINE_SCRIPT_CORE_DLL_CMAKE)
file(
TO_CMAKE_PATH
"${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL}"
XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL_CMAKE)
file(TO_CMAKE_PATH "${XCENGINE_GAME_SCRIPTS_DLL}" XCENGINE_GAME_SCRIPTS_DLL_CMAKE)
target_compile_definitions(scripting_tests PRIVATE
XCENGINE_TEST_MANAGED_OUTPUT_DIR=\"${XCENGINE_MANAGED_OUTPUT_DIR_CMAKE}\"
XCENGINE_TEST_SCRIPT_CORE_DLL=\"${XCENGINE_SCRIPT_CORE_DLL_CMAKE}\"
XCENGINE_TEST_RENDER_PIPELINES_UNIVERSAL_DLL=\"${XCENGINE_RENDER_PIPELINES_UNIVERSAL_DLL_CMAKE}\"
XCENGINE_TEST_GAME_SCRIPTS_DLL=\"${XCENGINE_GAME_SCRIPTS_DLL_CMAKE}\"
)
endif()
@@ -83,6 +88,10 @@ if(TARGET xcengine_test_project_managed_assemblies)
TO_CMAKE_PATH
"${XCENGINE_SCRIPTING_TEST_PROJECT_SCRIPT_CORE_DLL}"
XCENGINE_PROJECT_SCRIPT_CORE_DLL_CMAKE)
file(
TO_CMAKE_PATH
"${XCENGINE_SCRIPTING_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL}"
XCENGINE_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL_CMAKE)
file(
TO_CMAKE_PATH
"${XCENGINE_SCRIPTING_TEST_PROJECT_GAME_SCRIPTS_DLL}"
@@ -91,6 +100,7 @@ if(TARGET xcengine_test_project_managed_assemblies)
target_compile_definitions(scripting_tests PRIVATE
XCENGINE_TEST_PROJECT_MANAGED_OUTPUT_DIR=\"${XCENGINE_PROJECT_MANAGED_OUTPUT_DIR_CMAKE}\"
XCENGINE_TEST_PROJECT_SCRIPT_CORE_DLL=\"${XCENGINE_PROJECT_SCRIPT_CORE_DLL_CMAKE}\"
XCENGINE_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL=\"${XCENGINE_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL_CMAKE}\"
XCENGINE_TEST_PROJECT_GAME_SCRIPTS_DLL=\"${XCENGINE_PROJECT_GAME_SCRIPTS_DLL_CMAKE}\"
)
endif()

View File

@@ -121,6 +121,10 @@ MonoScriptRuntime::Settings CreateMonoSettings() {
settings.assemblyDirectory = XCENGINE_TEST_MANAGED_OUTPUT_DIR;
settings.corlibDirectory = XCENGINE_TEST_MANAGED_OUTPUT_DIR;
settings.coreAssemblyPath = XCENGINE_TEST_SCRIPT_CORE_DLL;
settings.engineAssemblies.push_back(
MonoScriptRuntime::ManagedAssemblyDescriptor{
"XCEngine.RenderPipelines.Universal",
XCENGINE_TEST_RENDER_PIPELINES_UNIVERSAL_DLL});
settings.appAssemblyPath = XCENGINE_TEST_GAME_SCRIPTS_DLL;
return settings;
}
@@ -240,7 +244,7 @@ TEST_F(
classes.begin(),
classes.end(),
ScriptClassDescriptor{
"XCEngine.ScriptCore",
"XCEngine.RenderPipelines.Universal",
"XCEngine.Rendering.FirstParty",
"ForwardRenderPipelineAsset"}),
classes.end());
@@ -438,7 +442,7 @@ TEST_F(
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptor =
XCEngine::Rendering::Pipelines::GetConfiguredManagedRenderPipelineAssetDescriptor();
EXPECT_EQ(descriptor.assemblyName, "XCEngine.ScriptCore");
EXPECT_EQ(descriptor.assemblyName, "XCEngine.RenderPipelines.Universal");
EXPECT_EQ(descriptor.namespaceName, "XCEngine.Rendering.FirstParty");
EXPECT_EQ(descriptor.className, "ForwardRenderPipelineAsset");
EXPECT_NE(descriptor.managedAssetHandle, 0u);
@@ -773,7 +777,9 @@ TEST_F(
const XCEngine::Rendering::Pipelines::ManagedScriptableRenderPipelineAsset*>(
renderer.GetPipelineAsset());
ASSERT_NE(asset, nullptr);
EXPECT_EQ(asset->GetDescriptor().assemblyName, "XCEngine.ScriptCore");
EXPECT_EQ(
asset->GetDescriptor().assemblyName,
"XCEngine.RenderPipelines.Universal");
EXPECT_EQ(
asset->GetDescriptor().namespaceName,
"XCEngine.Rendering.FirstParty");
@@ -1025,7 +1031,9 @@ TEST_F(
const XCEngine::Rendering::Pipelines::ManagedScriptableRenderPipelineAsset*>(
renderer.GetPipelineAsset());
ASSERT_NE(pipelineAsset, nullptr);
EXPECT_EQ(pipelineAsset->GetDescriptor().assemblyName, "XCEngine.ScriptCore");
EXPECT_EQ(
pipelineAsset->GetDescriptor().assemblyName,
"XCEngine.RenderPipelines.Universal");
EXPECT_EQ(pipelineAsset->GetDescriptor().namespaceName, "XCEngine.Rendering.FirstParty");
EXPECT_EQ(
pipelineAsset->GetDescriptor().className,
@@ -1101,7 +1109,9 @@ TEST_F(
const XCEngine::Rendering::Pipelines::ManagedScriptableRenderPipelineAsset*>(
renderer.GetPipelineAsset());
ASSERT_NE(pipelineAsset, nullptr);
EXPECT_EQ(pipelineAsset->GetDescriptor().assemblyName, "XCEngine.ScriptCore");
EXPECT_EQ(
pipelineAsset->GetDescriptor().assemblyName,
"XCEngine.RenderPipelines.Universal");
EXPECT_EQ(pipelineAsset->GetDescriptor().namespaceName, "XCEngine.Rendering.FirstParty");
EXPECT_EQ(
pipelineAsset->GetDescriptor().className,

View File

@@ -58,11 +58,26 @@ std::filesystem::path ResolveProjectGameScriptsDllPath() {
return ResolveProjectManagedOutputDirectory() / "GameScripts.dll";
}
std::filesystem::path ResolveProjectRenderPipelinesUniversalDllPath() {
constexpr const char* configuredPath =
XCENGINE_TEST_PROJECT_RENDER_PIPELINES_UNIVERSAL_DLL;
if (configuredPath[0] != '\0') {
return std::filesystem::path(configuredPath);
}
return ResolveProjectManagedOutputDirectory() /
"XCEngine.RenderPipelines.Universal.dll";
}
MonoScriptRuntime::Settings CreateProjectMonoSettings() {
MonoScriptRuntime::Settings settings;
settings.assemblyDirectory = ResolveProjectManagedOutputDirectory();
settings.corlibDirectory = settings.assemblyDirectory;
settings.coreAssemblyPath = ResolveProjectScriptCoreDllPath();
settings.engineAssemblies.push_back(
MonoScriptRuntime::ManagedAssemblyDescriptor{
"XCEngine.RenderPipelines.Universal",
ResolveProjectRenderPipelinesUniversalDllPath()});
settings.appAssemblyPath = ResolveProjectGameScriptsDllPath();
return settings;
}
@@ -71,6 +86,9 @@ class ProjectScriptAssemblyTest : public ::testing::Test {
protected:
void SetUp() override {
ASSERT_TRUE(std::filesystem::exists(ResolveProjectScriptCoreDllPath()));
ASSERT_TRUE(
std::filesystem::exists(
ResolveProjectRenderPipelinesUniversalDllPath()));
ASSERT_TRUE(std::filesystem::exists(ResolveProjectGameScriptsDllPath()));
runtime = std::make_unique<MonoScriptRuntime>(CreateProjectMonoSettings());