rendering: split managed default backend from fallback pipeline
This commit is contained in:
@@ -15,6 +15,17 @@ namespace Internal {
|
||||
|
||||
namespace {
|
||||
|
||||
class DefaultNativeSceneDrawBackendAsset final : public RenderPipelineAsset {
|
||||
public:
|
||||
std::unique_ptr<RenderPipeline> CreatePipeline() const override {
|
||||
return Pipelines::Internal::CreateConfiguredBuiltinForwardSceneDrawBackend();
|
||||
}
|
||||
|
||||
FinalColorSettings GetDefaultFinalColorSettings() const override {
|
||||
return {};
|
||||
}
|
||||
};
|
||||
|
||||
class DefaultNativePipelineBackendAsset final : public RenderPipelineAsset {
|
||||
public:
|
||||
std::unique_ptr<RenderPipeline> CreatePipeline() const override {
|
||||
@@ -26,6 +37,14 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset>
|
||||
CreateDefaultNativeSceneDrawBackendAsset() {
|
||||
static const std::shared_ptr<const RenderPipelineAsset>
|
||||
s_defaultNativeSceneDrawBackendAsset =
|
||||
std::make_shared<DefaultNativeSceneDrawBackendAsset>();
|
||||
return s_defaultNativeSceneDrawBackendAsset;
|
||||
}
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset>
|
||||
CreateDefaultNativePipelineBackendAsset() {
|
||||
static const std::shared_ptr<const RenderPipelineAsset>
|
||||
@@ -71,6 +90,12 @@ std::shared_ptr<const RenderPipelineAsset> CreateFallbackRenderPipelineAsset() {
|
||||
return std::make_shared<Pipelines::ScriptableRenderPipelineHostAsset>();
|
||||
}
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset> CreateDefaultSceneDrawBackendAsset() {
|
||||
static const std::shared_ptr<const RenderPipelineAsset> s_defaultAsset =
|
||||
CreateDefaultNativeSceneDrawBackendAsset();
|
||||
return s_defaultAsset;
|
||||
}
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset> CreateDefaultPipelineBackendAsset() {
|
||||
static const std::shared_ptr<const RenderPipelineAsset> s_defaultAsset =
|
||||
CreateDefaultNativePipelineBackendAsset();
|
||||
|
||||
@@ -14,6 +14,7 @@ namespace Internal {
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset> CreateConfiguredRenderPipelineAsset();
|
||||
std::shared_ptr<const RenderPipelineAsset> CreateFallbackRenderPipelineAsset();
|
||||
std::shared_ptr<const RenderPipelineAsset> CreateDefaultSceneDrawBackendAsset();
|
||||
std::shared_ptr<const RenderPipelineAsset> CreateDefaultPipelineBackendAsset();
|
||||
|
||||
std::shared_ptr<const RenderPipelineAsset> ResolveRenderPipelineAssetOrDefault(
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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<RenderPipeline*>(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<const RenderPipelineAsset> backendAsset =
|
||||
Internal::CreateDefaultSceneDrawBackendAsset();
|
||||
ASSERT_NE(backendAsset, nullptr);
|
||||
|
||||
std::unique_ptr<RenderPipeline> pipeline = backendAsset->CreatePipeline();
|
||||
ASSERT_NE(pipeline, nullptr);
|
||||
|
||||
auto* sceneDrawBackend =
|
||||
dynamic_cast<SceneDrawBackend*>(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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user