Ver código fonte

Merge pull request #124 from aws-lumberyard-dev/Atom/dmcdiar/ATOM-5702

[ATOM-5702] MSAA sample is missing lighting when viewing the non-MSAA mode
dmcdiarmid-ly 4 anos atrás
pai
commit
baaae2ab58

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

@@ -367,7 +367,7 @@ namespace AtomSampleViewer
             m_colorSpaceIndex.Reset();
             m_colorSpaceIndex.Reset();
         }
         }
 
 
-        m_drawImage.m_srg = RPI::ShaderResourceGroup::Create(m_shaderAsset, AZ::RPI::DefaultSupervariantIndex, m_srgLayout->GetName());
+        m_drawImage.m_srg = RPI::ShaderResourceGroup::Create(m_shaderAsset, m_srgLayout->GetName());
         m_drawImage.m_wasStreamed = false;
         m_drawImage.m_wasStreamed = false;
 
 
         // Set the image to occupy the full screen.
         // Set the image to occupy the full screen.

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

@@ -284,4 +284,9 @@ namespace AtomSampleViewer
             });
             });
     }
     }
 
 
+    void CommonSampleComponentBase::ResetScene()
+    {
+        m_meshFeatureProcessor = nullptr;
+    }
+
 } // namespace AtomSampleViewer
 } // namespace AtomSampleViewer

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

@@ -62,6 +62,9 @@ namespace AtomSampleViewer
         //! Clear all lighting presets.
         //! Clear all lighting presets.
         void ClearLightingPresets();
         void ClearLightingPresets();
 
 
+        //! Reset internal scene related data
+        void ResetScene();
+
         //! Apply lighting presets to the scene.
         //! Apply lighting presets to the scene.
         //! Derived samples can override this function to have custom behaviors.
         //! Derived samples can override this function to have custom behaviors.
         virtual void OnLightingPresetSelected(const AZ::Render::LightingPreset& preset, bool useAltSkybox);
         virtual void OnLightingPresetSelected(const AZ::Render::LightingPreset& preset, bool useAltSkybox);

+ 75 - 81
Gem/Code/Source/MSAA_RPI_ExampleComponent.cpp

@@ -17,10 +17,12 @@
 
 
 #include <Atom/RPI.Public/View.h>
 #include <Atom/RPI.Public/View.h>
 #include <Atom/RPI.Public/Image/StreamingImage.h>
 #include <Atom/RPI.Public/Image/StreamingImage.h>
+#include <Atom/RPI.Public/Shader/ShaderSystemInterface.h>
 
 
 #include <Atom/RPI.Reflect/Asset/AssetUtils.h>
 #include <Atom/RPI.Reflect/Asset/AssetUtils.h>
 #include <Atom/RPI.Reflect/Model/ModelAsset.h>
 #include <Atom/RPI.Reflect/Model/ModelAsset.h>
 #include <Atom/RPI.Reflect/Material/MaterialAsset.h>
 #include <Atom/RPI.Reflect/Material/MaterialAsset.h>
+#include <Atom/RPI.Reflect/Shader/ShaderCommonTypes.h>
 
 
 #include <Utils/Utils.h>
 #include <Utils/Utils.h>
 
 
