diff --git a/engine/src/Rendering/Internal/RenderPipelineFactory.cpp b/engine/src/Rendering/Internal/RenderPipelineFactory.cpp index af615c80..97d111b0 100644 --- a/engine/src/Rendering/Internal/RenderPipelineFactory.cpp +++ b/engine/src/Rendering/Internal/RenderPipelineFactory.cpp @@ -15,6 +15,17 @@ namespace Internal { namespace { +class DefaultNativeSceneDrawBackendAsset final : public RenderPipelineAsset { +public: + std::unique_ptr CreatePipeline() const override { + return Pipelines::Internal::CreateConfiguredBuiltinForwardSceneDrawBackend(); + } + + FinalColorSettings GetDefaultFinalColorSettings() const override { + return {}; + } +}; + class DefaultNativePipelineBackendAsset final : public RenderPipelineAsset { public: std::unique_ptr CreatePipeline() const override { @@ -26,6 +37,14 @@ public: } }; +std::shared_ptr +CreateDefaultNativeSceneDrawBackendAsset() { + static const std::shared_ptr + s_defaultNativeSceneDrawBackendAsset = + std::make_shared(); + return s_defaultNativeSceneDrawBackendAsset; +} + std::shared_ptr CreateDefaultNativePipelineBackendAsset() { static const std::shared_ptr @@ -71,6 +90,12 @@ std::shared_ptr CreateFallbackRenderPipelineAsset() { return std::make_shared(); } +std::shared_ptr CreateDefaultSceneDrawBackendAsset() { + static const std::shared_ptr s_defaultAsset = + CreateDefaultNativeSceneDrawBackendAsset(); + return s_defaultAsset; +} + std::shared_ptr CreateDefaultPipelineBackendAsset() { static const std::shared_ptr s_defaultAsset = CreateDefaultNativePipelineBackendAsset(); diff --git a/engine/src/Rendering/Internal/RenderPipelineFactory.h b/engine/src/Rendering/Internal/RenderPipelineFactory.h index 103a4c5e..59fbf2e5 100644 --- a/engine/src/Rendering/Internal/RenderPipelineFactory.h +++ b/engine/src/Rendering/Internal/RenderPipelineFactory.h @@ -14,6 +14,7 @@ namespace Internal { std::shared_ptr CreateConfiguredRenderPipelineAsset(); std::shared_ptr CreateFallbackRenderPipelineAsset(); +std::shared_ptr CreateDefaultSceneDrawBackendAsset(); std::shared_ptr CreateDefaultPipelineBackendAsset(); std::shared_ptr ResolveRenderPipelineAssetOrDefault( diff --git a/engine/src/Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.cpp b/engine/src/Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.cpp index 9396708f..7147841d 100644 --- a/engine/src/Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.cpp +++ b/engine/src/Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.cpp @@ -18,7 +18,7 @@ ResolveManagedPipelineBackendAsset( case ManagedPipelineRendererAssetPolicy::ExplicitAsset: return runtime.GetSharedPipelineBackendAsset(); case ManagedPipelineRendererAssetPolicy::DefaultNativeBackend: - return Internal::CreateDefaultPipelineBackendAsset(); + return Internal::CreateDefaultSceneDrawBackendAsset(); case ManagedPipelineRendererAssetPolicy::Unspecified: default: return runtime.GetSharedPipelineBackendAsset(); diff --git a/tests/Rendering/unit/test_camera_scene_renderer.cpp b/tests/Rendering/unit/test_camera_scene_renderer.cpp index 54158336..bda33de8 100644 --- a/tests/Rendering/unit/test_camera_scene_renderer.cpp +++ b/tests/Rendering/unit/test_camera_scene_renderer.cpp @@ -4825,8 +4825,19 @@ TEST( ASSERT_NE(host, nullptr); EXPECT_EQ( host->GetPipelineBackendAsset(), - Internal::CreateDefaultPipelineBackendAsset().get()); + Internal::CreateDefaultSceneDrawBackendAsset().get()); EXPECT_NE(host->GetPipelineBackend(), nullptr); + auto* backendPipeline = + dynamic_cast(host->GetPipelineBackend()); + ASSERT_NE(backendPipeline, nullptr); + EXPECT_EQ( + backendPipeline->GetCameraFrameStandalonePass( + CameraFrameStage::DepthOnly), + nullptr); + EXPECT_EQ( + backendPipeline->GetCameraFrameStandalonePass( + CameraFrameStage::ShadowCaster), + nullptr); EXPECT_NE(host->GetStageRecorder(), nullptr); EXPECT_EQ(runtimeState->getPipelineRendererAssetCalls, 0); @@ -4882,6 +4893,32 @@ TEST( nullptr); } +TEST( + DefaultSceneDrawBackendAsset_Test, + CreatesSceneOnlyPipelineWithoutFallbackStandalonePasses) { + const std::shared_ptr backendAsset = + Internal::CreateDefaultSceneDrawBackendAsset(); + ASSERT_NE(backendAsset, nullptr); + + std::unique_ptr pipeline = backendAsset->CreatePipeline(); + ASSERT_NE(pipeline, nullptr); + + auto* sceneDrawBackend = + dynamic_cast(pipeline.get()); + ASSERT_NE(sceneDrawBackend, nullptr); + SceneRenderFeatureHost* const featureHost = + sceneDrawBackend->GetSceneFeatureHost(); + ASSERT_NE(featureHost, nullptr); + EXPECT_EQ(featureHost->GetFeaturePassCount(), 2u); + + EXPECT_EQ( + pipeline->GetCameraFrameStandalonePass(CameraFrameStage::DepthOnly), + nullptr); + EXPECT_EQ( + pipeline->GetCameraFrameStandalonePass(CameraFrameStage::ShadowCaster), + nullptr); +} + TEST(ManagedScriptableRenderPipelineAsset_Test, LetsManagedBridgeConfigureCameraRenderRequests) { Pipelines::ClearManagedRenderPipelineBridge();