Align URP scene drawing with RenderGraph renderer lists

This commit is contained in:
2026-04-28 00:03:24 +08:00
parent 6b488d5eac
commit 03967b152d
13 changed files with 908 additions and 48 deletions

View File

@@ -1277,7 +1277,104 @@ TEST_F(
ASSERT_EQ(compiledGraph.GetPassCount(), 1u);
EXPECT_STREQ(
compiledGraph.GetPassName(0).CStr(),
"ScriptCoreUniversalMainScene.Opaque");
"Universal.DrawOpaqueObjects");
host->GetStageRecorder()->Shutdown();
}
TEST_F(
MonoScriptRuntimeTest,
DefaultCameraRendererUsesScriptCoreUniversalPipelineAssetDefaultMainScenePasses) {
Scene* runtimeScene =
CreateScene("ScriptCoreUniversalRenderPipelineDefaultMainSceneScene");
GameObject* selectionObject =
runtimeScene->CreateGameObject("ScriptCoreUniversalRenderPipelineSelection");
ScriptComponent* selectionScript =
AddScript(
selectionObject,
"Gameplay",
"ScriptCoreUniversalRenderPipelineSelectionProbe");
ASSERT_NE(selectionScript, nullptr);
engine->OnRuntimeStart(runtimeScene);
engine->OnUpdate(0.016f);
XCEngine::Rendering::CameraRenderer renderer;
auto* host =
dynamic_cast<XCEngine::Rendering::Pipelines::ScriptableRenderPipelineHost*>(
renderer.GetPipeline());
ASSERT_NE(host, nullptr);
ASSERT_NE(host->GetStageRecorder(), nullptr);
EXPECT_TRUE(
host->GetStageRecorder()->Initialize(
XCEngine::Rendering::RenderContext{}));
EXPECT_TRUE(
host->SupportsStageRenderGraph(
XCEngine::Rendering::CameraFrameStage::MainScene));
XCEngine::Rendering::RenderGraph graph;
XCEngine::Rendering::RenderGraphBuilder graphBuilder(graph);
XCEngine::Rendering::RenderGraphTextureDesc colorDesc = {};
colorDesc.width = 64u;
colorDesc.height = 64u;
colorDesc.format =
static_cast<XCEngine::Core::uint32>(
XCEngine::RHI::Format::R8G8B8A8_UNorm);
XCEngine::Rendering::RenderGraphTextureDesc depthDesc = colorDesc;
depthDesc.format =
static_cast<XCEngine::Core::uint32>(
XCEngine::RHI::Format::D32_Float);
const XCEngine::Rendering::RenderGraphTextureHandle colorTarget =
graphBuilder.CreateTransientTexture(
"ScriptCoreUniversalDefaultMainSceneColor",
colorDesc);
const XCEngine::Rendering::RenderGraphTextureHandle depthTarget =
graphBuilder.CreateTransientTexture(
"ScriptCoreUniversalDefaultMainSceneDepth",
depthDesc);
const XCEngine::Rendering::RenderSceneData sceneData = {};
const XCEngine::Rendering::RenderSurface surface(64u, 64u);
bool executionSucceeded = true;
XCEngine::Rendering::RenderGraphBlackboard blackboard = {};
const XCEngine::Rendering::RenderPipelineStageRenderGraphContext graphContext = {
graphBuilder,
"ScriptCoreUniversalDefaultMainScene",
XCEngine::Rendering::CameraFrameStage::MainScene,
{},
sceneData,
surface,
nullptr,
nullptr,
XCEngine::RHI::ResourceStates::Common,
{},
{ colorTarget },
depthTarget,
{},
&executionSucceeded,
&blackboard
};
EXPECT_TRUE(host->GetStageRecorder()->RecordStageRenderGraph(graphContext));
XCEngine::Rendering::CompiledRenderGraph compiledGraph = {};
XCEngine::Containers::String errorMessage;
ASSERT_TRUE(
XCEngine::Rendering::RenderGraphCompiler::Compile(
graph,
compiledGraph,
&errorMessage))
<< errorMessage.CStr();
ASSERT_EQ(compiledGraph.GetPassCount(), 3u);
EXPECT_STREQ(
compiledGraph.GetPassName(0).CStr(),
"Universal.DrawOpaqueObjects");
EXPECT_STREQ(
compiledGraph.GetPassName(1).CStr(),
"Universal.DrawSkybox");
EXPECT_STREQ(
compiledGraph.GetPassName(2).CStr(),
"Universal.DrawTransparentObjects");
host->GetStageRecorder()->Shutdown();
}
@@ -1618,6 +1715,7 @@ TEST_F(
bool hasRenderGraphRasterPassBuilderType = false;
bool hasRenderGraphRasterPassBuilderUseColorSource = false;
bool hasRenderGraphRasterPassBuilderUseTexture = false;
bool hasRenderGraphRasterPassBuilderUseRendererList = false;
bool hasRenderGraphRasterPassBuilderSetColorAttachment = false;
bool hasRenderGraphRasterPassBuilderSetRenderFunc = false;
bool hasRenderGraphRasterPassBuilderSetColorScaleFullscreenExecution = false;
@@ -1628,6 +1726,10 @@ TEST_F(
bool hasRenderGraphRasterContextCommandBuffer = false;
bool hasSceneRenderPhaseType = false;
bool hasSceneRenderInjectionPointType = false;
bool hasRenderGraphCreateRendererList = false;
bool hasRendererListHandleType = false;
bool hasCommandBufferDrawRendererList = false;
bool hasCommandBufferDrawSkybox = false;
bool hasPublicRenderingDataFramePlanId = false;
bool hasRenderPassProtectedRecordColorScaleFullscreenPass = false;
bool hasRenderPassProtectedRecordShaderVectorFullscreenPass = false;
@@ -1817,6 +1919,10 @@ TEST_F(
selectionScript,
"HasRenderGraphRasterPassBuilderUseTexture",
hasRenderGraphRasterPassBuilderUseTexture));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasRenderGraphRasterPassBuilderUseRendererList",
hasRenderGraphRasterPassBuilderUseRendererList));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasRenderGraphRasterPassBuilderSetColorAttachment",
@@ -1857,6 +1963,22 @@ TEST_F(
selectionScript,
"HasSceneRenderInjectionPointType",
hasSceneRenderInjectionPointType));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasRenderGraphCreateRendererList",
hasRenderGraphCreateRendererList));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasRendererListHandleType",
hasRendererListHandleType));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasCommandBufferDrawRendererList",
hasCommandBufferDrawRendererList));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasCommandBufferDrawSkybox",
hasCommandBufferDrawSkybox));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"HasPublicRenderingDataFramePlanId",
@@ -1920,6 +2042,7 @@ TEST_F(
EXPECT_TRUE(hasRenderGraphRasterPassBuilderType);
EXPECT_TRUE(hasRenderGraphRasterPassBuilderUseColorSource);
EXPECT_TRUE(hasRenderGraphRasterPassBuilderUseTexture);
EXPECT_TRUE(hasRenderGraphRasterPassBuilderUseRendererList);
EXPECT_TRUE(hasRenderGraphRasterPassBuilderSetColorAttachment);
EXPECT_TRUE(hasRenderGraphRasterPassBuilderSetRenderFunc);
EXPECT_FALSE(hasRenderGraphRasterPassBuilderSetColorScaleFullscreenExecution);
@@ -1930,6 +2053,10 @@ TEST_F(
EXPECT_TRUE(hasRenderGraphRasterContextCommandBuffer);
EXPECT_FALSE(hasSceneRenderPhaseType);
EXPECT_FALSE(hasSceneRenderInjectionPointType);
EXPECT_TRUE(hasRenderGraphCreateRendererList);
EXPECT_TRUE(hasRendererListHandleType);
EXPECT_TRUE(hasCommandBufferDrawRendererList);
EXPECT_TRUE(hasCommandBufferDrawSkybox);
EXPECT_TRUE(hasPublicRenderingDataFramePlanId);
EXPECT_FALSE(hasRenderPassProtectedRecordColorScaleFullscreenPass);
EXPECT_FALSE(hasRenderPassProtectedRecordShaderVectorFullscreenPass);