@@ -34,23 +36,6 @@
 
 
 namespace AtomSampleViewer
 namespace AtomSampleViewer
 {
 {
-    static const char* GetPipelineName(int numSamples)
-    {
-        switch (numSamples)
-        {
-        case 1:
-            return "No_MSAA_RPI_Pipeline";
-        case 2:
-            return "MSAA_2x_RPI_Pipeline";
-        case 4:
-            return "MSAA_4x_RPI_Pipeline";
-        case 8:
-            return "MSAA_8x_RPI_Pipeline";
-        }
-        AZ_Warning("MSAA_RPI_ExampleComponent", false, "Unsupported number of samples, defaulting to 1");
-        return "No_MSAA_RPI_Pipeline";
-    }
-
     void MSAA_RPI_ExampleComponent::Reflect(AZ::ReflectContext* context)
     void MSAA_RPI_ExampleComponent::Reflect(AZ::ReflectContext* context)
     {
     {
         if (AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
         if (AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
@@ -67,75 +52,94 @@ namespace AtomSampleViewer
         AZ::TickBus::Handler::BusConnect();
         AZ::TickBus::Handler::BusConnect();
         ExampleComponentRequestBus::Handler::BusConnect(GetEntityId());
         ExampleComponentRequestBus::Handler::BusConnect(GetEntityId());
         AZ::Render::Bootstrap::DefaultWindowNotificationBus::Handler::BusConnect();
         AZ::Render::Bootstrap::DefaultWindowNotificationBus::Handler::BusConnect();
-        ActivateMSAAPipeline();
-        EnableArcBallCameraController();
+
+        // save the current render pipeline
+        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
+        m_originalPipeline = defaultScene->GetDefaultRenderPipeline();
+        defaultScene->RemoveRenderPipeline(m_originalPipeline->GetId());
+
+        // switch to the sample render pipeline
+        ChangeRenderPipeline();
+  
+        // set ArcBall camera controller
+        AZ::Debug::CameraControllerRequestBus::Event(GetCameraEntityId(), &AZ::Debug::CameraControllerRequestBus::Events::Enable,
+            azrtti_typeid<AZ::Debug::ArcBallControllerComponent>());
+    
         ActivateModel();
         ActivateModel();
         ActivateIbl();
         ActivateIbl();
     }
     }
 
 
     void MSAA_RPI_ExampleComponent::Deactivate()
     void MSAA_RPI_ExampleComponent::Deactivate()
     {
     {
-        DeactivateIbl();
-        DeactivateModel();
-        DisableArcBallCameraController();
-        DeactivateMSAAPipeline();
+        GetMeshFeatureProcessor()->ReleaseMesh(m_meshHandle);
+        AZ::Debug::CameraControllerRequestBus::Event(GetCameraEntityId(), &AZ::Debug::CameraControllerRequestBus::Events::Disable);
+        m_defaultIbl.Reset();
+
+        // clear the non-MSAA pipeline and the RPI scene
+        AZ::RPI::ShaderSystemInterface::Get()->SetSupervariantName(AZ::Name(""));
+        SampleComponentManagerRequestBus::Broadcast(&SampleComponentManagerRequests::ClearRPIScene);
+
         AZ::Render::Bootstrap::DefaultWindowNotificationBus::Handler::BusDisconnect();
         AZ::Render::Bootstrap::DefaultWindowNotificationBus::Handler::BusDisconnect();
         ExampleComponentRequestBus::Handler::BusDisconnect();
         ExampleComponentRequestBus::Handler::BusDisconnect();
         AZ::TickBus::Handler::BusDisconnect();
         AZ::TickBus::Handler::BusDisconnect();
         m_imguiSidebar.Deactivate();
         m_imguiSidebar.Deactivate();
     }
     }
 
 
-    void MSAA_RPI_ExampleComponent::EnableArcBallCameraController()
-    {
-        AZ::Debug::CameraControllerRequestBus::Event(GetCameraEntityId(), &AZ::Debug::CameraControllerRequestBus::Events::Enable,
-            azrtti_typeid<AZ::Debug::ArcBallControllerComponent>());
-    }
-
-    void MSAA_RPI_ExampleComponent::DisableArcBallCameraController()
+    void MSAA_RPI_ExampleComponent::ChangeRenderPipeline()
     {
     {
-        AZ::Debug::CameraControllerRequestBus::Event(GetCameraEntityId(), &AZ::Debug::CameraControllerRequestBus::Events::Disable);
-    }
-
-    void MSAA_RPI_ExampleComponent::OnModelReady(AZ::Data::Instance<AZ::RPI::Model> model)
-    {
-        AZ::Data::Asset<AZ::RPI::ModelAsset> modelAsset = model->GetModelAsset();
-        m_meshChangedHandler.Disconnect();
-        ScriptRunnerRequestBus::Broadcast(&ScriptRunnerRequests::ResumeScript);
-    }
-
-    void MSAA_RPI_ExampleComponent::ActivateMSAAPipeline()
-    {
-        CreateMSAAPipeline(m_numSamples);
-
         AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
         AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        m_originalPipeline = defaultScene->GetDefaultRenderPipeline();
-        defaultScene->AddRenderPipeline(m_msaaPipeline);
-        m_msaaPipeline->SetDefaultView(m_originalPipeline->GetDefaultView());
-        defaultScene->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(AZ::RPI::PassHierarchyFilter({ m_msaaPipeline->GetId().GetCStr(), "ImGuiPass" }));
-    }
 
 
-    void MSAA_RPI_ExampleComponent::DeactivateMSAAPipeline()
-    {
         m_imguiScope = {}; // restores previous ImGui context.
         m_imguiScope = {}; // restores previous ImGui context.
 
 
-        AZ::RPI::ScenePtr defaultScene = AZ::RPI::RPISystemInterface::Get()->GetDefaultScene();
-        defaultScene->AddRenderPipeline(m_originalPipeline);
-        AZ::RPI::RenderPipelineDescriptor pipelineDesc;
-        defaultScene->RemoveRenderPipeline(m_msaaPipeline->GetId());
-        DestroyMSAAPipeline();
-    }
-
-    void MSAA_RPI_ExampleComponent::CreateMSAAPipeline(int numSamples)
-    {
+        // remove currently running sample pipeline, if any
+        if (m_samplePipeline)
+        {
+            defaultScene->RemoveRenderPipeline(m_samplePipeline->GetId());
+            m_samplePipeline = nullptr;
+        }
+        
+        bool isNonMsaaPipeline = (m_numSamples == 1);
+        
+        // if we are changing between the MSAA and non-MSAA pipelines we need to force a reset on the RPI scene.  This is
+        // necessary to re-initialize all of the feature processor shaders and Srgs
+        if (isNonMsaaPipeline != m_isNonMsaaPipeline)
+        {      
+            // set the NoMsaa flag based on the pipeline type and reset the RPI scene
+            const char* supervariantName = isNonMsaaPipeline ? AZ::RPI::NoMsaaSupervariantName : "";
+            AZ::RPI::ShaderSystemInterface::Get()->SetSupervariantName(AZ::Name(supervariantName));
+            SampleComponentManagerRequestBus::Broadcast(&SampleComponentManagerRequests::ResetRPIScene);
+
+            // 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());
+
+            // scene IBL is cleared after the reset, re-activate it
+            ActivateIbl();
+
+            m_isNonMsaaPipeline = isNonMsaaPipeline;          
+        }
+        
+        // create the new sample pipeline
         AZ::RPI::RenderPipelineDescriptor pipelineDesc;
         AZ::RPI::RenderPipelineDescriptor pipelineDesc;
         pipelineDesc.m_mainViewTagName = "MainCamera";
         pipelineDesc.m_mainViewTagName = "MainCamera";
         pipelineDesc.m_name = "MSAA";
         pipelineDesc.m_name = "MSAA";
-        pipelineDesc.m_rootPassTemplate = GetPipelineName(numSamples);
+        pipelineDesc.m_rootPassTemplate = "MainPipeline";
+        pipelineDesc.m_renderSettings.m_multisampleState.m_samples = m_numSamples;
+        m_samplePipeline = AZ::RPI::RenderPipeline::CreateRenderPipelineForWindow(pipelineDesc, *m_windowContext);
+
+        // add the sample pipeline to the scene
+        defaultScene->AddRenderPipeline(m_samplePipeline);
+        m_samplePipeline->SetDefaultView(m_originalPipeline->GetDefaultView());
+        defaultScene->SetDefaultRenderPipeline(m_samplePipeline->GetId());
 
 
-        m_msaaPipeline = AZ::RPI::RenderPipeline::CreateRenderPipelineForWindow(pipelineDesc, *m_windowContext);
+        // create an ImGuiActiveContextScope to ensure the ImGui context on the new pipeline's ImGui pass is activated.
+        m_imguiScope = AZ::Render::ImGuiActiveContextScope::FromPass(AZ::RPI::PassHierarchyFilter({ m_samplePipeline->GetId().GetCStr(), "ImGuiPass" }));
     }
     }
 
 
     void MSAA_RPI_ExampleComponent::ResetCamera()
     void MSAA_RPI_ExampleComponent::ResetCamera()
@@ -155,11 +159,6 @@ namespace AtomSampleViewer
         AZ::Render::Bootstrap::DefaultWindowBus::BroadcastResult(m_windowContext, &AZ::Render::Bootstrap::DefaultWindowBus::Events::GetDefaultWindowContext);
         AZ::Render::Bootstrap::DefaultWindowBus::BroadcastResult(m_windowContext, &AZ::Render::Bootstrap::DefaultWindowBus::Events::GetDefaultWindowContext);
     }
     }
 
 
-    void MSAA_RPI_ExampleComponent::DestroyMSAAPipeline()
-    {
-        m_msaaPipeline = nullptr;
-    }
-
     AZ::Data::Asset<AZ::RPI::MaterialAsset> MSAA_RPI_ExampleComponent::GetMaterialAsset()
     AZ::Data::Asset<AZ::RPI::MaterialAsset> MSAA_RPI_ExampleComponent::GetMaterialAsset()
     {
     {
         AZ::RPI::AssetUtils::TraceLevel traceLevel = AZ::RPI::AssetUtils::TraceLevel::Assert;
         AZ::RPI::AssetUtils::TraceLevel traceLevel = AZ::RPI::AssetUtils::TraceLevel::Assert;
@@ -183,7 +182,6 @@ namespace AtomSampleViewer
         return AZ::RPI::AssetUtils::GetAssetByProductPath<AZ::RPI::ModelAsset>("objects/cylinder.azmodel", traceLevel);
         return AZ::RPI::AssetUtils::GetAssetByProductPath<AZ::RPI::ModelAsset>("objects/cylinder.azmodel", traceLevel);
     }
     }
 
 
-
     void MSAA_RPI_ExampleComponent::ActivateModel()
     void MSAA_RPI_ExampleComponent::ActivateModel()
     {
     {
         m_meshHandle = GetMeshFeatureProcessor()->AcquireMesh(GetModelAsset(), AZ::RPI::Material::FindOrCreate(GetMaterialAsset()));
         m_meshHandle = GetMeshFeatureProcessor()->AcquireMesh(GetModelAsset(), AZ::RPI::Material::FindOrCreate(GetMaterialAsset()));
@@ -201,9 +199,11 @@ namespace AtomSampleViewer
         }
         }
     }
     }
 
 
