浏览代码

Atom/qingtao/get default scene stab asv (#270)

* Cherrypicked commit 69d726d97699feb63de78c1391ca88928ea205c1 [69d726d] from development

* ATOM-16747 Replace all the usage of RPISystemInterface::GetDefaultScene in ASV.

Signed-off-by: Qing Tao <[email protected]>

* ATOM-16803 AtomSampleViewerStandalone "CheckerboardTest.bv.lua" test script hard locks then crashes. (#269)

Signed-off-by: Qing Tao <[email protected]>
(cherry picked from commit 840ff3a7f68843f3be564787ddf3c9a19d13b1db)

* Fixed compile error for the new ShaderReloadTestComponent.

Signed-off-by: Qing Tao <[email protected]>
Qing Tao 3 年之前
父节点
当前提交
ddfb8911b9
共有 36 个文件被更改,包括 159 次插入207 次删除
  1. 9 10
      Gem/Code/Source/AreaLightExampleComponent.cpp
  2. 1 2
      Gem/Code/Source/AuxGeomExampleComponent.cpp
  3. 5 7
      Gem/Code/Source/BloomExampleComponent.cpp
  4. 7 20
      Gem/Code/Source/CheckerboardExampleComponent.cpp
  5. 4 5
      Gem/Code/Source/CheckerboardExampleComponent.h
  6. 2 0
      Gem/Code/Source/CommonSampleComponentBase.cpp
  7. 3 0
      Gem/Code/Source/CommonSampleComponentBase.h
  8. 4 6
      Gem/Code/Source/DecalExampleComponent.cpp
  9. 2 3
      Gem/Code/Source/DepthOfFieldExampleComponent.cpp
  10. 16 27
      Gem/Code/Source/DiffuseGIExampleComponent.cpp
  11. 4 2
      Gem/Code/Source/DynamicDrawExampleComponent.cpp
  12. 1 1
      Gem/Code/Source/EntityLatticeTestComponent.cpp
  13. 2 3
      Gem/Code/Source/ExposureExampleComponent.cpp
  14. 15 20
      Gem/Code/Source/LightCullingExampleComponent.cpp
  15. 8 14
      Gem/Code/Source/MSAA_RPI_ExampleComponent.cpp
  16. 5 7
      Gem/Code/Source/MeshExampleComponent.cpp
  17. 1 3
      Gem/Code/Source/MultiRenderPipelineExampleComponent.cpp
  18. 0 3
      Gem/Code/Source/MultiRenderPipelineExampleComponent.h
  19. 2 2
      Gem/Code/Source/MultiSceneExampleComponent.cpp
  20. 2 3
      Gem/Code/Source/MultiViewSingleSceneAuxGeomExampleComponent.cpp
  21. 2 3
      Gem/Code/Source/ParallaxMappingExampleComponent.cpp
  22. 3 5
      Gem/Code/Source/RootConstantsExampleComponent.cpp
  23. 2 5
      Gem/Code/Source/SSRExampleComponent.cpp
  24. 20 8
      Gem/Code/Source/SampleComponentManager.cpp
  25. 6 8
      Gem/Code/Source/ShaderReloadTestComponent.cpp
  26. 2 2
      Gem/Code/Source/ShaderReloadTestComponent.h
  27. 1 1
      Gem/Code/Source/ShadingExampleComponent.cpp
  28. 4 5
      Gem/Code/Source/ShadowExampleComponent.cpp
  29. 2 3
      Gem/Code/Source/ShadowedSponzaExampleComponent.cpp
  30. 2 2
      Gem/Code/Source/SkinnedMeshContainer.cpp
  31. 3 4
      Gem/Code/Source/SkinnedMeshExampleComponent.cpp
  32. 2 3
      Gem/Code/Source/SponzaBenchmarkComponent.cpp
  33. 6 9
      Gem/Code/Source/SsaoExampleComponent.cpp
  34. 6 6
      Gem/Code/Source/StreamingImageExampleComponent.cpp
  35. 4 4
      Gem/Code/Source/TonemappingExampleComponent.cpp
  36. 1 1
      Gem/Code/Source/TransparencyExampleComponent.cpp

+ 9 - 10
Gem/Code/Source/AreaLightExampleComponent.cpp

@@ -63,16 +63,15 @@ namespace AtomSampleViewer
     void AreaLightExampleComponent::Activate()
     {
         // Get Feature processors
-        AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        m_meshFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::MeshFeatureProcessorInterface>();
-        m_pointLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
-        m_diskLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DiskLightFeatureProcessorInterface>();
-        m_capsuleLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::CapsuleLightFeatureProcessorInterface>();
-        m_polygonLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::PolygonLightFeatureProcessorInterface>();
-        m_quadLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::QuadLightFeatureProcessorInterface>();
-        m_skyBoxFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::SkyBoxFeatureProcessorInterface>();
-
-        m_auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(scene);
+        m_meshFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::MeshFeatureProcessorInterface>();
+        m_pointLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
+        m_diskLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DiskLightFeatureProcessorInterface>();
+        m_capsuleLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::CapsuleLightFeatureProcessorInterface>();
+        m_polygonLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::PolygonLightFeatureProcessorInterface>();
+        m_quadLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::QuadLightFeatureProcessorInterface>();
+        m_skyBoxFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::SkyBoxFeatureProcessorInterface>();
+
+        m_auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(m_scene);
 
         // Create background
         m_skyBoxFeatureProcessor->SetSkyboxMode(AZ::Render::SkyBoxMode::Cubemap);

+ 1 - 2
Gem/Code/Source/AuxGeomExampleComponent.cpp

@@ -128,8 +128,7 @@ namespace AtomSampleViewer
 
     void AuxGeomExampleComponent::DrawSampleOfAllAuxGeom() const
     {
-        auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene))
+        if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(m_scene))
         {
             if (m_drawBackgroundBox)
             {

+ 5 - 7
Gem/Code/Source/BloomExampleComponent.cpp

@@ -51,9 +51,7 @@ namespace AtomSampleViewer
     {
         m_dynamicDraw = RPI::GetDynamicDraw();
 
-        RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-
-        m_postProcessFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::PostProcessFeatureProcessorInterface>();
+        m_postProcessFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::PostProcessFeatureProcessorInterface>();
 
         CreateBloomEntity();
 
@@ -317,7 +315,8 @@ namespace AtomSampleViewer
             Data::Asset<AZ::RPI::ShaderAsset>& shaderAsset,
             RHI::Ptr<AZ::RHI::ShaderResourceGroupLayout>& srgLayout,
             RHI::ConstPtr<RHI::PipelineState>& pipelineState,
-            RHI::DrawListTag& drawListTag)
+            RHI::DrawListTag& drawListTag,
+            RPI::Scene* scene)
         {
             // Since the shader is using SV_VertexID and SV_InstanceID as VS input, we won't need to have vertex buffer.
             // Also, the index buffer is not needed with DrawLinear.
@@ -336,7 +335,6 @@ namespace AtomSampleViewer
             shaderVariant.ConfigurePipelineState(pipelineStateDescriptor);
             drawListTag = shader->GetDrawListTag();
 
-            RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
             scene->ConfigurePipelineState(shader->GetDrawListTag(), pipelineStateDescriptor);
 
             pipelineStateDescriptor.m_inputStreamLayout.SetTopology(AZ::RHI::PrimitiveTopology::TriangleStrip);
@@ -354,7 +352,7 @@ namespace AtomSampleViewer
 
         // Create the example's main pipeline object
         {
-            CreatePipeline("Shaders/tonemappingexample/renderimage.azshader", "RenderImageSrg", m_shaderAsset, m_srgLayout, m_pipelineState, m_drawListTag);
+            CreatePipeline("Shaders/tonemappingexample/renderimage.azshader", "RenderImageSrg", m_shaderAsset, m_srgLayout, m_pipelineState, m_drawListTag, m_scene);
 
             // Set the input indices
             m_imageInputIndex.Reset();
@@ -397,7 +395,7 @@ namespace AtomSampleViewer
 
         // Submit draw packet
         AZStd::unique_ptr<const RHI::DrawPacket> drawPacket(drawPacketBuilder.End());
-        m_dynamicDraw->AddDrawPacket(RPI::RPISystemInterface::Get()->GetDefaultScene().get(), AZStd::move(drawPacket));
+        m_dynamicDraw->AddDrawPacket(m_scene, AZStd::move(drawPacket));
     }
 
     RPI::ColorSpaceId BloomExampleComponent::GetColorSpaceIdForIndex(uint8_t colorSpaceIndex) const

+ 7 - 20
Gem/Code/Source/CheckerboardExampleComponent.cpp

@@ -52,8 +52,7 @@ namespace AtomSampleViewer
         defaultMaterial.m_materialAsset = materialAsset;
         defaultMaterial.m_materialInstance = AZ::RPI::Material::FindOrCreate(defaultMaterial.m_materialAsset);
 
-        AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        m_meshFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::MeshFeatureProcessorInterface>();
+        m_meshFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::MeshFeatureProcessorInterface>();
         m_meshHandle = m_meshFeatureProcessor->AcquireMesh(AZ::Render::MeshHandleDescriptor{ meshAsset }, materials);
         m_meshFeatureProcessor->SetTransform(m_meshHandle, AZ::Transform::CreateIdentity());
         
@@ -61,7 +60,7 @@ namespace AtomSampleViewer
             azrtti_typeid<AZ::Debug::ArcBallControllerComponent>());
 
         // Add an Image based light.
-        m_defaultIbl.Init(scene.get());
+        m_defaultIbl.Init(m_scene);
 
 
         AZ::TickBus::Handler::BusConnect();
@@ -93,15 +92,6 @@ namespace AtomSampleViewer
         m_meshFeatureProcessor = nullptr;
     }
     
-    bool CheckerboardExampleComponent::ReadInConfig(const AZ::ComponentConfig* baseConfig)
-    {
-        auto config = azrtti_cast<const SampleComponentConfig*>(baseConfig);
-        AZ_Assert(config && config->IsValid(), "SampleComponentConfig required for sample component configuration.");
-        m_cameraEntityId = config->m_cameraEntityId;
-        m_entityContextId = config->m_entityContextId;
-        return true;
-    }
-
     void CheckerboardExampleComponent::DefaultWindowCreated()
     {
         AZ::Render::Bootstrap::DefaultWindowBus::BroadcastResult(m_windowContext,
@@ -111,9 +101,8 @@ namespace AtomSampleViewer
     void CheckerboardExampleComponent::ActivateCheckerboardPipeline()
     {        
         // save original render pipeline first and remove it from the scene
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        m_originalPipeline = defaultScene->GetDefaultRenderPipeline();
-        defaultScene->RemoveRenderPipeline(m_originalPipeline->GetId());
+        m_originalPipeline = m_scene->GetDefaultRenderPipeline();
+        m_scene->RemoveRenderPipeline(m_originalPipeline->GetId());
 
         // add the checker board pipeline
         AZ::RPI::RenderPipelineDescriptor pipelineDesc;
@@ -121,17 +110,15 @@ namespace AtomSampleViewer
         pipelineDesc.m_name = "Checkerboard";
         pipelineDesc.m_rootPassTemplate = "CheckerboardPipeline";
         m_cbPipeline = AZ::RPI::RenderPipeline::CreateRenderPipelineForWindow(pipelineDesc, *m_windowContext);
-        defaultScene->AddRenderPipeline(m_cbPipeline);
+        m_scene->AddRenderPipeline(m_cbPipeline);
         m_cbPipeline->SetDefaultView(m_originalPipeline->GetDefaultView());
     }
 
     void CheckerboardExampleComponent::DeactivateCheckerboardPipeline()
     {
         // remove cb pipeline before adding original pipeline.
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        defaultScene->RemoveRenderPipeline(m_cbPipeline->GetId());
-
-        defaultScene->AddRenderPipeline(m_originalPipeline);
+        m_scene->RemoveRenderPipeline(m_cbPipeline->GetId());
+        m_scene->AddRenderPipeline(m_originalPipeline);
 
         m_cbPipeline = nullptr;
     }

+ 4 - 5
Gem/Code/Source/CheckerboardExampleComponent.h

@@ -8,6 +8,8 @@
 
 #pragma once
 
+#include <CommonSampleComponentBase.h>
+
 #include <Atom/Bootstrap/DefaultWindowBus.h>
 #include <Atom/Feature/ImGui/ImGuiUtils.h>
 #include <Atom/Feature/Mesh/MeshFeatureProcessorInterface.h>
@@ -25,12 +27,12 @@ namespace AtomSampleViewer
 {
     // This component renders a model with pbr material using checkerboard render pipeline.
     class CheckerboardExampleComponent final
-        : public AZ::Component
+        : public CommonSampleComponentBase
         , public AZ::Render::Bootstrap::DefaultWindowNotificationBus::Handler
         , public AZ::TickBus::Handler
     {
     public:
-        AZ_COMPONENT(CheckerboardExampleComponent, "{0E5B3D5F-5BD2-41BF-BB1E-425AF976DFC9}");
+        AZ_COMPONENT(CheckerboardExampleComponent, "{0E5B3D5F-5BD2-41BF-BB1E-425AF976DFC9}", CommonSampleComponentBase);
 
         static void Reflect(AZ::ReflectContext* context);
 
@@ -42,9 +44,6 @@ namespace AtomSampleViewer
 
     private:
 
-        // AZ::Component overrides...
-        bool ReadInConfig(const AZ::ComponentConfig* baseConfig) override;
-
         // DefaultWindowNotificationBus::Handler overrides...
         void DefaultWindowCreated() override;
         

+ 2 - 0
Gem/Code/Source/CommonSampleComponentBase.cpp

@@ -23,6 +23,8 @@ namespace AtomSampleViewer
 
     bool CommonSampleComponentBase::ReadInConfig(const ComponentConfig* baseConfig)
     {
+        m_scene = RPI::RPISystemInterface::Get()->GetSceneByName(AZ::Name("RPI"));
+
         auto config = azrtti_cast<const SampleComponentConfig*>(baseConfig);
         if (config && config->IsValid())
         {

+ 3 - 0
Gem/Code/Source/CommonSampleComponentBase.h

@@ -90,6 +90,8 @@ namespace AtomSampleViewer
 
         AZStd::string m_sampleName;
 
+        AZ::RPI::Scene* m_scene = nullptr;
+
     private:
         // AZ::TransformNotificationBus::MultiHandler overrides...
         void OnTransformChanged(const AZ::Transform&, const AZ::Transform&) override;
@@ -117,6 +119,7 @@ namespace AtomSampleViewer
         constexpr static int32_t InvalidLightingPresetIndex = -1;
         int32_t m_currentLightingPresetIndex = InvalidLightingPresetIndex;
         bool m_useAlternateSkybox = false; //!< LightingPresets have an alternate skybox that can be used, when this is true. This is usually a blurred version of the primary skybox.
+
     };
 
 } // namespace AtomSampleViewer

+ 4 - 6
Gem/Code/Source/DecalExampleComponent.cpp

@@ -101,15 +101,14 @@ namespace AtomSampleViewer
 
     void DecalExampleComponent::AddImageBasedLight()
     {
-        m_defaultIbl.Init(AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get());
+        m_defaultIbl.Init(m_scene);
     }
 
     void DecalExampleComponent::AcquireDirectionalLightFeatureProcessor()
     {
         using namespace AZ;
-		
-        RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-        m_directionalLightFeatureProcessor = scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
+
+        m_directionalLightFeatureProcessor = m_scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
     }
 
     void DecalExampleComponent::CreateDirectionalLight()
@@ -176,8 +175,7 @@ namespace AtomSampleViewer
 
     void DecalExampleComponent::CreateDecalContainer()
     {
-        const AZ::RPI::Scene* scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-        const auto decalFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DecalFeatureProcessorInterface>();
+        const auto decalFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DecalFeatureProcessorInterface>();
         m_decalContainer = AZStd::make_unique<DecalContainer>(decalFeatureProcessor, AZ::Vector3(1,0,0));
         m_decalContainerClone = AZStd::make_unique<DecalContainer>(decalFeatureProcessor, AZ::Vector3(-1,0,0));
     }

+ 2 - 3
Gem/Code/Source/DepthOfFieldExampleComponent.cpp

@@ -40,9 +40,8 @@ namespace AtomSampleViewer
     {
         using namespace AZ;
 
-        RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-        m_postProcessFeatureProcessor = scene->GetFeatureProcessor<Render::PostProcessFeatureProcessorInterface>();
-        m_directionalLightFeatureProcessor = scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
+        m_postProcessFeatureProcessor = m_scene->GetFeatureProcessor<Render::PostProcessFeatureProcessorInterface>();
+        m_directionalLightFeatureProcessor = m_scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
 
         // Create the assets
         m_bunnyModelAsset = RPI::AssetUtils::GetAssetByProductPath<RPI::ModelAsset>("objects/bunny.azmodel", RPI::AssetUtils::TraceLevel::Assert);

+ 16 - 27
Gem/Code/Source/DiffuseGIExampleComponent.cpp

@@ -86,10 +86,8 @@ namespace AtomSampleViewer
 
     void DiffuseGIExampleComponent::UnloadSampleScene(bool geometryOnly)
     {
-        AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-
         // release meshes
-        AZ::Render::MeshFeatureProcessorInterface* meshFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::MeshFeatureProcessorInterface>();
+        AZ::Render::MeshFeatureProcessorInterface* meshFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::MeshFeatureProcessorInterface>();
         for (auto& meshHandle : m_meshHandles)
         {
             meshFeatureProcessor->ReleaseMesh(meshHandle);
@@ -100,19 +98,19 @@ namespace AtomSampleViewer
         {
             if (m_diffuseProbeGrid)
             {
-                AZ::Render::DiffuseProbeGridFeatureProcessorInterface* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DiffuseProbeGridFeatureProcessorInterface>();
+                AZ::Render::DiffuseProbeGridFeatureProcessorInterface* diffuseProbeGridFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DiffuseProbeGridFeatureProcessorInterface>();
                 diffuseProbeGridFeatureProcessor->RemoveProbeGrid(m_diffuseProbeGrid);
             }
 
             if (m_directionalLightHandle.IsValid())
             {
-                AZ::Render::DirectionalLightFeatureProcessorInterface* directionalLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DirectionalLightFeatureProcessorInterface>();
+                AZ::Render::DirectionalLightFeatureProcessorInterface* directionalLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DirectionalLightFeatureProcessorInterface>();
                 directionalLightFeatureProcessor->ReleaseLight(m_directionalLightHandle);
             }
 
             if (m_pointLightHandle.IsValid())
             {
-                AZ::Render::PointLightFeatureProcessorInterface* pointLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
+                AZ::Render::PointLightFeatureProcessorInterface* pointLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
                 pointLightFeatureProcessor->ReleaseLight(m_pointLightHandle);
             }
         }
@@ -340,8 +338,7 @@ namespace AtomSampleViewer
 
         // point light
         {
-            AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-            AZ::Render::PointLightFeatureProcessorInterface* pointLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
+            AZ::Render::PointLightFeatureProcessorInterface* pointLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
             m_pointLightHandle = pointLightFeatureProcessor->AcquireLight();
             pointLightFeatureProcessor->SetPosition(m_pointLightHandle, m_pointLightPos);
             pointLightFeatureProcessor->SetRgbIntensity(m_pointLightHandle, AZ::Render::PhotometricColor<AZ::Render::PhotometricUnit::Candela>(m_pointLightIntensity * m_pointLightColor));
@@ -351,8 +348,7 @@ namespace AtomSampleViewer
 
         // diffuse probe grid
         {
-            AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-            AZ::Render::DiffuseProbeGridFeatureProcessorInterface* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DiffuseProbeGridFeatureProcessorInterface>();
+            AZ::Render::DiffuseProbeGridFeatureProcessorInterface* diffuseProbeGridFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DiffuseProbeGridFeatureProcessorInterface>();
             AZ::Transform transform = AZ::Transform::CreateIdentity();
 
             m_origin.Set(0.3f, -0.25f, 0.5f);
@@ -366,7 +362,7 @@ namespace AtomSampleViewer
             m_normalBias = 0.1f;
             diffuseProbeGridFeatureProcessor->SetNormalBias(m_diffuseProbeGrid, m_normalBias);
 
-            AZ::Render::DiffuseGlobalIlluminationFeatureProcessorInterface* diffuseGlobalIlluminationFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DiffuseGlobalIlluminationFeatureProcessorInterface>();
+            AZ::Render::DiffuseGlobalIlluminationFeatureProcessorInterface* diffuseGlobalIlluminationFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DiffuseGlobalIlluminationFeatureProcessorInterface>();
             diffuseGlobalIlluminationFeatureProcessor->SetQualityLevel(AZ::Render::DiffuseGlobalIlluminationQualityLevel::Medium);
         }
 
@@ -399,8 +395,7 @@ namespace AtomSampleViewer
 
         // directional light
         {
-            AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-            AZ::Render::DirectionalLightFeatureProcessorInterface* directionalLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DirectionalLightFeatureProcessorInterface>();
+            AZ::Render::DirectionalLightFeatureProcessorInterface* directionalLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DirectionalLightFeatureProcessorInterface>();
             m_directionalLightHandle = directionalLightFeatureProcessor->AcquireLight();
             const auto lightTransform = AZ::Transform::CreateRotationZ(m_directionalLightYaw) * AZ::Transform::CreateRotationX(m_directionalLightPitch);
             directionalLightFeatureProcessor->SetDirection(m_directionalLightHandle, lightTransform.GetBasis(1));
@@ -415,8 +410,7 @@ namespace AtomSampleViewer
 
         // point light
         {
-            AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-            AZ::Render::PointLightFeatureProcessorInterface* pointLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
+            AZ::Render::PointLightFeatureProcessorInterface* pointLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
             m_pointLightHandle = pointLightFeatureProcessor->AcquireLight();
             pointLightFeatureProcessor->SetPosition(m_pointLightHandle, m_pointLightPos);
             pointLightFeatureProcessor->SetRgbIntensity(m_pointLightHandle, AZ::Render::PhotometricColor<AZ::Render::PhotometricUnit::Candela>(m_pointLightIntensity * m_pointLightColor));
@@ -426,8 +420,7 @@ namespace AtomSampleViewer
 
         // diffuse probe grid
         {
-            AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-            AZ::Render::DiffuseProbeGridFeatureProcessorInterface* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DiffuseProbeGridFeatureProcessorInterface>();
+            AZ::Render::DiffuseProbeGridFeatureProcessorInterface* diffuseProbeGridFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DiffuseProbeGridFeatureProcessorInterface>();
             transform = AZ::Transform::CreateIdentity();
         
             m_origin.Set(1.4f, -1.25f, 5.0f);
@@ -441,7 +434,7 @@ namespace AtomSampleViewer
             m_normalBias = 0.4f;
             diffuseProbeGridFeatureProcessor->SetNormalBias(m_diffuseProbeGrid, m_normalBias);
 
-            AZ::Render::DiffuseGlobalIlluminationFeatureProcessorInterface* diffuseGlobalIlluminationFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DiffuseGlobalIlluminationFeatureProcessorInterface>();
+            AZ::Render::DiffuseGlobalIlluminationFeatureProcessorInterface* diffuseGlobalIlluminationFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DiffuseGlobalIlluminationFeatureProcessorInterface>();
             diffuseGlobalIlluminationFeatureProcessor->SetQualityLevel(AZ::Render::DiffuseGlobalIlluminationQualityLevel::Medium);
         }
 
@@ -465,10 +458,9 @@ namespace AtomSampleViewer
         }
 
         // ImGui sidebar
-        AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        AZ::Render::DiffuseProbeGridFeatureProcessorInterface* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DiffuseProbeGridFeatureProcessorInterface>();
-        AZ::Render::PointLightFeatureProcessorInterface* pointLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
-        AZ::Render::DirectionalLightFeatureProcessorInterface* directionalLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DirectionalLightFeatureProcessorInterface>();
+        AZ::Render::DiffuseProbeGridFeatureProcessorInterface* diffuseProbeGridFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DiffuseProbeGridFeatureProcessorInterface>();
+        AZ::Render::PointLightFeatureProcessorInterface* pointLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
+        AZ::Render::DirectionalLightFeatureProcessorInterface* directionalLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DirectionalLightFeatureProcessorInterface>();
 
         bool sceneChanged = false;
 
@@ -681,8 +673,6 @@ namespace AtomSampleViewer
 
     void DiffuseGIExampleComponent::DisableGlobalIbl()
     {
-        AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-
         // disable Ibl by setting the empty cubemap
         const constexpr char* DiffuseAssetPath = "textures/default/default_iblglobalcm_ibldiffuse.dds.streamingimage";
         const constexpr char* SpecularAssetPath = "textures/default/default_iblglobalcm_iblspecular.dds.streamingimage";
@@ -695,7 +685,7 @@ namespace AtomSampleViewer
             AZ::RPI::AssetUtils::GetAssetByProductPath<AZ::RPI::StreamingImageAsset>
             (SpecularAssetPath, assertTraceLevel);
 
-        auto featureProcessor = scene->GetFeatureProcessor<AZ::Render::ImageBasedLightFeatureProcessorInterface>();
+        auto featureProcessor = m_scene->GetFeatureProcessor<AZ::Render::ImageBasedLightFeatureProcessorInterface>();
         AZ_Assert(featureProcessor, "Unable to find ImageBasedLightFeatureProcessorInterface on scene.");
 
         featureProcessor->SetDiffuseImage(diffuseImageAsset);
@@ -704,8 +694,7 @@ namespace AtomSampleViewer
 
     void DiffuseGIExampleComponent::EnableDiffuseIbl()
     {
-        AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        AZ::Render::ImageBasedLightFeatureProcessorInterface* imageBaseLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::ImageBasedLightFeatureProcessorInterface>();
+        AZ::Render::ImageBasedLightFeatureProcessorInterface* imageBaseLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::ImageBasedLightFeatureProcessorInterface>();
         AZ_Assert(imageBaseLightFeatureProcessor, "Unable to find ImageBasedLightFeatureProcessorInterface on scene.");
 
         imageBaseLightFeatureProcessor->SetDiffuseImage(m_diffuseImageAsset);

+ 4 - 2
Gem/Code/Source/DynamicDrawExampleComponent.cpp

@@ -80,7 +80,7 @@ namespace AtomSampleViewer
         m_dynamicDraw->InitVertexFormat(vertexChannels);
         m_dynamicDraw->AddDrawStateOptions(RPI::DynamicDrawContext::DrawStateOptions::BlendMode | RPI::DynamicDrawContext::DrawStateOptions::PrimitiveType
             | RPI::DynamicDrawContext::DrawStateOptions::DepthState | RPI::DynamicDrawContext::DrawStateOptions::FaceCullMode);
-        m_dynamicDraw->SetOutputScope(RPI::RPISystemInterface::Get()->GetDefaultScene().get());
+        m_dynamicDraw->SetOutputScope(m_scene);
         m_dynamicDraw->EndInit();
 
         Data::Instance<RPI::ShaderResourceGroup> contextSrg = m_dynamicDraw->GetPerContextSrg();
@@ -98,7 +98,9 @@ namespace AtomSampleViewer
         m_dynamicDraw2ForPass = RPI::DynamicDrawInterface::Get()->CreateDynamicDrawContext();
 
         // Get auxGeom pass from the current render pipeline
-        AZ::RPI::PassFilter passFilter = AZ::RPI::PassFilter::CreateWithPassHierarchy({"MainPipeline", "AuxGeomPass"}); 
+        AZ::RPI::PassFilter passFilter = AZ::RPI::PassFilter::CreateWithPassName(
+            Name("AuxGeomPass"),
+            m_scene);
         RPI::RasterPass* auxGeomPass = azrtti_cast<RPI::RasterPass*>(AZ::RPI::PassSystemInterface::Get()->FindFirstPass(passFilter));
         AZ_Assert(auxGeomPass, "AuxGeomPass should be a RasterPass or a derived RasterPass");
         

+ 1 - 1
Gem/Code/Source/EntityLatticeTestComponent.cpp

@@ -43,7 +43,7 @@ namespace AtomSampleViewer
         Debug::CameraControllerRequestBus::Event(GetCameraEntityId(), &Debug::CameraControllerRequestBus::Events::Enable,
             azrtti_typeid<Debug::NoClipControllerComponent>());
 
-        m_defaultIbl.Init(RPI::RPISystemInterface::Get()->GetDefaultScene().get());
+        m_defaultIbl.Init(m_scene);
         BuildLattice();
     }
 

+ 2 - 3
Gem/Code/Source/ExposureExampleComponent.cpp

@@ -42,9 +42,8 @@ namespace AtomSampleViewer
     {
         using namespace AZ;
 
-        RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-        m_postProcessFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::PostProcessFeatureProcessorInterface>();
-        m_pointLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
+        m_postProcessFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::PostProcessFeatureProcessorInterface>();
+        m_pointLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
 
         EnableCameraController();
 

+ 15 - 20
Gem/Code/Source/LightCullingExampleComponent.cpp

@@ -631,8 +631,7 @@ namespace AtomSampleViewer
 
     void LightCullingExampleComponent::DrawDebuggingHelpers()
     {
-        auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene))
+        if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(m_scene))
         {
             if (m_settings[(int)LightType::Point].m_enableDebugDraws)
             {
@@ -716,12 +715,11 @@ namespace AtomSampleViewer
 
     void LightCullingExampleComponent::GetFeatureProcessors()
     {
-        AZ::RPI::Scene* scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-        m_pointLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
-        m_diskLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DiskLightFeatureProcessorInterface>();
-        m_capsuleLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::CapsuleLightFeatureProcessorInterface>();
-        m_quadLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::QuadLightFeatureProcessorInterface>();
-        m_decalFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DecalFeatureProcessorInterface>();
+        m_pointLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::PointLightFeatureProcessorInterface>();
+        m_diskLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DiskLightFeatureProcessorInterface>();
+        m_capsuleLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::CapsuleLightFeatureProcessorInterface>();
+        m_quadLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::QuadLightFeatureProcessorInterface>();
+        m_decalFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DecalFeatureProcessorInterface>();
     }
 
     float LightCullingExampleComponent::AutoCalculateAttenuationRadius(const AZ::Color& color, float intensity)
@@ -742,20 +740,17 @@ namespace AtomSampleViewer
 
     void LightCullingExampleComponent::UpdateHeatmapOpacity()
     {
-        if (const ScenePtr scene = RPISystemInterface::Get()->GetDefaultScene())
+        if (const RenderPipelinePtr pipeline = m_scene->GetDefaultRenderPipeline())
         {
-            if (const RenderPipelinePtr pipeline = scene->GetDefaultRenderPipeline())
+            AZ::RPI::PassFilter passFilter = AZ::RPI::PassFilter::CreateWithPassName(AZ::Name("LightCullingHeatmapPass"), pipeline.get());
+            const Ptr<RenderPass> trianglePass = azrtti_cast<RenderPass*>(AZ::RPI::PassSystemInterface::Get()->FindFirstPass(passFilter));
+            if (trianglePass)
             {
-                AZ::RPI::PassFilter passFilter = AZ::RPI::PassFilter::CreateWithPassName(AZ::Name("LightCullingHeatmapPass"), pipeline.get());
-                const Ptr<RenderPass> trianglePass = azrtti_cast<RenderPass*>(AZ::RPI::PassSystemInterface::Get()->FindFirstPass(passFilter));
-                if (trianglePass)
-                {
-                    trianglePass->SetEnabled(m_heatmapOpacity > 0.0f);
-                    Data::Instance<ShaderResourceGroup> srg = trianglePass->GetShaderResourceGroup();
-                    RHI::ShaderInputConstantIndex opacityIndex = srg->FindShaderInputConstantIndex(AZ::Name("m_heatmapOpacity"));
-                    [[maybe_unused]] bool setOk = srg->SetConstant<float>(opacityIndex, m_heatmapOpacity);
-                    AZ_Warning("LightCullingExampleComponent", setOk, "Unable to set heatmap opacity");
-                }
+                trianglePass->SetEnabled(m_heatmapOpacity > 0.0f);
+                Data::Instance<ShaderResourceGroup> srg = trianglePass->GetShaderResourceGroup();
+                RHI::ShaderInputConstantIndex opacityIndex = srg->FindShaderInputConstantIndex(AZ::Name("m_heatmapOpacity"));
+                [[maybe_unused]] bool setOk = srg->SetConstant<float>(opacityIndex, m_heatmapOpacity);
+                AZ_Warning("LightCullingExampleComponent", setOk, "Unable to set heatmap opacity");
             }
         }
     }

+ 8 - 14
Gem/Code/Source/MSAA_RPI_ExampleComponent.cpp

@@ -50,9 +50,8 @@ namespace AtomSampleViewer
         AZ::Render::Bootstrap::DefaultWindowNotificationBus::Handler::BusConnect();
 
         // save the current render pipeline
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        m_originalPipeline = defaultScene->GetDefaultRenderPipeline();
-        defaultScene->RemoveRenderPipeline(m_originalPipeline->GetId());
+        m_originalPipeline = m_scene->GetDefaultRenderPipeline();
+        m_scene->RemoveRenderPipeline(m_originalPipeline->GetId());
 
         // switch to the sample render pipeline
         ChangeRenderPipeline();
@@ -83,14 +82,12 @@ namespace AtomSampleViewer
 
     void MSAA_RPI_ExampleComponent::ChangeRenderPipeline()
     {
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-
         m_imguiScope = {}; // restores previous ImGui context.
 
         // remove currently running sample pipeline, if any
         if (m_samplePipeline)
         {
-            defaultScene->RemoveRenderPipeline(m_samplePipeline->GetId());
+            m_scene->RemoveRenderPipeline(m_samplePipeline->GetId());
             m_samplePipeline = nullptr;
         }
         
@@ -107,12 +104,9 @@ namespace AtomSampleViewer
             // reset internal sample scene related data
             ResetScene();
 
-            // re-acquire the default scene
-            defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-
             // remove the default render pipeline
-            AZ::RPI::RenderPipelinePtr defaultPipeline = defaultScene->GetDefaultRenderPipeline();
-            defaultScene->RemoveRenderPipeline(defaultPipeline->GetId());
+            AZ::RPI::RenderPipelinePtr defaultPipeline = m_scene->GetDefaultRenderPipeline();
+            m_scene->RemoveRenderPipeline(defaultPipeline->GetId());
 
             // scene IBL is cleared after the reset, re-activate it
             ActivateIbl();
@@ -129,9 +123,9 @@ namespace AtomSampleViewer
         m_samplePipeline = AZ::RPI::RenderPipeline::CreateRenderPipelineForWindow(pipelineDesc, *m_windowContext);
 
         // add the sample pipeline to the scene
-        defaultScene->AddRenderPipeline(m_samplePipeline);
+        m_scene->AddRenderPipeline(m_samplePipeline);
         m_samplePipeline->SetDefaultView(m_originalPipeline->GetDefaultView());
-        defaultScene->SetDefaultRenderPipeline(m_samplePipeline->GetId());
+        m_scene->SetDefaultRenderPipeline(m_samplePipeline->GetId());
 
         // create an ImGuiActiveContextScope to ensure the ImGui context on the new pipeline's ImGui pass is activated.
         m_imguiScope = AZ::Render::ImGuiActiveContextScope::FromPass({ m_samplePipeline->GetId().GetCStr(), "ImGuiPass" });
@@ -203,7 +197,7 @@ namespace AtomSampleViewer
 
     void MSAA_RPI_ExampleComponent::ActivateIbl()
     {
-        m_defaultIbl.Init(AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get());
+        m_defaultIbl.Init(m_scene);
 
         // reduce the exposure so the model isn't overly bright
         m_defaultIbl.SetExposure(-0.5f);

+ 5 - 7
Gem/Code/Source/MeshExampleComponent.cpp

@@ -100,11 +100,10 @@ namespace AtomSampleViewer
 
     void MeshExampleComponent::ActivateLowEndPipeline()
     {
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        m_originalPipeline = defaultScene->GetDefaultRenderPipeline();
-        defaultScene->AddRenderPipeline(m_lowEndPipeline);
+        m_originalPipeline = m_scene->GetDefaultRenderPipeline();
+        m_scene->AddRenderPipeline(m_lowEndPipeline);
         m_lowEndPipeline->SetDefaultView(m_originalPipeline->GetDefaultView());
-        defaultScene->RemoveRenderPipeline(m_originalPipeline->GetId());
+        m_scene->RemoveRenderPipeline(m_originalPipeline->GetId());
 
         m_imguiScope = AZ::Render::ImGuiActiveContextScope::FromPass({ m_lowEndPipeline->GetId().GetCStr(), "ImGuiPass" });
     }
@@ -113,9 +112,8 @@ namespace AtomSampleViewer
     {
         m_imguiScope = {}; // restores previous ImGui context.
 
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        defaultScene->AddRenderPipeline(m_originalPipeline);
-        defaultScene->RemoveRenderPipeline(m_lowEndPipeline->GetId());
+        m_scene->AddRenderPipeline(m_originalPipeline);
+        m_scene->RemoveRenderPipeline(m_lowEndPipeline->GetId());
     }
 
     void MeshExampleComponent::Activate()

+ 1 - 3
Gem/Code/Source/MultiRenderPipelineExampleComponent.cpp

@@ -64,8 +64,6 @@ namespace AtomSampleViewer
 
     void MultiRenderPipelineExampleComponent::Activate()
     {
-        m_scene = RPI::RPISystemInterface::Get()->GetDefaultScene();
-
         // Save references of different feature processors
         m_diskLightFeatureProcessor = m_scene->GetFeatureProcessor<Render::DiskLightFeatureProcessorInterface>();
         m_directionalLightFeatureProcessor = m_scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
@@ -280,7 +278,7 @@ namespace AtomSampleViewer
     
     void MultiRenderPipelineExampleComponent::AddIBL()
     {
-        m_ibl.Init(m_scene.get());
+        m_ibl.Init(m_scene);
     }
 
     void MultiRenderPipelineExampleComponent::RemoveIBL()

+ 0 - 3
Gem/Code/Source/MultiRenderPipelineExampleComponent.h

@@ -132,9 +132,6 @@ namespace AtomSampleViewer
 
         // camera for the second render pipeline
         AZ::Entity* m_secondViewCameraEntity = nullptr;
-
-        // Reference to current scene
-        AZ::RPI::ScenePtr m_scene;
     };
 
 } // namespace AtomSampleViewer

+ 2 - 2
Gem/Code/Source/MultiSceneExampleComponent.cpp

@@ -70,6 +70,7 @@ namespace AtomSampleViewer
 
         // Create the RPI::Scene, add some feature processors
         RPI::SceneDescriptor sceneDesc;
+        sceneDesc.m_nameId = AZ::Name("SecondScene");
         sceneDesc.m_featureProcessorNames.push_back("AZ::Render::SimplePointLightFeatureProcessor");
         sceneDesc.m_featureProcessorNames.push_back("AZ::Render::SimpleSpotLightFeatureProcessor");
         sceneDesc.m_featureProcessorNames.push_back("AZ::Render::CapsuleLightFeatureProcessor");
@@ -424,7 +425,6 @@ namespace AtomSampleViewer
     void MultiSceneExampleComponent::OnAllAssetsReadyActivate()
     {
         using namespace AZ;
-        RPI::ScenePtr scene = RPI::RPISystemInterface::Get()->GetDefaultScene();
 
         // Setup Main Mesh Entity
         {
@@ -440,7 +440,7 @@ namespace AtomSampleViewer
 
         // IBL
         {
-            m_defaultIbl.Init(scene.get());
+            m_defaultIbl.Init(m_scene);
         }
 
         if (SupportsMultipleWindows())

+ 2 - 3
Gem/Code/Source/MultiViewSingleSceneAuxGeomExampleComponent.cpp

@@ -68,7 +68,7 @@ namespace AtomSampleViewer
             m_windowContext = AZStd::make_shared<AZ::RPI::WindowContext>();
             m_windowContext->Initialize(*device, m_nativeWindow->GetWindowHandle());
 
-            auto scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
+            auto scene = AZ::RPI::RPISystemInterface::Get()->GetSceneByName(AZ::Name("RPI"));
 
             // Create a custom pipeline descriptor
             AZ::RPI::RenderPipelineDescriptor pipelineDesc;
@@ -224,8 +224,7 @@ namespace AtomSampleViewer
 
     void MultiViewSingleSceneAuxGeomExampleComponent::DrawAuxGeom() const
     {
-        auto scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        auto auxGeomFP = scene->GetFeatureProcessor<AZ::RPI::AuxGeomFeatureProcessorInterface>();
+        auto auxGeomFP = m_scene->GetFeatureProcessor<AZ::RPI::AuxGeomFeatureProcessorInterface>();
         if (auto auxGeom = auxGeomFP->GetDrawQueue())
         {
             DrawBackgroundBox(auxGeom);

+ 2 - 3
Gem/Code/Source/ParallaxMappingExampleComponent.cpp

@@ -118,10 +118,9 @@ namespace AtomSampleViewer
         SetCameraConfiguration();
 
         // Light
-        AZ::RPI::Scene* scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-        m_directionalLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DirectionalLightFeatureProcessorInterface>();
+        m_directionalLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DirectionalLightFeatureProcessorInterface>();
         CreateDirectionalLight();
-        m_diskLightFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::DiskLightFeatureProcessorInterface>();
+        m_diskLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DiskLightFeatureProcessorInterface>();
         CreateDiskLight();
 
         m_imguiSidebar.Activate();

+ 3 - 5
Gem/Code/Source/RootConstantsExampleComponent.cpp

@@ -115,8 +115,7 @@ namespace AtomSampleViewer
             shaderVariant.ConfigurePipelineState(pipelineStateDescriptor);
             m_drawListTag = shader->GetDrawListTag();
 
-            RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-            scene->ConfigurePipelineState(m_drawListTag, pipelineStateDescriptor);
+            m_scene->ConfigurePipelineState(m_drawListTag, pipelineStateDescriptor);
             
             RHI::InputStreamLayoutBuilder layoutBuilder;
             layoutBuilder.AddBuffer()->Channel("POSITION", RHI::Format::R32G32B32_FLOAT);
@@ -190,9 +189,8 @@ namespace AtomSampleViewer
 
     void RootConstantsExampleComponent::SetupScene()
     {
-        RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
         Render::DirectionalLightFeatureProcessorInterface* const featureProcessor =
-            scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
+            m_scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
         m_directionalLightFeatureProcessor = featureProcessor;
 
         // Light creation
@@ -320,7 +318,7 @@ namespace AtomSampleViewer
                 drawPacketBuilder.AddDrawItem(drawRequest);
 
                 AZStd::unique_ptr<const RHI::DrawPacket> drawPacket(drawPacketBuilder.End());
-                m_dynamicDraw->AddDrawPacket(RPI::RPISystemInterface::Get()->GetDefaultScene().get(), AZStd::move(drawPacket));
+                m_dynamicDraw->AddDrawPacket(m_scene, AZStd::move(drawPacket));
             }
         }
     }

+ 2 - 5
Gem/Code/Source/SSRExampleComponent.cpp

@@ -47,14 +47,13 @@ namespace AtomSampleViewer
         CreateGroundPlane();
 
         // IBL
-        m_defaultIbl.Init(AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get());
+        m_defaultIbl.Init(m_scene);
 
         // skybox
         const constexpr char* SkyboxAssetPath = "textures/sampleenvironment/example_iblskyboxcm.dds.streamingimage";
         m_skyboxImageAsset = AZ::RPI::AssetUtils::GetAssetByProductPath<AZ::RPI::StreamingImageAsset>(SkyboxAssetPath, AZ::RPI::AssetUtils::TraceLevel::Assert);
 
-        AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        AZ::Render::SkyBoxFeatureProcessorInterface* skyboxFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::SkyBoxFeatureProcessorInterface>();
+        AZ::Render::SkyBoxFeatureProcessorInterface* skyboxFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::SkyBoxFeatureProcessorInterface>();
         skyboxFeatureProcessor->Enable(true);
         skyboxFeatureProcessor->SetSkyboxMode(AZ::Render::SkyBoxMode::Cubemap);
         skyboxFeatureProcessor->SetCubemap(AZ::RPI::StreamingImage::FindOrCreate(m_skyboxImageAsset));
@@ -65,8 +64,6 @@ namespace AtomSampleViewer
 
     void SSRExampleComponent::Deactivate()
     {
-        AZ::RPI::ScenePtr scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-
         // disable the SSR pass in the pipeline
         EnableSSR(false);
 

+ 20 - 8
Gem/Code/Source/SampleComponentManager.cpp

@@ -755,14 +755,19 @@ namespace AtomSampleViewer
         {
             ShowPassTreeWindow();
         }
+
         if (m_showFrameGraphVisualizer)
         {
             ShowFrameGraphVisualizerWindow();
         }
+
         if (m_showCullingDebugWindow)
         {
-            AZ::RPI::Scene* defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-            AZ::Render::ImGuiDrawCullingDebug(m_showCullingDebugWindow, defaultScene);
+            AZ::RPI::Scene* rpiScene = AZ::RPI::RPISystemInterface::Get()->GetSceneByName(AZ::Name("RPI"));
+            if (rpiScene)
+            {
+                AZ::Render::ImGuiDrawCullingDebug(m_showCullingDebugWindow, rpiScene);
+            }
         }
 
         if (m_showCpuProfiler)
@@ -1373,14 +1378,23 @@ namespace AtomSampleViewer
 
         const SampleEntry& sampleEntry = m_availableSamples[m_selectedSampleIndex];
 
+        // Create scene and render pipeline before create sample component
+        if (sampleEntry.m_pipelineType == SamplePipelineType::RHI)
+        {
+            SwitchSceneForRHISample();
+        }
+        else if (sampleEntry.m_pipelineType == SamplePipelineType::RPI)
+        {
+            SwitchSceneForRPISample();
+        }
+
         SampleComponentConfig config(m_windowContext, m_cameraEntity->GetId(), m_entityContextId);
         m_activeSample = m_exampleEntity->CreateComponent(sampleEntry.m_sampleUuid);
         m_activeSample->SetConfiguration(config);
 
+        // special setup for RHI samples
         if (sampleEntry.m_pipelineType == SamplePipelineType::RHI)
         {
-            SwitchSceneForRHISample();
-
             BasicRHIComponent* rhiSampleComponent = static_cast<BasicRHIComponent*>(m_activeSample);
             if (rhiSampleComponent->IsSupportedRHISamplePipeline())
             {
@@ -1391,10 +1405,6 @@ namespace AtomSampleViewer
                 m_rhiSamplePass->SetRHISample(nullptr);
             }
         }
-        else if (sampleEntry.m_pipelineType == SamplePipelineType::RPI)
-        {
-            SwitchSceneForRPISample();
-        }
 
         m_exampleEntity->Activate();
 
@@ -1418,6 +1428,7 @@ namespace AtomSampleViewer
     {
         // Create and register the rhi scene with only feature processors required for AtomShimRenderer (only for AtomSampleViewerLauncher)
         RPI::SceneDescriptor sceneDesc;
+        sceneDesc.m_nameId = AZ::Name("RHI");
         sceneDesc.m_featureProcessorNames.push_back("AuxGeomFeatureProcessor");
         m_rhiScene = RPI::Scene::CreateScene(sceneDesc);
         m_rhiScene->Activate();
@@ -1465,6 +1476,7 @@ namespace AtomSampleViewer
     {
         // Create and register a scene with all available feature processors
         RPI::SceneDescriptor sceneDesc;
+        sceneDesc.m_nameId = AZ::Name("RPI");
         m_rpiScene = RPI::Scene::CreateScene(sceneDesc);
         m_rpiScene->EnableAllFeatureProcessors();
 

+ 6 - 8
Gem/Code/Source/ShaderReloadTestComponent.cpp

@@ -128,6 +128,7 @@ namespace AtomSampleViewer
 
     bool ShaderReloadTestComponent::ReadInConfig(const AZ::ComponentConfig*)
     {
+        m_scene = RPI::RPISystemInterface::Get()->GetSceneByName(AZ::Name("RPI"));
         return true;
     }
 
@@ -233,9 +234,8 @@ namespace AtomSampleViewer
     void ShaderReloadTestComponent::ActivateFullscreenTrianglePipeline()
     {
         // save original render pipeline first and remove it from the scene
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        m_originalPipeline = defaultScene->GetDefaultRenderPipeline();
-        defaultScene->RemoveRenderPipeline(m_originalPipeline->GetId());
+        m_originalPipeline = m_scene->GetDefaultRenderPipeline();
+        m_scene->RemoveRenderPipeline(m_originalPipeline->GetId());
 
         // add the checker board pipeline
         const AZStd::string pipelineName("Fullscreen");
@@ -244,7 +244,7 @@ namespace AtomSampleViewer
         pipelineDesc.m_name = pipelineName;
         pipelineDesc.m_rootPassTemplate = "FullscreenPipeline";
         m_cbPipeline = AZ::RPI::RenderPipeline::CreateRenderPipelineForWindow(pipelineDesc, *m_windowContext);
-        defaultScene->AddRenderPipeline(m_cbPipeline);
+        m_scene->AddRenderPipeline(m_cbPipeline);
         m_cbPipeline->SetDefaultView(m_originalPipeline->GetDefaultView());
         m_passHierarchy.push_back(pipelineName);
         m_passHierarchy.push_back("CopyToSwapChain");
@@ -258,10 +258,8 @@ namespace AtomSampleViewer
             return;
         }
 
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        defaultScene->RemoveRenderPipeline(m_cbPipeline->GetId());
-
-        defaultScene->AddRenderPipeline(m_originalPipeline);
+        m_scene->RemoveRenderPipeline(m_cbPipeline->GetId());
+        m_scene->AddRenderPipeline(m_originalPipeline);
 
         m_cbPipeline = nullptr;
         m_passHierarchy.clear();

+ 2 - 2
Gem/Code/Source/ShaderReloadTestComponent.h

@@ -102,9 +102,9 @@ namespace AtomSampleViewer
         bool m_isCapturingRenderOutput = false;
         uint32_t m_expectedPixelColor;
         AZStd::string m_capturedColorAsString;
+        
+        AZ::RPI::Scene* m_scene = nullptr;
 
-
-        // for checkerboard render pipeline
         AZ::RPI::RenderPipelinePtr m_cbPipeline;
         AZ::RPI::RenderPipelinePtr m_originalPipeline;
         AZStd::shared_ptr<AZ::RPI::WindowContext> m_windowContext;

+ 1 - 1
Gem/Code/Source/ShadingExampleComponent.cpp

@@ -60,7 +60,7 @@ namespace AtomSampleViewer
         UseArcBallCameraController();
 
         // Add an Image based light.
-        m_defaultIbl.Init(AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get());
+        m_defaultIbl.Init(m_scene);
 
         // Load default IBL texture asset for LuxCore
         // We should be able to extract this information from SkyBox in the future

+ 4 - 5
Gem/Code/Source/ShadowExampleComponent.cpp

@@ -104,7 +104,7 @@ namespace AtomSampleViewer
         PreloadAssets(assetList);
 
         // initialize and then reset IBL, which will disable it by binding the default cubemaps
-        m_defaultIbl.Init(AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get());
+        m_defaultIbl.Init(m_scene);
         m_defaultIbl.Reset();
     }
 
@@ -129,10 +129,9 @@ namespace AtomSampleViewer
 
         UseArcBallCameraController();
 
-        RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-        m_directionalLightFeatureProcessor = scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
-        m_diskLightFeatureProcessor = scene->GetFeatureProcessor<Render::DiskLightFeatureProcessorInterface>();
-        m_pointLightFeatureProcessor = scene->GetFeatureProcessor<Render::PointLightFeatureProcessorInterface>();
+        m_directionalLightFeatureProcessor = m_scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
+        m_diskLightFeatureProcessor = m_scene->GetFeatureProcessor<Render::DiskLightFeatureProcessorInterface>();
+        m_pointLightFeatureProcessor = m_scene->GetFeatureProcessor<Render::PointLightFeatureProcessorInterface>();
 
         CreateMeshes();
         CreateDirectionalLight();

+ 2 - 3
Gem/Code/Source/ShadowedSponzaExampleComponent.cpp

@@ -80,9 +80,8 @@ namespace AtomSampleViewer
         m_diskLightsBasePosition[2] = -0.03f;
         m_diskLightsPositionScatteringRatio = 0.27f;
 
-        RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-        m_directionalLightFeatureProcessor = scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
-        m_diskLightFeatureProcessor = scene->GetFeatureProcessor<Render::DiskLightFeatureProcessorInterface>();
+        m_directionalLightFeatureProcessor = m_scene->GetFeatureProcessor<Render::DirectionalLightFeatureProcessorInterface>();
+        m_diskLightFeatureProcessor = m_scene->GetFeatureProcessor<Render::DiskLightFeatureProcessorInterface>();
 
         SetupScene();
 

+ 2 - 2
Gem/Code/Source/SkinnedMeshContainer.cpp

@@ -103,8 +103,8 @@ namespace AtomSampleViewer
 
     void SkinnedMeshContainer::DrawBones()
     {
-        auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(defaultScene))
+        auto rpiScene = AZ::RPI::RPISystemInterface::Get()->GetSceneByName(AZ::Name("RPI"));
+        if (auto auxGeom = AZ::RPI::AuxGeomFeatureProcessorInterface::GetDrawQueueForScene(rpiScene))
         {
             uint32_t skinnedMeshContainerSize = aznumeric_cast<uint32_t>(m_skinnedMeshes.size());
             for (uint32_t i = 0; i < skinnedMeshContainerSize; ++i)

+ 3 - 4
Gem/Code/Source/SkinnedMeshExampleComponent.cpp

@@ -69,7 +69,7 @@ namespace AtomSampleViewer
 
     void SkinnedMeshExampleComponent::AddImageBasedLight()
     {
-        m_defaultIbl.Init(AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get());
+        m_defaultIbl.Init(m_scene);
     }
 
     void SkinnedMeshExampleComponent::ConfigureCamera()
@@ -134,9 +134,8 @@ namespace AtomSampleViewer
 
     void SkinnedMeshExampleComponent::CreateSkinnedMeshContainer()
     {
-        const AZ::RPI::Scene* scene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-        const auto skinnedMeshFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::SkinnedMeshFeatureProcessorInterface>();
-        const auto meshFeatureProcessor = scene->GetFeatureProcessor<AZ::Render::MeshFeatureProcessorInterface>();
+        const auto skinnedMeshFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::SkinnedMeshFeatureProcessorInterface>();
+        const auto meshFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::MeshFeatureProcessorInterface>();
 
         // Default settings for the sample
         SkinnedMeshConfig config;

+ 2 - 3
Gem/Code/Source/SponzaBenchmarkComponent.cpp

@@ -143,8 +143,7 @@ namespace AtomSampleViewer
             AzFramework::StringFunc::Path::Join(engineRoot, "Screenshots", m_screenshotFolder, true, false);
         }
 
-        auto defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        m_directionalLightFeatureProcessor = defaultScene->GetFeatureProcessor<AZ::Render::DirectionalLightFeatureProcessorInterface>();
+        m_directionalLightFeatureProcessor = m_scene->GetFeatureProcessor<AZ::Render::DirectionalLightFeatureProcessorInterface>();
 
         const auto handle = m_directionalLightFeatureProcessor->AcquireLight();
 
@@ -174,7 +173,7 @@ namespace AtomSampleViewer
         m_skyboxFeatureProcessor->SetSunPosition(azimuth, altitude);
 
         // Create IBL
-        m_defaultIbl.Init(AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get());
+        m_defaultIbl.Init(m_scene);
         m_defaultIbl.SetExposure(-3.0f);
     }
 

+ 6 - 9
Gem/Code/Source/SsaoExampleComponent.cpp

@@ -159,11 +159,10 @@ namespace AtomSampleViewer
     {
         CreateSsaoPipeline();
 
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        m_originalPipeline = defaultScene->GetDefaultRenderPipeline();
-        defaultScene->AddRenderPipeline(m_ssaoPipeline);
+        m_originalPipeline = m_scene->GetDefaultRenderPipeline();
+        m_scene->AddRenderPipeline(m_ssaoPipeline);
         m_ssaoPipeline->SetDefaultView(m_originalPipeline->GetDefaultView());
-        defaultScene->RemoveRenderPipeline(m_originalPipeline->GetId());
+        m_scene->RemoveRenderPipeline(m_originalPipeline->GetId());
 
         // Create an ImGuiActiveContextScope to ensure the ImGui context on the new pipeline's ImGui pass is activated.
         m_imguiScope = AZ::Render::ImGuiActiveContextScope::FromPass({ m_ssaoPipeline->GetId().GetCStr(), "ImGuiPass" });
@@ -173,9 +172,8 @@ namespace AtomSampleViewer
     {
         m_imguiScope = {}; // restores previous ImGui context.
 
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        defaultScene->AddRenderPipeline(m_originalPipeline);
-        defaultScene->RemoveRenderPipeline(m_ssaoPipeline->GetId());
+        m_scene->AddRenderPipeline(m_originalPipeline);
+        m_scene->RemoveRenderPipeline(m_ssaoPipeline->GetId());
         DestroySsaoPipeline();
     }
 
@@ -193,8 +191,7 @@ namespace AtomSampleViewer
             &ComponentDescriptorBus::Events::CreateComponent);
         m_ssaoEntity->AddComponent(transformComponent);
 
-        RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
-        m_postProcessFeatureProcessor = scene->GetFeatureProcessor<Render::PostProcessFeatureProcessorInterface>();
+        m_postProcessFeatureProcessor = m_scene->GetFeatureProcessor<Render::PostProcessFeatureProcessorInterface>();
 
         auto* postProcessSettings = m_postProcessFeatureProcessor->GetOrCreateSettingsInterface(m_ssaoEntity->GetId());
         m_ssaoSettings = postProcessSettings->GetOrCreateSsaoSettingsInterface();

+ 6 - 6
Gem/Code/Source/StreamingImageExampleComponent.cpp

@@ -53,7 +53,8 @@ namespace AtomSampleViewer
             Data::Asset<AZ::RPI::ShaderAsset>& shaderAsset,
             RHI::Ptr<AZ::RHI::ShaderResourceGroupLayout>& srgLayout,
             RHI::ConstPtr<RHI::PipelineState>& pipelineState,
-            RHI::DrawListTag& drawListTag)
+            RHI::DrawListTag& drawListTag, 
+            RPI::Scene* scene)
         {
             // Since the shader is using SV_VertexID and SV_InstanceID as VS input, we won't need to have vertex buffer.
             // Also, the index buffer is not needed with DrawLinear.
@@ -72,7 +73,6 @@ namespace AtomSampleViewer
             shaderVariant.ConfigurePipelineState(pipelineStateDescriptor);
             drawListTag = shader->GetDrawListTag();
 
-            RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
             scene->ConfigurePipelineState(shader->GetDrawListTag(), pipelineStateDescriptor);
 
             pipelineStateDescriptor.m_inputStreamLayout.SetTopology(AZ::RHI::PrimitiveTopology::TriangleStrip);
@@ -90,7 +90,7 @@ namespace AtomSampleViewer
 
         // Create the example's main pipeline object
         {
-            CreatePipeline("Shaders/streamingimageexample/imagemips.azshader", "ImageMipsSrg", m_shaderAsset, m_srgLayout, m_pipelineState, m_drawListTag);
+            CreatePipeline("Shaders/streamingimageexample/imagemips.azshader", "ImageMipsSrg", m_shaderAsset, m_srgLayout, m_pipelineState, m_drawListTag, m_scene);
 
             // Set the input indices
             m_imageInputIndex = m_srgLayout->FindShaderInputImageIndex(Name("m_texture"));
@@ -105,7 +105,7 @@ namespace AtomSampleViewer
         // Create the 3D pipeline object
         {
             CreatePipeline("Shaders/streamingimageexample/image3d.azshader", "ImageSrg", m_image3dShaderAsset, m_image3dSrgLayout, m_image3dPipelineState,
-                m_image3dDrawListTag);
+                m_image3dDrawListTag, m_scene);
         }
 
     }
@@ -466,7 +466,7 @@ namespace AtomSampleViewer
 
             // Submit draw packet...
             AZStd::unique_ptr<const RHI::DrawPacket> drawPacket(drawPacketBuilder.End());
-            m_dynamicDraw->AddDrawPacket(RPI::RPISystemInterface::Get()->GetDefaultScene().get(), AZStd::move(drawPacket));
+            m_dynamicDraw->AddDrawPacket(m_scene, AZStd::move(drawPacket));
         }
     }
 
@@ -489,7 +489,7 @@ namespace AtomSampleViewer
 
         // Submit draw packet...
         AZStd::unique_ptr<const RHI::DrawPacket> drawPacket(drawPacketBuilder.End());
-        m_dynamicDraw->AddDrawPacket(RPI::RPISystemInterface::Get()->GetDefaultScene().get(), AZStd::move(drawPacket));
+        m_dynamicDraw->AddDrawPacket(m_scene, AZStd::move(drawPacket));
     }
 
     void StreamingImageExampleComponent::DisplayStreamingProfileData()

+ 4 - 4
Gem/Code/Source/TonemappingExampleComponent.cpp

@@ -208,7 +208,8 @@ namespace AtomSampleViewer
             Data::Asset<AZ::RPI::ShaderAsset>& shaderAsset,
             RHI::Ptr<AZ::RHI::ShaderResourceGroupLayout>& srgLayout,
             RHI::ConstPtr<RHI::PipelineState>& pipelineState,
-            RHI::DrawListTag& drawListTag)
+            RHI::DrawListTag& drawListTag,
+            RPI::Scene* scene)
         {
             // Since the shader is using SV_VertexID and SV_InstanceID as VS input, we won't need to have vertex buffer.
             // Also, the index buffer is not needed with DrawLinear.
@@ -227,7 +228,6 @@ namespace AtomSampleViewer
             shaderVariant.ConfigurePipelineState(pipelineStateDescriptor);
             drawListTag = shader->GetDrawListTag();
 
-            RPI::Scene* scene = RPI::RPISystemInterface::Get()->GetDefaultScene().get();
             scene->ConfigurePipelineState(shader->GetDrawListTag(), pipelineStateDescriptor);
 
             pipelineStateDescriptor.m_inputStreamLayout.SetTopology(AZ::RHI::PrimitiveTopology::TriangleStrip);
@@ -245,7 +245,7 @@ namespace AtomSampleViewer
 
         // Create the example's main pipeline object
         {
-            CreatePipeline("Shaders/tonemappingexample/renderimage.azshader", "RenderImageSrg", m_shaderAsset, m_srgLayout, m_pipelineState, m_drawListTag);
+            CreatePipeline("Shaders/tonemappingexample/renderimage.azshader", "RenderImageSrg", m_shaderAsset, m_srgLayout, m_pipelineState, m_drawListTag, m_scene);
 
             // Set the input indices
             m_imageInputIndex = m_srgLayout->FindShaderInputImageIndex(Name("m_texture"));
@@ -288,7 +288,7 @@ namespace AtomSampleViewer
 
         // Submit draw packet
         AZStd::unique_ptr<const RHI::DrawPacket> drawPacket(drawPacketBuilder.End());
-        m_dynamicDraw->AddDrawPacket(RPI::RPISystemInterface::Get()->GetDefaultScene().get(), AZStd::move(drawPacket));
+        m_dynamicDraw->AddDrawPacket(m_scene, AZStd::move(drawPacket));
     }
 
     void TonemappingExampleComponent::UpdateCapturePassHierarchy()

+ 1 - 1
Gem/Code/Source/TransparencyExampleComponent.cpp

@@ -173,7 +173,7 @@ namespace AtomSampleViewer
         AZ::Debug::ArcBallControllerRequestBus::Event(GetCameraEntityId(), &AZ::Debug::ArcBallControllerRequestBus::Events::SetPitch, DefaultCameraPitch);
 
         // Lighting
-        m_defaultIbl.Init(AZ::RPI::RPISystemInterface::Get()->GetDefaultScene().get());
+        m_defaultIbl.Init(m_scene);
         // Model
         m_modelAsset = AZ::RPI::AssetUtils::GetAssetByProductPath<AZ::RPI::ModelAsset>(MeshPath, AZ::RPI::AssetUtils::TraceLevel::Assert);
         // Material