diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.cpp index 12d676a0b4..8f14429cd0 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/EditorPrefabComponent.cpp @@ -16,7 +16,6 @@ #include #include #include -#include #include namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp index 71b1e04ec8..80ac86c974 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/Instance/InstanceUpdateExecutor.cpp @@ -21,9 +21,9 @@ #include #include #include +#include #include #include -#include namespace AzToolsFramework { @@ -90,17 +90,13 @@ namespace AzToolsFramework if (instanceCountToUpdateInBatch > 0) { + // Notify Propagation has begun + PrefabPublicNotificationBus::Broadcast(&PrefabPublicNotifications::OnPrefabInstancePropagationBegin); + EntityIdList selectedEntityIds; ToolsApplicationRequestBus::BroadcastResult(selectedEntityIds, &ToolsApplicationRequests::GetSelectedEntities); ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequests::SetSelectedEntities, EntityIdList()); - // Disable the Outliner to avoid showing the propagation steps - EntityOutlinerWidgetInterface* entityOutlinerWidgetInterface = AZ::Interface::Get(); - if (entityOutlinerWidgetInterface) - { - entityOutlinerWidgetInterface->SetUpdatesEnabled(false); - } - for (int i = 0; i < instanceCountToUpdateInBatch; ++i) { Instance* instanceToUpdate = m_instancesUpdateQueue.front(); @@ -168,18 +164,8 @@ namespace AzToolsFramework } ToolsApplicationRequestBus::Broadcast(&ToolsApplicationRequests::SetSelectedEntities, selectedEntityIds); - // Enable the Outliner - if (entityOutlinerWidgetInterface) - { - entityOutlinerWidgetInterface->SetUpdatesEnabled(true); - - auto prefabPublicInterface = AZ::Interface::Get(); - if (prefabPublicInterface) - { - AZ::EntityId rootEntityId = prefabPublicInterface->GetLevelInstanceContainerEntityId(); - entityOutlinerWidgetInterface->ExpandEntityChildren(rootEntityId); - } - } + // Notify Propagation has ended + PrefabPublicNotificationBus::Broadcast(&PrefabPublicNotifications::OnPrefabInstancePropagationEnd); } m_updatingTemplateInstancesInQueue = false; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicNotificationBus.h b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicNotificationBus.h new file mode 100644 index 0000000000..fc5879f776 --- /dev/null +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicNotificationBus.h @@ -0,0 +1,34 @@ +/* + * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or + * its licensors. + * + * For complete copyright and license terms please see the LICENSE at the root of this + * distribution (the "License"). All use of this software is governed by the License, + * or, if provided, by the license below or the license accompanying this file. Do not + * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * + */ + +#pragma once + +#include + +namespace AzToolsFramework +{ + namespace Prefab + { + class PrefabPublicNotifications + : public AZ::EBusTraits + { + public: + virtual ~PrefabPublicNotifications() = default; + + virtual void OnPrefabInstancePropagationBegin() {} + virtual void OnPrefabInstancePropagationEnd() {} + }; + + using PrefabPublicNotificationBus = AZ::EBus; + + } // namespace Prefab +} // namespace AzToolsFramework diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp index 3ee8a14285..cc65b61908 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.cpp @@ -286,12 +286,12 @@ namespace AzToolsFramework ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusConnect( GetEntityContextId()); EditorEntityInfoNotificationBus::Handler::BusConnect(); - AZ::Interface::Register(this); + Prefab::PrefabPublicNotificationBus::Handler::BusConnect(); } EntityOutlinerWidget::~EntityOutlinerWidget() { - AZ::Interface::Unregister(this); + Prefab::PrefabPublicNotificationBus::Handler::BusDisconnect(); ComponentModeFramework::EditorComponentModeNotificationBus::Handler::BusDisconnect(); EditorEntityInfoNotificationBus::Handler::BusDisconnect(); EditorPickModeNotificationBus::Handler::BusDisconnect(); @@ -1109,25 +1109,18 @@ namespace AzToolsFramework setEnabled(true); SetEntityOutlinerState(m_gui, true); } - - void EntityOutlinerWidget::SetUpdatesEnabled(bool enable) + + void EntityOutlinerWidget::OnPrefabInstancePropagationBegin() { - if (enable) - { - QTimer::singleShot(1, this, [this]() { - m_gui->m_objectTree->setUpdatesEnabled(true); - }); - } - else - { - m_gui->m_objectTree->setUpdatesEnabled(false); - } + m_gui->m_objectTree->setUpdatesEnabled(false); } - void EntityOutlinerWidget::ExpandEntityChildren(AZ::EntityId entityId) + void EntityOutlinerWidget::OnPrefabInstancePropagationEnd() { - QModelIndex index = GetIndexFromEntityId(entityId); - m_gui->m_objectTree->expand(index); + QTimer::singleShot(1, this, [this]() { + m_gui->m_objectTree->setUpdatesEnabled(true); + m_gui->m_objectTree->expand(m_proxyModel->index(0,0)); + }); } void EntityOutlinerWidget::OnEntityInfoUpdatedAddChildEnd(AZ::EntityId /*parentId*/, AZ::EntityId childId) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx index f225bb49b8..9a02febab2 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidget.hxx @@ -20,10 +20,10 @@ #include #include #include +#include #include #include #include -#include #include #include @@ -62,7 +62,7 @@ namespace AzToolsFramework , private EditorEntityContextNotificationBus::Handler , private EditorEntityInfoNotificationBus::Handler , private ComponentModeFramework::EditorComponentModeNotificationBus::Handler - , private EntityOutlinerWidgetInterface + , private Prefab::PrefabPublicNotificationBus::Handler { Q_OBJECT; public: @@ -106,9 +106,9 @@ namespace AzToolsFramework void EnteredComponentMode(const AZStd::vector& componentModeTypes) override; void LeftComponentMode(const AZStd::vector& componentModeTypes) override; - // EntityOutlinerWidgetInterface - void SetUpdatesEnabled(bool enable) override; - void ExpandEntityChildren(AZ::EntityId entityId) override; + // PrefabPublicNotificationBus + void OnPrefabInstancePropagationBegin() override; + void OnPrefabInstancePropagationEnd() override; // Build a selection object from the given entities. Entities already in the Widget's selection buffers are ignored. template diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake index 96eaab3009..627c2ea6ed 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/aztoolsframework_files.cmake @@ -652,6 +652,7 @@ set(FILES Prefab/PrefabPublicHandler.h Prefab/PrefabPublicHandler.cpp Prefab/PrefabPublicInterface.h + Prefab/PrefabPublicNotificationBus.h Prefab/PrefabUndo.h Prefab/PrefabUndo.cpp Prefab/PrefabUndoCache.cpp @@ -687,7 +688,6 @@ set(FILES UI/Outliner/EntityOutlinerDisplayOptionsMenu.cpp UI/Outliner/EntityOutlinerTreeView.hxx UI/Outliner/EntityOutlinerTreeView.cpp - UI/Outliner/EntityOutlinerWidgetInterface.h UI/Outliner/EntityOutlinerWidget.hxx UI/Outliner/EntityOutlinerWidget.cpp UI/Outliner/EntityOutlinerCacheBus.h diff --git a/Code/Sandbox/Editor/GameExporter.cpp b/Code/Sandbox/Editor/GameExporter.cpp index 9039fca70d..8a93dbedce 100644 --- a/Code/Sandbox/Editor/GameExporter.cpp +++ b/Code/Sandbox/Editor/GameExporter.cpp @@ -33,7 +33,6 @@ #include "Util/CryMemFile.h" #include "Objects/ObjectManager.h" -#include "Objects/ObjectPhysicsManager.h" #include "Objects/EntityObject.h" #include "LensFlareEditor/LensFlareManager.h" #include "LensFlareEditor/LensFlareLibrary.h" @@ -192,14 +191,6 @@ bool CGameExporter::Export(unsigned int flags, [[maybe_unused]] EEndian eExportE } } - //////////////////////////////////////////////////////////////////////// - // Inform all objects that an export is about to begin - //////////////////////////////////////////////////////////////////////// - if (exportSuccessful) - { - GetIEditor()->GetObjectManager()->GetPhysicsManager()->PrepareForExport(); - } - //////////////////////////////////////////////////////////////////////// // Export all data to the game //////////////////////////////////////////////////////////////////////// @@ -519,8 +510,6 @@ void CGameExporter::ExportMapInfo(XmlNodeRef& node) CXmlArchive xmlAr; xmlAr.bLoading = false; xmlAr.root = node; - - GetIEditor()->GetObjectManager()->GetPhysicsManager()->SerializeCollisionClasses(xmlAr); } ////////////////////////////////////////////////////////////////////////// diff --git a/Code/Sandbox/Editor/Include/IObjectManager.h b/Code/Sandbox/Editor/Include/IObjectManager.h index bf1bb97db9..c1c09cf753 100644 --- a/Code/Sandbox/Editor/Include/IObjectManager.h +++ b/Code/Sandbox/Editor/Include/IObjectManager.h @@ -24,7 +24,6 @@ class CUsedResources; class CSelectionGroup; class CObjectClassDesc; class CObjectArchive; -class CObjectPhysicsManager; class CViewport; struct HitContext; enum class ImageRotationDegrees; @@ -247,10 +246,6 @@ public: virtual IGizmoManager* GetGizmoManager() = 0; - ////////////////////////////////////////////////////////////////////////// - //! Get acess to object physics manager - virtual CObjectPhysicsManager* GetPhysicsManager() = 0; - ////////////////////////////////////////////////////////////////////////// //! Invalidate visibily settings of objects. virtual void InvalidateVisibleList() = 0; diff --git a/Code/Sandbox/Editor/Objects/ObjectManager.cpp b/Code/Sandbox/Editor/Objects/ObjectManager.cpp index 96d015e2c1..f3f33996da 100644 --- a/Code/Sandbox/Editor/Objects/ObjectManager.cpp +++ b/Code/Sandbox/Editor/Objects/ObjectManager.cpp @@ -25,7 +25,6 @@ #include "Viewport.h" #include "GizmoManager.h" #include "AxisGizmo.h" -#include "ObjectPhysicsManager.h" #include "GameEngine.h" #include "WaitProgress.h" #include "Util/Image.h" @@ -109,7 +108,6 @@ CObjectManager::CObjectManager() , m_pLoadProgress(nullptr) , m_loadedObjects(0) , m_totalObjectsToLoad(0) - , m_pPhysicsManager(new CObjectPhysicsManager()) , m_bExiting(false) , m_isUpdateVisibilityList(false) , m_currentHideCount(CBaseObject::s_invalidHiddenID) @@ -138,7 +136,6 @@ CObjectManager::~CObjectManager() DeleteAllObjects(); delete m_gizmoManager; - delete m_pPhysicsManager; } ////////////////////////////////////////////////////////////////////////// @@ -841,8 +838,6 @@ void CObjectManager::Update() { prevActiveWindow->setFocus(); } - - m_pPhysicsManager->Update(); } ////////////////////////////////////////////////////////////////////////// diff --git a/Code/Sandbox/Editor/Objects/ObjectManager.h b/Code/Sandbox/Editor/Objects/ObjectManager.h index f13616451e..26905c47cd 100644 --- a/Code/Sandbox/Editor/Objects/ObjectManager.h +++ b/Code/Sandbox/Editor/Objects/ObjectManager.h @@ -334,9 +334,6 @@ public: virtual void FindAndRenameProperty2(const char* property2Name, const QString& oldValue, const QString& newValue); virtual void FindAndRenameProperty2If(const char* property2Name, const QString& oldValue, const QString& newValue, const char* otherProperty2Name, const QString& otherValue); - class CObjectPhysicsManager* GetPhysicsManager() - { return m_pPhysicsManager; } - bool IsReloading() const { return m_bInReloading; } void SetSkipUpdate(bool bSkipUpdate) override { m_bSkipObjectUpdate = bSkipUpdate; } @@ -433,8 +430,6 @@ private: int m_totalObjectsToLoad; ////////////////////////////////////////////////////////////////////////// - class CObjectPhysicsManager* m_pPhysicsManager; - ////////////////////////////////////////////////////////////////////////// // Numbering for names. ////////////////////////////////////////////////////////////////////////// diff --git a/Code/Sandbox/Editor/Objects/ObjectPhysicsManager.cpp b/Code/Sandbox/Editor/Objects/ObjectPhysicsManager.cpp deleted file mode 100644 index c3886ad7e8..0000000000 --- a/Code/Sandbox/Editor/Objects/ObjectPhysicsManager.cpp +++ /dev/null @@ -1,191 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#include "EditorDefs.h" - -#include "ObjectPhysicsManager.h" - -// Editor -#include "GameEngine.h" -#include "Commands/CommandManager.h" -#include "Objects/SelectionGroup.h" -#include "Include/IObjectManager.h" - -#include "CryPhysicsDeprecation.h" - -#define MAX_OBJECTS_PHYS_SIMULATION_TIME (5) - -////////////////////////////////////////////////////////////////////////// -CObjectPhysicsManager::CObjectPhysicsManager() -{ - CommandManagerHelper::RegisterCommand(GetIEditor()->GetCommandManager(), - "physics", "simulate_objects", "", "", - AZStd::bind(&CObjectPhysicsManager::Command_SimulateObjects, this)); - CommandManagerHelper::RegisterCommand(GetIEditor()->GetCommandManager(), - "physics", "reset_objects_state", "", "", - AZStd::bind(&CObjectPhysicsManager::Command_ResetPhysicsState, this)); - CommandManagerHelper::RegisterCommand(GetIEditor()->GetCommandManager(), - "physics", "get_objects_state", "", "", - AZStd::bind(&CObjectPhysicsManager::Command_GetPhysicsState, this)); - - m_fStartObjectSimulationTime = 0; - m_bSimulatingObjects = false; - m_wasSimObjects = 0; -} - -////////////////////////////////////////////////////////////////////////// -CObjectPhysicsManager::~CObjectPhysicsManager() -{ - -} - -////////////////////////////////////////////////////////////////////////// -void CObjectPhysicsManager::Command_SimulateObjects() -{ - SimulateSelectedObjectsPositions(); -} - -///////////////////////////////////////////////////////////////////////// -void CObjectPhysicsManager::Command_ResetPhysicsState() -{ - CSelectionGroup* pSelection = GetIEditor()->GetSelection(); - for (int i = 0; i < pSelection->GetCount(); i++) - { - pSelection->GetObject(i)->OnEvent(EVENT_PHYSICS_RESETSTATE); - } -} - -///////////////////////////////////////////////////////////////////////// -void CObjectPhysicsManager::Command_GetPhysicsState() -{ - CSelectionGroup* pSelection = GetIEditor()->GetSelection(); - for (int i = 0; i < pSelection->GetCount(); i++) - { - pSelection->GetObject(i)->OnEvent(EVENT_PHYSICS_GETSTATE); - } -} - -////////////////////////////////////////////////////////////////////////// -void CObjectPhysicsManager::Update() -{ - if (m_bSimulatingObjects) - { - UpdateSimulatingObjects(); - } -} - -////////////////////////////////////////////////////////////////////////// -void CObjectPhysicsManager::SimulateSelectedObjectsPositions() -{ - CSelectionGroup* pSel = GetIEditor()->GetObjectManager()->GetSelection(); - if (pSel->IsEmpty()) - { - return; - } - - if (GetIEditor()->GetGameEngine()->GetSimulationMode()) - { - return; - } - - GetIEditor()->GetGameEngine()->SetSimulationMode(true, true); - - m_simObjects.clear(); - CRY_PHYSICS_REPLACEMENT_ASSERT(); - m_wasSimObjects = m_simObjects.size(); - - m_fStartObjectSimulationTime = GetISystem()->GetITimer()->GetAsyncCurTime(); - m_bSimulatingObjects = true; -} - -////////////////////////////////////////////////////////////////////////// -void CObjectPhysicsManager::UpdateSimulatingObjects() -{ - { - CUndo undo("Simulate"); - CRY_PHYSICS_REPLACEMENT_ASSERT(); - } - - float curTime = GetISystem()->GetITimer()->GetAsyncCurTime(); - float runningTime = (curTime - m_fStartObjectSimulationTime); - - if (m_simObjects.empty() || (runningTime > MAX_OBJECTS_PHYS_SIMULATION_TIME)) - { - m_fStartObjectSimulationTime = 0; - m_bSimulatingObjects = false; - GetIEditor()->GetGameEngine()->SetSimulationMode(false, true); - } -} - -////////////////////////////////////////////////////////////////////////// -void CObjectPhysicsManager::PrepareForExport() -{ - // Clear the collision class set, ready for objects to register - // their collision classes - m_collisionClasses.clear(); - m_collisionClassExportId = 0; - // First collision-class IS always the default one - RegisterCollisionClass(SCollisionClass(0, 0)); -} - -////////////////////////////////////////////////////////////////////////// -bool operator == (const SCollisionClass& lhs, const SCollisionClass& rhs) -{ - return lhs.type == rhs.type && lhs.ignore == rhs.ignore; -} - -////////////////////////////////////////////////////////////////////////// -int CObjectPhysicsManager::RegisterCollisionClass(const SCollisionClass& collclass) -{ - TCollisionClassVector::iterator it = std::find(m_collisionClasses.begin(), m_collisionClasses.end(), collclass); - if (it == m_collisionClasses.end()) - { - m_collisionClasses.push_back(collclass); - return m_collisionClasses.size() - 1; - } - return it - m_collisionClasses.begin(); -} - -////////////////////////////////////////////////////////////////////////// -int CObjectPhysicsManager::GetCollisionClassId(const SCollisionClass& collclass) -{ - TCollisionClassVector::iterator it = std::find(m_collisionClasses.begin(), m_collisionClasses.end(), collclass); - if (it == m_collisionClasses.end()) - { - return 0; - } - return it - m_collisionClasses.begin(); -} - -////////////////////////////////////////////////////////////////////////// -void CObjectPhysicsManager::SerializeCollisionClasses(CXmlArchive& xmlAr) -{ - if (!xmlAr.bLoading) - { - // Storing - CLogFile::WriteLine("Storing Collision Classes ..."); - - XmlNodeRef root = xmlAr.root->newChild("CollisionClasses"); - int count = m_collisionClasses.size(); - for (int i = 0; i < count; i++) - { - SCollisionClass& cc = m_collisionClasses[i]; - XmlNodeRef xmlCC = root->newChild("CollisionClass"); - xmlCC->setAttr("type", cc.type); - xmlCC->setAttr("ignore", cc.ignore); - } - } -} - - - diff --git a/Code/Sandbox/Editor/Objects/ObjectPhysicsManager.h b/Code/Sandbox/Editor/Objects/ObjectPhysicsManager.h deleted file mode 100644 index 7711d93208..0000000000 --- a/Code/Sandbox/Editor/Objects/ObjectPhysicsManager.h +++ /dev/null @@ -1,56 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ -// Original file Copyright Crytek GMBH or its affiliates, used under license. - -#ifndef CRYINCLUDE_EDITOR_OBJECTS_OBJECTPHYSICSMANAGER_H -#define CRYINCLUDE_EDITOR_OBJECTS_OBJECTPHYSICSMANAGER_H -#pragma once - - -////////////////////////////////////////////////////////////////////////// -class CObjectPhysicsManager -{ -public: - CObjectPhysicsManager(); - ~CObjectPhysicsManager(); - - void SimulateSelectedObjectsPositions(); - void Update(); - - ////////////////////////////////////////////////////////////////////////// - /// Collision Classes - ////////////////////////////////////////////////////////////////////////// - int RegisterCollisionClass(const SCollisionClass& collclass); - int GetCollisionClassId(const SCollisionClass& collclass); - void SerializeCollisionClasses(CXmlArchive& xmlAr); - - void PrepareForExport(); - -private: - void Command_SimulateObjects(); - void Command_GetPhysicsState(); - void Command_ResetPhysicsState(); - - void UpdateSimulatingObjects(); - - bool m_bSimulatingObjects; - float m_fStartObjectSimulationTime; - int m_wasSimObjects; - std::vector<_smart_ptr > m_simObjects; - - typedef std::vector TCollisionClassVector; - int m_collisionClassExportId; - TCollisionClassVector m_collisionClasses; -}; - - -#endif // CRYINCLUDE_EDITOR_OBJECTS_OBJECTPHYSICSMANAGER_H diff --git a/Code/Sandbox/Editor/editor_lib_files.cmake b/Code/Sandbox/Editor/editor_lib_files.cmake index 4adf501d45..ffbc37170d 100644 --- a/Code/Sandbox/Editor/editor_lib_files.cmake +++ b/Code/Sandbox/Editor/editor_lib_files.cmake @@ -638,8 +638,6 @@ set(FILES Objects/ObjectManager.h Objects/ObjectManagerLegacyUndo.cpp Objects/ObjectManagerLegacyUndo.h - Objects/ObjectPhysicsManager.cpp - Objects/ObjectPhysicsManager.h Objects/DisplayContext.cpp Objects/DisplayContext.h Objects/EntityObject.cpp diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Limits.h b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Limits.h index 80e8ad268f..1b18ab7671 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Limits.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI.Reflect/Limits.h @@ -34,6 +34,7 @@ namespace AZ constexpr uint32_t StreamCountMax = 12; constexpr uint32_t StreamChannelCountMax = 16; constexpr uint32_t DrawListTagCountMax = 64; + constexpr uint32_t DrawFilterTagCountMax = 32; constexpr uint32_t MultiSampleCustomLocationsCountMax = 16; constexpr uint32_t MultiSampleCustomLocationGridSize = 16; constexpr uint32_t SubpassCountMax = 10; diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidgetInterface.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawFilterTagRegistry.h similarity index 56% rename from Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidgetInterface.h rename to Gems/Atom/RHI/Code/Include/Atom/RHI/DrawFilterTagRegistry.h index afbb790c1a..04668b1994 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/UI/Outliner/EntityOutlinerWidgetInterface.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawFilterTagRegistry.h @@ -9,22 +9,15 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ - #pragma once -#include -#include +#include +#include -namespace AzToolsFramework +namespace AZ { - class EntityOutlinerWidgetInterface + namespace RHI { - public: - AZ_RTTI(EntityOutlinerWidgetInterface, "{30C0F252-EC84-4196-BF59-EB9E73B8ADCB}"); - - virtual void SetUpdatesEnabled(bool enable) = 0; - virtual void ExpandEntityChildren(AZ::EntityId entityId) = 0; - }; - -} // namespace AzToolsFramework - + using DrawFilterTagRegistry = TagRegistry; + } +} diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawItem.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawItem.h index 65ca1d3a97..23fa2e691c 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawItem.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawItem.h @@ -11,6 +11,7 @@ */ #pragma once +#include #include #include #include @@ -152,36 +153,53 @@ namespace AZ }; using DrawItemSortKey = int64_t; - - struct DrawItemKeyPair + + // A filter associate to a DrawItem which can be used to filter the DrawItem when submitting to command list + using DrawFilterTag = Handle; + using DrawFilterMask = uint32_t; // AZStd::bitset's impelmentation is too expensive. + constexpr uint32_t DrawFilterMaskDefaultValue = uint32_t(-1); // Default all bit to 1. + static_assert(sizeof(DrawFilterMask) * 8 >= Limits::Pipeline::DrawFilterTagCountMax, "DrawFilterMask doesn't have enough bits for maximum tag count"); + + struct DrawItemProperties { - DrawItemKeyPair() = default; + DrawItemProperties() = default; - DrawItemKeyPair(const DrawItem* item, DrawItemSortKey sortKey) + DrawItemProperties(const DrawItem* item, DrawItemSortKey sortKey = 0, DrawFilterMask filterMask = DrawFilterMaskDefaultValue) : m_item{item} , m_sortKey{sortKey} - {} + , m_drawFilterMask{filterMask} + { + } - bool operator == (const DrawItemKeyPair& rhs) const + bool operator==(const DrawItemProperties& rhs) const { return m_item == rhs.m_item && m_sortKey == rhs.m_sortKey && - m_depth == rhs.m_depth; + m_depth == rhs.m_depth && + m_drawFilterMask == rhs.m_drawFilterMask + ; } - bool operator != (const DrawItemKeyPair& rhs) const + bool operator!=(const DrawItemProperties& rhs) const { return !(*this == rhs); } - bool operator < (const DrawItemKeyPair& rhs) const + bool operator<(const DrawItemProperties& rhs) const { return m_sortKey < rhs.m_sortKey; } + //! A pointer to the draw item const DrawItem* m_item = nullptr; + //! A sorting key of this draw item which is used for sorting draw items in DrawList + // Check RHI::SortDrawList() function for detail DrawItemSortKey m_sortKey = 0; + //! A depth value this draw item which is used for sorting draw items in DrawList + //! Check RHI::SortDrawList() function for detail float m_depth = 0.0f; + //! A filter mask which helps decide whether to submit this draw item to a Scope's command list or not + DrawFilterMask m_drawFilterMask = DrawFilterMaskDefaultValue; }; } diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawList.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawList.h index 71c1cc026c..e232b1cf07 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawList.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawList.h @@ -39,8 +39,8 @@ namespace AZ using DrawListTag = Handle; using DrawListMask = AZStd::bitset; - using DrawList = AZStd::vector; - using DrawListView = AZStd::array_view; + using DrawList = AZStd::vector; + using DrawListView = AZStd::array_view; /// Contains a table of draw lists, indexed by the tag. using DrawListsByTag = AZStd::array; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawListContext.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawListContext.h index 00514ef3ef..c8f792ac49 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawListContext.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawListContext.h @@ -53,7 +53,7 @@ namespace AZ /// Adds an individual draw item to the draw list associated with the provided tag. This will /// no-op if the tag is not present in the internal draw list mask. - void AddDrawItem(DrawListTag drawListTag, DrawItemKeyPair drawItemKeyPair); + void AddDrawItem(DrawListTag drawListTag, DrawItemProperties drawItemProperties); /// Coalesces the draw lists in preparation for access via GetList. This should /// be called from a single thread as a sync point between the append / consume phases. diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawListTagRegistry.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawListTagRegistry.h index 471066a6e2..7c6e9899d8 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawListTagRegistry.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawListTagRegistry.h @@ -12,83 +12,12 @@ #pragma once #include -#include -#include -#include +#include namespace AZ { namespace RHI { - /** - * Allocates and registers draw list tags by name, allowing the user to acquire and find tags from names. - * The class is designed to map user-friendly tag names defined through content or higher level code to - * low-level tags, which are simple handles. - * - * Some notes about usage and design: - * - DrawListTag values represent indexes into a bitmask, which allows for fast comparison when filtering - * draw items into draw lists (see View::HasDrawListTag()). - * - Tags are reference counted, which means multiple calls to 'Acquire' with the same name will increment - * the internal reference count on the tag. This allows shared ownership between systems, if necessary. - * - FindTag is provided to search for a tag reference without taking ownership. - * - Names are case sensitive. - */ - class DrawListTagRegistry final - : public AZStd::intrusive_base - { - public: - AZ_CLASS_ALLOCATOR(DrawListTagRegistry, AZ::SystemAllocator, 0); - AZ_DISABLE_COPY_MOVE(DrawListTagRegistry); - - static Ptr Create(); - - /** - * Resets the registry back to an empty state. All references are released. - */ - void Reset(); - - /** - * Acquires a draw list tag from the provided name (case sensitive). If the tag already existed, it is ref-counted. - * Returns a valid tag on success; returns a null tag if the registry is at full capacity. You must - * call ReleaseTag() if successful. - */ - DrawListTag AcquireTag(const Name& drawListName); - - /** - * Releases a reference to a tag. Tags are ref-counted, so it's necessary to maintain ownership of the - * tag and release when its no longer needed. - */ - void ReleaseTag(DrawListTag drawListTag); - - /** - * Finds the tag associated with the provided name (case sensitive). If a tag exists with that name, the tag - * is returned. The reference count is NOT incremented on success; ownership is not passed to the user. If - * the tag does not exist, a null tag is returned. - */ - DrawListTag FindTag(const Name& drawListName) const; - - /** - * Returns the name of the given DrawListTag, or empty string if the tag is not registered. - */ - Name GetName(DrawListTag tag) const; - - /** - * Returns the number of allocated tags in the registry. - */ - size_t GetAllocatedTagCount() const; - - private: - DrawListTagRegistry() = default; - - struct Entry - { - Name m_name; - size_t m_refCount = 0; - }; - - mutable AZStd::shared_mutex m_mutex; - AZStd::array m_entriesByTag; - size_t m_allocatedTagCount = 0; - }; + using DrawListTagRegistry = TagRegistry; } } diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacket.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacket.h index 124cbe2c1b..988c3a73dd 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacket.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacket.h @@ -21,45 +21,48 @@ namespace AZ namespace RHI { - /** - * DrawPacket is a packed data structure (one contiguous allocation) containing a collection of - * DrawItems and their associated array data. Each draw item in the packet is associated - * with a DrawListTag. All draw items in the packet share the same set of shader resource - * groups, index buffer, and draw arguments. - * - * Some notes about design and usage: - * - Draw packets should be used to 'broadcast' variations of the same 'object' to multiple passes. - * For example: 'Shadow', 'Depth', 'Forward'. - * - * - Draw packets can be re-used between different views, scenes, or passes. The embedded shader resource groups - * should represent only the local data necessary to describe the 'object', not the full context including - * scene / view / pass specific state. They serve as a 'template'. - * - * - The packet is self-contained and does not reference external memory. Use DrawPacketBuilder to construct - * an instance and either store in an RHI::Ptr or call 'delete' to release. - */ + //! + //! DrawPacket is a packed data structure (one contiguous allocation) containing a collection of + //! DrawItems and their associated array data. Each draw item in the packet is associated + //! with a DrawListTag. All draw items in the packet share the same set of shader resource + //! groups, index buffer, one DrawFilterMask, and draw arguments. + //! + //! Some notes about design and usage: + //! - Draw packets should be used to 'broadcast' variations of the same 'object' to multiple passes. + //! For example: 'Shadow', 'Depth', 'Forward'. + //! + //! - Draw packets can be re-used between different views, scenes, or passes. The embedded shader resource groups + //! should represent only the local data necessary to describe the 'object', not the full context including + //! scene / view / pass specific state. They serve as a 'template'. + //! + //! - The packet is self-contained and does not reference external memory. Use DrawPacketBuilder to construct + //! an instance and either store in an RHI::Ptr or call 'delete' to release. + //! class DrawPacket final : public AZStd::intrusive_base { friend class DrawPacketBuilder; public: - using DrawItemVisitor = AZStd::function; + using DrawItemVisitor = AZStd::function; - /// Draw packets cannot be move constructed or copied, as they contain an additional memory payload. + //! Draw packets cannot be move constructed or copied, as they contain an additional memory payload. AZ_DISABLE_COPY_MOVE(DrawPacket); - /// Returns the mask representing all the draw lists affected by the packet. + //! Returns the mask representing all the draw lists affected by the packet. DrawListMask GetDrawListMask() const; - /// Returns the number of draw items stored in the packet. + //! Returns the number of draw items stored in the packet. size_t GetDrawItemCount() const; - /// Returns the draw item / sort key associated with the provided index. - DrawItemKeyPair GetDrawItem(size_t index) const; + //! Returns the draw item and its properties associated with the provided index. + DrawItemProperties GetDrawItem(size_t index) const; - /// Returns the draw list tag associated with the provided index. + //! Returns the draw list tag associated with the provided index. DrawListTag GetDrawListTag(size_t index) const; - /// Overloaded operator delete for freeing a draw packet. + //! Returns the draw filter mask which applied to all the draw items. + DrawFilterMask GetDrawFilterMask() const; + + //! Overloaded operator delete for freeing a draw packet. void operator delete(void* p, size_t size); private: @@ -72,6 +75,9 @@ namespace AZ // The bit-mask of all active filter tags. DrawListMask m_drawListMask = 0; + // The draw filter applies to each draw item + DrawFilterMask m_drawFilterMask = DrawFilterMaskDefaultValue; + // The index buffer view used when the draw call is indexed. IndexBufferView m_indexBufferView; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h index 9a091980bc..15303158f9 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/DrawPacketBuilder.h @@ -29,23 +29,26 @@ namespace AZ { DrawRequest() = default; - /// The filter tag used to direct the draw item. + //! The filter tag used to direct the draw item. DrawListTag m_listTag; - /// The stencil ref value used for this draw item. + //! The stencil ref value used for this draw item. uint8_t m_stencilRef = 0; - /// The array of stream buffers to bind for this draw item. + //! The array of stream buffers to bind for this draw item. AZStd::array_view m_streamBufferViews; - /// Shader resource group unique for this draw request + //! Shader resource group unique for this draw request const ShaderResourceGroup* m_uniqueShaderResourceGroup = nullptr; - /// The pipeline state assigned to this draw item. + //! The pipeline state assigned to this draw item. const PipelineState* m_pipelineState = nullptr; - /// The sort key assigned to this draw item. + //! The sort key assigned to this draw item. DrawItemSortKey m_sortKey = 0; + + //! The filter associated to this draw item. + DrawFilterMask m_drawFilterMask = DrawFilterMaskDefaultValue; }; // NOTE: This is configurable; just used to control the amount of memory held by the builder. @@ -69,6 +72,8 @@ namespace AZ void AddShaderResourceGroup(const ShaderResourceGroup* shaderResourceGroup); + void SetDrawFilterMask(DrawFilterMask filterMask); + void AddDrawItem(const DrawRequest& request); const DrawPacket* End(); @@ -79,6 +84,7 @@ namespace AZ IAllocatorAllocate* m_allocator = nullptr; DrawArguments m_drawArguments; DrawListMask m_drawListMask = 0; + DrawFilterMask m_drawFilterMask = DrawFilterMaskDefaultValue; size_t m_streamBufferViewCount = 0; IndexBufferView m_indexBufferView; AZStd::fixed_vector m_drawRequests; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystemInterface.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystemInterface.h index e7aea89993..784f9344b4 100644 --- a/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystemInterface.h +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/RHISystemInterface.h @@ -15,13 +15,13 @@ #include #include #include +#include namespace AZ { namespace RHI { class Device; - class DrawListTagRegistry; class FrameGraphBuilder; class PipelineState; class PipelineStateCache; diff --git a/Gems/Atom/RHI/Code/Include/Atom/RHI/TagRegistry.h b/Gems/Atom/RHI/Code/Include/Atom/RHI/TagRegistry.h new file mode 100644 index 0000000000..429a49657b --- /dev/null +++ b/Gems/Atom/RHI/Code/Include/Atom/RHI/TagRegistry.h @@ -0,0 +1,188 @@ +/* +* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or +* its licensors. +* +* For complete copyright and license terms please see the LICENSE at the root of this +* distribution (the "License"). All use of this software is governed by the License, +* or, if provided, by the license below or the license accompanying this file. Do not +* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* +*/ +#pragma once + +#include +#include +#include + +namespace AZ +{ + namespace RHI + { + //! + //! Allocates and registers tags by name, allowing the user to acquire and find tags from names. + //! The class is designed to map user-friendly tag names defined through content or higher level code to + //! low-level tags, which are simple handles. + //! + //! Some notes about usage and design: + //! - TagType need to be a Handle type. + //! - Tags are reference counted, which means multiple calls to 'Acquire' with the same name will increment + //! the internal reference count on the tag. This allows shared ownership between systems, if necessary. + //! - FindTag is provided to search for a tag reference without taking ownership. + //! - Names are case sensitive. + //! + template + class TagRegistry final + : public AZStd::intrusive_base + { + public: + AZ_CLASS_ALLOCATOR(TagRegistry, AZ::SystemAllocator, 0); + AZ_DISABLE_COPY_MOVE(TagRegistry); + + static Ptr Create(); + + //! Resets the registry back to an empty state. All references are released. + void Reset(); + + //! Acquires a tag from the provided name (case sensitive). If the tag already existed, it is ref-counted. + //! Returns a valid tag on success; returns a null tag if the registry is at full capacity. You must + //! call ReleaseTag() if successful. + TagType AcquireTag(const Name& tagName); + + //! Releases a reference to a tag. Tags are ref-counted, so it's necessary to maintain ownership of the + //! tag and release when its no longer needed. + void ReleaseTag(TagType tagName); + + //! Finds the tag associated with the provided name (case sensitive). If a tag exists with that name, the tag + //! is returned. The reference count is NOT incremented on success; ownership is not passed to the user. If + //! the tag does not exist, a null tag is returned. + TagType FindTag(const Name& tagName) const; + + //! Returns the name of the given tag, or empty string if the tag is not registered. + Name GetName(TagType tag) const; + + //! Returns the number of allocated tags in the registry. + size_t GetAllocatedTagCount() const; + + private: + TagRegistry() = default; + + struct Entry + { + Name m_name; + size_t m_refCount = 0; + }; + + mutable AZStd::shared_mutex m_mutex; + AZStd::array m_entriesByTag; + size_t m_allocatedTagCount = 0; + }; + + template + Ptr> TagRegistry::Create() + { + return aznew TagRegistry(); + } + + template + void TagRegistry::Reset() + { + AZStd::unique_lock lock(m_mutex); + m_entriesByTag.fill({}); + m_allocatedTagCount = 0; + } + + template + TagType TagRegistry::AcquireTag(const Name& tagName) + { + if (tagName.IsEmpty()) + { + return {}; + } + + TagType tag; + Entry* foundEmptyEntry = nullptr; + + AZStd::unique_lock lock(m_mutex); + for (size_t i = 0; i < m_entriesByTag.size(); ++i) + { + Entry& entry = m_entriesByTag[i]; + + // Found an empty entry. Cache off the tag and pointer, but keep searching to find if + // another entry holds the same name. + if (entry.m_refCount == 0 && !foundEmptyEntry) + { + foundEmptyEntry = &entry; + tag = TagType(i); + } + else if (entry.m_name == tagName) + { + entry.m_refCount++; + return TagType(i); + } + } + + // No other entry holds the name, so allocate the empty entry. + if (foundEmptyEntry) + { + foundEmptyEntry->m_refCount = 1; + foundEmptyEntry->m_name = tagName; + ++m_allocatedTagCount; + } + + return tag; + } + + template + void TagRegistry::ReleaseTag(TagType tag) + { + if (tag.IsValid()) + { + AZStd::unique_lock lock(m_mutex); + Entry& entry = m_entriesByTag[tag.GetIndex()]; + const size_t refCount = --entry.m_refCount; + AZ_Assert( + refCount != static_cast(-1), "Attempted to forfeit a tag that is not valid. Tag{%d},Name{'%s'}", tag, + entry.m_name.GetCStr()); + if (refCount == 0) + { + entry.m_name = Name(); + --m_allocatedTagCount; + } + } + } + + template + TagType TagRegistry::FindTag(const Name& tagName) const + { + AZStd::shared_lock lock(m_mutex); + for (size_t i = 0; i < m_entriesByTag.size(); ++i) + { + if (m_entriesByTag[i].m_name == tagName) + { + return TagType(i); + } + } + return {}; + } + + template + Name TagRegistry::GetName(TagType tag) const + { + if (tag.GetIndex() < m_entriesByTag.size()) + { + return m_entriesByTag[tag.GetIndex()].m_name; + } + else + { + return Name(); + } + } + + template + size_t TagRegistry::GetAllocatedTagCount() const + { + return m_allocatedTagCount; + } + } +} diff --git a/Gems/Atom/RHI/Code/Source/RHI/DrawList.cpp b/Gems/Atom/RHI/Code/Source/RHI/DrawList.cpp index 518ec59ac5..c50255224f 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/DrawList.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/DrawList.cpp @@ -35,8 +35,7 @@ namespace AZ switch (sortType) { case DrawListSortType::KeyThenDepth: - AZStd::sort(drawList.begin(), drawList.end(), - [](const DrawItemKeyPair& a, const DrawItemKeyPair& b) + AZStd::sort(drawList.begin(), drawList.end(), [](const DrawItemProperties& a, const DrawItemProperties& b) { if (a.m_sortKey != b.m_sortKey) { @@ -48,8 +47,7 @@ namespace AZ break; case DrawListSortType::KeyThenReverseDepth: - AZStd::sort(drawList.begin(), drawList.end(), - [](const DrawItemKeyPair& a, const DrawItemKeyPair& b) + AZStd::sort(drawList.begin(), drawList.end(), [](const DrawItemProperties& a, const DrawItemProperties& b) { if (a.m_sortKey != b.m_sortKey) { @@ -61,8 +59,7 @@ namespace AZ break; case DrawListSortType::DepthThenKey: - AZStd::sort(drawList.begin(), drawList.end(), - [](const DrawItemKeyPair& a, const DrawItemKeyPair& b) + AZStd::sort(drawList.begin(), drawList.end(), [](const DrawItemProperties& a, const DrawItemProperties& b) { if (a.m_depth != b.m_depth) { @@ -74,8 +71,7 @@ namespace AZ break; case DrawListSortType::ReverseDepthThenKey: - AZStd::sort(drawList.begin(), drawList.end(), - [](const DrawItemKeyPair& a, const DrawItemKeyPair& b) + AZStd::sort(drawList.begin(), drawList.end(), [](const DrawItemProperties& a, const DrawItemProperties& b) { if (a.m_depth != b.m_depth) { diff --git a/Gems/Atom/RHI/Code/Source/RHI/DrawListContext.cpp b/Gems/Atom/RHI/Code/Source/RHI/DrawListContext.cpp index dbd06c6969..8cec5ba39b 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/DrawListContext.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/DrawListContext.cpp @@ -63,14 +63,14 @@ namespace AZ if (m_drawListMask[drawListTag.GetIndex()]) { - DrawItemKeyPair drawItem = drawPacket->GetDrawItem(i); + DrawItemProperties drawItem = drawPacket->GetDrawItem(i); drawItem.m_depth = depth; threadListsByTag[drawListTag.GetIndex()].push_back(drawItem); } } } - void DrawListContext::AddDrawItem(DrawListTag drawListTag, DrawItemKeyPair drawItemKeyPair) + void DrawListContext::AddDrawItem(DrawListTag drawListTag, DrawItemProperties drawItemProperties) { if (Validation::IsEnabled()) { @@ -84,7 +84,7 @@ namespace AZ if (m_drawListMask[drawListTag.GetIndex()]) { DrawListsByTag& drawListsByTag = m_threadListsByTag.GetStorage(); - drawListsByTag[drawListTag.GetIndex()].push_back(drawItemKeyPair); + drawListsByTag[drawListTag.GetIndex()].push_back(drawItemProperties); } } diff --git a/Gems/Atom/RHI/Code/Source/RHI/DrawListTagRegistry.cpp b/Gems/Atom/RHI/Code/Source/RHI/DrawListTagRegistry.cpp deleted file mode 100644 index 14d517962a..0000000000 --- a/Gems/Atom/RHI/Code/Source/RHI/DrawListTagRegistry.cpp +++ /dev/null @@ -1,117 +0,0 @@ -/* -* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -* its licensors. -* -* For complete copyright and license terms please see the LICENSE at the root of this -* distribution (the "License"). All use of this software is governed by the License, -* or, if provided, by the license below or the license accompanying this file. Do not -* remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* -*/ - -#include - -namespace AZ -{ - namespace RHI - { - Ptr DrawListTagRegistry::Create() - { - return aznew DrawListTagRegistry; - } - - void DrawListTagRegistry::Reset() - { - AZStd::unique_lock lock(m_mutex); - m_entriesByTag.fill({}); - m_allocatedTagCount = 0; - } - - DrawListTag DrawListTagRegistry::AcquireTag(const Name& drawListName) - { - if (drawListName.IsEmpty()) - { - return {}; - } - - DrawListTag drawListTag; - Entry* foundEmptyEntry = nullptr; - - AZStd::unique_lock lock(m_mutex); - for (size_t i = 0; i < m_entriesByTag.size(); ++i) - { - Entry& entry = m_entriesByTag[i]; - - // Found an empty entry. Cache off the tag and pointer, but keep searching to find if - // another entry holds the same name. - if (entry.m_refCount == 0 && !foundEmptyEntry) - { - foundEmptyEntry = &entry; - drawListTag = DrawListTag(i); - } - else if (entry.m_name == drawListName) - { - entry.m_refCount++; - return DrawListTag(i); - } - } - - // No other entry holds the name, so allocate the empty entry. - if (foundEmptyEntry) - { - foundEmptyEntry->m_refCount = 1; - foundEmptyEntry->m_name = drawListName; - ++m_allocatedTagCount; - } - - return drawListTag; - } - - void DrawListTagRegistry::ReleaseTag(DrawListTag drawListTag) - { - if (drawListTag.IsValid()) - { - AZStd::unique_lock lock(m_mutex); - Entry& entry = m_entriesByTag[drawListTag.GetIndex()]; - const size_t refCount = --entry.m_refCount; - AZ_Assert(refCount != static_cast(-1), "Attempted to forfeit a tag that is not valid. Tag{%d},Name{'%s'}", drawListTag, entry.m_name.GetCStr()); - if (refCount == 0) - { - entry.m_name = Name(); - --m_allocatedTagCount; - } - } - } - - DrawListTag DrawListTagRegistry::FindTag(const Name& drawListName) const - { - AZStd::shared_lock lock(m_mutex); - for (size_t i = 0; i < m_entriesByTag.size(); ++i) - { - if (m_entriesByTag[i].m_name == drawListName) - { - return DrawListTag(i); - } - } - return {}; - } - - Name DrawListTagRegistry::GetName(DrawListTag tag) const - { - if (tag.GetIndex() < m_entriesByTag.size()) - { - return m_entriesByTag[tag.GetIndex()].m_name; - } - else - { - return Name(); - } - } - - size_t DrawListTagRegistry::GetAllocatedTagCount() const - { - return m_allocatedTagCount; - } - } -} diff --git a/Gems/Atom/RHI/Code/Source/RHI/DrawPacket.cpp b/Gems/Atom/RHI/Code/Source/RHI/DrawPacket.cpp index fdc925c341..85580fdc84 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/DrawPacket.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/DrawPacket.cpp @@ -24,10 +24,10 @@ namespace AZ return m_drawItemCount; } - DrawItemKeyPair DrawPacket::GetDrawItem(size_t index) const + DrawItemProperties DrawPacket::GetDrawItem(size_t index) const { AZ_Assert(index < GetDrawItemCount(), "Out of bounds array access!"); - return DrawItemKeyPair(&m_drawItems[index], m_drawItemSortKeys[index]); + return DrawItemProperties(&m_drawItems[index], m_drawItemSortKeys[index], m_drawFilterMask); } DrawListTag DrawPacket::GetDrawListTag(size_t index) const @@ -36,6 +36,11 @@ namespace AZ return m_drawListTags[index]; } + DrawFilterMask DrawPacket::GetDrawFilterMask() const + { + return m_drawFilterMask; + } + DrawListMask DrawPacket::GetDrawListMask() const { return m_drawListMask; diff --git a/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp b/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp index 203818b166..45732e66a7 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/DrawPacketBuilder.cpp @@ -82,6 +82,11 @@ namespace AZ } } + void DrawPacketBuilder::SetDrawFilterMask(DrawFilterMask filterMask) + { + m_drawFilterMask = filterMask; + } + void DrawPacketBuilder::AddDrawItem(const DrawRequest& request) { if (request.m_listTag.IsValid()) @@ -165,6 +170,7 @@ namespace AZ drawPacket->m_allocator = m_allocator; drawPacket->m_indexBufferView = m_indexBufferView; drawPacket->m_drawListMask = m_drawListMask; + drawPacket->m_drawFilterMask = m_drawFilterMask; if (shaderResourceGroupsOffset.IsValid()) { @@ -288,6 +294,7 @@ namespace AZ m_rootConstants = {}; m_scissors.clear(); m_viewports.clear(); + m_drawFilterMask = DrawFilterMaskDefaultValue; } } } diff --git a/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp b/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp index 067090e909..f92d2621b1 100644 --- a/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp +++ b/Gems/Atom/RHI/Code/Source/RHI/RHISystem.cpp @@ -60,7 +60,7 @@ namespace AZ AZ_Assert(false, "RHISystem", "Unable to initialize RHI! \n"); return; } - + m_drawListTagRegistry = RHI::DrawListTagRegistry::Create(); m_pipelineStateCache = RHI::PipelineStateCache::Create(*m_device); @@ -199,7 +199,6 @@ namespace AZ m_frameScheduler.Shutdown(); m_platformLimitsDescriptor = nullptr; - m_drawListTagRegistry = nullptr; m_pipelineStateCache = nullptr; m_device->PreShutdown(); AZ_Assert(m_device->use_count()==1, "The ref count for Device is %i but it should be 1 here to ensure all the resources are released", m_device->use_count()); diff --git a/Gems/Atom/RHI/Code/Tests/DrawPacketTests.cpp b/Gems/Atom/RHI/Code/Tests/DrawPacketTests.cpp index 75a9081100..7fc393cd0c 100644 --- a/Gems/Atom/RHI/Code/Tests/DrawPacketTests.cpp +++ b/Gems/Atom/RHI/Code/Tests/DrawPacketTests.cpp @@ -80,11 +80,11 @@ namespace UnitTest m_indexBufferView = RHI::IndexBufferView(*m_bufferEmpty, random.GetRandom(), random.GetRandom(), RHI::IndexFormat::Uint16); } - void ValidateDrawItem(const DrawItemData& drawItemData, RHI::DrawItemKeyPair itemKeyPair) const + void ValidateDrawItem(const DrawItemData& drawItemData, RHI::DrawItemProperties itemProperties) const { - const RHI::DrawItem* drawItem = itemKeyPair.m_item; + const RHI::DrawItem* drawItem = itemProperties.m_item; - EXPECT_EQ(itemKeyPair.m_sortKey, drawItemData.m_sortKey); + EXPECT_EQ(itemProperties.m_sortKey, drawItemData.m_sortKey); EXPECT_EQ(drawItem->m_stencilRef, drawItemData.m_stencilRef); EXPECT_EQ(drawItem->m_pipelineState, drawItemData.m_pipelineState); diff --git a/Gems/Atom/RHI/Code/atom_rhi_public_files.cmake b/Gems/Atom/RHI/Code/atom_rhi_public_files.cmake index 79239e2c09..d39c3cb6df 100644 --- a/Gems/Atom/RHI/Code/atom_rhi_public_files.cmake +++ b/Gems/Atom/RHI/Code/atom_rhi_public_files.cmake @@ -36,6 +36,7 @@ set(FILES Include/Atom/RHI/CopyItem.h Include/Atom/RHI/ConstantsData.h Include/Atom/RHI/DispatchItem.h + Include/Atom/RHI/DrawFilterTagRegistry.h Include/Atom/RHI/DrawItem.h Include/Atom/RHI/DrawList.h Include/Atom/RHI/DrawListTagRegistry.h @@ -48,7 +49,6 @@ set(FILES Source/RHI/ConstantsData.cpp Source/RHI/DrawList.cpp Source/RHI/DrawListContext.cpp - Source/RHI/DrawListTagRegistry.cpp Source/RHI/DrawPacket.cpp Source/RHI/DrawPacketBuilder.cpp Include/Atom/RHI/Device.h @@ -201,4 +201,5 @@ set(FILES Include/Atom/RHI/CpuProfiler.h Include/Atom/RHI/CpuProfilerImpl.h Source/RHI/CpuProfilerImpl.cpp + Include/Atom/RHI/TagRegistry.h ) diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h index 3393f6af5c..789717cabe 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawContext.h @@ -214,6 +214,10 @@ namespace AZ Scene* m_scene = nullptr; RHI::DrawListTag m_drawListTag; + // All draw items use this filter when submit them to views + // It's set to RenderPipeline's draw filter mask if the DynamicDrawContext was created for a render pipeline. + RHI::DrawFilterMask m_drawFilter = RHI::DrawFilterMaskDefaultValue; + // Cached draw data AZStd::vector m_cachedStreamBufferViews; AZStd::vector m_cachedIndexBufferViews; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawInterface.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawInterface.h index cd7f9d1bb6..50b13277af 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawInterface.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawInterface.h @@ -56,9 +56,11 @@ namespace AZ //! Draw calls which are made to this DynamicDrawContext will only be submitted for this scene. //! The created DynamicDrawContext is managed by dynamic draw system. virtual RHI::Ptr CreateDynamicDrawContext(Scene* scene) = 0; - - //! Create a DynamicDrawContext for specified pass - virtual RHI::Ptr CreateDynamicDrawContext(Pass* pass = nullptr) = 0; + + //! Create a DynamicDrawContext for specified render pipeline + //! Draw calls submitted through the context created by this function are only submitted + //! to the supplied render pipeline (viewport) + virtual RHI::Ptr CreateDynamicDrawContext(RenderPipeline* pipeline) = 0; //! Get a DynamicBuffer from DynamicDrawSystem. //! The returned buffer will be invalidated every time the RPISystem's RenderTick is called diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawSystem.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawSystem.h index 07cbed7e72..21c0078374 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawSystem.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/DynamicDraw/DynamicDrawSystem.h @@ -36,7 +36,7 @@ namespace AZ // DynamicDrawInterface overrides... RHI::Ptr CreateDynamicDrawContext(Scene* scene) override; - RHI::Ptr CreateDynamicDrawContext(Pass* pass) override; + RHI::Ptr CreateDynamicDrawContext(RenderPipeline* pipeline) override; RHI::Ptr GetDynamicBuffer(uint32_t size, uint32_t alignment = 1) override; void DrawGeometry(Data::Instance material, const GeometryData& geometry, ScenePtr scene) override; void AddDrawPacket(Scene* scene, AZStd::unique_ptr drawPacket) override; diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RenderPipeline.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RenderPipeline.h index b81aa84c20..5595c1d2ac 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RenderPipeline.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/RenderPipeline.h @@ -184,6 +184,12 @@ namespace AZ //! Get current render mode RenderMode GetRenderMode() const; + //! Get draw filter tag + RHI::DrawFilterTag GetDrawFilterTag() const; + + //! Get draw filter mask + RHI::DrawFilterMask GetDrawFilterMask() const; + private: RenderPipeline() = default; @@ -211,6 +217,8 @@ namespace AZ // if the view already exists in map, its DrawListMask will be combined to the existing one's void CollectPersistentViews(AZStd::map& outViewMasks) const; + void SetDrawFilterTag(RHI::DrawFilterTag); + // End of functions accessed by Scene class ////////////////////////////////////////////////// @@ -250,6 +258,13 @@ namespace AZ // Original settings from RenderPipelineDescriptor, used to revert active render settings to original settings from RenderPipelineDescriptor PipelineRenderSettings m_originalRenderSettings; + + // A tag to filter draw items submitted by passes of this render pipeline. + // This tag is allocated when it's added to a scene. It's set to invalid when it's removed to the scene. + RHI::DrawFilterTag m_drawFilterTag; + // A mask to filter draw items submitted by passes of this render pipeline. + // This mask is created from the value of m_drawFilterTag. + RHI::DrawFilterMask m_drawFilterMask = 0; }; } // namespace RPI diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Scene.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Scene.h index aac6f4fb97..3238785d81 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Scene.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/Scene.h @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -234,6 +235,9 @@ namespace AZ // reference of dynamic draw system (from RPISystem) DynamicDrawSystem* m_dynamicDrawSystem = nullptr; + + // Registry which allocates draw filter tag for RenderPipeline + RHI::Ptr m_drawFilterTagRegistry; }; // --- Template functions --- diff --git a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/View.h b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/View.h index 8721e08028..d6146d3760 100644 --- a/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/View.h +++ b/Gems/Atom/RPI/Code/Include/Atom/RPI.Public/View.h @@ -75,7 +75,7 @@ namespace AZ void AddDrawPacket(const RHI::DrawPacket* drawPacket, Vector3 worldPosition); //! Add a draw item to this view with its associated draw list tag - void AddDrawItem(RHI::DrawListTag drawListTag, const RHI::DrawItemKeyPair& drawItemKeyPair); + void AddDrawItem(RHI::DrawListTag drawListTag, const RHI::DrawItemProperties& drawItemProperties); //! Sets the worldToView matrix and recalculates the other matrices. void SetWorldToViewMatrix(const AZ::Matrix4x4& worldToView); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp index 5117c3d9dd..65b698f9ac 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawContext.cpp @@ -17,6 +17,7 @@ #include #include #include +#include #include @@ -601,10 +602,11 @@ namespace AZ drawItemInfo.m_drawItem.m_streamBufferViews = &m_cachedStreamBufferViews[drawItemInfo.m_vertexBufferViewIndex]; } - RHI::DrawItemKeyPair drawItemKeyPair; - drawItemKeyPair.m_sortKey = sortKey; - drawItemKeyPair.m_item = &drawItemInfo.m_drawItem; - view->AddDrawItem(m_drawListTag, drawItemKeyPair); + RHI::DrawItemProperties drawItemProperties; + drawItemProperties.m_sortKey = sortKey; + drawItemProperties.m_item = &drawItemInfo.m_drawItem; + drawItemProperties.m_drawFilterMask = m_drawFilter; + view->AddDrawItem(m_drawListTag, drawItemProperties); sortKey++; } } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawSystem.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawSystem.cpp index d7c459cbde..35b5fb205c 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawSystem.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/DynamicDraw/DynamicDrawSystem.cpp @@ -59,6 +59,11 @@ namespace AZ RHI::Ptr DynamicDrawSystem::CreateDynamicDrawContext(Scene* scene) { + if (!scene) + { + AZ_Error("RPI", false, "Failed to create a DynamicDrawContext: the input scene is invalid"); + return nullptr; + } RHI::Ptr drawContext = aznew DynamicDrawContext(); drawContext->m_scene = scene; @@ -67,11 +72,17 @@ namespace AZ return drawContext; } - // [GFX TODO][ATOM-13185] Add support for creating DynamicDrawContext for Pass - RHI::Ptr DynamicDrawSystem::CreateDynamicDrawContext([[maybe_unused]] Pass* pass) + RHI::Ptr DynamicDrawSystem::CreateDynamicDrawContext(RenderPipeline* pipeline) { - AZ_Error("RPI", false, "Unimplemented function"); - return nullptr; + if (!pipeline || !pipeline->GetScene()) + { + AZ_Error("RPI", false, "Failed to create a DynamicDrawContext: the input RenderPipeline is invalid or wasn't added to a Scene"); + return nullptr; + } + + auto context = CreateDynamicDrawContext(pipeline->GetScene()); + context->m_drawFilter = pipeline->GetDrawFilterMask(); + return context; } // [GFX TODO][ATOM-13184] Add support of draw geometry with material for DynamicDrawSystemInterface diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/RasterPass.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/RasterPass.cpp index 84d1499602..baf1d22da5 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/RasterPass.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/RasterPass.cpp @@ -195,9 +195,12 @@ namespace AZ SetSrgsForDraw(commandList); } - for (const RHI::DrawItemKeyPair& drawItemKeyPair : drawListViewPartition) + for (const RHI::DrawItemProperties& drawItemProperties : drawListViewPartition) { - commandList->Submit(*drawItemKeyPair.m_item); + if (drawItemProperties.m_drawFilterMask & m_pipeline->GetDrawFilterMask()) + { + commandList->Submit(*drawItemProperties.m_item); + } } } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/RenderPipeline.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/RenderPipeline.cpp index 20b6674fb9..cc0cefd082 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/RenderPipeline.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/RenderPipeline.cpp @@ -300,6 +300,9 @@ namespace AZ m_scene = nullptr; m_rootPass->SetEnabled(false); m_rootPass->QueueForRemoval(); + + m_drawFilterTag.Reset(); + m_drawFilterMask = 0; } void RenderPipeline::OnPassModified() @@ -506,5 +509,28 @@ namespace AZ { return m_renderMode != RenderMode::NoRender; } + + RHI::DrawFilterTag RenderPipeline::GetDrawFilterTag() const + { + return m_drawFilterTag; + } + + RHI::DrawFilterMask RenderPipeline::GetDrawFilterMask() const + { + return m_drawFilterMask; + } + + void RenderPipeline::SetDrawFilterTag(RHI::DrawFilterTag tag) + { + m_drawFilterTag = tag; + if (m_drawFilterTag.IsValid()) + { + m_drawFilterMask = 1 << tag.GetIndex(); + } + else + { + m_drawFilterMask = 0; + } + } } } diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp index 00054881a1..2c11ef9a41 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Scene.cpp @@ -87,6 +87,7 @@ namespace AZ m_id = Uuid::CreateRandom(); m_cullingScene = aznew CullingScene(); SceneRequestBus::Handler::BusConnect(m_id); + m_drawFilterTagRegistry = RHI::DrawFilterTagRegistry::Create(); } Scene::~Scene() @@ -269,6 +270,8 @@ namespace AZ return; } + pipeline->SetDrawFilterTag(m_drawFilterTagRegistry->AcquireTag(pipelineId)); + m_pipelines.push_back(pipeline); // Set this pipeline as default if the default pipeline was empty. This pipeline should be the first pipeline be added to the scene @@ -303,6 +306,8 @@ namespace AZ m_defaultPipeline = nullptr; } + m_drawFilterTagRegistry->ReleaseTag(pipelineToRemove->GetDrawFilterTag()); + pipelineToRemove->OnRemovedFromScene(this); m_pipelines.erase(it); diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/View.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/View.cpp index 9dbc5463af..e3f41cbda9 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/View.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/View.cpp @@ -90,9 +90,9 @@ namespace AZ AddDrawPacket(drawPacket, depth); } - void View::AddDrawItem(RHI::DrawListTag drawListTag, const RHI::DrawItemKeyPair& drawItemKeyPair) + void View::AddDrawItem(RHI::DrawListTag drawListTag, const RHI::DrawItemProperties& drawItemProperties) { - m_drawListContext.AddDrawItem(drawListTag, drawItemKeyPair); + m_drawListContext.AddDrawItem(drawListTag, drawItemProperties); } void View::SetWorldToViewMatrix(const AZ::Matrix4x4& worldToView) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp index 518174d0f8..f0cea19645 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp @@ -510,7 +510,7 @@ namespace ScriptCanvas AZ_Assert(lua_isuserdata(lua, 1), "CallExecutionOut: Error in compiled lua file, 1st argument to SetExecutionOut is not userdata (Nodeable)"); AZ_Assert(lua_isnumber(lua, 2), "CallExecutionOut: Error in compiled lua file, 2nd argument to SetExecutionOut is not a number"); Nodeable* nodeable = AZ::ScriptValue::StackRead(lua, 1); - size_t index = aznumeric_caster(lua_tointeger(lua, -2)); + size_t index = aznumeric_caster(lua_tointeger(lua, 2)); nodeable->CallOut(index, nullptr, nullptr, argsCount - 2); // Lua: results... return lua_gettop(lua); @@ -697,7 +697,7 @@ namespace ScriptCanvas AZ_Assert(lua_islightuserdata(lua, 2), "Error in compiled lua file, 2nd argument to UnpackDependencyArgs is not userdata (AZStd::vector>*), but a :%s", lua_typename(lua, 2)); auto dependentAssets = reinterpret_cast>*>(lua_touserdata(lua, 2)); AZ_Assert(lua_isinteger(lua, 3), "Error in compiled Lua file, 3rd argument to UnpackDependencyArgs is not a number"); - const size_t dependentAssetsIndex = lua_tointeger(lua, 3); + const size_t dependentAssetsIndex = aznumeric_caster(lua_tointeger(lua, 3)); return DependencyConstructionPack{ executionState, dependentAssets, dependentAssetsIndex, (*dependentAssets)[dependentAssetsIndex].Get()->m_runtimeData }; } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp index 3bc105d1dd..921613cea8 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp @@ -3257,13 +3257,12 @@ namespace ScriptCanvas return; } - execution->SetNodeable(iter->second->m_nodeable); + child->SetNodeable(iter->second->m_nodeable); for (auto& childOutSlot : childOutSlots) { AZ_Assert(childOutSlot, "null slot in child out slot list"); ExecutionTreePtr internalOut = OpenScope(child, node, childOutSlot); - internalOut->SetNodeable(execution->GetNodeable()); const size_t outIndex = node->GetOutIndex(*childOutSlot); if (outIndex == std::numeric_limits::max()) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.h index f1cebde204..3d0d75b313 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.h @@ -262,9 +262,6 @@ namespace ScriptCanvas void SetSymbol(Symbol val); - protected: - VariableConstPtr m_nodeable; - private: // the (possible) slot(s) through which execution exited, along with associated output AZStd::vector m_children; @@ -316,6 +313,8 @@ namespace ScriptCanvas Symbol m_symbol = Symbol::FunctionCall; + VariableConstPtr m_nodeable; + size_t FindIndexOfChild(ExecutionTreeConstPtr child) const; }; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Method.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Method.cpp index 0e0467fdcc..836c3facab 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Method.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/Method.cpp @@ -276,7 +276,7 @@ namespace ScriptCanvas if (IsMethodOverloaded() && BehaviorContextUtils::FindExplicitOverload(method, bcClass, className, methodName, &prettyClassName)) { - MethodConfiguration config(*method, method->IsMember() ? MethodType::Member : MethodType::Free); + MethodConfiguration config(*method, MethodType::Member); config.m_class = bcClass; config.m_namespaces = &m_namespaces; config.m_className = &className; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp index ee55fff259..128ef95b63 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp @@ -582,7 +582,7 @@ namespace ScriptCanvas void GraphToLua::TranslateExecutionTreeFunctionCall(Grammar::ExecutionTreeConstPtr execution) { - TranslateNodeableOuts(execution); + TranslateNodeableOuts(execution->GetNodeable(), execution); WriteDebugInfoIn(execution, "TranslateExecutionTreeFunctionCall begin"); m_dotLua.WriteIndent(); WriteLocalOutputInitialization(execution); @@ -955,7 +955,7 @@ namespace ScriptCanvas for (auto& out : nodeAndParse->m_latents) { m_dotLua.WriteNewLine(); - TranslateNodeableOut(out.second); + TranslateNodeableOut(nodeAndParse->m_nodeable, out.second); } if (!nodeAndParse->m_latents.empty()) @@ -1017,7 +1017,7 @@ namespace ScriptCanvas m_dotLua.WriteNewLine(); } - void GraphToLua::TranslateNodeableOut(Grammar::ExecutionTreeConstPtr execution) + void GraphToLua::TranslateNodeableOut(Grammar::VariableConstPtr host, Grammar::ExecutionTreeConstPtr execution) { auto outCallIndexOptional = execution->GetOutCallIndex(); if (!outCallIndexOptional) @@ -1037,7 +1037,7 @@ namespace ScriptCanvas m_dotLua.WriteLineIndented("%s(self.%s, %zu, -- %s" , setExecutionOutName - , execution->GetNodeable()->m_name.data() + , host->m_name.data() , outIndex , execution->GetName().data()); @@ -1048,14 +1048,14 @@ namespace ScriptCanvas m_dotLua.Outdent(); } - void GraphToLua::TranslateNodeableOuts(Grammar::ExecutionTreeConstPtr execution) + void GraphToLua::TranslateNodeableOuts(Grammar::VariableConstPtr host, Grammar::ExecutionTreeConstPtr execution) { const auto outs = execution->GetInternalOuts(); for (const auto& out : outs) { m_dotLua.WriteNewLine(); - TranslateNodeableOut(out); + TranslateNodeableOut(host, out); } if (!outs.empty()) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.h index ab80627944..3d4379d98d 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.h @@ -111,8 +111,8 @@ namespace ScriptCanvas void TranslateFunctionBlock(Grammar::ExecutionTreeConstPtr execution, FunctionBlockConfig functionBlockConfig, IsNamed lex); void TranslateFunctionDefinition(Grammar::ExecutionTreeConstPtr execution, IsNamed lex); void TranslateInheritance(); - void TranslateNodeableOut(Grammar::ExecutionTreeConstPtr execution); - void TranslateNodeableOuts(Grammar::ExecutionTreeConstPtr execution); + void TranslateNodeableOut(Grammar::VariableConstPtr host, Grammar::ExecutionTreeConstPtr execution); + void TranslateNodeableOuts(Grammar::VariableConstPtr host, Grammar::ExecutionTreeConstPtr execution); void TranslateNodeableParse(); void TranslateStaticInitialization(); void TranslateVariableInitialization(AZStd::string_view leftValue); diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_IsOneFunction.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_IsOneFunction.scriptcanvas new file mode 100644 index 0000000000..72cc8fa4a0 --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_IsOneFunction.scriptcanvas @@ -0,0 +1,1677 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_IsZeroFunction.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_IsZeroFunction.scriptcanvas new file mode 100644 index 0000000000..081a45c63a --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_IsZeroFunction.scriptcanvas @@ -0,0 +1,1677 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_UserBranchSanityCheck.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_UserBranchSanityCheck.scriptcanvas new file mode 100644 index 0000000000..d8d26dbdbb --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_UserBranchSanityCheck.scriptcanvas @@ -0,0 +1,1248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp index 3e02e90ae9..3e727ca3db 100644 --- a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp +++ b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp @@ -100,6 +100,11 @@ TEST_F(ScriptCanvasTestFixture, InterpretedReadEnumConstant) RunUnitTestGraph("LY_SC_UnitTest_ReadEnumConstant"); } +TEST_F(ScriptCanvasTestFixture, UserBranchSanityCheck) +{ + RunUnitTestGraph("LY_SC_UnitTest_UserBranchSanityCheck"); +} + TEST_F(ScriptCanvasTestFixture, InterpretedEventHandlerNoDisconnect) { GlobalHandler handler; diff --git a/cmake/3rdParty/Findlibav.cmake b/cmake/3rdParty/Findlibav.cmake deleted file mode 100644 index f14a4cfe50..0000000000 --- a/cmake/3rdParty/Findlibav.cmake +++ /dev/null @@ -1,17 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -ly_add_external_target( - NAME libav - VERSION 11.7 - INCLUDE_DIRECTORIES - usr/include -) diff --git a/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake b/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake index 546cd9811f..57dc8ed604 100644 --- a/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake +++ b/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake @@ -13,6 +13,5 @@ set(FILES BuiltInPackages_windows.cmake dyad_windows.cmake FbxSdk_windows.cmake - libav_windows.cmake Wwise_windows.cmake ) diff --git a/cmake/3rdParty/Platform/Windows/libav_windows.cmake b/cmake/3rdParty/Platform/Windows/libav_windows.cmake deleted file mode 100644 index f41cde4089..0000000000 --- a/cmake/3rdParty/Platform/Windows/libav_windows.cmake +++ /dev/null @@ -1,46 +0,0 @@ -# -# All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or -# its licensors. -# -# For complete copyright and license terms please see the LICENSE at the root of this -# distribution (the "License"). All use of this software is governed by the License, -# or, if provided, by the license below or the license accompanying this file. Do not -# remove or modify any license notices. This file is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# - -set(LIBAV_LIB_PATH ${BASE_PATH}/usr/bin/) -set(LIBAV_LIBS - avcodec - avdevice - avfilter - avformat - avresample - avutil - swscale -) - -list(TRANSFORM LIBAV_LIBS PREPEND ${LIBAV_LIB_PATH}${CMAKE_STATIC_LIBRARY_PREFIX}) -list(TRANSFORM LIBAV_LIBS APPEND "${CMAKE_STATIC_LIBRARY_SUFFIX}") - - -set(LIBAV_SHARED - avcodec-56 - avdevice-55 - avfilter-5 - avformat-56 - avresample-2 - avutil-54 - libogg-0 - libopus-0 - libvo-aacenc-0 - libvorbis-0 - libvorbisenc-2 - swscale-3 - zlib1 -) - -list(TRANSFORM LIBAV_SHARED PREPEND ${LIBAV_LIB_PATH}${CMAKE_SHARED_LIBRARY_PREFIX}) -list(TRANSFORM LIBAV_SHARED APPEND "${CMAKE_SHARED_LIBRARY_SUFFIX}") -list(JOIN LIBAV_SHARED ";" LIBAV_SHARED_STRING) -set(LIBAV_RUNTIME_DEPENDENCIES ${LIBAV_SHARED_STRING}) diff --git a/cmake/3rdParty/cmake_files.cmake b/cmake/3rdParty/cmake_files.cmake index d37fcba840..a4737b7020 100644 --- a/cmake/3rdParty/cmake_files.cmake +++ b/cmake/3rdParty/cmake_files.cmake @@ -14,7 +14,6 @@ set(FILES FindClang.cmake Finddyad.cmake FindFbxSdk.cmake - Findlibav.cmake FindOpenGLInterface.cmake FindRadTelemetry.cmake FindVkValidation.cmake diff --git a/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json b/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json index 97deb11ea6..a9ed45daca 100644 --- a/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json +++ b/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json @@ -10,7 +10,6 @@ "etc2comp/2017_04_24-az.2/**": "#include", "expat/2.1.0-pkg.3/**": "#include", "FbxSdk/2016.1.2-az.1/**": "#include", - "libav/11.7/**": "#include", "OpenSSL/1.1.1b-noasm-az/**": "#include", "Qt/5.15.1.2-az/**": "#include", "RadTelemetry/3.5.0.17/**": "#include",