-    void MSAA_RPI_ExampleComponent::DeactivateModel()
+    void MSAA_RPI_ExampleComponent::OnModelReady(AZ::Data::Instance<AZ::RPI::Model> model)
     {
     {
-        GetMeshFeatureProcessor()->ReleaseMesh(m_meshHandle);
+        AZ::Data::Asset<AZ::RPI::ModelAsset> modelAsset = model->GetModelAsset();
+        m_meshChangedHandler.Disconnect();
+        ScriptRunnerRequestBus::Broadcast(&ScriptRunnerRequests::ResumeScript);
     }
     }
 
 
     void MSAA_RPI_ExampleComponent::ActivateIbl()
     void MSAA_RPI_ExampleComponent::ActivateIbl()
@@ -214,11 +214,6 @@ namespace AtomSampleViewer
         m_defaultIbl.SetExposure(-0.5f);
         m_defaultIbl.SetExposure(-0.5f);
     }
     }
 
 
-    void MSAA_RPI_ExampleComponent::DeactivateIbl()
-    {
-        m_defaultIbl.Reset();
-    }
-
     void MSAA_RPI_ExampleComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint timePoint)
     void MSAA_RPI_ExampleComponent::OnTick([[maybe_unused]] float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint timePoint)
     {
     {
         DrawSidebar();
         DrawSidebar();
@@ -239,9 +234,8 @@ namespace AtomSampleViewer
         if (refresh)
         if (refresh)
         {
         {
             // Note that the model's have some multisample information embedded into their pipeline state, so delete and recreate the model
             // Note that the model's have some multisample information embedded into their pipeline state, so delete and recreate the model
-            DeactivateModel();
-            DeactivateMSAAPipeline();
-            ActivateMSAAPipeline();
+            GetMeshFeatureProcessor()->ReleaseMesh(m_meshHandle);
+            ChangeRenderPipeline();
             ActivateModel();
             ActivateModel();
         }
         }
     }
     }

+ 21 - 24
Gem/Code/Source/MSAA_RPI_ExampleComponent.h

@@ -40,43 +40,32 @@ namespace AtomSampleViewer
         static void Reflect(AZ::ReflectContext* context);
         static void Reflect(AZ::ReflectContext* context);
 
 
         void Activate() override;
         void Activate() override;
-
-
         void Deactivate() override;
         void Deactivate() override;
 
 
     private:
     private:
 
 
-        void ActivateMSAAPipeline();
-        void DeactivateMSAAPipeline();
-
-        void ActivateIbl();
-        void DeactivateIbl();
-
-        void CreateMSAAPipeline(int numSamples);
-        void DestroyMSAAPipeline();
+        // DefaultWindowNotificationBus::Handler
+        void DefaultWindowCreated() override;
 
 
-        void ActivateModel();
-        void DeactivateModel();
-        
         // AZ::TickBus::Handler
         // AZ::TickBus::Handler
         void OnTick(float deltaTime, AZ::ScriptTimePoint timePoint) override;
         void OnTick(float deltaTime, AZ::ScriptTimePoint timePoint) override;
 
 
         // ExampleComponentRequestBus::Handler
         // ExampleComponentRequestBus::Handler
         void ResetCamera() override;
         void ResetCamera() override;
 
 
-        void DefaultWindowCreated() override;
-
-        void EnableArcBallCameraController();
-        void DisableArcBallCameraController();
-
+        // helper functions
+        void ChangeRenderPipeline();
+        void ActivateIbl();
+        void ActivateModel();
         void OnModelReady(AZ::Data::Instance<AZ::RPI::Model> model);
         void OnModelReady(AZ::Data::Instance<AZ::RPI::Model> model);
         AZ::Data::Asset<AZ::RPI::MaterialAsset> GetMaterialAsset();
         AZ::Data::Asset<AZ::RPI::MaterialAsset> GetMaterialAsset();
         AZ::Data::Asset<AZ::RPI::ModelAsset> GetModelAsset();
         AZ::Data::Asset<AZ::RPI::ModelAsset> GetModelAsset();
         void DrawSidebar();
         void DrawSidebar();
-
         bool DrawSidebarModeChooser(bool refresh);
         bool DrawSidebarModeChooser(bool refresh);
         bool DrawSideBarModelChooser(bool refresh);
         bool DrawSideBarModelChooser(bool refresh);
 
 
+        // sample mesh
+        int m_modelType = 0;
         AZ::Render::MeshFeatureProcessorInterface::MeshHandle m_meshHandle;
         AZ::Render::MeshFeatureProcessorInterface::MeshHandle m_meshHandle;
         AZ::Render::MeshFeatureProcessorInterface::ModelChangedEvent::Handler m_meshChangedHandler
         AZ::Render::MeshFeatureProcessorInterface::ModelChangedEvent::Handler m_meshChangedHandler
         {
         {
@@ -85,15 +74,23 @@ namespace AtomSampleViewer
                 OnModelReady(model);
                 OnModelReady(model);
             }
             }
         };
         };
-        
-        AZ::RPI::RenderPipelinePtr m_msaaPipeline;
+
+        // original render pipeline when the sample was started
         AZ::RPI::RenderPipelinePtr m_originalPipeline;
         AZ::RPI::RenderPipelinePtr m_originalPipeline;
+
+        // sample render pipeline, can be MSAA 2x/4x/8x or non-MSAA
+        AZ::RPI::RenderPipelinePtr m_samplePipeline;
+
+        // number of MSAA samples in the pipeline, controlled by the user
+        int m_numSamples = 1;
+
+        // flag indicating if the current pipeline is a non-MSAA pipeline
+        bool m_isNonMsaaPipeline = false;
+
+        // other state
         AZStd::shared_ptr<AZ::RPI::WindowContext> m_windowContext;
         AZStd::shared_ptr<AZ::RPI::WindowContext> m_windowContext;
         Utils::DefaultIBL m_defaultIbl;
         Utils::DefaultIBL m_defaultIbl;
         ImGuiSidebar m_imguiSidebar;
         ImGuiSidebar m_imguiSidebar;
-        int m_numSamples = 1;
-        int m_modelType = 0;
-
         AZ::Render::ImGuiActiveContextScope m_imguiScope;
         AZ::Render::ImGuiActiveContextScope m_imguiScope;
     };
     };
 } // namespace AtomSampleViewer
 } // namespace AtomSampleViewer

+ 1 - 1
Gem/Code/Source/Passes/RayTracingAmbientOcclusionPass.cpp

@@ -89,7 +89,7 @@ namespace AZ
             AZ_Assert(m_globalPipelineState, "Failed to acquire ray tracing global pipeline state");
             AZ_Assert(m_globalPipelineState, "Failed to acquire ray tracing global pipeline state");
 
 
             //Get pass srg
             //Get pass srg
-            m_shaderResourceGroup = RPI::ShaderResourceGroup::Create(m_rayGenerationShader->GetAsset(), AZ::RPI::DefaultSupervariantIndex, Name { "RayTracingGlobalSrg" });
+            m_shaderResourceGroup = RPI::ShaderResourceGroup::Create(m_rayGenerationShader->GetAsset(), Name { "RayTracingGlobalSrg" });
             AZ_Assert(m_shaderResourceGroup, "[RayTracingAmbientOcclusionPass '%s']: Failed to create SRG from shader asset '%s'",
             AZ_Assert(m_shaderResourceGroup, "[RayTracingAmbientOcclusionPass '%s']: Failed to create SRG from shader asset '%s'",
                 GetPathName().GetCStr(), rayGenerationShaderFilePath);
                 GetPathName().GetCStr(), rayGenerationShaderFilePath);
                         
                         

+ 1 - 1
Gem/Code/Source/RHI/BasicRHIComponent.cpp

@@ -462,7 +462,7 @@ namespace AtomSampleViewer
 
 
     AZ::Data::Instance<AZ::RPI::ShaderResourceGroup> BasicRHIComponent::CreateShaderResourceGroup(AZ::Data::Instance<AZ::RPI::Shader> shader, const char* shaderResourceGroupId, [[maybe_unused]] const char* sampleName)
     AZ::Data::Instance<AZ::RPI::ShaderResourceGroup> BasicRHIComponent::CreateShaderResourceGroup(AZ::Data::Instance<AZ::RPI::Shader> shader, const char* shaderResourceGroupId, [[maybe_unused]] const char* sampleName)
     {
     {
-        auto srg = AZ::RPI::ShaderResourceGroup::Create(shader->GetAsset(), AZ::RPI::DefaultSupervariantIndex, AZ::Name { shaderResourceGroupId });
+        auto srg = AZ::RPI::ShaderResourceGroup::Create(shader->GetAsset(), AZ::Name { shaderResourceGroupId });
         if (!srg)
         if (!srg)
         {
         {
             AZ_Error(sampleName, false, "Failed to create shader resource group");
             AZ_Error(sampleName, false, "Failed to create shader resource group");

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

@@ -143,7 +143,7 @@ namespace AtomSampleViewer
             m_rootConstantData = RHI::ConstantsData(rootConstantsLayout);
             m_rootConstantData = RHI::ConstantsData(rootConstantsLayout);
 
 
             // Load shader resource group asset
             // Load shader resource group asset
-            m_srg = AZ::RPI::ShaderResourceGroup::Create(shaderAsset, AZ::RPI::DefaultSupervariantIndex, Name { "MaterialGroupSrg" });
+            m_srg = AZ::RPI::ShaderResourceGroup::Create(shaderAsset, Name { "MaterialGroupSrg" });
             if (!m_srg)
             if (!m_srg)
             {
             {
                 AZ_Error("Render", false, "Failed to create shader resource group");
                 AZ_Error("Render", false, "Failed to create shader resource group");

+ 11 - 0
Gem/Code/Source/SampleComponentManager.cpp

@@ -1153,6 +1153,17 @@ namespace AtomSampleViewer
         }
         }
     }
     }
 
 
+    void SampleComponentManager::ResetRPIScene()
+    {
+        ReleaseRPIScene();
+        SwitchSceneForRPISample();
+    }
+
+    void SampleComponentManager::ClearRPIScene()
+    {
+        ReleaseRPIScene();
+    }
+
     void SampleComponentManager::ShowFrameCaptureDialog()
     void SampleComponentManager::ShowFrameCaptureDialog()
     {
     {
         static bool requestCaptureOnNextFrame = false;
         static bool requestCaptureOnNextFrame = false;

+ 2 - 0
Gem/Code/Source/SampleComponentManager.h

@@ -149,6 +149,8 @@ namespace AtomSampleViewer
         void RequestFrameCapture(const AZStd::string& filePath, bool hideImGui) override;
         void RequestFrameCapture(const AZStd::string& filePath, bool hideImGui) override;
         bool IsFrameCapturePending() override;
         bool IsFrameCapturePending() override;
         void RunMainTestSuite(const AZStd::string& suiteFilePath, bool exitOnTestEnd, int randomSeed) override;
         void RunMainTestSuite(const AZStd::string& suiteFilePath, bool exitOnTestEnd, int randomSeed) override;
+        void ResetRPIScene() override;
+        void ClearRPIScene() override;
 
 
         // FrameCaptureNotificationBus overrides...
         // FrameCaptureNotificationBus overrides...
         void OnCaptureFinished(AZ::Render::FrameCaptureResult result, const AZStd::string& info) override;
         void OnCaptureFinished(AZ::Render::FrameCaptureResult result, const AZStd::string& info) override;

+ 6 - 0
Gem/Code/Source/SampleComponentManagerBus.h

@@ -42,6 +42,12 @@ namespace AtomSampleViewer
         //! @param exitOnTestEnd if true, exits AtomSampleViewerStandalone when the script finishes, used in jenkins
         //! @param exitOnTestEnd if true, exits AtomSampleViewerStandalone when the script finishes, used in jenkins
         //! @param randomSeed the seed for the random generator, frequently used inside lua tests to shuffle the order of the test execution
         //! @param randomSeed the seed for the random generator, frequently used inside lua tests to shuffle the order of the test execution
         virtual void RunMainTestSuite(const AZStd::string& suiteFilePath, bool exitOnTestEnd, int randomSeed) = 0;
         virtual void RunMainTestSuite(const AZStd::string& suiteFilePath, bool exitOnTestEnd, int randomSeed) = 0;
+
+        //! Reset the RPI scene while keeping the current sample running
+        virtual void ResetRPIScene() = 0;
+
+        //! Clear the RPI scene
+        virtual void ClearRPIScene() = 0;
     };
     };
     using SampleComponentManagerRequestBus = AZ::EBus<SampleComponentManagerRequests>;
     using SampleComponentManagerRequestBus = AZ::EBus<SampleComponentManagerRequests>;
 
 

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

@@ -103,7 +103,7 @@ namespace AtomSampleViewer
             m_residentMipInputIndex = m_srgLayout->FindShaderInputConstantIndex(Name("m_residentMip"));
             m_residentMipInputIndex = m_srgLayout->FindShaderInputConstantIndex(Name("m_residentMip"));
 
 
             // Create an SRG instance for the hot reloaded image
             // Create an SRG instance for the hot reloaded image
-            m_imageHotReload.m_srg = RPI::ShaderResourceGroup::Create(m_shaderAsset, AZ::RPI::DefaultSupervariantIndex, m_srgLayout->GetName());
+            m_imageHotReload.m_srg = RPI::ShaderResourceGroup::Create(m_shaderAsset, m_srgLayout->GetName());
         }
         }
 
 
         // Create the 3D pipeline object
         // Create the 3D pipeline object
@@ -601,7 +601,7 @@ namespace AtomSampleViewer
             m_numImageAssetQueued++;
             m_numImageAssetQueued++;
             ImageToDraw img;
             ImageToDraw img;
             img.m_asset = AZ::Data::AssetManager::Instance().GetAsset<AZ::RPI::StreamingImageAsset>(imageAssetId, AZ::Data::AssetLoadBehavior::PreLoad);
             img.m_asset = AZ::Data::AssetManager::Instance().GetAsset<AZ::RPI::StreamingImageAsset>(imageAssetId, AZ::Data::AssetLoadBehavior::PreLoad);
-            img.m_srg = RPI::ShaderResourceGroup::Create(m_shaderAsset, AZ::RPI::DefaultSupervariantIndex, m_srgLayout->GetName());
+            img.m_srg = RPI::ShaderResourceGroup::Create(m_shaderAsset, m_srgLayout->GetName());
             img.m_assetId = imageAssetId;
             img.m_assetId = imageAssetId;
             m_images.push_back(img);
             m_images.push_back(img);
 
 
@@ -642,7 +642,7 @@ namespace AtomSampleViewer
 
 
             // Create the srg
             // Create the srg
             Image3dToDraw image3d;
             Image3dToDraw image3d;
-            image3d.m_srg = RPI::ShaderResourceGroup::Create(m_image3dShaderAsset, AZ::RPI::DefaultSupervariantIndex, m_image3dSrgLayout->GetName());
+            image3d.m_srg = RPI::ShaderResourceGroup::Create(m_image3dShaderAsset, m_image3dSrgLayout->GetName());
             image3d.m_srg->SetImage(image3DInputIndex, image.get(), 0);
             image3d.m_srg->SetImage(image3DInputIndex, image.get(), 0);
             image3d.m_sliceCount = layout.m_size.m_depth;
             image3d.m_sliceCount = layout.m_size.m_depth;
 
 
@@ -687,7 +687,7 @@ namespace AtomSampleViewer
 
 
             // Create the srg
             // Create the srg
             Image3dToDraw image3d;
             Image3dToDraw image3d;
-            image3d.m_srg = RPI::ShaderResourceGroup::Create(m_image3dShaderAsset, AZ::RPI::DefaultSupervariantIndex, m_image3dSrgLayout->GetName());
+            image3d.m_srg = RPI::ShaderResourceGroup::Create(m_image3dShaderAsset, m_image3dSrgLayout->GetName());
             image3d.m_srg->SetImage(image3DInputIndex, image.get(), 0);
             image3d.m_srg->SetImage(image3DInputIndex, image.get(), 0);
             image3d.m_sliceCount = depth;
             image3d.m_sliceCount = depth;
 
 

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

@@ -258,7 +258,7 @@ namespace AtomSampleViewer
             m_colorSpaceIndex = m_srgLayout->FindShaderInputConstantIndex(Name("m_colorSpace"));
             m_colorSpaceIndex = m_srgLayout->FindShaderInputConstantIndex(Name("m_colorSpace"));
         }
         }
 
 
-        m_drawImage.m_srg = RPI::ShaderResourceGroup::Create(m_shaderAsset, AZ::RPI::DefaultSupervariantIndex, m_srgLayout->GetName());
+        m_drawImage.m_srg = RPI::ShaderResourceGroup::Create(m_shaderAsset, m_srgLayout->GetName());
         m_drawImage.m_wasStreamed = false;
         m_drawImage.m_wasStreamed = false;
 
 
         // Set the image to occupy the full screen.
         // Set the image to occupy the full screen.

+ 0 - 80
Passes/MSAA_2x_RPI_Pipeline.pass

@@ -1,80 +0,0 @@
-// Create the Depth Pass in this .pass file with a specific MSAA value, then pass it into MSAA_Core_Pipeline which contains the rest of the pipeline (forward pass, UI, etc)
-{
-    "Type": "JsonSerialization",
-    "Version": 1,
-    "ClassName": "PassAsset",
-    "ClassData": {
-        "PassTemplate": {
-            "Name": "MSAA_2x_RPI_Pipeline",
-            "PassClass": "ParentPass",
-            "Slots": [
-                {
-                    "Name": "SwapChainOutput",
-                    "SlotType": "InputOutput"
-                }
-            ],
-            "PassRequests": [
-                {
-                    "Name": "MorphTargetPass",
-                    "TemplateName": "MorphTargetPassTemplate"
-                },
-                {
-                    "Name": "SkinningPass",
-                    "TemplateName": "SkinningPassTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshOutputStream",
-                            "AttachmentRef": {
-                                "Pass": "MorphTargetPass",
-                                "Attachment": "MorphTargetDeltaOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "DepthMSAAPass",
-                    "TemplateName": "DepthMSAA2xPassTemplate",
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "depth",
-                        "PipelineViewTag": "MainCamera"
-                    },
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshes",
-                            "AttachmentRef": {
-                                "Pass": "SkinningPass",
-                                "Attachment": "SkinnedMeshOutputStream"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "MSAA_Core_Pipeline",
-                    "TemplateName": "MSAA_RPI_Pipeline_Core",
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "depth",
-                        "PipelineViewTag": "MainCamera"
-                    },
-                    "Connections": [
-                        {
-                            "LocalSlot": "Depth",
-                            "AttachmentRef": {
-                                "Pass": "DepthMSAAPass",
-                                "Attachment": "Output"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SwapChainOutput",
-                            "AttachmentRef": {
-                                "Pass": "Parent",
-                                "Attachment": "SwapChainOutput"
-                            }
-                        }
-                    ]
-                }
-            ]
-        }
-    }
-}

+ 0 - 80
Passes/MSAA_4x_RPI_Pipeline.pass

@@ -1,80 +0,0 @@
-// Create the Depth Pass in this .pass file with a specific MSAA value, then pass it into MSAA_Core_Pipeline which contains the rest of the pipeline (forward pass, UI, etc)
-{
-    "Type": "JsonSerialization",
-    "Version": 1,
-    "ClassName": "PassAsset",
-    "ClassData": {
-        "PassTemplate": {
-            "Name": "MSAA_4x_RPI_Pipeline",
-            "PassClass": "ParentPass",
-            "Slots": [
-                {
-                    "Name": "SwapChainOutput",
-                    "SlotType": "InputOutput"
-                }
-            ],
-            "PassRequests": [
-                {
-                    "Name": "MorphTargetPass",
-                    "TemplateName": "MorphTargetPassTemplate"
-                },
-                {
-                    "Name": "SkinningPass",
-                    "TemplateName": "SkinningPassTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshOutputStream",
-                            "AttachmentRef": {
-                                "Pass": "MorphTargetPass",
-                                "Attachment": "MorphTargetDeltaOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "DepthMSAAPass",
-                    "TemplateName": "DepthMSAA4xPassTemplate",
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "depth",
-                        "PipelineViewTag": "MainCamera"
-                    },
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshes",
-                            "AttachmentRef": {
-                                "Pass": "SkinningPass",
-                                "Attachment": "SkinnedMeshOutputStream"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "MSAA_Core_Pipeline",
-                    "TemplateName": "MSAA_RPI_Pipeline_Core",
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "depth",
-                        "PipelineViewTag": "MainCamera"
-                    },
-                    "Connections": [
-                        {
-                            "LocalSlot": "Depth",
-                            "AttachmentRef": {
-                                "Pass": "DepthMSAAPass",
-                                "Attachment": "Output"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SwapChainOutput",
-                            "AttachmentRef": {
-                                "Pass": "Parent",
-                                "Attachment": "SwapChainOutput"
-                            }
-                        }
-                    ]
-                }
-            ]
-        }
-    }
-}

+ 0 - 80
Passes/MSAA_8x_RPI_Pipeline.pass

@@ -1,80 +0,0 @@
-// Create the Depth Pass in this .pass file with a specific MSAA value, then pass it into MSAA_Core_Pipeline which contains the rest of the pipeline (forward pass, UI, etc)
-{
-    "Type": "JsonSerialization",
-    "Version": 1,
-    "ClassName": "PassAsset",
-    "ClassData": {
-        "PassTemplate": {
-            "Name": "MSAA_8x_RPI_Pipeline",
-            "PassClass": "ParentPass",
-            "Slots": [
-                {
-                    "Name": "SwapChainOutput",
-                    "SlotType": "InputOutput"
-                }
-            ],
-            "PassRequests": [
-                {
-                    "Name": "MorphTargetPass",
-                    "TemplateName": "MorphTargetPassTemplate"
-                },
-                {
-                    "Name": "SkinningPass",
-                    "TemplateName": "SkinningPassTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshOutputStream",
-                            "AttachmentRef": {
-                                "Pass": "MorphTargetPass",
-                                "Attachment": "MorphTargetDeltaOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "DepthMSAAPass",
-                    "TemplateName": "DepthMSAA8xPassTemplate",
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "depth",
-                        "PipelineViewTag": "MainCamera"
-                    },
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshes",
-                            "AttachmentRef": {
-                                "Pass": "SkinningPass",
-                                "Attachment": "SkinnedMeshOutputStream"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "MSAA_Core_Pipeline",
-                    "TemplateName": "MSAA_RPI_Pipeline_Core",
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "depth",
-                        "PipelineViewTag": "MainCamera"
-                    },
-                    "Connections": [
-                        {
-                            "LocalSlot": "Depth",
-                            "AttachmentRef": {
-                                "Pass": "DepthMSAAPass",
-                                "Attachment": "Output"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SwapChainOutput",
-                            "AttachmentRef": {
-                                "Pass": "Parent",
-                                "Attachment": "SwapChainOutput"
-                            }
-                        }
-                    ]
-                }
-            ]
-        }
-    }
-}

+ 0 - 342
Passes/MSAA_RPI_Pipeline_Core.pass

@@ -1,342 +0,0 @@
-{
-    "Type": "JsonSerialization",
-    "Version": 1,
-    "ClassName": "PassAsset",
-    "ClassData": {
-        "PassTemplate": {
-            "Name": "MSAA_RPI_Pipeline_Core",
-            "PassClass": "ParentPass",
-            "Slots": [
-                {
-                    "Name": "Depth",
-                    "SlotType": "Input"
-                },
-                {
-                    "Name": "SwapChainOutput",
-                    "SlotType": "InputOutput"
-                }
-            ],
-            "PassRequests": [
-                {
-                    "Name": "LightCullingTilePrepareMSAAPass",
-                    "TemplateName": "LightCullingTilePrepareMSAATemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "Depth",
-                            "AttachmentRef": {
-                                "Pass": "Parent",
-                                "Attachment": "Depth"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "LightCullingPass",
-                    "TemplateName": "LightCullingTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "TileLightData",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingTilePrepareMSAAPass",
-                                "Attachment": "TileLightData"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "LightCullingRemapPass",
-                    "TemplateName": "LightCullingRemapTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "TileLightData",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingTilePrepareMSAAPass",
-                                "Attachment": "TileLightData"
-                            }
-                        },
-                        {
-                            "LocalSlot": "LightCount",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingPass",
-                                "Attachment": "LightCount"
-                            }
-                        },
-                        {
-                            "LocalSlot": "LightList",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingPass",
-                                "Attachment": "LightList"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "ProjectedShadowmapsPass",
-                    "TemplateName": "ProjectedShadowmapsTemplate",
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "shadow",
-                        "PipelineViewTag": "ProjectedShadowView"
-                    }
-                },
-                {
-                    "Name": "ForwardMSAAPass",
-                    "TemplateName": "ForwardMSAAPassTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "DepthStencilInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "Parent",
-                                "Attachment": "Depth"
-                            }
-                        },
-                        {
-                            "LocalSlot": "TileLightData",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingTilePrepareMSAAPass",
-                                "Attachment": "TileLightData"
-                            }
-                        },
-                        {
-                            "LocalSlot": "LightListRemapped",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingRemapPass",
-                                "Attachment": "LightListRemapped"
-                            }
-                        }
-                    ],
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "forward",
-                        "PipelineViewTag": "MainCamera",
-                        "PassSrgShaderAsset": {
-                            "FilePath": "Shaders/ForwardPassSrg.shader"
-                        }
-                    }
-                },
-                {
-                    "Name": "DiffuseGlobalIlluminationPass",
-                    "TemplateName": "DiffuseGlobalIlluminationPassTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "DiffuseInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardMSAAPass",
-                                "Attachment": "DiffuseOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "AlbedoInput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardMSAAPass",
-                                "Attachment": "AlbedoOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "NormalInput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardMSAAPass",
-                                "Attachment": "NormalOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "DepthStencilInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardMSAAPass",
-                                "Attachment": "DepthStencilInputOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "ReflectionsPass",
-                    "TemplateName": "ReflectionsParentPassTemplate",
-                    "Enabled": true,
-                    "Connections": [
-                        {
-                            "LocalSlot": "NormalInput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardMSAAPass",
-                                "Attachment": "NormalOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SpecularF0Input",
-                            "AttachmentRef": {
-                                "Pass": "ForwardMSAAPass",
-                                "Attachment": "SpecularF0Output"
-                            }
-                        },
-                        {
-                            "LocalSlot": "AlbedoInput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardMSAAPass",
-                                "Attachment": "AlbedoOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "DepthStencilInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardMSAAPass",
-                                "Attachment": "DepthStencilInputOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SpecularInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardMSAAPass",
-                                "Attachment": "SpecularOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "ReflectionCompositePass",
-                    "TemplateName": "ReflectionCompositePassTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "ReflectionInput",
-                            "AttachmentRef": {
-                                "Pass": "ReflectionsPass",
-                                "Attachment": "ReflectionOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SpecularInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ReflectionsPass",
-                                "Attachment": "SpecularInputOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "DepthStencilInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ReflectionsPass",
-                                "Attachment": "DepthStencilInputOutput"
-                            }
-                        }
-                    ],
-                    "PassData": {
-                        "$type": "FullscreenTrianglePassData",
-                        "ShaderAsset": {
-                            "FilePath": "Shaders/Reflections/ReflectionComposite.shader"
-                        },
-                        "StencilRef": 1,
-                        "PipelineViewTag": "MainCamera"
-                    }
-                },
-                {
-                    "Name": "MSAAResolveDiffusePass",
-                    "TemplateName": "MSAAResolveColorTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "Input",
-                            "AttachmentRef": {
-                                "Pass": "ForwardMSAAPass",
-                                "Attachment": "DiffuseOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "MSAAResolveSpecularPass",
-                    "TemplateName": "MSAAResolveColorTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "Input",
-                            "AttachmentRef": {
-                                "Pass": "ReflectionCompositePass",
-                                "Attachment": "SpecularInputOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "MotionVectorPass",
-                    "TemplateName": "MotionVectorParentTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshes",
-                            "AttachmentRef": {
-                                "Pass": "SkinningPass",
-                                "Attachment": "SkinnedMeshOutputStream"
-                            }
-                        },
-                        {
-                            "LocalSlot": "Depth",
-                            "AttachmentRef": {
-                                "Pass": "DepthPass",
-                                "Attachment": "Output"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SwapChainOutput",
-                            "AttachmentRef": {
-                                "Pass": "Parent",
-                                "Attachment": "SwapChainOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "DiffuseSpecularMergePass",
-                    "TemplateName": "DiffuseSpecularMergeTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "InputDiffuse",
-                            "AttachmentRef": {
-                                "Pass": "MSAAResolveDiffusePass",
-                                "Attachment": "Output"
-                            }
-                        },
-                        {
-                            "LocalSlot": "InputSpecular",
-                            "AttachmentRef": {
-                                "Pass": "MSAAResolveSpecularPass",
-                                "Attachment": "Output"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "ImGuiPass",
-                    "TemplateName": "ImGuiPassTemplate",
-                    "Enabled": true,
-                    "Connections": [
-                        {
-                            "LocalSlot": "InputOutput",
-                            "AttachmentRef": {
-                                "Pass": "DiffuseSpecularMergePass",
-                                "Attachment": "Output"
-                            }
-                        }
-                    ],
-                    "PassData": {
-                        "$type": "ImGuiPassData",
-                        "IsDefaultImGui": true
-                    }
-                },
-                {
-                    "Name": "CopyToSwapChain",
-                    "TemplateName": "FullscreenCopyTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "Input",
-                            "AttachmentRef": {
-                                "Pass": "ImGuiPass",
-                                "Attachment": "InputOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "Output",
-                            "AttachmentRef": {
-                                "Pass": "Parent",
-                                "Attachment": "SwapChainOutput"
-                            }
-                        }
-                    ]
-                }
-            ]
-        }
-    }
-}

+ 0 - 356
Passes/No_MSAA_RPI_Pipeline.pass

@@ -1,356 +0,0 @@
-{
-    "Type": "JsonSerialization",
-    "Version": 1,
-    "ClassName": "PassAsset",
-    "ClassData": {
-        "PassTemplate": {
-            "Name": "No_MSAA_RPI_Pipeline",
-            "PassClass": "ParentPass",
-            "Slots": [
-                {
-                    "Name": "SwapChainOutput",
-                    "SlotType": "InputOutput"
-                }
-            ],
-            "PassRequests": [
-                {
-                    "Name": "MorphTargetPass",
-                    "TemplateName": "MorphTargetPassTemplate"
-                },
-                {
-                    "Name": "SkinningPass",
-                    "TemplateName": "SkinningPassTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshOutputStream",
-                            "AttachmentRef": {
-                                "Pass": "MorphTargetPass",
-                                "Attachment": "MorphTargetDeltaOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "DepthPass",
-                    "TemplateName": "DepthPassTemplate",
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "depth",
-                        "PipelineViewTag": "MainCamera"
-                    },
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshes",
-                            "AttachmentRef": {
-                                "Pass": "SkinningPass",
-                                "Attachment": "SkinnedMeshOutputStream"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "LightCullingTilePreparePass",
-                    "TemplateName": "LightCullingTilePrepareTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "Depth",
-                            "AttachmentRef": {
-                                "Pass": "DepthPass",
-                                "Attachment": "Output"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "LightCullingPass",
-                    "TemplateName": "LightCullingTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "TileLightData",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingTilePreparePass",
-                                "Attachment": "TileLightData"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "LightCullingRemapPass",
-                    "TemplateName": "LightCullingRemapTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "TileLightData",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingTilePreparePass",
-                                "Attachment": "TileLightData"
-                            }
-                        },
-                        {
-                            "LocalSlot": "LightCount",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingPass",
-                                "Attachment": "LightCount"
-                            }
-                        },
-                        {
-                            "LocalSlot": "LightList",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingPass",
-                                "Attachment": "LightList"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "ProjectedShadowmapsPass",
-                    "TemplateName": "ProjectedShadowmapsTemplate",
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "shadow",
-                        "PipelineViewTag": "ProjectedShadowView"
-                    },
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshes",
-                            "AttachmentRef": {
-                                "Pass": "SkinningPass",
-                                "Attachment": "SkinnedMeshOutputStream"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "ForwardPass",
-                    "TemplateName": "ForwardPassTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "DepthStencilInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "DepthPass",
-                                "Attachment": "Output"
-                            }
-                        },
-                        {
-                            "LocalSlot": "TileLightData",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingTilePreparePass",
-                                "Attachment": "TileLightData"
-                            }
-                        },
-                        {
-                            "LocalSlot": "LightListRemapped",
-                            "AttachmentRef": {
-                                "Pass": "LightCullingRemapPass",
-                                "Attachment": "LightListRemapped"
-                            }
-                        }
-                    ],
-                    "PassData": {
-                        "$type": "RasterPassData",
-                        "DrawListTag": "forward",
-                        "PipelineViewTag": "MainCamera",
-                        "PassSrgShaderAsset": {
-                            "FilePath": "Shaders/ForwardPassSrg.shader"
-                        }
-                    }
-                },
-                {
-                    "Name": "DiffuseGlobalIlluminationPass",
-                    "TemplateName": "DiffuseGlobalIlluminationPassTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "DiffuseInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardPass",
-                                "Attachment": "DiffuseOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "AlbedoInput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardPass",
-                                "Attachment": "AlbedoOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "NormalInput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardPass",
-                                "Attachment": "NormalOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "DepthStencilInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardPass",
-                                "Attachment": "DepthStencilInputOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "ReflectionsPass",
-                    "TemplateName": "ReflectionsParentPassTemplate",
-                    "Enabled": true,
-                    "Connections": [
-                        {
-                            "LocalSlot": "NormalInput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardPass",
-                                "Attachment": "NormalOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SpecularF0Input",
-                            "AttachmentRef": {
-                                "Pass": "ForwardPass",
-                                "Attachment": "SpecularF0Output"
-                            }
-                        },
-                        {
-                            "LocalSlot": "AlbedoInput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardPass",
-                                "Attachment": "AlbedoOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "DepthStencilInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardPass",
-                                "Attachment": "DepthStencilInputOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SpecularInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ForwardPass",
-                                "Attachment": "SpecularOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "ReflectionCompositePass",
-                    "TemplateName": "ReflectionCompositePassTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "ReflectionInput",
-                            "AttachmentRef": {
-                                "Pass": "ReflectionsPass",
-                                "Attachment": "ReflectionOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SpecularInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ReflectionsPass",
-                                "Attachment": "SpecularInputOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "DepthStencilInputOutput",
-                            "AttachmentRef": {
-                                "Pass": "ReflectionsPass",
-                                "Attachment": "DepthStencilInputOutput"
-                            }
-                        }
-                    ],
-                    "PassData": {
-                        "$type": "FullscreenTrianglePassData",
-                        "ShaderAsset": {
-                            "FilePath": "Shaders/Reflections/ReflectionComposite.shader"
-                        },
-                        "StencilRef": 1,
-                        "PipelineViewTag": "MainCamera"
-                    }
-                },
-                {
-                    "Name": "DiffuseSpecularMergePass",
-                    "TemplateName": "DiffuseSpecularMergeTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "InputDiffuse",
-                            "AttachmentRef": {
-                                "Pass": "DiffuseGlobalIlluminationPass",
-                                "Attachment": "DiffuseInputOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "InputSpecular",
-                            "AttachmentRef": {
-                                "Pass": "ReflectionCompositePass",
-                                "Attachment": "SpecularInputOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "MotionVectorPass",
-                    "TemplateName": "MotionVectorParentTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "SkinnedMeshes",
-                            "AttachmentRef": {
-                                "Pass": "SkinningPass",
-                                "Attachment": "SkinnedMeshOutputStream"
-                            }
-                        },
-                        {
-                            "LocalSlot": "Depth",
-                            "AttachmentRef": {
-                                "Pass": "DepthPass",
-                                "Attachment": "Output"
-                            }
-                        },
-                        {
-                            "LocalSlot": "SwapChainOutput",
-                            "AttachmentRef": {
-                                "Pass": "Parent",
-                                "Attachment": "SwapChainOutput"
-                            }
-                        }
-                    ]
-                },
-                {
-                    "Name": "ImGuiPass",
-                    "TemplateName": "ImGuiPassTemplate",
-                    "Enabled": true,
-                    "Connections": [
-                        {
-                            "LocalSlot": "InputOutput",
-                            "AttachmentRef": {
-                                "Pass": "DiffuseSpecularMergePass",
-                                "Attachment": "Output"
-                            }
-                        }
-                    ],
-                    "PassData": {
-                        "$type": "ImGuiPassData",
-                        "IsDefaultImGui": true
-                    }
-                },
-                {
-                    "Name": "CopyToSwapChain",
-                    "TemplateName": "FullscreenCopyTemplate",
-                    "Connections": [
-                        {
-                            "LocalSlot": "Input",
-                            "AttachmentRef": {
-                                "Pass": "ImGuiPass",
-                                "Attachment": "InputOutput"
-                            }
-                        },
-                        {
-                            "LocalSlot": "Output",
-                            "AttachmentRef": {
-                                "Pass": "Parent",
-                                "Attachment": "SwapChainOutput"
-                            }
-                        }
-                    ]
-                }
-            ]
-        }
-    }
-}

+ 0 - 5
atomsampleviewer_asset_files.cmake

@@ -24,11 +24,6 @@ set(FILES
     Passes/LuxCoreTexture.pass
     Passes/LuxCoreTexture.pass
     Passes/MainPipeline_Mobile.pass
     Passes/MainPipeline_Mobile.pass
     Passes/Monochrome.pass
     Passes/Monochrome.pass
-    Passes/MSAA_2x_RPI_Pipeline.pass
-    Passes/MSAA_4x_RPI_Pipeline.pass
-    Passes/MSAA_8x_RPI_Pipeline.pass
-    Passes/MSAA_RPI_Pipeline_Core.pass
-    Passes/No_MSAA_RPI_Pipeline.pass
     Passes/RayTracingAmbientOcclusion.pass
     Passes/RayTracingAmbientOcclusion.pass
     Passes/RenderTexture.pass
     Passes/RenderTexture.pass
     Passes/RHISamplePass.pass
     Passes/RHISamplePass.pass