From 961f2ef1133ec27d68cbf2d6ee0c839cdecf1760 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 20 Apr 2021 12:04:57 -0700 Subject: [PATCH 01/11] Replace string/hash based execution out look up for indices, 10-50% speed up in lookup code. Fix bugs calling dependent functions. --- .../ScriptCanvasBuilderWorkerUtility.cpp | 2 + .../FunctionNodePaletteTreeItemTypes.cpp | 4 +- .../AutoGen/ScriptCanvasNodeable_Source.jinja | 2 +- .../ScriptCanvas_Nodeable_Macros.jinja | 34 +- .../Include/ScriptCanvas/Core/EBusHandler.cpp | 14 +- .../Code/Include/ScriptCanvas/Core/Node.cpp | 44 + .../Code/Include/ScriptCanvas/Core/Node.h | 4 + .../Include/ScriptCanvas/Core/Nodeable.cpp | 89 +- .../Code/Include/ScriptCanvas/Core/Nodeable.h | 118 +- .../ScriptCanvas/Core/NodeableNode.cpp | 13 - .../Include/ScriptCanvas/Core/NodeableNode.h | 2 - .../ScriptCanvas/Core/SlotExecutionMap.cpp | 16 - .../ScriptCanvas/Core/SlotExecutionMap.h | 2 - .../ScriptCanvas/Core/SubgraphInterface.cpp | 21 +- .../ScriptCanvas/Core/SubgraphInterface.h | 4 +- .../Interpreted/ExecutionInterpretedAPI.cpp | 73 +- .../ExecutionInterpretedEBusAPI.cpp | 35 +- .../Execution/RuntimeComponent.cpp | 2 +- .../Grammar/AbstractCodeModel.cpp | 37 +- .../ScriptCanvas/Grammar/AbstractCodeModel.h | 1 + .../ScriptCanvas/Grammar/ParsingUtilities.cpp | 7 + .../ScriptCanvas/Grammar/ParsingUtilities.h | 2 + .../Include/ScriptCanvas/Grammar/Primitives.h | 2 +- .../Grammar/PrimitivesDeclarations.h | 2 +- .../Grammar/PrimitivesExecution.cpp | 10 + .../Grammar/PrimitivesExecution.h | 6 + .../Internal/Nodeables/BaseTimer.cpp | 2 +- .../Libraries/Core/EBusEventHandler.cpp | 5 + .../Libraries/Core/EBusEventHandler.h | 1 + .../Libraries/Core/ReceiveScriptEvent.cpp | 5 + .../Libraries/Core/ReceiveScriptEvent.h | 1 + .../Operators/Math/OperatorLerpNodeable.h | 9 +- .../Include/ScriptCanvas/SystemComponent.h | 2 +- .../ScriptCanvas/Translation/GraphToLua.cpp | 67 +- .../Code/Source/SystemComponent.cpp | 4 +- ..._SC_UnitTest_ExecutionCycle10.scriptcanvas | 3216 +++++++++ ...tTest_ExecutionOutPerformance.scriptcanvas | 5753 +++++++++++++++++ ...C_UnitTest_HelloWorldFunction.scriptcanvas | 628 ++ ...est_HelloWorldFunctionNotPure.scriptcanvas | 733 +++ ...tentCallOfNotPureUserFunction.scriptcanvas | 750 +++ ..._LatentCallOfPureUserFunction.scriptcanvas | 750 +++ .../Framework/ScriptCanvasTestFixture.h | 12 +- .../Code/Source/ScriptCanvasTestBus.cpp | 81 + .../Code/Source/ScriptCanvasTestBus.h | 21 + .../ScriptCanvasTestingSystemComponent.cpp | 6 +- .../Tests/ScriptCanvas_RuntimeInterpreted.cpp | 15 + 46 files changed, 12336 insertions(+), 271 deletions(-) create mode 100644 Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_ExecutionCycle10.scriptcanvas create mode 100644 Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_ExecutionOutPerformance.scriptcanvas create mode 100644 Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_HelloWorldFunction.scriptcanvas create mode 100644 Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_HelloWorldFunctionNotPure.scriptcanvas create mode 100644 Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfNotPureUserFunction.scriptcanvas create mode 100644 Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfPureUserFunction.scriptcanvas diff --git a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp index 0a0c3f3712..ab59ddd840 100644 --- a/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp +++ b/Gems/ScriptCanvas/Code/Builder/ScriptCanvasBuilderWorkerUtility.cpp @@ -394,11 +394,13 @@ namespace ScriptCanvasBuilder int GetBuilderVersion() { + // #functions2 remove-execution-out-hash include version from all library nodes, split fingerprint generation to relax Is Out of Data restriction when graphs only need a recompile return static_cast(BuilderVersion::Current) + static_cast(ScriptCanvas::GrammarVersion::Current) + static_cast(ScriptCanvas::RuntimeVersion::Current) ; } + AZ::Outcome < AZ::Data::Asset, AZStd::string> LoadEditorAsset(AZStd::string_view filePath) { AZStd::shared_ptr assetDataStream = AZStd::make_shared(); diff --git a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/FunctionNodePaletteTreeItemTypes.cpp b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/FunctionNodePaletteTreeItemTypes.cpp index 6d36236906..e1d02c2792 100644 --- a/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/FunctionNodePaletteTreeItemTypes.cpp +++ b/Gems/ScriptCanvas/Code/Editor/View/Widgets/NodePalette/FunctionNodePaletteTreeItemTypes.cpp @@ -41,11 +41,11 @@ namespace ScriptCanvasEditor if (AZ::SerializeContext* serializeContext = azrtti_cast(reflectContext)) { serializeContext->Class() - ->Version(4) + ->Version(5) ->Field("AssetId", &CreateFunctionMimeEvent::m_assetId) + ->Field("sourceId", &CreateFunctionMimeEvent::m_sourceId) ; } - } CreateFunctionMimeEvent::CreateFunctionMimeEvent(const AZ::Data::AssetId& assetId, const AZ::Data::AssetType& assetType, const ScriptCanvas::Grammar::FunctionSourceId& sourceId) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasNodeable_Source.jinja b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasNodeable_Source.jinja index 7b873e1362..27498a2aec 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasNodeable_Source.jinja +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvasNodeable_Source.jinja @@ -158,7 +158,7 @@ return {{returnNames[0]}}; {% endfor %} {# ExecutionOuts #} // ExecutionOuts begin -{{ nodemacro.ExecutionOutDefinitions(Class, attribute_QualifiedName )}} +{{ nodemacro.ExecutionOutDefinitions(Class, attribute_QualifiedName)}} // ExecutionOuts end {# Reflect #} void {{attribute_QualifiedName}}::Reflect(AZ::ReflectContext* context) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvas_Nodeable_Macros.jinja b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvas_Nodeable_Macros.jinja index f66765004c..6cd0edd68c 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvas_Nodeable_Macros.jinja +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/AutoGen/ScriptCanvas_Nodeable_Macros.jinja @@ -307,41 +307,49 @@ AZStd::tuple<{{returns|join(", ")}}> {% for executionOut in Class.findall('Output') %} {{ ExecutionOutDeclaration(Class, executionOut) }} {%- endfor %} +size_t GetRequiredOutCount() const override; {% endmacro %} -{% macro ExecutionBranchDefinition(Class, qualifiedName, executionOut) %} +{% macro ExecutionBranchDefinition(Class, qualifiedName, executionOut, outIndexBranch) %} {% set outName = CleanName(executionOut.attrib['Name']) %} {% set returns = executionOut.findall('Parameter') %} {% set params = executionOut.findall('Return') %} -void {{qualifiedName}}::Call{{CleanName(outName)}}({{ExecutionOutReturnDefinition(returns)}}{{ExecutionOutParameterDefinition(returns, params)}}) { +void {{qualifiedName}}::Call{{outName}}({{ExecutionOutReturnDefinition(returns)}}{{ExecutionOutParameterDefinition(returns, params)}}) { {% if returns|length() == 0 %} - ExecutionOut(AZ_CRC_CE("{{ executionOut.attrib['Name'] }}"){% for parameter in params %}, {{CleanName(parameter.attrib['Name'])}} {% endfor %} + ExecutionOut({{ outIndexBranch }}{% for parameter in params %}, {{CleanName(parameter.attrib['Name'])}}{% endfor %} {% else %} - OutResult(AZ_CRC_CE("{{ executionOut.attrib['Name'] }}"), result{% for parameter in params %}, {{CleanName(parameter.attrib['Name'])}} {% endfor %} -{% endif -%}); + ExecutionOutResult({{ outIndexBranch }}, result{% for parameter in params %}, {{CleanName(parameter.attrib['Name'])}}{% endfor %} +{% endif -%}); // {{ executionOut.attrib['Name'] }} } {% endmacro %} -{% macro ExecutionOutDefinition(Class, qualifiedName, executionOut) %} +{% macro ExecutionOutDefinition(Class, qualifiedName, executionOut, outIndexLatent) %} {% set outName = CleanName(executionOut.attrib['Name']) %} {% set returns = executionOut.findall('Return') %} {% set params = executionOut.findall('Parameter') %} void {{qualifiedName}}::Call{{CleanName(outName)}}({{ExecutionOutReturnDefinition(returns)}}{{ExecutionOutParameterDefinition(returns, params)}}) { {% if returns|length() == 0 %} - ExecutionOut(AZ_CRC_CE("{{ executionOut.attrib['Name'] }}"){% for parameter in params %}, {{CleanName(parameter.attrib['Name'])}} {% endfor %} + ExecutionOut({{ outIndexLatent }}{% for parameter in params %}, {{CleanName(parameter.attrib['Name'])}}{% endfor %} {% else %} - OutResult(AZ_CRC_CE("{{ executionOut.attrib['Name'] }}"), result{% for parameter in params %}, {{CleanName(parameter.attrib['Name'])}} {% endfor %} -{% endif -%} ); + ExecutionOutResult({{ outIndexLatent }}, result{% for parameter in params %}, {{CleanName(parameter.attrib['Name'])}}{% endfor %} +{% endif -%}); // {{ executionOut.attrib['Name'] }} } {% endmacro %} {% macro ExecutionOutDefinitions(Class, qualifiedName) %} +{% set branches = [] %} {% for method in Class.findall('Input') %} {%- for branch in method.findall('Branch') %} - {{ ExecutionBranchDefinition(Class, qualifiedName, branch) }} +{% if branches.append(branch) %}{% endif %} {%- endfor %} -{% endfor %} -{%- for executionOut in Class.findall('Output') -%} - {{ ExecutionOutDefinition(Class, qualifiedName, executionOut) }} +{% endfor %} +{%- for branch in branches -%} + {{ ExecutionBranchDefinition(Class, qualifiedName, branch, loop.index0) }} {%- endfor %} +{%- for executionOut in Class.findall('Output') -%} + {{ ExecutionOutDefinition(Class, qualifiedName, executionOut, loop.index0 + branches|length) }} +{%- endfor %} + +size_t {{qualifiedName}}::GetRequiredOutCount() const { return {{Class.findall('Output')|length + branches|length}}; } + {% endmacro %} \ No newline at end of file diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/EBusHandler.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/EBusHandler.cpp index 84e67c1215..804bb59e56 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/EBusHandler.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/EBusHandler.cpp @@ -88,17 +88,7 @@ namespace ScriptCanvas void EBusHandler::InitializeEBusHandling(AZStd::string_view busName, AZ::BehaviorContext* behaviorContext) { CreateHandler(busName, behaviorContext); - - const AZ::BehaviorEBusHandler::EventArray& events = m_handler->GetEvents(); - AZStd::vector eventKeys; - eventKeys.reserve(events.size()); - - for (int eventIndex(0); eventIndex < events.size(); ++eventIndex) - { - eventKeys.push_back(eventIndex); - } - - InitializeExecutionOuts(eventKeys); + InitializeExecutionOuts(m_handler->GetEvents().size()); } bool EBusHandler::IsConnected() const @@ -137,7 +127,7 @@ namespace ScriptCanvas void EBusHandler::OnEvent(const char* /*eventName*/, const int eventIndex, AZ::BehaviorValueParameter* result, const int numParameters, AZ::BehaviorValueParameter* parameters) { - CallOut(AZ::Crc32(eventIndex), result, parameters, numParameters); + CallOut(eventIndex, result, parameters, numParameters); } void EBusHandler::Reflect(AZ::ReflectContext* reflectContext) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Node.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Node.cpp index 23def4cb55..4a936c8824 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Node.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Node.cpp @@ -3155,6 +3155,11 @@ namespace ScriptCanvas return {}; } + AZStd::optional Node::GetEventIndex([[maybe_unused]] AZStd::string eventName) const + { + return AZStd::nullopt; + } + AZStd::vector Node::GetEventSlotIds() const { return {}; @@ -3404,6 +3409,45 @@ namespace ScriptCanvas return GetSlotByName("True"); } + size_t Node::GetOutIndex(const Slot& slot) const + { + size_t index = 0; + auto slotId = slot.GetId(); + + if (auto map = GetSlotExecutionMap()) + { + auto& ins = map->GetIns(); + for (auto& in : ins) + { + for (auto& out : in.outs) + { + // only count branches + if (in.outs.size() > 1) + { + if (out.slotId == slotId) + { + return index; + } + + ++index; + } + } + } + + for (auto& latent : map->GetLatents()) + { + if (latent.slotId == slotId) + { + return index; + } + + ++index; + } + } + + return std::numeric_limits::max(); + } + AZ::Outcome Node::GetInternalOutKey(const Slot& slot) const { if (auto map = GetSlotExecutionMap()) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Node.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Node.h index d51667764f..d3d36ae71b 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Node.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Node.h @@ -700,6 +700,8 @@ namespace ScriptCanvas // override if necessary, usually only when the node's execution topology dramatically alters at edit-time in a way that is not generally parseable ConstSlotsOutcome GetSlotsInExecutionThreadByType(const Slot& executionSlot, CombinedSlotType targetSlotType, const Slot* executionChildSlot = nullptr) const; + size_t GetOutIndex(const Slot& slot) const; + // override if necessary, only used by NodeableNodes which can hide branched outs and rename them later virtual AZ::Outcome GetInternalOutKey(const Slot& slot) const; @@ -751,6 +753,8 @@ namespace ScriptCanvas virtual AZStd::string GetEBusName() const; + virtual AZStd::optional GetEventIndex(AZStd::string eventName) const; + virtual AZStd::vector GetEventSlotIds() const; virtual AZStd::vector GetNonEventSlotIds() const; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.cpp index ff8779319a..b642ef3889 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.cpp @@ -19,7 +19,7 @@ namespace NodeableOutCpp { - void NoOp(AZ::BehaviorValueParameter* /*result*/, AZ::BehaviorValueParameter* /*arguments*/, int /*numArguments*/) {} + void NoOp([[maybe_unused]] AZ::BehaviorValueParameter*, [[maybe_unused]] AZ::BehaviorValueParameter*, [[maybe_unused]] int) {} } namespace ScriptCanvas @@ -36,14 +36,14 @@ namespace ScriptCanvas {} #if !defined(RELEASE) - void Nodeable::CallOut(const AZ::Crc32 key, AZ::BehaviorValueParameter* resultBVP, AZ::BehaviorValueParameter* argsBVPs, int numArguments) const + void Nodeable::CallOut(size_t index, AZ::BehaviorValueParameter* resultBVP, AZ::BehaviorValueParameter* argsBVPs, int numArguments) const { - GetExecutionOutChecked(key)(resultBVP, argsBVPs, numArguments); + GetExecutionOutChecked(index)(resultBVP, argsBVPs, numArguments); } #else - void Nodeable::CallOut(const AZ::Crc32 key, AZ::BehaviorValueParameter* resultBVP, AZ::BehaviorValueParameter* argsBVPs, int numArguments) const + void Nodeable::CallOut(size_t index, AZ::BehaviorValueParameter* resultBVP, AZ::BehaviorValueParameter* argsBVPs, int numArguments) const { - GetExecutionOut(key)(resultBVP, argsBVPs, numArguments); + GetExecutionOut(index)(resultBVP, argsBVPs, numArguments); } #endif // !defined(RELEASE) @@ -62,11 +62,6 @@ namespace ScriptCanvas return m_executionState->GetEntityId(); } - AZ::EntityId Nodeable::GetScriptCanvasId() const - { - return m_executionState->GetScriptCanvasId(); - } - void Nodeable::Reflect(AZ::ReflectContext* reflectContext) { if (auto serializeContext = azrtti_cast(reflectContext)) @@ -77,9 +72,9 @@ namespace ScriptCanvas { editContext->Class("Nodeable", "Nodeable") ->ClassElement(AZ::Edit::ClassElements::EditorData, "") - ->Attribute(AZ::Edit::Attributes::AutoExpand, true) - ->Attribute(AZ::Edit::Attributes::ContainerCanBeModified, false) - ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) + ->Attribute(AZ::Edit::Attributes::AutoExpand, true) + ->Attribute(AZ::Edit::Attributes::ContainerCanBeModified, false) + ->Attribute(AZ::Edit::Attributes::Visibility, AZ::Edit::PropertyVisibility::ShowChildrenOnly) ; } } @@ -92,33 +87,45 @@ namespace ScriptCanvas ->Constructor() ->Method("Deactivate", &Nodeable::Deactivate) ->Method("InitializeExecutionState", &Nodeable::InitializeExecutionState) + ->Method("InitializeExecutionOuts", &Nodeable::InitializeExecutionOuts) + ->Method("InitializeExecutionOutByRequiredCount", &Nodeable::InitializeExecutionOutByRequiredCount) ->Method("IsActive", &Nodeable::IsActive) ; } } - const FunctorOut& Nodeable::GetExecutionOut(AZ::Crc32 key) const + const FunctorOut& Nodeable::GetExecutionOut(size_t index) const { - auto iter = m_outs.find(key); - AZ_Assert(iter != m_outs.end(), "no out registered for key: %d", key); - AZ_Assert(iter->second, "null execution methods are not allowed, key: %d", key); - return iter->second; + AZ_Assert(index < m_outs.size(), "index out of range in Nodeable::m_outs"); + auto& iter = m_outs[index]; + AZ_Assert(iter, "null execution methods are not allowed, index: %zu", index); + return iter; } - const FunctorOut& Nodeable::GetExecutionOutChecked(AZ::Crc32 key) const + const FunctorOut& Nodeable::GetExecutionOutChecked(size_t index) const { - auto iter = m_outs.find(key); - - if (iter == m_outs.end()) - { - return m_noOpFunctor; - } - else if (!iter->second) + + if (index >= m_outs.size() && m_outs[index]) { return m_noOpFunctor; } - return iter->second; + return m_outs[index]; + } + + AZ::EntityId Nodeable::GetScriptCanvasId() const + { + return m_executionState->GetScriptCanvasId(); + } + + void Nodeable::InitializeExecutionOuts(size_t count) + { + m_outs.resize(count, m_noOpFunctor); + } + + void Nodeable::InitializeExecutionOutByRequiredCount() + { + InitializeExecutionOuts(GetRequiredOutCount()); } void Nodeable::InitializeExecutionState(ExecutionState* executionState) @@ -126,37 +133,23 @@ namespace ScriptCanvas AZ_Assert(executionState != nullptr, "execution state for nodeable must not be nullptr"); AZ_Assert(m_executionState == nullptr, "execution state already initialized"); m_executionState = executionState->WeakFromThis(); + OnInitializeExecutionState(); } - void Nodeable::InitializeExecutionOuts(const AZ::Crc32* begin, const AZ::Crc32* end) + void Nodeable::SetExecutionOut(size_t index, FunctorOut&& out) { - m_outs.reserve(end - begin); - - for (; begin != end; ++begin) - { - SetExecutionOut(*begin, AZStd::move(FunctorOut(&NodeableOutCpp::NoOp))); - } + AZ_Assert(out, "null executions methods are not allowed, index: %zu", index); + m_outs[index] = AZStd::move(out); } - void Nodeable::InitializeExecutionOuts(const AZStd::vector& keys) - { - InitializeExecutionOuts(keys.begin(), keys.end()); - } - - void Nodeable::SetExecutionOut(AZ::Crc32 key, FunctorOut&& out) - { - AZ_Assert(out, "null executions methods are not allowed, key: %d", key); - m_outs[key] = AZStd::move(out); - } - - void Nodeable::SetExecutionOutChecked(AZ::Crc32 key, FunctorOut&& out) + void Nodeable::SetExecutionOutChecked(size_t index, FunctorOut&& out) { if (!out) { - AZ_Error("ScriptCanvas", false, "null executions methods are not allowed, key: %d", key); + AZ_Error("ScriptCanvas", false, "null executions methods are not allowed, index: %zu", index); return; } - SetExecutionOut(key, AZStd::move(out)); + SetExecutionOut(index, AZStd::move(out)); } } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.h index 3695f3e9fa..963893ee3f 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Nodeable.h @@ -29,6 +29,23 @@ namespace ScriptCanvas class SubgraphInterface; } + /* + Note: Many parts of AzAutoGen, compilation, and runtime depend on the order of declaration and addition of slots. + The display order can be manipulated in the editor, but it will always just be a change of view. + + Whenever in doubt, this is the order, in pseudo code + + for in : Ins do + somethingOrdered(in) + for branch : in.Branches do + somethingOrdered(branch) + end + end + for out : Outs do + somethingOrdered(out) + end + */ + // derive from this to make an object that when wrapped with a NodeableNode can be instantly turned into a node that is easily embedded in graphs, // and easily compiled in class Nodeable @@ -40,21 +57,23 @@ namespace ScriptCanvas // reflect nodeable class API static void Reflect(AZ::ReflectContext* reflectContext); + // the run-time constructor for non-EBus handlers Nodeable(); + // this constructor is used by EBus handlers only Nodeable(ExecutionStateWeakPtr executionState); virtual ~Nodeable() = default; - void CallOut(const AZ::Crc32 key, AZ::BehaviorValueParameter* resultBVP, AZ::BehaviorValueParameter* argsBVPs, int numArguments) const; + void CallOut(size_t index, AZ::BehaviorValueParameter* resultBVP, AZ::BehaviorValueParameter* argsBVPs, int numArguments) const; AZ::Data::AssetId GetAssetId() const; AZ::EntityId GetEntityId() const; - const Execution::FunctorOut& GetExecutionOut(AZ::Crc32 key) const; + const Execution::FunctorOut& GetExecutionOut(size_t index) const; - const Execution::FunctorOut& GetExecutionOutChecked(AZ::Crc32 key) const; + const Execution::FunctorOut& GetExecutionOutChecked(size_t index) const; virtual NodePropertyInterface* GetPropertyInterface(AZ::Crc32 /*propertyId*/) { return nullptr; } @@ -66,98 +85,97 @@ namespace ScriptCanvas // any would only be good if graphs could opt into it, and execution slots could annotate changing activity level virtual bool IsActive() const { return false; } - void InitializeExecutionOuts(const AZ::Crc32* begin, const AZ::Crc32* end); + void InitializeExecutionOuts(size_t count); - void InitializeExecutionOuts(const AZStd::vector& keys); + void SetExecutionOut(size_t index, Execution::FunctorOut&& out); - void SetExecutionOut(AZ::Crc32 key, Execution::FunctorOut&& out); - - void SetExecutionOutChecked(AZ::Crc32 key, Execution::FunctorOut&& out); + void SetExecutionOutChecked(size_t index, Execution::FunctorOut&& out); protected: + void InitializeExecutionOutByRequiredCount(); + void InitializeExecutionState(ExecutionState* executionState); + virtual void OnInitializeExecutionState() {} + virtual void OnDeactivate() {} - // all of these hooks are known at compile time, so no branching - // we will need with and without result calls for each time for method - // methods with result but no result requested, etc - - template - void OutResult(const AZ::Crc32 key, t_Return& result) const - { - // this is correct, it is up to the FunctorOut referenced by key to decide what to do with these params (whether to modify or handle strings differently) - AZ::BehaviorValueParameter resultBVP(&result); - - CallOut(key, &resultBVP, nullptr, 0); - -#if !defined(RELEASE) - if (!resultBVP.GetAsUnsafe()) - { - AZ_Error("ScriptCanvas", false, "%s:CallOut(%u) failed to provide a useable result", TYPEINFO_Name(), (AZ::u32)key); - return; - } -#endif - result = *resultBVP.GetAsUnsafe(); - } + virtual size_t GetRequiredOutCount() const { return 0; } // Required to decay array type to pointer type template using decay_array = AZStd::conditional_t>, std::remove_extent_t>*, T&&>; - template - void OutResult(const AZ::Crc32 key, t_Return& result, t_Args&&... args) const + // all of these hooks are known at compile time, so no branching + // we will need with and without result calls for each type of method + // methods with result but no result requested, etc + + template + void ExecutionOut(size_t index, t_Args&&... args) const { - // this is correct, it is up to the FunctorOut referenced by key to decide what to do with these params (whether to modify or handle strings differently) + // it is up to the FunctorOut referenced by key to decide what to do with these params (whether to modify or handle strings differently) AZStd::tuple...> lvalueWrapper(AZStd::forward(args)...); using BVPReserveArray = AZStd::array; auto MakeBVPArrayFunction = [](auto&&... element) { return BVPReserveArray{ {AZ::BehaviorValueParameter{&element}...} }; }; - BVPReserveArray argsBVPs = AZStd::apply(MakeBVPArrayFunction, lvalueWrapper); - AZ::BehaviorValueParameter resultBVP(&result); - CallOut(key, &resultBVP, argsBVPs.data(), sizeof...(t_Args)); + BVPReserveArray argsBVPs = AZStd::apply(MakeBVPArrayFunction, lvalueWrapper); + CallOut(index, nullptr, argsBVPs.data(), sizeof...(t_Args)); + } + + void ExecutionOut(size_t index) const + { + // it is up to the FunctorOut referenced by key to decide what to do with these params (whether to modify or handle strings differently) + CallOut(index, nullptr, nullptr, 0); + } + template + void ExecutionOutResult(size_t index, t_Return& result) const + { + // It is up to the FunctorOut referenced by the index to decide what to do with these params (whether to modify or handle strings differently) + AZ::BehaviorValueParameter resultBVP(&result); + CallOut(index, &resultBVP, nullptr, 0); #if !defined(RELEASE) if (!resultBVP.GetAsUnsafe()) { - AZ_Error("ScriptCanvas", false, "%s:CallOut(%u) failed to provide a useable result", TYPEINFO_Name(), (AZ::u32)key); + AZ_Error("ScriptCanvas", false, "%s:CallOut(%zu) failed to provide a useable result", TYPEINFO_Name(), index); return; } #endif result = *resultBVP.GetAsUnsafe(); } - template - void ExecutionOut(const AZ::Crc32 key, t_Args&&... args) const + template + void ExecutionOutResult(size_t index, t_Return& result, t_Args&&... args) const { - // this is correct, it is up to the FunctorOut referenced by key to decide what to do with these params (whether to modify or handle strings differently) + // it is up to the FunctorOut referenced by key to decide what to do with these params (whether to modify or handle strings differently) AZStd::tuple...> lvalueWrapper(AZStd::forward(args)...); using BVPReserveArray = AZStd::array; auto MakeBVPArrayFunction = [](auto&&... element) { return BVPReserveArray{ {AZ::BehaviorValueParameter{&element}...} }; }; + BVPReserveArray argsBVPs = AZStd::apply(MakeBVPArrayFunction, lvalueWrapper); + AZ::BehaviorValueParameter resultBVP(&result); + CallOut(index, &resultBVP, argsBVPs.data(), sizeof...(t_Args)); - CallOut(key, nullptr, argsBVPs.data(), sizeof...(t_Args)); +#if !defined(RELEASE) + if (!resultBVP.GetAsUnsafe()) + { + AZ_Error("ScriptCanvas", false, "%s:CallOut(%zu) failed to provide a useable result", TYPEINFO_Name(), index); + return; + } +#endif + result = *resultBVP.GetAsUnsafe(); } - void ExecutionOut(const AZ::Crc32 key) const - { - // this is correct, it is up to the FunctorOut referenced by key to decide what to do with these params (whether to modify or handle strings differently) - CallOut(key, nullptr, nullptr, 0); - } - private: - // keep this here, and don't even think about putting it back in the FunctorOuts by any method*, lambda capture or other. - // programmers will need this for internal node state debugging and who knows what other reasons - // * Lua execution is an exception ExecutionStateWeakPtr m_executionState = nullptr; Execution::FunctorOut m_noOpFunctor; - AZStd::unordered_map m_outs; + AZStd::vector m_outs; }; } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.cpp index 8fc582954a..c406a5c100 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.cpp @@ -91,19 +91,6 @@ namespace ScriptCanvas AZ_Error("ScriptCanvas", m_nodeable, "null Nodeable in NodeableNode::ConfigureSlots"); } - AZ::Outcome> NodeableNode::FindMethodAndInputIndexOfSlot(const SlotId& slotID) const - { - if (auto thisSlot = GetSlot(slotID)) - { - if (thisSlot->GetType() == CombinedSlotType::DataIn) - { - return m_slotExecutionMap.FindInAndInputIndexOfSlot(slotID); - } - } - - return AZ::Failure(); - } - AZ::Outcome NodeableNode::GetBehaviorContextClass() const { AZ::BehaviorContext* behaviorContext = NodeableNodeCpp::GetBehaviorContext(); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.h index 60ad7d3273..0193641d97 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/NodeableNode.h @@ -73,8 +73,6 @@ namespace ScriptCanvas void ConfigureSlots() override; - AZ::Outcome> FindMethodAndInputIndexOfSlot(const SlotId& slotID) const; - AZ::Outcome GetBehaviorContextClass() const; ConstSlotsOutcome GetBehaviorContextOutName(const Slot& inSlot) const; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SlotExecutionMap.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SlotExecutionMap.cpp index 34af917c96..05c5e0e5d7 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SlotExecutionMap.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SlotExecutionMap.cpp @@ -152,22 +152,6 @@ namespace ScriptCanvas return nullptr; } - AZ::Outcome> Map::FindInAndInputIndexOfSlot(const SlotId& slotID) const - { - for (const auto& in : m_ins) - { - auto inputIter = find_if(in.inputs, [&slotID](const Input& input) { return input.slotId == slotID; }); - if (inputIter != in.inputs.end()) - { - const size_t inIndex = &in - m_ins.begin(); - const size_t inputIndex = inputIter - in.inputs.begin(); - return AZ::Success(AZStd::make_pair(inIndex, inputIndex)); - } - } - - return AZ::Failure(); - } - const In* Map::FindInFromInputSlot(const SlotId& slotID) const { auto iter = find_if diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SlotExecutionMap.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SlotExecutionMap.h index 25c237b138..9daf1d8eb9 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SlotExecutionMap.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SlotExecutionMap.h @@ -124,8 +124,6 @@ namespace ScriptCanvas Map(Outs&& latents); - AZ::Outcome> FindInAndInputIndexOfSlot(const SlotId& slotID) const; - const In* FindInFromInputSlot(const SlotId& slotID) const; SlotId FindInputSlotIdBySource(VariableId inputSourceId, Grammar::FunctionSourceId inSourceId) const; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp index 61ea74d011..e73c049780 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp @@ -209,13 +209,18 @@ namespace ScriptCanvas m_latents.push_back(out); } - void SubgraphInterface::AddOutKey(const AZStd::string& name) + bool SubgraphInterface::AddOutKey(const AZStd::string& name) { const AZ::Crc32 key(name); if (AZStd::find(m_outKeys.begin(), m_outKeys.end(), key) == m_outKeys.end()) { m_outKeys.push_back(key); + return true; + } + else + { + return false; } } @@ -708,7 +713,7 @@ namespace ScriptCanvas } // Populates the list of out keys - void SubgraphInterface::Parse() + AZ::Outcome SubgraphInterface::Parse() { m_outKeys.clear(); @@ -716,14 +721,22 @@ namespace ScriptCanvas { for (const auto& out : in.outs) { - AddOutKey(out.displayName); + if (!AddOutKey(out.displayName)) + { + return AZ::Failure(AZStd::string::format("Out %s was already in the list: %s", out.displayName.c_str())); + } } } for (const auto& latent : m_latents) { - AddOutKey(latent.displayName); + if (!AddOutKey(latent.displayName)) + { + return AZ::Failure(AZStd::string::format("Out %s was already in the list: %s", latent.displayName.c_str())); + } } + + return AZ::Success(); } void SubgraphInterface::Reflect(AZ::ReflectContext* refectContext) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.h index 3eea850666..069f3c84a2 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.h @@ -232,7 +232,7 @@ namespace ScriptCanvas bool operator==(const SubgraphInterface& rhs) const; // Populates the list of out keys - void Parse(); + AZ::Outcome Parse(); bool RequiresConstructionParameters() const; @@ -266,7 +266,7 @@ namespace ScriptCanvas AZStd::vector m_outKeys; NamespacePath m_namespacePath; - void AddOutKey(const AZStd::string& name); + bool AddOutKey(const AZStd::string& name); const Out* FindImmediateOut(const AZStd::string& in, const AZStd::string& out) const; const In* FindIn(const AZStd::string& inSlotId) const; const Out* FindLatentOut(const AZStd::string& latent) const; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp index 722328ff17..518174d0f8 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedAPI.cpp @@ -508,11 +508,10 @@ namespace ScriptCanvas const int argsCount = lua_gettop(lua); AZ_Assert(argsCount >= 2, "CallExecutionOut: Error in compiled Lua file, not enough arguments"); AZ_Assert(lua_isuserdata(lua, 1), "CallExecutionOut: Error in compiled lua file, 1st argument to SetExecutionOut is not userdata (Nodeable)"); - AZ_Assert(lua_isstring(lua, 2), "CallExecutionOut: Error in compiled lua file, 2nd argument to SetExecutionOut is not a string (Crc key)"); + 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); - const char* keyStr = AZ::ScriptValue::StackRead(lua, 2); - AZ_Assert(keyStr, "CallExecutionOut: Failed to read key string"); - nodeable->CallOut(AZ::Crc32(keyStr), nullptr, nullptr, argsCount - 2); + size_t index = aznumeric_caster(lua_tointeger(lua, -2)); + nodeable->CallOut(index, nullptr, nullptr, argsCount - 2); // Lua: results... return lua_gettop(lua); } @@ -559,23 +558,14 @@ namespace ScriptCanvas int InitializeNodeableOutKeys(lua_State* lua) { using namespace ExecutionInterpretedAPICpp; - // Lua: usernodeable, outKeys... + // Lua: usernodeable, keyCount const int argsCount = lua_gettop(lua); - AZ_Assert(argsCount >= 2, "InitializeNodeableOutKeys: Error in compiled Lua file, not enough arguments"); - AZ_Assert((argsCount - 1) < k_MaxNodeableOuts, "InitializeNodeableOutKeys: Error in compiled Lua file, too many outs for nodeable out)"); + AZ_Assert(argsCount == 2, "InitializeNodeableOutKeys: Error in compiled Lua file, not enough arguments"); AZ_Assert(lua_isuserdata(lua, 1), "InitializeNodeableOutKeys: Error in compiled lua file, 1st argument to SetExecutionOut is not userdata (Nodeable)"); Nodeable* nodeable = AZ::ScriptValue::StackRead(lua, 1); - const int keyCount = argsCount - 1; - - AZStd::array keys; - - for (int argumentIndex = 2, sentinel = argsCount + 1; argumentIndex != sentinel; ++argumentIndex) - { - AZ_Assert(lua_isnumber(lua, argumentIndex), "InitializeNodeableOutKeys: Error in compiled lua file, argument at Lua index #%d was not an integer", argumentIndex); - keys[argumentIndex - 2] = static_cast(lua_tointeger(lua, argumentIndex)); - } - - nodeable->InitializeExecutionOuts(keys.begin(), keys.begin() + keyCount); + AZ_Assert(lua_isnumber(lua, 2), "InitializeNodeableOutKeys: Error in compiled lua file, 2nd argument was not an integer"); + const size_t keyCount = aznumeric_caster(lua_tointeger(lua, 2)); + nodeable->InitializeExecutionOuts(keyCount); return 0; } @@ -595,19 +585,18 @@ namespace ScriptCanvas // \see https://jira.agscollab.com/browse/LY-99750 AZ_Assert(lua_isuserdata(lua, -3), "Error in compiled lua file, 1st argument to SetExecutionOut is not userdata (Nodeable)"); - AZ_Assert(lua_isstring(lua, -2), "Error in compiled lua file, 2nd argument to SetExecutionOut is not a string (Crc key)"); + AZ_Assert(lua_isnumber(lua, -2), "Error in compiled lua file, 2nd argument to SetExecutionOut is not a number"); AZ_Assert(lua_isfunction(lua, -1), "Error in compiled lua file, 3rd argument to SetExecutionOut is not a function (lambda need to get around atypically routed arguments)"); Nodeable* nodeable = AZ::ScriptValue::StackRead(lua, -3); AZ_Assert(nodeable, "Failed to read nodeable"); - const char* keyStr = AZ::ScriptValue::StackRead(lua, -2); - AZ_Assert(keyStr, "Failed to read key string"); - // Lua: nodeable, string, lambda + size_t index = aznumeric_caster(lua_tointeger(lua, -2)); + // Lua: nodeable, index, lambda lua_pushvalue(lua, -1); - // Lua: nodeable, string, lambda, lambda + // Lua: nodeable, index, lambda, lambda - nodeable->SetExecutionOut(AZ::Crc32(keyStr), OutInterpreted(lua)); - // Lua: nodeable, string, lambda + nodeable->SetExecutionOut(index, OutInterpreted(lua)); + // Lua: nodeable, index, lambda // \todo clear these immediately after they are not needed with an explicit call written by the translator return 0; @@ -618,20 +607,19 @@ namespace ScriptCanvas // \note Return values could become necessary. // \see https://jira.agscollab.com/browse/LY-99750 - AZ_Assert(lua_isuserdata(lua, -3), "Error in compiled lua file, 1st argument to SetExecutionOut is not userdata (Nodeable)"); - AZ_Assert(lua_isstring(lua, -2), "Error in compiled lua file, 2nd argument to SetExecutionOut is not a string (Crc key)"); - AZ_Assert(lua_isfunction(lua, -1), "Error in compiled lua file, 3rd argument to SetExecutionOut is not a function (lambda need to get around atypically routed arguments)"); + AZ_Assert(lua_isuserdata(lua, -3), "Error in compiled lua file, 1st argument to SetExecutionOutResult is not userdata (Nodeable)"); + AZ_Assert(lua_isnumber(lua, -2), "Error in compiled lua file, 2nd argument to SetExecutionOutResult is not a number"); + AZ_Assert(lua_isfunction(lua, -1), "Error in compiled lua file, 3rd argument to SetExecutionOutResult is not a function (lambda need to get around atypically routed arguments)"); Nodeable* nodeable = AZ::ScriptValue::StackRead(lua, -3); // this won't be a BCO, because BCOs won't be necessary in the interpreted mode...most likely AZ_Assert(nodeable, "Failed to read nodeable"); - const char* keyStr = AZ::ScriptValue::StackRead(lua, -2); - AZ_Assert(keyStr, "Failed to read key string"); - // Lua: nodeable, string, lambda + size_t index = aznumeric_caster(lua_tointeger(lua, -2)); + // Lua: nodeable, index, lambda lua_pushvalue(lua, -1); - // Lua: nodeable, string, lambda, lambda + // Lua: nodeable, index, lambda, lambda - nodeable->SetExecutionOut(AZ::Crc32(keyStr), OutInterpretedResult(lua)); - // Lua: nodeable, string, lambda + nodeable->SetExecutionOut(index, OutInterpretedResult(lua)); + // Lua: nodeable, index, lambda // \todo clear these immediately after they are not needed with an explicit call written by the translator return 0; @@ -639,20 +627,19 @@ namespace ScriptCanvas int SetExecutionOutUserSubgraph(lua_State* lua) { - AZ_Assert(lua_isuserdata(lua, -3), "Error in compiled lua file, 1st argument to SetExecutionOut is not userdata (Nodeable)"); - AZ_Assert(lua_isstring(lua, -2), "Error in compiled lua file, 2nd argument to SetExecutionOut is not a string (Crc key)"); - AZ_Assert(lua_isfunction(lua, -1), "Error in compiled lua file, 3rd argument to SetExecutionOut is not a function (lambda need to get around atypically routed arguments)"); + AZ_Assert(lua_isuserdata(lua, -3), "Error in compiled lua file, 1st argument to SetExecutionOutUserSubgraph is not userdata (Nodeable)"); + AZ_Assert(lua_isnumber(lua, -2), "Error in compiled lua file, 2nd argument to SetExecutionOutUserSubgraph is not a number"); + AZ_Assert(lua_isfunction(lua, -1), "Error in compiled lua file, 3rd argument to SetExecutionOutUserSubgraph is not a function (lambda need to get around atypically routed arguments)"); Nodeable* nodeable = AZ::ScriptValue::StackRead(lua, -3); AZ_Assert(nodeable, "Failed to read nodeable"); - const char* keyStr = AZ::ScriptValue::StackRead(lua, -2); - AZ_Assert(keyStr, "Failed to read key string"); - // Lua: nodeable, string, lambda + size_t index = aznumeric_caster(lua_tointeger(lua, -2)); + // Lua: nodeable, index, lambda lua_pushvalue(lua, -1); - // Lua: nodeable, string, lambda, lambda + // Lua: nodeable, index, lambda, lambda - nodeable->SetExecutionOut(AZ::Crc32(keyStr), OutInterpretedUserSubgraph(lua)); - // Lua: nodeable, string, lambda + nodeable->SetExecutionOut(index, OutInterpretedUserSubgraph(lua)); + // Lua: nodeable, index, lambda // \todo clear these immediately after they are not needed with an explicit call written by the translator return 0; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedEBusAPI.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedEBusAPI.cpp index 6612039c65..72b787213b 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedEBusAPI.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/Interpreted/ExecutionInterpretedEBusAPI.cpp @@ -83,7 +83,7 @@ namespace ScriptCanvas int EBusHandlerCreateAndConnectTo(lua_State* lua) { - // Lua: executionState, (event name) string, (address aztypeid) string, (address) ? + // Lua: executionState, (ebus name) string, (address aztypeid) string, (address) ? auto executionState = AZ::ScriptValue::StackRead(lua, 1); auto ebusName = AZ::ScriptValue::StackRead(lua, 2); EBusHandler* ebusHandler = aznew EBusHandler(executionState->WeakFromThis(), ebusName, AZ::ScriptContext::FromNativeContext(lua)->GetBoundContext()); @@ -96,7 +96,7 @@ namespace ScriptCanvas ebusHandler->ConnectTo(address); AZ::Internal::LuaClassToStack(lua, ebusHandler, azrtti_typeid(), AZ::ObjectToLua::ByReference, AZ::AcquisitionOnPush::ScriptAcquire); - // Lua: executionState, (event name) string, (address aztypeid) string, (address) ?, handler + // Lua: executionState, (ebus name) string, (address aztypeid) string, (address) ?, handler return 1; } @@ -114,27 +114,23 @@ namespace ScriptCanvas const int k_eventNameIndex = -2; const int k_lambdaIndex = -1; - AZ_Assert(lua_isuserdata(lua, k_nodeableIndex), "Error in compiled lua file, 1st argument to SetExecutionOut is not userdata (Nodeable)"); - AZ_Assert(lua_isstring(lua, k_eventNameIndex), "Error in compiled lua file, 2nd argument to SetExecutionOut is not a string (Crc key)"); - AZ_Assert(lua_isfunction(lua, k_lambdaIndex), "Error in compiled lua file, 3rd argument to SetExecutionOut is not a function (lambda need to get around atypically routed arguments)"); + AZ_Assert(lua_isuserdata(lua, k_nodeableIndex), "Error in compiled lua file, 1st argument to EBusHandlerHandleEvent is not userdata (EBusHandler)"); + AZ_Assert(lua_isnumber(lua, k_eventNameIndex), "Error in compiled lua file, 2nd argument to EBusHandlerHandleEvent is not a number"); + AZ_Assert(lua_isfunction(lua, k_lambdaIndex), "Error in compiled lua file, 3rd argument to EBusHandlerHandleEvent is not a function"); - auto nodeable = AZ::ScriptValue::StackRead(lua, k_nodeableIndex); // this won't be a BCO, because BCOs won't be necessary in the interpreted mode...most likely + auto nodeable = AZ::ScriptValue::StackRead(lua, k_nodeableIndex); AZ_Assert(nodeable, "Failed to read EBusHandler"); - const char* keyStr = lua_tostring(lua, k_eventNameIndex); - AZ_Assert(keyStr, "Failed to read key string"); - const int eventIndex = nodeable->GetEventIndex(keyStr); - AZ_Assert(eventIndex != -1, "Event index was not found for %s-%s", nodeable->GetEBusName().data(), keyStr); + const int eventIndex = lua_tointeger(lua, k_eventNameIndex); + AZ_Assert(eventIndex != -1, "Event index was not found for %s", nodeable->GetEBusName().data()); // install the generic hook for the event nodeable->HandleEvent(eventIndex); // Lua: nodeable, string, lambda - lua_pushvalue(lua, k_lambdaIndex); // Lua: nodeable, string, lambda, lambda // route the event handling to the lambda on the top of the stack nodeable->SetExecutionOut(AZ::Crc32(eventIndex), OutInterpreted(lua)); // Lua: nodeable, string, lambda - return 0; } @@ -145,16 +141,14 @@ namespace ScriptCanvas const int k_eventNameIndex = -2; const int k_lambdaIndex = -1; - AZ_Assert(lua_isuserdata(lua, k_nodeableIndex), "Error in compiled lua file, 1st argument to SetExecutionOut is not userdata (Nodeable)"); - AZ_Assert(lua_isstring(lua, k_eventNameIndex), "Error in compiled lua file, 2nd argument to SetExecutionOut is not a string (Crc key)"); - AZ_Assert(lua_isfunction(lua, k_lambdaIndex), "Error in compiled lua file, 3rd argument to SetExecutionOut is not a function (lambda need to get around atypically routed arguments)"); + AZ_Assert(lua_isuserdata(lua, k_nodeableIndex), "Error in compiled lua file, 1st argument to EBusHandlerHandleEventResult is not userdata (EBusHandler)"); + AZ_Assert(lua_isnumber(lua, k_eventNameIndex), "Error in compiled lua file, 2nd argument to EBusHandlerHandleEventResult is not a number"); + AZ_Assert(lua_isfunction(lua, k_lambdaIndex), "Error in compiled lua file, 3rd argument to EBusHandlerHandleEventResult is not a function"); - auto nodeable = AZ::ScriptValue::StackRead(lua, k_nodeableIndex); // this won't be a BCO, because BCOs won't be necessary in the interpreted mode...most likely + auto nodeable = AZ::ScriptValue::StackRead(lua, k_nodeableIndex); AZ_Assert(nodeable, "Failed to read EBusHandler"); - const char* keyStr = lua_tostring(lua, k_eventNameIndex); - AZ_Assert(keyStr, "Failed to read key string"); - const int eventIndex = nodeable->GetEventIndex(keyStr); - AZ_Assert(eventIndex != -1, "Event index was not found for %s-%s", nodeable->GetEBusName().data(), keyStr); + const int eventIndex = lua_tointeger(lua, k_eventNameIndex); + AZ_Assert(eventIndex != -1, "Event index was not found for %s", nodeable->GetEBusName().data()); // install the generic hook for the event nodeable->HandleEvent(eventIndex); // Lua: nodeable, string, lambda @@ -165,7 +159,6 @@ namespace ScriptCanvas // route the event handling to the lambda on the top of the stack nodeable->SetExecutionOut(AZ::Crc32(eventIndex), OutInterpretedResult(lua)); // Lua: nodeable, string, lambda - return 0; } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/RuntimeComponent.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/RuntimeComponent.cpp index dbcaad635b..ba1d34fea0 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/RuntimeComponent.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Execution/RuntimeComponent.cpp @@ -70,7 +70,7 @@ namespace ScriptCanvas void RuntimeComponent::Execute() { - AZ_PROFILE_SCOPE_DYNAMIC(AZ::Debug::ProfileCategory::ScriptCanvas, "RuntimeComponent::InitializeExecution (%s)", m_runtimeAsset.GetId().ToString().c_str()); + AZ_PROFILE_SCOPE_DYNAMIC(AZ::Debug::ProfileCategory::ScriptCanvas, "RuntimeComponent::Execute (%s)", m_runtimeAsset.GetId().ToString().c_str()); AZ_Assert(m_executionState, "RuntimeComponent::Execute called without an execution state"); SC_EXECUTION_TRACE_GRAPH_ACTIVATED(CreateActivationInfo()); SCRIPT_CANVAS_PERFORMANCE_SCOPE_EXECUTION(m_executionState->GetScriptCanvasId(), m_runtimeAsset.GetId()); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp index 8f7fa2263e..958e37f82c 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.cpp @@ -434,7 +434,7 @@ namespace ScriptCanvas if (!root->HasExplicitUserOutCalls()) { - // there is a single out call, default or not + // there is a single out, default or not Out out; if (outCalls.empty()) @@ -468,9 +468,7 @@ namespace ScriptCanvas } else { - // for now, all outs must return all the same output, - // if the UI changes, we'll need to track the output of each individual output - if (outCalls.empty()) + if (outCalls.size() < 2) { AddError(root->GetNodeId(), root, ScriptCanvas::ParseErrors::NotEnoughBranchesForReturn); return; @@ -503,6 +501,9 @@ namespace ScriptCanvas , returnValueVariable->m_sourceVariableId }); } + AZStd::const_pointer_cast(outCall)->SetOutCallIndex(m_outIndexCount); + ++m_outIndexCount; + in.outs.push_back(AZStd::move(out)); } } @@ -543,6 +544,8 @@ namespace ScriptCanvas , returnValueVariable->m_sourceVariableId }); } + AZStd::const_pointer_cast(outCall)->SetOutCallIndex(m_outIndexCount); + ++m_outIndexCount; m_subgraphInterface.AddLatent(AZStd::move(out)); } @@ -908,6 +911,7 @@ namespace ScriptCanvas ebusHandling->m_startingAdress = startingAddress; } + ebusHandling->m_node = &node; m_ebusHandlingByNode.emplace(&node, ebusHandling); return true; } @@ -3252,6 +3256,15 @@ namespace ScriptCanvas 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()) + { + AddError(execution, aznew Internal::ParseError(node->GetEntityId(), AZStd::string::format("Missing internal out key for slot %s", childOutSlot->GetName().c_str()))); + return; + } + + internalOut->SetOutCallIndex(outIndex); internalOut->MarkInternalOut(); internalOut->SetSymbol(Symbol::FunctionDefinition); auto outNameOutcome = node->GetInternalOutKey(*childOutSlot); @@ -3893,6 +3906,14 @@ namespace ScriptCanvas auto latentOutKeyOutcome = node.GetLatentOutKey(*slot); if (latentOutKeyOutcome.IsSuccess()) { + const size_t outIndex = node.GetOutIndex(*slot); + if (outIndex == std::numeric_limits::max()) + { + AddError(outRoot, aznew Internal::ParseError(node.GetEntityId(), AZStd::string::format("Missing internal out key for slot %s", slot->GetName().c_str()))); + return; + } + + outRoot->SetOutCallIndex(outIndex); outRoot->SetName(latentOutKeyOutcome.GetValue().data()); AZStd::const_pointer_cast(nodeableParseIter->second)->m_latents.emplace_back(outRoot->GetName(), outRoot); } @@ -4622,7 +4643,13 @@ namespace ScriptCanvas m_userInsThatRequireTopology.clear(); ParseUserOuts(); - m_subgraphInterface.Parse(); + + auto parseOutcome = m_subgraphInterface.Parse(); + + if (!parseOutcome.IsSuccess()) + { + AddError(nullptr, aznew Internal::ParseError(AZ::EntityId(), AZStd::string::format("Subgraph interface failed to parse: %s", parseOutcome.GetError().c_str()).c_str())); + } } void AbstractCodeModel::ParseUserIn(ExecutionTreePtr root, const Nodes::Core::FunctionDefinitionNode* nodeling) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.h index 6eef1b6934..f1ad7b986b 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/AbstractCodeModel.h @@ -507,6 +507,7 @@ namespace ScriptCanvas static UserInParseTopologyResult ParseUserInTolopology(size_t nodelingsOutCount, size_t leavesWithoutNodelingsCount); + size_t m_outIndexCount = 0; ExecutionTreePtr m_start; AZStd::vector m_startNodes; ScopePtr m_graphScope; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ParsingUtilities.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ParsingUtilities.cpp index ab467127c1..a5a98b5444 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ParsingUtilities.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ParsingUtilities.cpp @@ -1057,6 +1057,13 @@ namespace ScriptCanvas && azrtti_istypeof(execution->GetId().m_node); } + bool IsUserFunctionCallPure(const ExecutionTreeConstPtr& execution) + { + return (execution->GetSymbol() == Symbol::FunctionCall) + && azrtti_istypeof(execution->GetId().m_node) + && azrtti_cast(execution->GetId().m_node)->IsPure(); + } + bool IsUserFunctionDefinition(const ExecutionTreeConstPtr& execution) { auto nodeling = azrtti_cast(execution->GetId().m_node); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ParsingUtilities.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ParsingUtilities.h index 7bdfa39c7c..1e2d102d2d 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ParsingUtilities.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/ParsingUtilities.h @@ -163,6 +163,8 @@ namespace ScriptCanvas bool IsUserFunctionCall(const ExecutionTreeConstPtr& execution); + bool IsUserFunctionCallPure(const ExecutionTreeConstPtr& execution); + bool IsUserFunctionDefinition(const ExecutionTreeConstPtr& execution); const ScriptCanvas::Nodes::Core::FunctionDefinitionNode* IsUserOutNode(const Node* node); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/Primitives.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/Primitives.h index 68856325d0..c2605dce45 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/Primitives.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/Primitives.h @@ -90,11 +90,11 @@ namespace ScriptCanvas AZ_CLASS_ALLOCATOR(EBusHandling, AZ::SystemAllocator, 0); bool m_isAddressed = false; + const Node* m_node = nullptr; VariableConstPtr m_startingAdress; AZStd::string m_ebusName; AZStd::string m_handlerName; AZStd::vector> m_events; - void Clear(); }; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesDeclarations.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesDeclarations.h index 72449ebc6d..bcfcccbaca 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesDeclarations.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesDeclarations.h @@ -110,7 +110,7 @@ namespace ScriptCanvas constexpr const char* k_InitializeStaticsName = "InitializeStatics"; constexpr const char* k_InitializeNodeableOutKeys = "InitializeNodeableOutKeys"; - + constexpr const char* k_InitializeExecutionOutByRequiredCountName = "InitializeExecutionOutByRequiredCount"; constexpr const char* k_InterpretedConfigurationPerformance = "SCRIPT_CANVAS_GLOBAL_PERFORMANCE"; constexpr const char* k_InterpretedConfigurationRelease = "SCRIPT_CANVAS_GLOBAL_RELEASE"; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.cpp index e1e46d231e..c6e7925a31 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.cpp @@ -260,6 +260,11 @@ namespace ScriptCanvas return m_nodeable; } + AZStd::optional ExecutionTree::GetOutCallIndex() const + { + return m_outCallIndex != std::numeric_limits::max() ? AZStd::optional(m_outCallIndex) : AZStd::nullopt; + } + ExecutionTreeConstPtr ExecutionTree::GetParent() const { return m_parent; @@ -559,6 +564,11 @@ namespace ScriptCanvas m_lexicalScope = lexicalScope; } + void ExecutionTree::SetOutCallIndex(size_t index) + { + m_outCallIndex = index; + } + void ExecutionTree::SetParent(ExecutionTreePtr parent) { m_parent = parent; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.h index 518b1ba7f1..f1cebde204 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Grammar/PrimitivesExecution.h @@ -170,6 +170,8 @@ namespace ScriptCanvas VariableConstPtr GetNodeable() const; + AZStd::optional GetOutCallIndex() const; + ExecutionTreeConstPtr GetParent() const; ExecutionTreeConstPtr GetRoot() const; @@ -252,6 +254,8 @@ namespace ScriptCanvas void SetNodeable(VariableConstPtr nodeable); + void SetOutCallIndex(size_t index); + void SetParent(ExecutionTreePtr parent); void SetScope(ScopePtr scope); @@ -286,6 +290,8 @@ namespace ScriptCanvas bool m_hasExplicitUserOutCalls = false; + size_t m_outCallIndex = std::numeric_limits::max(); + // The node and the activation slot. The execution in, or the event or latent out slot. ExecutionId m_in; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Internal/Nodeables/BaseTimer.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Internal/Nodeables/BaseTimer.cpp index 881d087a3d..a23575693e 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Internal/Nodeables/BaseTimer.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Internal/Nodeables/BaseTimer.cpp @@ -66,7 +66,7 @@ namespace ScriptCanvas break; } - while (m_timerCounter > m_timerDuration) + while (m_timerCounter >= m_timerDuration) { if (!m_isActive) { diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/EBusEventHandler.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/EBusEventHandler.cpp index cd57cb6608..0fc40bceee 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/EBusEventHandler.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/EBusEventHandler.cpp @@ -393,6 +393,11 @@ namespace ScriptCanvas return false; } + AZStd::optional EBusEventHandler::GetEventIndex(AZStd::string eventName) const + { + return m_handler->GetFunctionIndex(eventName.c_str()); + } + const EBusEventEntry* EBusEventHandler::FindEvent(const AZStd::string& name) const { AZ::Crc32 key = AZ::Crc32(name.c_str()); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/EBusEventHandler.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/EBusEventHandler.h index 890b50a9e4..be624d608d 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/EBusEventHandler.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/EBusEventHandler.h @@ -115,6 +115,7 @@ namespace ScriptCanvas AZ::Outcome GetFunctionCallName(const Slot* /*slot*/) const override; bool IsEBusAddressed() const override; + AZStd::optional GetEventIndex(AZStd::string eventName) const; const EBusEventEntry* FindEvent(const AZStd::string& name) const; AZStd::string GetEBusName() const override; bool IsAutoConnected() const override; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp index 962ee3e515..a7dc586a94 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.cpp @@ -548,6 +548,11 @@ namespace ScriptCanvas return EBusEventHandlerProperty::GetDisconnectSlot(this); } + AZStd::optional ReceiveScriptEvent::GetEventIndex(AZStd::string eventName) const + { + return m_handler->GetFunctionIndex(eventName.c_str());; + } + AZStd::vector ReceiveScriptEvent::GetEventSlotIds() const { AZStd::vector eventSlotIds; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h index 3f2425cd4a..dcf1bca50e 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Core/ReceiveScriptEvent.h @@ -57,6 +57,7 @@ namespace ScriptCanvas AZ::Outcome GetInternalOutKey(const Slot& slot) const override; const Slot* GetEBusConnectSlot() const override; const Slot* GetEBusDisconnectSlot() const override; + AZStd::optional GetEventIndex(AZStd::string eventName) const override; AZStd::vector GetEventSlotIds() const override; AZStd::vector GetNonEventSlotIds() const override; diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorLerpNodeable.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorLerpNodeable.h index 157f086fca..4b4bd59dc9 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorLerpNodeable.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Libraries/Operators/Math/OperatorLerpNodeable.h @@ -136,16 +136,21 @@ namespace ScriptCanvas } protected: + size_t GetRequiredOutCount() const override + { + return 2; + } + void Lerp(float t) { const t_Operand step = m_start + (m_difference * t); // make a release note that the lerp complete and tick slot are two different execution threads - ExecutionOut(AZ_CRC_CE("Tick"), step, t); + ExecutionOut(0, step, t); if (AZ::IsClose(t, 1.0f, AZ::Constants::FloatEpsilon)) { StopLerp(); - ExecutionOut(AZ_CRC_CE("Lerp Complete")); + ExecutionOut(1); } } diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/SystemComponent.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/SystemComponent.h index b15ec596f9..3d5acfbee1 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/SystemComponent.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/SystemComponent.h @@ -100,7 +100,7 @@ namespace ScriptCanvas using LockType = AZStd::lock_guard; AZStd::unordered_map m_ownedObjectsByAddress; MutexType m_ownedObjectsByAddressMutex; - int m_infiniteLoopDetectionMaxIterations = 3000; + int m_infiniteLoopDetectionMaxIterations = 1000000; int m_maxHandlerStackDepth = 50; static void SafeRegisterPerformanceTracker(); diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp index bd583cb43d..8f28a7f94b 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp @@ -689,8 +689,16 @@ namespace ScriptCanvas void GraphToLua::TranslateExecutionTreeUserOutCall(Grammar::ExecutionTreeConstPtr execution) { - // \todo revisit with per-entity run time storage that keeps execution out calls - m_dotLua.WriteIndented("%s(self, \"%s\"", Grammar::k_NodeableCallInterpretedOut, execution->GetName().data()); + auto outCallIndexOptional = execution->GetOutCallIndex(); + if (!outCallIndexOptional) + { + AddError(nullptr, aznew Internal::ParseError(execution->GetNodeId(), "Execution did not return required out call index")); + return; + } + + const size_t outIndex = *outCallIndexOptional; + + m_dotLua.WriteIndented("%s(self, %zu", Grammar::k_NodeableCallInterpretedOut, outIndex); if (execution->GetInputCount() > 0) { @@ -698,7 +706,7 @@ namespace ScriptCanvas WriteFunctionCallInput(execution); } - m_dotLua.WriteLine(")"); + m_dotLua.WriteLine(") -- %s", execution->GetName().data()); } void GraphToLua::TranslateFunction(Grammar::ExecutionTreeConstPtr execution, IsNamed lex) @@ -861,14 +869,23 @@ namespace ScriptCanvas const bool hasResults = eventThread->HasReturnValues(); + AZStd::optional eventIndex = ebusHandling->m_node->GetEventIndex(eventName); + if (!eventIndex) + { + AddError(nullptr, aznew Internal::ParseError(ebusHandling->m_node->GetEntityId(), AZStd::string::format("EBus handler did not return a valid index for event %s", eventName.c_str()))); + return; + } + m_dotLua.WriteNewLine(); - m_dotLua.WriteLineIndented("%s(%s%s, '%s'," + m_dotLua.WriteLineIndented("%s(%s%s, %zu, -- %s" , hasResults ? Grammar::k_EBusHandlerHandleEventResultName : Grammar::k_EBusHandlerHandleEventName , leftValue.data() , ebusHandling->m_handlerName.data() + , *eventIndex , eventThread->GetName().data()); m_dotLua.Indent(); + TranslateFunction(eventThread, IsNamed::No); m_dotLua.WriteLine(")"); @@ -983,14 +1000,7 @@ namespace ScriptCanvas const auto& outKeys = m_model.GetInterface().GetOutKeys(); if (!outKeys.empty()) { - m_dotLua.WriteIndented("%s(self", Grammar::k_InitializeNodeableOutKeys); - - for (auto& key : outKeys) - { - m_dotLua.Write(", %u", AZ::u32(key)); - } - - m_dotLua.WriteLine(")"); + m_dotLua.WriteLineIndented("%s(self, %zu)", Grammar::k_InitializeNodeableOutKeys, outKeys.size()); } } else @@ -1009,15 +1019,26 @@ namespace ScriptCanvas void GraphToLua::TranslateNodeableOut(Grammar::ExecutionTreeConstPtr execution) { + auto outCallIndexOptional = execution->GetOutCallIndex(); + if (!outCallIndexOptional) + { + AddError(nullptr, aznew Internal::ParseError(execution->GetNodeId(), "Execution did not return required out call index")); + return; + } + + const size_t outIndex = *outCallIndexOptional; + + // #functions2 remove-execution-out-hash const auto setExecutionOutName = Grammar::IsUserFunctionDefinition(execution) ? Grammar::k_NodeableSetExecutionOutUserSubgraphName : execution->HasReturnValues() ? Grammar::k_NodeableSetExecutionOutResultName : Grammar::k_NodeableSetExecutionOutName; - m_dotLua.WriteLineIndented("%s(self.%s, '%s'," + m_dotLua.WriteLineIndented("%s(self.%s, %zu, -- %s" , setExecutionOutName - , execution->GetNodeable()->m_name.data() + , execution->GetNodeable()->m_name.data() + , outIndex , execution->GetName().data()); m_dotLua.Indent(); @@ -1050,7 +1071,6 @@ namespace ScriptCanvas return; } - m_dotLua.WriteIndented("function %s.%s(self, ", m_tableName.c_str(), Grammar::k_InitializeStaticsName); WriteStaticInitializerInput(IsLeadingCommaRequired::No); m_dotLua.WriteLine(")"); @@ -1078,7 +1098,7 @@ namespace ScriptCanvas continue; } - if (variable->m_datum.GetType().GetAZType() == azrtti_typeid()) + if (m_model.IsUserNodeable(variable)) { auto nodeableName = variable->m_name; if (nodeableName.starts_with(Grammar::k_memberNamePrefix)) @@ -1104,7 +1124,7 @@ namespace ScriptCanvas // indexInfo->second.requiresCtorParamsForDependencies // self.nonLeafDependency = NonLeafDependency.new(executionState, UnpackDependencyArgs(executionState, dependentAssets, 7)) // -- has more dependencies, index, known from compile time, pushes the correct asset further down construction - m_dotLua.WriteLineIndented("%s%s = %s.new(%s, %s(%s, %s, %s))" + m_dotLua.WriteLineIndented("%s%s = %s.new(%s, %s(%s, %s, %zu))" , leftValue.data() , variable->m_name.data() , nodeableName.data() @@ -1112,7 +1132,7 @@ namespace ScriptCanvas , Grammar::k_UnpackDependencyConstructionArgsFunctionName , Grammar::k_executionStateVariableName , Grammar::k_DependentAssetsArgName - , AZStd::to_string(indexInfo->first).data()); + , indexInfo->first); } else // vs. @@ -1120,7 +1140,7 @@ namespace ScriptCanvas // !indexInfo->second.hasMoreDependencies // self.leafDependency = LeafDependency.new(executionState, UnpackDependencyArgsLeaf(executionState, dependentAssets, 10)) // -- has NO more dependencies, index, known from compile time - m_dotLua.WriteLineIndented("%s%s = %s.new(%s, %s(%s, %s, %s))" + m_dotLua.WriteLineIndented("%s%s = %s.new(%s, %s(%s, %s, %zu))" , leftValue.data() , variable->m_name.data() , nodeableName.data() @@ -1128,7 +1148,7 @@ namespace ScriptCanvas , Grammar::k_UnpackDependencyConstructionArgsLeafFunctionName , Grammar::k_executionStateVariableName , Grammar::k_DependentAssetsArgName - , AZStd::to_string(indexInfo->first).data()); + , indexInfo->first); } } else @@ -1158,6 +1178,7 @@ namespace ScriptCanvas case Grammar::VariableConstructionRequirement::InputNodeable: m_dotLua.WriteLineIndented("%s:InitializeExecutionState(%s)", variable->m_name.data(), Grammar::k_executionStateVariableName); + m_dotLua.WriteLineIndented("%s:%s()", variable->m_name.c_str(), Grammar::k_InitializeExecutionOutByRequiredCountName); m_dotLua.WriteLineIndented("%s%s = %s", leftValue.data(), variable->m_name.data(), variable->m_name.data()); break; @@ -1227,9 +1248,7 @@ namespace ScriptCanvas void GraphToLua::WriteConstructionDependencyArgs() { - auto& dependencyArgs = m_model.GetOrderedDependencies().orderedAssetIds; - - if (!dependencyArgs.empty()) + if (m_model.GetInterface().RequiresConstructionParametersForDependencies()) { m_dotLua.Write(", %s", Grammar::k_DependentAssetsArgName); } @@ -1740,7 +1759,7 @@ namespace ScriptCanvas size_t GraphToLua::WriteFunctionCallInputThisPointer(Grammar::ExecutionTreeConstPtr execution) { - if (IsUserFunctionCall(execution) && execution->GetRoot()->IsPure()) + if (IsUserFunctionCallPure(execution)) { m_dotLua.Write("%s", Grammar::k_executionStateVariableName); diff --git a/Gems/ScriptCanvas/Code/Source/SystemComponent.cpp b/Gems/ScriptCanvas/Code/Source/SystemComponent.cpp index 315d786712..bbcbde5c6c 100644 --- a/Gems/ScriptCanvas/Code/Source/SystemComponent.cpp +++ b/Gems/ScriptCanvas/Code/Source/SystemComponent.cpp @@ -37,10 +37,10 @@ namespace ScriptCanvasSystemComponentCpp { #if !defined(_RELEASE) && !defined(PERFORMANCE_BUILD) - const int k_infiniteLoopDetectionMaxIterations = 3000; + const int k_infiniteLoopDetectionMaxIterations = 1000000; const int k_maxHandlerStackDepth = 25; #else - const int k_infiniteLoopDetectionMaxIterations = 10000; + const int k_infiniteLoopDetectionMaxIterations = 10000000; const int k_maxHandlerStackDepth = 100; #endif diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_ExecutionCycle10.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_ExecutionCycle10.scriptcanvas new file mode 100644 index 0000000000..81af42910c --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_ExecutionCycle10.scriptcanvas @@ -0,0 +1,3216 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_ExecutionOutPerformance.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_ExecutionOutPerformance.scriptcanvas new file mode 100644 index 0000000000..9ec8c01d35 --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_ExecutionOutPerformance.scriptcanvas @@ -0,0 +1,5753 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_HelloWorldFunction.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_HelloWorldFunction.scriptcanvas new file mode 100644 index 0000000000..36be46edc9 --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_HelloWorldFunction.scriptcanvas @@ -0,0 +1,628 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_HelloWorldFunctionNotPure.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_HelloWorldFunctionNotPure.scriptcanvas new file mode 100644 index 0000000000..2e6439c95b --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_HelloWorldFunctionNotPure.scriptcanvas @@ -0,0 +1,733 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfNotPureUserFunction.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfNotPureUserFunction.scriptcanvas new file mode 100644 index 0000000000..eb208d7fd2 --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfNotPureUserFunction.scriptcanvas @@ -0,0 +1,750 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfPureUserFunction.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfPureUserFunction.scriptcanvas new file mode 100644 index 0000000000..1140c64bbd --- /dev/null +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfPureUserFunction.scriptcanvas @@ -0,0 +1,750 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h b/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h index cb3c9cdccb..ab00593dbc 100644 --- a/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h +++ b/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h @@ -108,9 +108,15 @@ namespace ScriptCanvasTests auto m_serializeContext = s_application->GetSerializeContext(); auto m_behaviorContext = s_application->GetBehaviorContext(); - - ScriptCanvasTesting::Reflect(m_serializeContext); - ScriptCanvasTesting::Reflect(m_behaviorContext); + ScriptCanvasTesting::GlobalBusTraits::Reflect(m_serializeContext); + ScriptCanvasTesting::GlobalBusTraits::Reflect(m_behaviorContext); + ScriptCanvasTesting::LocalBusTraits::Reflect(m_serializeContext); + ScriptCanvasTesting::LocalBusTraits::Reflect(m_behaviorContext); + ScriptCanvasTesting::PerformanceStressBusTraits::Reflect(m_serializeContext); + ScriptCanvasTesting::PerformanceStressBusTraits::Reflect(m_behaviorContext); + ScriptCanvasTesting::NativeHandlingOnlyBusTraits::Reflect(m_serializeContext); + ScriptCanvasTesting::NativeHandlingOnlyBusTraits::Reflect(m_behaviorContext); + ScriptCanvasTesting::TestTupleMethods::Reflect(m_behaviorContext); ::Nodes::InputMethodSharedDataSlotExampleNode::Reflect(m_serializeContext); ::Nodes::InputMethodSharedDataSlotExampleNode::Reflect(m_behaviorContext); diff --git a/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.cpp b/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.cpp index 34df10fdea..dc43bb862d 100644 --- a/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.cpp +++ b/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.cpp @@ -130,6 +130,87 @@ namespace ScriptCanvasTesting } } + class PerformanceStressEBusHandler + : public PerformanceStressEBus::Handler + , public AZ::BehaviorEBusHandler + { + public: + AZ_EBUS_BEHAVIOR_BINDER( + PerformanceStressEBusHandler, "{EAE36675-F06B-4755-B3A5-CEC9495DC92E}", AZ::SystemAllocator + , ForceStringCompare0 + , ForceStringCompare1 + , ForceStringCompare2 + , ForceStringCompare3 + , ForceStringCompare4 + , ForceStringCompare5 + , ForceStringCompare6 + , ForceStringCompare7 + , ForceStringCompare8 + , ForceStringCompare9 + ); + + void ForceStringCompare0() override + { + Call(FN_ForceStringCompare0); + } + void ForceStringCompare1() override + { + Call(FN_ForceStringCompare1); + } + void ForceStringCompare2() override + { + Call(FN_ForceStringCompare2); + } + void ForceStringCompare3() override + { + Call(FN_ForceStringCompare3); + } + void ForceStringCompare4() override + { + Call(FN_ForceStringCompare4); + } + void ForceStringCompare5() override + { + Call(FN_ForceStringCompare5); + } + void ForceStringCompare6() override + { + Call(FN_ForceStringCompare6); + } + void ForceStringCompare7() override + { + Call(FN_ForceStringCompare7); + } + void ForceStringCompare8() override + { + Call(FN_ForceStringCompare8); + } + void ForceStringCompare9() override + { + Call(FN_ForceStringCompare9); + } + }; + + void PerformanceStressBusTraits::Reflect(AZ::ReflectContext* context) + { + if (AZ::BehaviorContext* behaviorContext = azrtti_cast(context)) + { + behaviorContext->EBus("PerformanceStressEBus") + ->Handler() + ->Event("ForceStringCompare0", &PerformanceStressEBus::Events::ForceStringCompare0) + ->Event("ForceStringCompare1", &PerformanceStressEBus::Events::ForceStringCompare1) + ->Event("ForceStringCompare2", &PerformanceStressEBus::Events::ForceStringCompare2) + ->Event("ForceStringCompare3", &PerformanceStressEBus::Events::ForceStringCompare3) + ->Event("ForceStringCompare4", &PerformanceStressEBus::Events::ForceStringCompare4) + ->Event("ForceStringCompare5", &PerformanceStressEBus::Events::ForceStringCompare5) + ->Event("ForceStringCompare6", &PerformanceStressEBus::Events::ForceStringCompare6) + ->Event("ForceStringCompare7", &PerformanceStressEBus::Events::ForceStringCompare7) + ->Event("ForceStringCompare8", &PerformanceStressEBus::Events::ForceStringCompare8) + ->Event("ForceStringCompare9", &PerformanceStressEBus::Events::ForceStringCompare9) + ; + } + } + class LocalEBusHandler : public LocalEBus::Handler , public AZ::BehaviorEBusHandler diff --git a/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.h b/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.h index c31627f9fb..5aa8c3c3ec 100644 --- a/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.h +++ b/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.h @@ -46,6 +46,27 @@ namespace ScriptCanvasTesting }; using GlobalEBus = AZ::EBus; + class PerformanceStressBusTraits : public AZ::EBusTraits + { + public: + AZ_TYPE_INFO(PerformanceStressBusTraits, "{68AF0B81-70F4-4822-8127-AAC442D924C7}"); + + static void Reflect(AZ::ReflectContext* context); + + virtual void ForceStringCompare0() = 0; + virtual void ForceStringCompare1() = 0; + virtual void ForceStringCompare2() = 0; + virtual void ForceStringCompare3() = 0; + virtual void ForceStringCompare4() = 0; + virtual void ForceStringCompare5() = 0; + virtual void ForceStringCompare6() = 0; + virtual void ForceStringCompare7() = 0; + virtual void ForceStringCompare8() = 0; + virtual void ForceStringCompare9() = 0; + }; + using PerformanceStressEBus = AZ::EBus; + + class LocalBusTraits : public AZ::EBusTraits { public: diff --git a/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestingSystemComponent.cpp b/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestingSystemComponent.cpp index e6bd4f53cf..281ca211a3 100644 --- a/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestingSystemComponent.cpp +++ b/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestingSystemComponent.cpp @@ -43,7 +43,11 @@ namespace ScriptCanvasTesting NodeableTestingLibrary::Reflect(context); ScriptCanvasTestingNodes::BehaviorContextObjectTest::Reflect(context); - ScriptCanvasTesting::Reflect(context); + ScriptCanvasTesting::GlobalBusTraits::Reflect(context); + ScriptCanvasTesting::LocalBusTraits::Reflect(context); + ScriptCanvasTesting::PerformanceStressBusTraits::Reflect(context); + ScriptCanvasTesting::NativeHandlingOnlyBusTraits::Reflect(context); + ScriptCanvasTesting::TestTupleMethods::Reflect(context); } void ScriptCanvasTestingSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) diff --git a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp index 9e6f7aa051..53f124476f 100644 --- a/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp +++ b/Gems/ScriptCanvasTesting/Code/Tests/ScriptCanvas_RuntimeInterpreted.cpp @@ -283,6 +283,16 @@ TEST_F(ScriptCanvasTestFixture, NodeableDurationFunction) ExpectParse("LY_SC_UnitTest_NodeableDurationFunction"); } +TEST_F(ScriptCanvasTestFixture, LatentCallOfPureUserFunction) +{ + RunUnitTestGraph("LY_SC_UnitTest_LatentCallOfPureUserFunction", ExecutionMode::Interpreted, DurationSpec::Ticks(3)); +} + +TEST_F(ScriptCanvasTestFixture, LatentCallOfNotPureUserFunction) +{ + RunUnitTestGraph("LY_SC_UnitTest_LatentCallOfNotPureUserFunction", ExecutionMode::Interpreted, DurationSpec::Ticks(3)); +} + TEST_F(ScriptCanvasTestFixture, NodeableDurationSubgraph) { RunUnitTestGraph("LY_SC_UnitTest_NodeableDurationSubgraph", ExecutionMode::Interpreted, DurationSpec::Ticks(3)); @@ -887,6 +897,11 @@ TEST_F(ScriptCanvasTestFixture, InterpretedNodeableInputMethodSharedDataSlot) RunUnitTestGraph("LY_SC_UnitTest_NodeableInputMethodSharedDataSlot", ExecutionMode::Interpreted); } +TEST_F(ScriptCanvasTestFixture, InterpretedExecutionOutPerformance) +{ + RunUnitTestGraph("LY_SC_UnitTest_ExecutionOutPerformance", ExecutionMode::Interpreted); +} + #if defined(FUNCTION_LEGACY_SUPPORT_ENABLED) TEST_F(ScriptCanvasTestFixture, InterpretedSubgraph_UserNodeable) From ba411893a3b24b0be4595a0c7aafeae50e63a545 Mon Sep 17 00:00:00 2001 From: Aristo7 <5432499+Aristo7@users.noreply.github.com> Date: Tue, 20 Apr 2021 15:51:57 -0400 Subject: [PATCH 02/11] openimageio to rev2 --- cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index 58050652c0..c5cce2194b 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -52,7 +52,7 @@ ly_associate_package(PACKAGE_NAME googletest-1.8.1-rev4-windows TARGETS goo ly_associate_package(PACKAGE_NAME googlebenchmark-1.5.0-rev2-windows TARGETS GoogleBenchmark PACKAGE_HASH 0c94ca69ae8e7e4aab8e90032b5c82c5964410429f3dd9dbb1f9bf4fe032b1d4) ly_associate_package(PACKAGE_NAME d3dx12-headers-rev1-windows TARGETS d3dx12 PACKAGE_HASH 088c637159fba4a3e4c0cf08fb4921906fd4cca498939bd239db7c54b5b2f804) ly_associate_package(PACKAGE_NAME pyside2-qt-5.15.1-rev2-windows TARGETS pyside2 PACKAGE_HASH c90f3efcc7c10e79b22a33467855ad861f9dbd2e909df27a5cba9db9fa3edd0f) -ly_associate_package(PACKAGE_NAME openimageio-2.1.16.0-rev1-windows TARGETS OpenImageIO PACKAGE_HASH b9f6d6df180ad240b9f17a68c1862c7d8f38234de0e692e83116254b0ee467e5) +ly_associate_package(PACKAGE_NAME openimageio-2.1.16.0-rev2-windows TARGETS OpenImageIO PACKAGE_HASH 85a2a6cf35cbc4c967c56ca8074babf0955c5b490c90c6e6fd23c78db99fc282) ly_associate_package(PACKAGE_NAME qt-5.15.2-windows TARGETS Qt PACKAGE_HASH edaf954c647c99727bfd313dab2959803d2df0873914bb96368c3d8286eed6d9) ly_associate_package(PACKAGE_NAME libsamplerate-0.2.1-rev2-windows TARGETS libsamplerate PACKAGE_HASH dcf3c11a96f212a52e2c9241abde5c364ee90b0f32fe6eeb6dcdca01d491829f) ly_associate_package(PACKAGE_NAME OpenMesh-8.1-rev1-windows TARGETS OpenMesh PACKAGE_HASH 1c1df639358526c368e790dfce40c45cbdfcfb1c9a041b9d7054a8949d88ee77) \ No newline at end of file From fa947d84f77424923d6d9613f301f6451904c7d5 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 20 Apr 2021 14:44:51 -0700 Subject: [PATCH 03/11] Reflect testing enum properly --- .../Include/ScriptCanvas/Translation/GraphToLua.cpp | 4 ++-- .../Code/Source/Framework/ScriptCanvasTestFixture.h | 12 +++--------- .../Code/Source/ScriptCanvasTestBus.cpp | 1 + .../Source/ScriptCanvasTestingSystemComponent.cpp | 6 +----- 4 files changed, 7 insertions(+), 16 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp index 8f28a7f94b..ee55fff259 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Translation/GraphToLua.cpp @@ -869,10 +869,10 @@ namespace ScriptCanvas const bool hasResults = eventThread->HasReturnValues(); - AZStd::optional eventIndex = ebusHandling->m_node->GetEventIndex(eventName); + AZStd::optional eventIndex = ebusHandling->m_node->GetEventIndex(nameAndEventThread.first); if (!eventIndex) { - AddError(nullptr, aznew Internal::ParseError(ebusHandling->m_node->GetEntityId(), AZStd::string::format("EBus handler did not return a valid index for event %s", eventName.c_str()))); + AddError(nullptr, aznew Internal::ParseError(ebusHandling->m_node->GetEntityId(), AZStd::string::format("EBus handler did not return a valid index for event %s", nameAndEventThread.first.c_str()))); return; } diff --git a/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h b/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h index ab00593dbc..cb3c9cdccb 100644 --- a/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h +++ b/Gems/ScriptCanvasTesting/Code/Source/Framework/ScriptCanvasTestFixture.h @@ -108,15 +108,9 @@ namespace ScriptCanvasTests auto m_serializeContext = s_application->GetSerializeContext(); auto m_behaviorContext = s_application->GetBehaviorContext(); - ScriptCanvasTesting::GlobalBusTraits::Reflect(m_serializeContext); - ScriptCanvasTesting::GlobalBusTraits::Reflect(m_behaviorContext); - ScriptCanvasTesting::LocalBusTraits::Reflect(m_serializeContext); - ScriptCanvasTesting::LocalBusTraits::Reflect(m_behaviorContext); - ScriptCanvasTesting::PerformanceStressBusTraits::Reflect(m_serializeContext); - ScriptCanvasTesting::PerformanceStressBusTraits::Reflect(m_behaviorContext); - ScriptCanvasTesting::NativeHandlingOnlyBusTraits::Reflect(m_serializeContext); - ScriptCanvasTesting::NativeHandlingOnlyBusTraits::Reflect(m_behaviorContext); - ScriptCanvasTesting::TestTupleMethods::Reflect(m_behaviorContext); + + ScriptCanvasTesting::Reflect(m_serializeContext); + ScriptCanvasTesting::Reflect(m_behaviorContext); ::Nodes::InputMethodSharedDataSlotExampleNode::Reflect(m_serializeContext); ::Nodes::InputMethodSharedDataSlotExampleNode::Reflect(m_behaviorContext); diff --git a/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.cpp b/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.cpp index dc43bb862d..39f6479c12 100644 --- a/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.cpp +++ b/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestBus.cpp @@ -24,6 +24,7 @@ namespace ScriptCanvasTesting { ScriptCanvasTesting::GlobalBusTraits::Reflect(context); ScriptCanvasTesting::LocalBusTraits::Reflect(context); + ScriptCanvasTesting::PerformanceStressBusTraits::Reflect(context); ScriptCanvasTesting::NativeHandlingOnlyBusTraits::Reflect(context); ScriptCanvasTesting::TestTupleMethods::Reflect(context); diff --git a/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestingSystemComponent.cpp b/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestingSystemComponent.cpp index 281ca211a3..e6bd4f53cf 100644 --- a/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestingSystemComponent.cpp +++ b/Gems/ScriptCanvasTesting/Code/Source/ScriptCanvasTestingSystemComponent.cpp @@ -43,11 +43,7 @@ namespace ScriptCanvasTesting NodeableTestingLibrary::Reflect(context); ScriptCanvasTestingNodes::BehaviorContextObjectTest::Reflect(context); - ScriptCanvasTesting::GlobalBusTraits::Reflect(context); - ScriptCanvasTesting::LocalBusTraits::Reflect(context); - ScriptCanvasTesting::PerformanceStressBusTraits::Reflect(context); - ScriptCanvasTesting::NativeHandlingOnlyBusTraits::Reflect(context); - ScriptCanvasTesting::TestTupleMethods::Reflect(context); + ScriptCanvasTesting::Reflect(context); } void ScriptCanvasTestingSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided) From cdab4da4195027271cb8182b15c8bd36b5908bf3 Mon Sep 17 00:00:00 2001 From: chcurran Date: Tue, 20 Apr 2021 15:44:04 -0700 Subject: [PATCH 04/11] Add mark complete to unit tests --- ...tentCallOfNotPureUserFunction.scriptcanvas | 505 ++++++++++++++---- ..._LatentCallOfPureUserFunction.scriptcanvas | 493 +++++++++++++---- 2 files changed, 796 insertions(+), 202 deletions(-) diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfNotPureUserFunction.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfNotPureUserFunction.scriptcanvas index eb208d7fd2..e9c05c3831 100644 --- a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfNotPureUserFunction.scriptcanvas +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfNotPureUserFunction.scriptcanvas @@ -3,9 +3,9 @@ - + - + @@ -16,7 +16,7 @@ - + @@ -75,7 +75,7 @@ - + @@ -319,12 +319,12 @@ - + - + @@ -481,6 +481,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -488,7 +708,7 @@ - + @@ -498,7 +718,7 @@ - + @@ -506,7 +726,7 @@ - + @@ -519,7 +739,7 @@ - + @@ -529,7 +749,7 @@ - + @@ -537,7 +757,7 @@ - + @@ -548,6 +768,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -556,7 +807,7 @@ - + @@ -564,7 +815,7 @@ - + @@ -572,7 +823,7 @@ - + @@ -592,7 +843,7 @@ - + @@ -606,91 +857,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -700,8 +867,8 @@ - - + + @@ -709,6 +876,132 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -722,7 +1015,11 @@ - + + + + + diff --git a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfPureUserFunction.scriptcanvas b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfPureUserFunction.scriptcanvas index 1140c64bbd..bd570e3ec2 100644 --- a/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfPureUserFunction.scriptcanvas +++ b/Gems/ScriptCanvasTesting/Assets/ScriptCanvas/UnitTests/LY_SC_UnitTest_LatentCallOfPureUserFunction.scriptcanvas @@ -3,9 +3,9 @@ - + - + @@ -16,7 +16,7 @@ - + @@ -75,7 +75,7 @@ - + @@ -319,12 +319,12 @@ - + - + @@ -481,6 +481,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -488,7 +708,7 @@ - + @@ -498,7 +718,7 @@ - + @@ -506,7 +726,7 @@ - + @@ -519,7 +739,7 @@ - + @@ -529,7 +749,7 @@ - + @@ -537,7 +757,7 @@ - + @@ -548,6 +768,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -556,7 +807,7 @@ - + @@ -564,7 +815,7 @@ - + @@ -577,102 +828,23 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -680,6 +852,22 @@ + + + + + + + + + + + + + + + + @@ -697,7 +885,112 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -722,7 +1015,11 @@ - + + + + + From 4ae75a71d0091974cb81bef48d4623bb004ad7dd Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 20 Apr 2021 17:33:34 -0700 Subject: [PATCH 05/11] safety check on empty datum LYN-2855 --- Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.h b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.h index e361e71415..781dcb9ed8 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.h +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/Datum.h @@ -208,7 +208,13 @@ namespace ScriptCanvas static const t_Value* Help(Datum& datum) { static_assert(!AZStd::is_pointer::value, "no pointer types in the Datum::GetAsHelper"); - if (datum.m_type.GetType() == Data::eType::BehaviorContextObject) + + if (datum.m_storage.empty()) + { + // rare, but can be caused by removals or problems with reflection to BehaviorContext, so must be checked + return nullptr; + } + else if (datum.m_type.GetType() == Data::eType::BehaviorContextObject) { return (*AZStd::any_cast(&datum.m_storage))->CastConst(); } From 58dcbe42e42b1e395862897b1a24ea52d4cbf2ca Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Tue, 20 Apr 2021 17:51:05 -0700 Subject: [PATCH 06/11] Check for string param types in single result slot. LYN-2855 --- .../Code/Include/ScriptCanvas/Core/MethodConfiguration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/MethodConfiguration.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/MethodConfiguration.cpp index 19b01c43cc..ab2f5ac8db 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/MethodConfiguration.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/MethodConfiguration.cpp @@ -57,7 +57,7 @@ namespace ScriptCanvas for (size_t resultIndex = 0; resultIndex < unpackedTypes.size(); ++resultIndex) { - const Data::Type outputType(Data::FromAZType(unpackedTypes[resultIndex])); + const Data::Type outputType = (unpackedTypes.size() == 1 && AZ::BehaviorContextHelper::IsStringParameter(*result)) ? Data::Type::String() : Data::FromAZType(unpackedTypes[resultIndex]); const AZStd::string resultSlotName(AZStd::string::format("Result: %s", Data::GetName(outputType).data())); SlotId addedSlotId; From cb142107e73454b224162b6fcec7be4af6e2b3ab Mon Sep 17 00:00:00 2001 From: spham Date: Wed, 21 Apr 2021 09:27:34 -0700 Subject: [PATCH 07/11] Fixed targeting of cmake version --- scripts/build/build_node/Platform/Linux/install-ubuntu-awscli.sh | 0 .../build_node/Platform/Linux/install-ubuntu-build-libraries.sh | 0 .../build/build_node/Platform/Linux/install-ubuntu-build-tools.sh | 0 scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh | 0 4 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/build/build_node/Platform/Linux/install-ubuntu-awscli.sh mode change 100644 => 100755 scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh mode change 100644 => 100755 scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh mode change 100644 => 100755 scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-awscli.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-awscli.sh old mode 100644 new mode 100755 diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-libraries.sh old mode 100644 new mode 100755 diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh old mode 100644 new mode 100755 diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-git.sh old mode 100644 new mode 100755 From a14cd0102e70d549744a7abc8476b633fc749599 Mon Sep 17 00:00:00 2001 From: spham Date: Wed, 21 Apr 2021 09:28:28 -0700 Subject: [PATCH 08/11] Fixed cmake version targeting --- .../build_node/Platform/Linux/install-ubuntu-build-tools.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh index 36832bb9ac..0c65610cf5 100755 --- a/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh +++ b/scripts/build/build_node/Platform/Linux/install-ubuntu-build-tools.sh @@ -51,17 +51,17 @@ CMAKE_DEB_REPO="'deb https://apt.kitware.com/ubuntu/ $UBUNTU_DISTRO main'" # Add the appropriate kitware repository to apt if [ "$UBUNTU_DISTRO" == "bionic" ] then - CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu20.04.1 + CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu18.04.1 apt-add-repository 'deb https://apt.kitware.com/ubuntu/ bionic main' elif [ "$UBUNTU_DISTRO" == "focal" ] then - CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu18.04.1 + CMAKE_DISTRO_VERSION=3.20.1-0kitware1ubuntu20.04.1 apt-add-repository 'deb https://apt.kitware.com/ubuntu/ focal main' fi apt-get update # Install cmake -apt-get install cmake $CMAKE_DISTRO_VERSION -y +apt-get install cmake=$CMAKE_DISTRO_VERSION -y # From 4faa64e31d79340ed80954011cd15e90ed2d1097 Mon Sep 17 00:00:00 2001 From: chcurran <82187351+carlitosan@users.noreply.github.com> Date: Wed, 21 Apr 2021 09:42:33 -0700 Subject: [PATCH 09/11] Fix string format build error --- .../Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp index e73c049780..957b8c64d1 100644 --- a/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp +++ b/Gems/ScriptCanvas/Code/Include/ScriptCanvas/Core/SubgraphInterface.cpp @@ -723,7 +723,7 @@ namespace ScriptCanvas { if (!AddOutKey(out.displayName)) { - return AZ::Failure(AZStd::string::format("Out %s was already in the list: %s", out.displayName.c_str())); + return AZ::Failure(AZStd::string::format("Out %s was already in the list", out.displayName.c_str())); } } } @@ -732,7 +732,7 @@ namespace ScriptCanvas { if (!AddOutKey(latent.displayName)) { - return AZ::Failure(AZStd::string::format("Out %s was already in the list: %s", latent.displayName.c_str())); + return AZ::Failure(AZStd::string::format("Out %s was already in the list", latent.displayName.c_str())); } } From 92c77dca11cf5798172a4ea8131e108a57a6fb53 Mon Sep 17 00:00:00 2001 From: Esteban Papp <81431996+amznestebanpapp@users.noreply.github.com> Date: Wed, 21 Apr 2021 11:16:27 -0700 Subject: [PATCH 10/11] LYN-3069 Revert some 3rdparty changes and address issue (#185) * renaming and organizing files * removed unused files * Removing unnecessary file * moved file * reverting movement of 3rdparty associations from gems to global * removing unnecessary calls to ly_add_external_target_path * fixing install prefix of ci_build * Fixes to get 3rdparties declared in gems to be installed * Allowing to install just one configuration * Adding empty line at the end * removing commented code * setting IMPORETD_LOCATION_ and defaulting IMPORTED_LOCATION to the profile config in case other configs are not installed --- CMakeLists.txt | 3 +- .../SceneAPI/FbxSDKWrapper/CMakeLists.txt | 4 +- .../3rdParty/cubemapgen.json | 9 - .../Asset/ImageProcessingAtom/CMakeLists.txt | 2 - Gems/Atom/Feature/Common/CMakeLists.txt | 2 - Gems/Atom/Utils/CMakeLists.txt | 2 - Gems/EMotionFX/CMakeLists.txt | 2 - .../Code/Platform/Windows/PAL_windows.cmake | 2 + Gems/PhysX/CMakeLists.txt | 2 - Gems/PhysX/Code/CMakeLists.txt | 3 + Gems/PythonAssetBuilder/CMakeLists.txt | 1 - .../{3rdParty => }/readme.md | 0 .../Windows/platform_windows_tools.cmake | 3 + .../Linux/BuiltInPackages_linux.cmake | 2 - .../Platform/Mac/BuiltInPackages_mac.cmake | 2 - .../Windows/BuiltInPackages_windows.cmake | 3 - cmake/3rdPartyPackages.cmake | 4 +- cmake/FindTarget.cmake.in | 41 ++-- cmake/FindTargetTemplate.cmake | 45 ---- cmake/Findo3de.cmake.in | 2 +- cmake/Findo3deTemplate.cmake | 35 --- ...Initialize.cmake => GeneralSettings.cmake} | 6 - cmake/OutputDirectory.cmake | 16 ++ cmake/Platform/Common/Install_common.cmake | 227 +++++++++--------- .../build/Platform/Windows/build_config.json | 2 +- 25 files changed, 166 insertions(+), 254 deletions(-) delete mode 100644 Gems/Atom/Asset/ImageProcessingAtom/3rdParty/cubemapgen.json rename Gems/PythonAssetBuilder/{3rdParty => }/readme.md (100%) delete mode 100644 cmake/FindTargetTemplate.cmake delete mode 100644 cmake/Findo3deTemplate.cmake rename cmake/{Initialize.cmake => GeneralSettings.cmake} (69%) create mode 100644 cmake/OutputDirectory.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 6da92f9c2d..18fb86ff09 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,7 @@ if(CMAKE_VERSION VERSION_EQUAL 3.19) endif() include(cmake/Version.cmake) +include(cmake/OutputDirectory.cmake) if(NOT PROJECT_NAME) project(O3DE @@ -30,7 +31,7 @@ if(NOT PROJECT_NAME) ) endif() -include(cmake/Initialize.cmake) +include(cmake/GeneralSettings.cmake) include(cmake/FileUtil.cmake) include(cmake/PAL.cmake) include(cmake/PALTools.cmake) diff --git a/Code/Tools/SceneAPI/FbxSDKWrapper/CMakeLists.txt b/Code/Tools/SceneAPI/FbxSDKWrapper/CMakeLists.txt index ac8af3fdaa..ddbabe604d 100644 --- a/Code/Tools/SceneAPI/FbxSDKWrapper/CMakeLists.txt +++ b/Code/Tools/SceneAPI/FbxSDKWrapper/CMakeLists.txt @@ -9,13 +9,11 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -set(sdkwrapper_dir ${CMAKE_CURRENT_LIST_DIR}/../SDKWrapper) - if (NOT PAL_TRAIT_BUILD_HOST_TOOLS) return() endif() -ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME}) +set(sdkwrapper_dir ${CMAKE_CURRENT_LIST_DIR}/../SDKWrapper) ly_add_target( NAME FbxSDKWrapper STATIC diff --git a/Gems/Atom/Asset/ImageProcessingAtom/3rdParty/cubemapgen.json b/Gems/Atom/Asset/ImageProcessingAtom/3rdParty/cubemapgen.json deleted file mode 100644 index c5dc8a7486..0000000000 --- a/Gems/Atom/Asset/ImageProcessingAtom/3rdParty/cubemapgen.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "name": "cubemapgen", - "source": "@GEM@/External/CubeMapGen", - "description": "CubeMapGen", - "defines": [], - "lib_required": "False", - "includes": [""] -} - diff --git a/Gems/Atom/Asset/ImageProcessingAtom/CMakeLists.txt b/Gems/Atom/Asset/ImageProcessingAtom/CMakeLists.txt index 7f322b615a..1126af2afa 100644 --- a/Gems/Atom/Asset/ImageProcessingAtom/CMakeLists.txt +++ b/Gems/Atom/Asset/ImageProcessingAtom/CMakeLists.txt @@ -10,6 +10,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -ly_add_external_target_path(${CMAKE_CURRENT_LIST_DIR}/3rdParty) - add_subdirectory(Code) diff --git a/Gems/Atom/Feature/Common/CMakeLists.txt b/Gems/Atom/Feature/Common/CMakeLists.txt index d96d812af0..20a680bce9 100644 --- a/Gems/Atom/Feature/Common/CMakeLists.txt +++ b/Gems/Atom/Feature/Common/CMakeLists.txt @@ -9,6 +9,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -ly_add_external_target_path(${CMAKE_CURRENT_LIST_DIR}/3rdParty) - add_subdirectory(Code) diff --git a/Gems/Atom/Utils/CMakeLists.txt b/Gems/Atom/Utils/CMakeLists.txt index d96d812af0..20a680bce9 100644 --- a/Gems/Atom/Utils/CMakeLists.txt +++ b/Gems/Atom/Utils/CMakeLists.txt @@ -9,6 +9,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -ly_add_external_target_path(${CMAKE_CURRENT_LIST_DIR}/3rdParty) - add_subdirectory(Code) diff --git a/Gems/EMotionFX/CMakeLists.txt b/Gems/EMotionFX/CMakeLists.txt index d96d812af0..20a680bce9 100644 --- a/Gems/EMotionFX/CMakeLists.txt +++ b/Gems/EMotionFX/CMakeLists.txt @@ -9,6 +9,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -ly_add_external_target_path(${CMAKE_CURRENT_LIST_DIR}/3rdParty) - add_subdirectory(Code) diff --git a/Gems/NvCloth/Code/Platform/Windows/PAL_windows.cmake b/Gems/NvCloth/Code/Platform/Windows/PAL_windows.cmake index e6c7c23614..5a4d953220 100644 --- a/Gems/NvCloth/Code/Platform/Windows/PAL_windows.cmake +++ b/Gems/NvCloth/Code/Platform/Windows/PAL_windows.cmake @@ -10,3 +10,5 @@ # set(PAL_TRAIT_NVCLOTH_USE_STUB FALSE) + +ly_associate_package(PACKAGE_NAME NvCloth-1.1.6-rev1-multiplatform TARGETS NvCloth PACKAGE_HASH 05fc62634ca28644e7659a89e97f4520d791e6ddf4b66f010ac669e4e2ed4454) diff --git a/Gems/PhysX/CMakeLists.txt b/Gems/PhysX/CMakeLists.txt index d96d812af0..20a680bce9 100644 --- a/Gems/PhysX/CMakeLists.txt +++ b/Gems/PhysX/CMakeLists.txt @@ -9,6 +9,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -ly_add_external_target_path(${CMAKE_CURRENT_LIST_DIR}/3rdParty) - add_subdirectory(Code) diff --git a/Gems/PhysX/Code/CMakeLists.txt b/Gems/PhysX/Code/CMakeLists.txt index ac5fd902c2..e6f8fc7188 100644 --- a/Gems/PhysX/Code/CMakeLists.txt +++ b/Gems/PhysX/Code/CMakeLists.txt @@ -71,6 +71,9 @@ ly_add_target( if(PAL_TRAIT_BUILD_HOST_TOOLS) + ly_associate_package(PACKAGE_NAME poly2tri-0.3.3-rev2-multiplatform TARGETS poly2tri PACKAGE_HASH 04092d06716f59b936b61906eaf3647db23b685d81d8b66131eb53e0aeaa1a38) + ly_associate_package(PACKAGE_NAME v-hacd-2.0-rev1-multiplatform TARGETS v-hacd PACKAGE_HASH 5c71aef19cc9787d018d64eec076e9f51ea5a3e0dc6b6e22e57c898f6cc4afe3) + ly_add_target( NAME PhysX.Editor.Static STATIC NAMESPACE Gem diff --git a/Gems/PythonAssetBuilder/CMakeLists.txt b/Gems/PythonAssetBuilder/CMakeLists.txt index d577738051..20a680bce9 100644 --- a/Gems/PythonAssetBuilder/CMakeLists.txt +++ b/Gems/PythonAssetBuilder/CMakeLists.txt @@ -9,5 +9,4 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # -ly_add_external_target_path(${CMAKE_CURRENT_LIST_DIR}/3rdParty) add_subdirectory(Code) diff --git a/Gems/PythonAssetBuilder/3rdParty/readme.md b/Gems/PythonAssetBuilder/readme.md similarity index 100% rename from Gems/PythonAssetBuilder/3rdParty/readme.md rename to Gems/PythonAssetBuilder/readme.md diff --git a/Gems/WhiteBox/Code/Source/Platform/Windows/platform_windows_tools.cmake b/Gems/WhiteBox/Code/Source/Platform/Windows/platform_windows_tools.cmake index 561ab67600..ef25fb2f63 100644 --- a/Gems/WhiteBox/Code/Source/Platform/Windows/platform_windows_tools.cmake +++ b/Gems/WhiteBox/Code/Source/Platform/Windows/platform_windows_tools.cmake @@ -10,6 +10,9 @@ # if(PAL_TRAIT_BUILD_HOST_TOOLS) + + ly_associate_package(PACKAGE_NAME OpenMesh-8.1-rev1-windows TARGETS OpenMesh PACKAGE_HASH 1c1df639358526c368e790dfce40c45cbdfcfb1c9a041b9d7054a8949d88ee77) + set(LY_BUILD_DEPENDENCIES PRIVATE 3rdParty::OpenMesh) diff --git a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake index e42e8e40ea..890f4bcc3f 100644 --- a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake +++ b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake @@ -31,8 +31,6 @@ ly_associate_package(PACKAGE_NAME glad-2.0.0-beta-rev2-multiplatform TARG ly_associate_package(PACKAGE_NAME lux_core-2.2-rev5-multiplatform TARGETS lux_core PACKAGE_HASH c8c13cf7bc351643e1abd294d0841b24dee60e51647dff13db7aec396ad1e0b5) ly_associate_package(PACKAGE_NAME xxhash-0.7.4-rev1-multiplatform TARGETS xxhash PACKAGE_HASH e81f3e6c4065975833996dd1fcffe46c3cf0f9e3a4207ec5f4a1b564ba75861e) ly_associate_package(PACKAGE_NAME PVRTexTool-4.24.0-rev4-multiplatform TARGETS PVRTexTool PACKAGE_HASH d0d6da61c7557de0d2c71fc35ba56c3be49555b703f0e853d4c58225537acf1e) -ly_associate_package(PACKAGE_NAME poly2tri-0.3.3-rev2-multiplatform TARGETS poly2tri PACKAGE_HASH 04092d06716f59b936b61906eaf3647db23b685d81d8b66131eb53e0aeaa1a38) -ly_associate_package(PACKAGE_NAME v-hacd-2.0-rev1-multiplatform TARGETS v-hacd PACKAGE_HASH 5c71aef19cc9787d018d64eec076e9f51ea5a3e0dc6b6e22e57c898f6cc4afe3) # platform-specific: ly_associate_package(PACKAGE_NAME freetype-2.10.4.14-linux TARGETS freetype PACKAGE_HASH 9ad246873067717962c6b780d28a5ce3cef3321b73c9aea746a039c798f52e93) diff --git a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake index d6d017d1d1..ff6227f88c 100644 --- a/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake +++ b/cmake/3rdParty/Platform/Mac/BuiltInPackages_mac.cmake @@ -36,8 +36,6 @@ ly_associate_package(PACKAGE_NAME glad-2.0.0-beta-rev2-multiplatform ly_associate_package(PACKAGE_NAME lux_core-2.2-rev5-multiplatform TARGETS lux_core PACKAGE_HASH c8c13cf7bc351643e1abd294d0841b24dee60e51647dff13db7aec396ad1e0b5) ly_associate_package(PACKAGE_NAME xxhash-0.7.4-rev1-multiplatform TARGETS xxhash PACKAGE_HASH e81f3e6c4065975833996dd1fcffe46c3cf0f9e3a4207ec5f4a1b564ba75861e) ly_associate_package(PACKAGE_NAME PVRTexTool-4.24.0-rev4-multiplatform TARGETS PVRTexTool PACKAGE_HASH d0d6da61c7557de0d2c71fc35ba56c3be49555b703f0e853d4c58225537acf1e) -ly_associate_package(PACKAGE_NAME poly2tri-0.3.3-rev2-multiplatform TARGETS poly2tri PACKAGE_HASH 04092d06716f59b936b61906eaf3647db23b685d81d8b66131eb53e0aeaa1a38) -ly_associate_package(PACKAGE_NAME v-hacd-2.0-rev1-multiplatform TARGETS v-hacd PACKAGE_HASH 5c71aef19cc9787d018d64eec076e9f51ea5a3e0dc6b6e22e57c898f6cc4afe3) # platform-specific: ly_associate_package(PACKAGE_NAME freetype-2.10.4.14-mac-ios TARGETS freetype PACKAGE_HASH 67b4f57aed92082d3fd7c16aa244a7d908d90122c296b0a63f73e0a0b8761977) diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index ac2cb1d418..e79d6d9af1 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -37,9 +37,6 @@ ly_associate_package(PACKAGE_NAME lux_core-2.2-rev5-multiplatform ly_associate_package(PACKAGE_NAME xxhash-0.7.4-rev1-multiplatform TARGETS xxhash PACKAGE_HASH e81f3e6c4065975833996dd1fcffe46c3cf0f9e3a4207ec5f4a1b564ba75861e) ly_associate_package(PACKAGE_NAME Blast-1.1.7-rev1-multiplatform TARGETS Blast PACKAGE_HASH 36b8f393bcd25d0f85cfc7a831ebbdac881e6054c4f0735649966aa6aa86e6f0) ly_associate_package(PACKAGE_NAME PVRTexTool-4.24.0-rev4-multiplatform TARGETS PVRTexTool PACKAGE_HASH d0d6da61c7557de0d2c71fc35ba56c3be49555b703f0e853d4c58225537acf1e) -ly_associate_package(PACKAGE_NAME NvCloth-1.1.6-rev1-multiplatform TARGETS NvCloth PACKAGE_HASH 05fc62634ca28644e7659a89e97f4520d791e6ddf4b66f010ac669e4e2ed4454) -ly_associate_package(PACKAGE_NAME poly2tri-0.3.3-rev2-multiplatform TARGETS poly2tri PACKAGE_HASH 04092d06716f59b936b61906eaf3647db23b685d81d8b66131eb53e0aeaa1a38) -ly_associate_package(PACKAGE_NAME v-hacd-2.0-rev1-multiplatform TARGETS v-hacd PACKAGE_HASH 5c71aef19cc9787d018d64eec076e9f51ea5a3e0dc6b6e22e57c898f6cc4afe3) # platform-specific: ly_associate_package(PACKAGE_NAME freetype-2.10.4.14-windows TARGETS freetype PACKAGE_HASH 88dedc86ccb8c92f14c2c033e51ee7d828fa08eafd6475c6aa963938a99f4bf3) diff --git a/cmake/3rdPartyPackages.cmake b/cmake/3rdPartyPackages.cmake index 3984111996..b3545fd415 100644 --- a/cmake/3rdPartyPackages.cmake +++ b/cmake/3rdPartyPackages.cmake @@ -621,7 +621,6 @@ endfunction() # - this waill cause it to automatically download and activate this package if it finds a target that # depends on '3rdParty::zlib' in its runtime or its build time dependency list. # - note that '3rdParty' is implied, do not specify it in the TARGETS list. - function(ly_associate_package) set(_oneValueArgs PACKAGE_NAME PACKAGE_HASH) set(_multiValueArgs TARGETS) @@ -643,6 +642,9 @@ function(ly_associate_package) set_property(GLOBAL PROPERTY LY_PACKAGE_ASSOCIATION_${find_package_name} ${ly_associate_package_PACKAGE_NAME}) set_property(GLOBAL PROPERTY LY_PACKAGE_HASH_${ly_associate_package_PACKAGE_NAME} ${ly_associate_package_PACKAGE_HASH}) endforeach() + + set_property(GLOBAL APPEND PROPERTY LY_PACKAGE_NAMES ${ly_associate_package_PACKAGE_NAME}) + set_property(GLOBAL PROPERTY LY_PACKAGE_TARGETS_${ly_associate_package_PACKAGE_NAME} ${ly_associate_package_TARGETS}) endfunction() #! Given a package find_package name (eg, 'zlib' not the actual package name) diff --git a/cmake/FindTarget.cmake.in b/cmake/FindTarget.cmake.in index 7d0129d05a..8ad9822dae 100644 --- a/cmake/FindTarget.cmake.in +++ b/cmake/FindTarget.cmake.in @@ -14,32 +14,21 @@ include(FindPackageHandleStandardArgs) ly_add_target( - -NAME @NAME_PLACEHOLDER@ UNKNOWN IMPORTED - -@NAMESPACE_PLACEHOLDER@ - -@INCLUDE_DIRECTORIES_PLACEHOLDER@ - -@BUILD_DEPENDENCIES_PLACEHOLDER@ - -@RUNTIME_DEPENDENCIES_PLACEHOLDER@ - + NAME @NAME_PLACEHOLDER@ UNKNOWN IMPORTED + @NAMESPACE_PLACEHOLDER@ + COMPILE_DEFINITIONS + INTERFACE @COMPILE_DEFINITIONS_PLACEHOLDER@ + INCLUDE_DIRECTORIES + INTERFACE +@INCLUDE_DIRECTORIES_PLACEHOLDER@ + BUILD_DEPENDENCIES + INTERFACE +@BUILD_DEPENDENCIES_PLACEHOLDER@ + RUNTIME_DEPENDENCIES +@RUNTIME_DEPENDENCIES_PLACEHOLDER@ ) -# The below if was generated from if (NOT HEADER_ONLY_PLACEHOLDER) -# HEADER_ONLY_PLACEHOLDER evaluates to TRUE or FALSE -if (NOT @HEADER_ONLY_PLACEHOLDER@) - # Load information for each installed configuration. - foreach(config @ALL_CONFIGS@) - set(@NAME_PLACEHOLDER@_${config}_FOUND FALSE) - include("${LY_ROOT_FOLDER}/cmake_autogen/@NAME_PLACEHOLDER@/@NAME_PLACEHOLDER@_${config}.cmake") - endforeach() - - find_package_handle_standard_args(@NAME_PLACEHOLDER@ - "Could not find package @NAME_PLACEHOLDER@" - @TARGET_CONFIG_FOUND_VARS_PLACEHOLDER@) -else() - set(@NAME_PLACEHOLDER@_FOUND TRUE) -endif() \ No newline at end of file +foreach(config @CMAKE_CONFIGURATION_TYPES@) + include("${LY_ROOT_FOLDER}/cmake_autogen/@NAME_PLACEHOLDER@/@NAME_PLACEHOLDER@_${config}.cmake" OPTIONAL) +endforeach() diff --git a/cmake/FindTargetTemplate.cmake b/cmake/FindTargetTemplate.cmake deleted file mode 100644 index 7d0129d05a..0000000000 --- a/cmake/FindTargetTemplate.cmake +++ /dev/null @@ -1,45 +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. -# - -# Generated by O3DE - -include(FindPackageHandleStandardArgs) - -ly_add_target( - -NAME @NAME_PLACEHOLDER@ UNKNOWN IMPORTED - -@NAMESPACE_PLACEHOLDER@ - -@INCLUDE_DIRECTORIES_PLACEHOLDER@ - -@BUILD_DEPENDENCIES_PLACEHOLDER@ - -@RUNTIME_DEPENDENCIES_PLACEHOLDER@ - -@COMPILE_DEFINITIONS_PLACEHOLDER@ -) - -# The below if was generated from if (NOT HEADER_ONLY_PLACEHOLDER) -# HEADER_ONLY_PLACEHOLDER evaluates to TRUE or FALSE -if (NOT @HEADER_ONLY_PLACEHOLDER@) - # Load information for each installed configuration. - foreach(config @ALL_CONFIGS@) - set(@NAME_PLACEHOLDER@_${config}_FOUND FALSE) - include("${LY_ROOT_FOLDER}/cmake_autogen/@NAME_PLACEHOLDER@/@NAME_PLACEHOLDER@_${config}.cmake") - endforeach() - - find_package_handle_standard_args(@NAME_PLACEHOLDER@ - "Could not find package @NAME_PLACEHOLDER@" - @TARGET_CONFIG_FOUND_VARS_PLACEHOLDER@) -else() - set(@NAME_PLACEHOLDER@_FOUND TRUE) -endif() \ No newline at end of file diff --git a/cmake/Findo3de.cmake.in b/cmake/Findo3de.cmake.in index 7ecb73e874..5a56de0851 100644 --- a/cmake/Findo3de.cmake.in +++ b/cmake/Findo3de.cmake.in @@ -15,7 +15,7 @@ include(FindPackageHandleStandardArgs) # This will be called from within the installed engine's CMakeLists.txt macro(ly_find_o3de_packages) - @FIND_PACKAGES_PLACEHOLDER@ +@FIND_PACKAGES_PLACEHOLDER@ find_package(LauncherGenerator) endmacro() diff --git a/cmake/Findo3deTemplate.cmake b/cmake/Findo3deTemplate.cmake deleted file mode 100644 index 0e904fd95d..0000000000 --- a/cmake/Findo3deTemplate.cmake +++ /dev/null @@ -1,35 +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. -# - -# Generated by O3DE - -include(FindPackageHandleStandardArgs) - -# This will be called from within the installed engine's CMakeLists.txt -macro(ly_find_o3de_packages) - @FIND_PACKAGES_PLACEHOLDER@ - find_package(LauncherGenerator) -endmacro() - - -function(o3de_current_file_path path) - set(${path} ${CMAKE_CURRENT_FUNCTION_LIST_DIR} PARENT_SCOPE) -endfunction() - - -# We are using the engine's CMakeLists.txt to handle initialization/importing targets -# Since this is external to the project's source, we need to specify an output directory -# even though we don't build -macro(o3de_initialize) - set(LY_PROJECTS ${CMAKE_SOURCE_DIR}) - o3de_current_file_path(current_path) - add_subdirectory(${current_path}/.. o3de) -endmacro() \ No newline at end of file diff --git a/cmake/Initialize.cmake b/cmake/GeneralSettings.cmake similarity index 69% rename from cmake/Initialize.cmake rename to cmake/GeneralSettings.cmake index 474ea39dd6..2083981291 100644 --- a/cmake/Initialize.cmake +++ b/cmake/GeneralSettings.cmake @@ -17,12 +17,6 @@ include(cmake/LySet.cmake) set_property(GLOBAL PROPERTY USE_FOLDERS ON) ly_set(CMAKE_WARN_DEPRECATED ON) -# Set output directories -set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib CACHE PATH "Build directory for static libraries and import libraries") -set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin CACHE PATH "Build directory for shared libraries") -set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin CACHE PATH "Build directory for executables") -set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "Installation prefix") - set(LY_EXTERNAL_SUBDIRS "" CACHE STRING "Additional list of subdirectory to recurse into via the cmake `add_subdirectory()` command. \ The subdirectories are included after the restricted platform folders have been visited by a call to `add_subdirectory(restricted/\${restricted_platform})`") diff --git a/cmake/OutputDirectory.cmake b/cmake/OutputDirectory.cmake new file mode 100644 index 0000000000..9055802d39 --- /dev/null +++ b/cmake/OutputDirectory.cmake @@ -0,0 +1,16 @@ +# +# 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 output directories +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib CACHE PATH "Build directory for static libraries and import libraries") +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin CACHE PATH "Build directory for shared libraries") +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin CACHE PATH "Build directory for executables") +set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/install CACHE PATH "Installation prefix") diff --git a/cmake/Platform/Common/Install_common.cmake b/cmake/Platform/Common/Install_common.cmake index 7ac9a3afa8..286f449acd 100644 --- a/cmake/Platform/Common/Install_common.cmake +++ b/cmake/Platform/Common/Install_common.cmake @@ -9,6 +9,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +set(CMAKE_INSTALL_MESSAGE NEVER) # Simplify messages to reduce output noise #! ly_install_target: registers the target to be installed by cmake install. # @@ -35,27 +36,16 @@ function(ly_install_target ly_install_target_NAME) install( TARGETS ${ly_install_target_NAME} - EXPORT ${ly_install_target_NAME}Targets LIBRARY DESTINATION lib/$ ARCHIVE DESTINATION lib/$ RUNTIME DESTINATION bin/$ PUBLIC_HEADER DESTINATION ${include_location} ) - - install(EXPORT ${ly_install_target_NAME}Targets + + ly_generate_target_config_file(${ly_install_target_NAME}) + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${ly_install_target_NAME}_$.cmake" DESTINATION cmake_autogen/${ly_install_target_NAME} ) - - # Header only targets(i.e., INTERFACE) don't have outputs - get_target_property(target_type ${ly_install_target_NAME} TYPE) - if(NOT ${target_type} STREQUAL "INTERFACE_LIBRARY") - ly_generate_target_config_file(${ly_install_target_NAME}) - - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${ly_install_target_NAME}_$.cmake" - DESTINATION cmake_autogen/${ly_install_target_NAME} - ) - endif() - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Find${ly_install_target_NAME}.cmake" DESTINATION cmake ) @@ -66,8 +56,8 @@ endfunction() #! ly_generate_target_find_file: generates the Find${target}.cmake file which is used when importing installed packages. # # \arg:NAME name of the target -# \arg:INCLUDE_DIRECTORIES paths to the include directories # \arg:NAMESPACE namespace declaration for this target. It will be used for IDE and dependencies +# \arg:INCLUDE_DIRECTORIES paths to the include directories # \arg:BUILD_DEPENDENCIES list of interfaces this target depends on (could be a compilation dependency # if the dependency is only exposing an include path, or could be a linking # dependency is exposing a lib) @@ -77,64 +67,38 @@ function(ly_generate_target_find_file) set(options) set(oneValueArgs NAME NAMESPACE) - set(multiValueArgs COMPILE_DEFINITIONS BUILD_DEPENDENCIES RUNTIME_DEPENDENCIES INCLUDE_DIRECTORIES) + set(multiValueArgs INCLUDE_DIRECTORIES COMPILE_DEFINITIONS BUILD_DEPENDENCIES RUNTIME_DEPENDENCIES) cmake_parse_arguments(ly_generate_target_find_file "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) - # These targets will be imported. So we strip PRIVATE properties. - # We can only set INTERFACE properties on imported targets - unset(build_dependencies_interface_props) - unset(compile_definitions_interface_props) - unset(include_directories_interface_props) - unset(installed_include_directories_interface_props) - ly_strip_non_interface_properties(build_dependencies_interface_props ${ly_generate_target_find_file_BUILD_DEPENDENCIES}) - ly_strip_non_interface_properties(compile_definitions_interface_props ${ly_generate_target_find_file_COMPILE_DEFINITIONS}) - ly_strip_non_interface_properties(include_directories_interface_props ${ly_generate_target_find_file_INCLUDE_DIRECTORIES}) - set(NAME_PLACEHOLDER ${ly_generate_target_find_file_NAME}) + unset(NAMESPACE_PLACEHOLDER) + unset(COMPILE_DEFINITIONS_PLACEHOLDER) + unset(include_directories_interface_props) + unset(INCLUDE_DIRECTORIES_PLACEHOLDER) + set(RUNTIME_DEPENDENCIES_PLACEHOLDER ${ly_generate_target_find_file_RUNTIME_DEPENDENCIES}) + + # These targets will be imported. We will expose PUBLIC and INTERFACE properties as INTERFACE properties since + # only INTERFACE properties can be exposed on imported targets + ly_strip_private_properties(COMPILE_DEFINITIONS_PLACEHOLDER ${ly_generate_target_find_file_COMPILE_DEFINITIONS}) + ly_strip_private_properties(include_directories_interface_props ${ly_generate_target_find_file_INCLUDE_DIRECTORIES}) + ly_strip_private_properties(BUILD_DEPENDENCIES_PLACEHOLDER ${ly_generate_target_find_file_BUILD_DEPENDENCIES}) + + if(ly_generate_target_find_file_NAMESPACE) + set(NAMESPACE_PLACEHOLDER "NAMESPACE ${ly_generate_target_find_file_NAMESPACE}") + endif() + + string(REPLACE ";" "\n" COMPILE_DEFINITIONS_PLACEHOLDER "${COMPILE_DEFINITIONS_PLACEHOLDER}") # Includes need additional processing to add the install root foreach(include ${include_directories_interface_props}) set(installed_include_prefix "\${LY_ROOT_FOLDER}/include/") file(RELATIVE_PATH relative_path ${CMAKE_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/${include}) - string(APPEND installed_include_prefix ${relative_path}) - list(APPEND installed_include_directories_interface_props ${installed_include_prefix}) + list(APPEND INCLUDE_DIRECTORIES_PLACEHOLDER "include/${relative_path}") endforeach() + string(REPLACE ";" "\n" INCLUDE_DIRECTORIES_PLACEHOLDER "${INCLUDE_DIRECTORIES_PLACEHOLDER}") - if(ly_generate_target_find_file_NAMESPACE) - set(NAMESPACE_PLACEHOLDER "NAMESPACE ${ly_generate_target_find_file_NAMESPACE}") - endif() - if(installed_include_directories_interface_props) - string(REPLACE ";" "\n" include_dirs "${installed_include_directories_interface_props}") - set(INCLUDE_DIRECTORIES_PLACEHOLDER "INCLUDE_DIRECTORIES\nINTERFACE\n${include_dirs}") - endif() - if(build_dependencies_interface_props) - string(REPLACE ";" "\n" build_deps "${build_dependencies_interface_props}") - set(BUILD_DEPENDENCIES_PLACEHOLDER "BUILD_DEPENDENCIES\nINTERFACE\n${build_deps}") - endif() - if(ly_generate_target_find_file_RUNTIME_DEPENDENCIES) - string(REPLACE ";" "\n" runtime_deps "${ly_generate_target_find_file_RUNTIME_DEPENDENCIES}") - set(RUNTIME_DEPENDENCIES_PLACEHOLDER "RUNTIME_DEPENDENCIES\n${runtime_deps}") - endif() - if(compile_definitions_interface_props) - string(REPLACE ";" "\n" compile_defs "${compile_definitions_interface_props}") - set(COMPILE_DEFINITIONS_PLACEHOLDER "COMPILE_DEFINITIONS\nINTERFACE\n${compile_defs}") - endif() - - string(REPLACE ";" " " ALL_CONFIGS "${CMAKE_CONFIGURATION_TYPES}") - - set(target_config_found_vars "") - foreach(config ${CMAKE_CONFIGURATION_TYPES}) - string(APPEND target_config_found_vars "\n${ly_generate_target_find_file_NAME}_${config}_FOUND") - endforeach() - set(TARGET_CONFIG_FOUND_VARS_PLACEHOLDER "${target_config_found_vars}") - - # Interface libs aren't built so they don't generate a library. These are our HEADER_ONLY targets. - get_target_property(target_type ${ly_generate_target_find_file_NAME} TYPE) - if(NOT ${target_type} STREQUAL "INTERFACE_LIBRARY") - set(HEADER_ONLY_PLACEHOLDER FALSE) - else() - set(HEADER_ONLY_PLACEHOLDER TRUE) - endif() + string(REPLACE ";" "\n" BUILD_DEPENDENCIES_PLACEHOLDER "${BUILD_DEPENDENCIES_PLACEHOLDER}") + string(REPLACE ";" "\n" RUNTIME_DEPENDENCIES_PLACEHOLDER "${RUNTIME_DEPENDENCIES_PLACEHOLDER}") configure_file(${LY_ROOT_FOLDER}/cmake/FindTarget.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/Find${ly_generate_target_find_file_NAME}.cmake @ONLY) @@ -148,37 +112,47 @@ endfunction() # \arg:NAME name of the target function(ly_generate_target_config_file NAME) - # SHARED_LIBRARY is omitted from this list because we link to the implib on Windows - set(BINARY_DIR_OUTPUTS EXECUTABLE APPLICATION) - set(target_file_contents "") - if(${target_type} IN_LIST BINARY_DIR_OUTPUTS) - set(out_file_generator TARGET_FILE_NAME) - set(out_dir bin) - else() - set(out_file_generator TARGET_LINKER_FILE_NAME) - set(out_dir lib) - endif() + get_target_property(target_type ${NAME} TYPE) + + unset(target_file_contents) + if(NOT target_type STREQUAL INTERFACE_LIBRARY) - string(APPEND target_file_contents " -# Generated by O3DE + set(BINARY_DIR_OUTPUTS EXECUTABLE APPLICATION) + set(target_file_contents "") + if(${target_type} IN_LIST BINARY_DIR_OUTPUTS) + set(out_file_generator TARGET_FILE_NAME) + set(out_dir bin) + else() + set(out_file_generator TARGET_LINKER_FILE_NAME) + set(out_dir lib) + endif() -set_target_properties(${NAME} PROPERTIES IMPORTED_LOCATION \"\${LY_ROOT_FOLDER}/${out_dir}/$/$<${out_file_generator}:${NAME}>\") + string(APPEND target_file_contents +"# Generated by O3DE install -if(EXISTS \"\${LY_ROOT_FOLDER}/${out_dir}/$/$<${out_file_generator}:${NAME}>\") +set(target_location \"\${LY_ROOT_FOLDER}/${out_dir}/$/$<${out_file_generator}:${NAME}>\") +set_target_properties(${NAME} + PROPERTIES + $<$:IMPORTED_LOCATION \"\${target_location}>\" + IMPORTED_LOCATION_$> \"\${target_location}\" +) +if(EXISTS \"\${target_location}\") set(${NAME}_$_FOUND TRUE) else() set(${NAME}_$_FOUND FALSE) -endif()") +endif() +") + endif() - file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${NAME}_$.cmake" CONTENT ${target_file_contents}) + file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${NAME}_$.cmake" CONTENT "${target_file_contents}") endfunction() -#! ly_strip_non_interface_properties: strips private properties since we're exporting an interface target +#! ly_strip_private_properties: strips private properties since we're exporting an interface target # # \arg:INTERFACE_PROPERTIES list of interface properties to be returned -function(ly_strip_non_interface_properties INTERFACE_PROPERTIES) +function(ly_strip_private_properties INTERFACE_PROPERTIES) set(reserved_keywords PRIVATE PUBLIC INTERFACE) unset(last_keyword) unset(stripped_props) @@ -196,36 +170,79 @@ function(ly_strip_non_interface_properties INTERFACE_PROPERTIES) endfunction() -#! ly_setup_o3de_install: generates the Findo3de.cmake file and setup install locations for scripts, tools, assets etc., +#! ly_setup_o3de_install: orchestrates the installation of the different parts. This is the entry point from the root CMakeLists.txt function(ly_setup_o3de_install) - get_property(all_targets GLOBAL PROPERTY LY_ALL_TARGETS) - unset(find_package_list) - foreach(target IN LISTS all_targets) - list(APPEND find_package_list "find_package(${target})") - endforeach() + ly_setup_cmake_install() + ly_setup_target_generator() + ly_setup_others() - string(REPLACE ";" "\n" FIND_PACKAGES_PLACEHOLDER "${find_package_list}") +endfunction() - configure_file(${LY_ROOT_FOLDER}/cmake/Findo3de.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/Findo3de.cmake @ONLY) +#! ly_setup_cmake_install: install the "cmake" folder +function(ly_setup_cmake_install) - ly_install_launcher_target_generator() - - ly_install_o3de_directories() - - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/Findo3de.cmake" - DESTINATION cmake + install(DIRECTORY "${CMAKE_SOURCE_DIR}/cmake" + DESTINATION . + REGEX "Findo3de.cmake" EXCLUDE + REGEX "Platform\/.*\/BuiltInPackages_.*\.cmake" EXCLUDE + ) + install( + FILES + "${CMAKE_SOURCE_DIR}/CMakeLists.txt" + "${CMAKE_SOURCE_DIR}/engine.json" + DESTINATION . ) - install(FILES "${CMAKE_SOURCE_DIR}/CMakeLists.txt" - DESTINATION . + # Collect all Find files that were added with ly_add_external_target_path + unset(additional_find_files) + get_property(additional_module_paths GLOBAL PROPERTY LY_ADDITIONAL_MODULE_PATH) + foreach(additional_module_path ${additional_module_paths}) + unset(find_files) + file(GLOB find_files "${additional_module_path}/Find*.cmake") + list(APPEND additional_find_files "${find_files}") + endforeach() + install(FILES ${additional_find_files} + DESTINATION cmake/3rdParty + ) + + # Findo3de.cmake file: we generate a different Findo3de.camke file than the one we have in cmake. This one is going to expose all + # targets that are pre-built + get_property(all_targets GLOBAL PROPERTY LY_ALL_TARGETS) + unset(FIND_PACKAGES_PLACEHOLDER) + foreach(target IN LISTS all_targets) + string(APPEND FIND_PACKAGES_PLACEHOLDER " find_package(${target})\n") + endforeach() + + configure_file(${LY_ROOT_FOLDER}/cmake/Findo3de.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/cmake/Findo3de.cmake @ONLY) + + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/cmake/Findo3de.cmake" + DESTINATION cmake + ) + + # BuiltInPackage_.cmake: since associations could happen in any cmake file across the engine. We collect + # all the associations in ly_associate_package and then generate them into BuiltInPackages_.cmake. This + # will consolidate all associations in one file + get_property(all_package_names GLOBAL PROPERTY LY_PACKAGE_NAMES) + set(builtinpackages "# Generated by O3DE install\n\n") + foreach(package_name IN LISTS all_package_names) + get_property(package_hash GLOBAL PROPERTY LY_PACKAGE_HASH_${package_name}) + get_property(targets GLOBAL PROPERTY LY_PACKAGE_TARGETS_${package_name}) + string(APPEND builtinpackages "ly_associate_package(PACKAGE_NAME ${package_name} TARGETS ${targets} PACKAGE_HASH ${package_hash})\n") + endforeach() + + ly_get_absolute_pal_filename(pal_builtin_file ${CMAKE_CURRENT_BINARY_DIR}/cmake/3rdParty/Platform/${PAL_PLATFORM_NAME}/BuiltInPackages_${PAL_PLATFORM_NAME_LOWERCASE}.cmake) + file(GENERATE OUTPUT ${pal_builtin_file} + CONTENT ${builtinpackages} + ) + install(FILES "${pal_builtin_file}" + DESTINATION cmake/3rdParty/Platform/${PAL_PLATFORM_NAME} ) endfunction() - -#! ly_install_o3de_directories: install directories required by the engine -function(ly_install_o3de_directories) +#! ly_setup_others: install directories required by the engine +function(ly_setup_others) # List of directories we want to install relative to engine root set(DIRECTORIES_TO_INSTALL Tools/LyTestTools Tools/RemoteConsole ctest_scripts scripts) @@ -242,12 +259,6 @@ function(ly_install_o3de_directories) endforeach() - # Directories which have excludes - install(DIRECTORY "${CMAKE_SOURCE_DIR}/cmake" - DESTINATION . - REGEX "Findo3de.cmake" EXCLUDE - ) - install(DIRECTORY "${CMAKE_SOURCE_DIR}/python" DESTINATION . REGEX "downloaded_packages" EXCLUDE @@ -257,8 +268,8 @@ function(ly_install_o3de_directories) endfunction() -#! ly_install_launcher_target_generator: install source files needed for project launcher generation -function(ly_install_launcher_target_generator) +#! ly_setup_target_generator: install source files needed for project launcher generation +function(ly_setup_target_generator) install(FILES ${CMAKE_SOURCE_DIR}/Code/LauncherUnified/launcher_generator.cmake diff --git a/scripts/build/Platform/Windows/build_config.json b/scripts/build/Platform/Windows/build_config.json index 4dd99686c5..a4a5a52c4d 100644 --- a/scripts/build/Platform/Windows/build_config.json +++ b/scripts/build/Platform/Windows/build_config.json @@ -290,7 +290,7 @@ "PARAMETERS": { "CONFIGURATION": "profile", "OUTPUT_DIRECTORY": "build\\windows_vs2019", - "CMAKE_OPTIONS": "-G \"Visual Studio 16 2019\" -DCMAKE_SYSTEM_VERSION=10.0 -DLY_UNITY_BUILD=TRUE -DLY_DISABLE_TEST_MODULES=TRUE -DCMAKE_INSTALL_PREFIX=build\\install", + "CMAKE_OPTIONS": "-G \"Visual Studio 16 2019\" -DCMAKE_SYSTEM_VERSION=10.0 -DLY_UNITY_BUILD=TRUE -DLY_DISABLE_TEST_MODULES=TRUE -DCMAKE_INSTALL_PREFIX=install", "CMAKE_LY_PROJECTS": "", "CMAKE_TARGET": "INSTALL", "CMAKE_NATIVE_BUILD_ARGS": "/m /nologo" From 626f7c00fe2d32fc6e00d43ece5893960c6d14f1 Mon Sep 17 00:00:00 2001 From: Vincent Liu <5900509+onecent1101@users.noreply.github.com> Date: Wed, 21 Apr 2021 12:07:34 -0700 Subject: [PATCH 11/11] [SPEC-1856] Convert AWSGameLiftServerSDK to new 3rdparty system (#198) Remove old 3rdparty reference in code, and replace with new target. Lib has been promoted to prod bucket (https://jira.agscollab.com/browse/SPEC-6469) --- cmake/3rdParty/FindAWSGameLiftServerSDK.cmake | 20 -------- .../Linux/AWSGameLiftServerSDK_linux.cmake | 21 --------- .../Linux/BuiltInPackages_linux.cmake | 1 + .../Platform/Linux/cmake_linux_files.cmake | 1 - .../AWSGameLiftServerSDK_windows.cmake | 47 ------------------- .../Windows/BuiltInPackages_windows.cmake | 1 + .../Windows/cmake_windows_files.cmake | 1 - cmake/3rdParty/cmake_files.cmake | 1 - .../3rdParty/package_filelists/3rdParty.json | 1 - .../Windows/package_filelists/3rdParty.json | 6 --- 10 files changed, 2 insertions(+), 98 deletions(-) delete mode 100644 cmake/3rdParty/FindAWSGameLiftServerSDK.cmake delete mode 100644 cmake/3rdParty/Platform/Linux/AWSGameLiftServerSDK_linux.cmake delete mode 100644 cmake/3rdParty/Platform/Windows/AWSGameLiftServerSDK_windows.cmake diff --git a/cmake/3rdParty/FindAWSGameLiftServerSDK.cmake b/cmake/3rdParty/FindAWSGameLiftServerSDK.cmake deleted file mode 100644 index 48e7096480..0000000000 --- a/cmake/3rdParty/FindAWSGameLiftServerSDK.cmake +++ /dev/null @@ -1,20 +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 AWSGameLiftServerSDK - VERSION 3.4.0 - 3RDPARTY_DIRECTORY AWS/GameLift - INCLUDE_DIRECTORIES include - COMPILE_DEFINITIONS - AWS_CUSTOM_MEMORY_MANAGEMENT - PLATFORM_SUPPORTS_AWS_NATIVE_SDK - GAMELIFT_USE_STD -) diff --git a/cmake/3rdParty/Platform/Linux/AWSGameLiftServerSDK_linux.cmake b/cmake/3rdParty/Platform/Linux/AWSGameLiftServerSDK_linux.cmake deleted file mode 100644 index 405b4f4597..0000000000 --- a/cmake/3rdParty/Platform/Linux/AWSGameLiftServerSDK_linux.cmake +++ /dev/null @@ -1,21 +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. -# - -# TODO AWSGameLiftServerSDK Linux shared libs are not compiled. -set(AWSGAMELIFTSERVERSDK_LIB_PATH ${BASE_PATH}/lib/linux/libstdcxx/intel64/clang-6.0.0/$,Debug,Release>) - -set(AWSGAMELIFTSERVERSDK_LIBS ${AWSGAMELIFTSERVERSDK_LIB_PATH}/libaws-cpp-sdk-gamelift-server.a - ${AWSGAMELIFTSERVERSDK_LIB_PATH}/libsioclient.a - ${AWSGAMELIFTSERVERSDK_LIB_PATH}/libboost_date_time.a - ${AWSGAMELIFTSERVERSDK_LIB_PATH}/libboost_random.a - ${AWSGAMELIFTSERVERSDK_LIB_PATH}/libboost_system.a - ${AWSGAMELIFTSERVERSDK_LIB_PATH}/libprotobuf.a -) diff --git a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake index 890f4bcc3f..6d3499534c 100644 --- a/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake +++ b/cmake/3rdParty/Platform/Linux/BuiltInPackages_linux.cmake @@ -33,6 +33,7 @@ ly_associate_package(PACKAGE_NAME xxhash-0.7.4-rev1-multiplatform TARG ly_associate_package(PACKAGE_NAME PVRTexTool-4.24.0-rev4-multiplatform TARGETS PVRTexTool PACKAGE_HASH d0d6da61c7557de0d2c71fc35ba56c3be49555b703f0e853d4c58225537acf1e) # platform-specific: +ly_associate_package(PACKAGE_NAME AWSGameLiftServerSDK-3.4.1-rev1-linux TARGETS AWSGameLiftServerSDK PACKAGE_HASH a8149a95bd100384af6ade97e2b21a56173740d921e6c3da8188cd51554d39af) ly_associate_package(PACKAGE_NAME freetype-2.10.4.14-linux TARGETS freetype PACKAGE_HASH 9ad246873067717962c6b780d28a5ce3cef3321b73c9aea746a039c798f52e93) ly_associate_package(PACKAGE_NAME tiff-4.2.0.15-linux TARGETS tiff PACKAGE_HASH ae92b4d3b189c42ef644abc5cac865d1fb2eb7cb5622ec17e35642b00d1a0a76) ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev3-linux TARGETS AWSNativeSDK PACKAGE_HASH e69c55682638dc1e7fa571a61a82c8a69d395c74a008543a5188f4bd2b6b10c4) diff --git a/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake b/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake index 809e8b7198..69aa0a5a2f 100644 --- a/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake +++ b/cmake/3rdParty/Platform/Linux/cmake_linux_files.cmake @@ -10,7 +10,6 @@ # set(FILES - AWSGameLiftServerSDK_linux.cmake BuiltInPackages_linux.cmake dyad_linux.cmake FbxSdk_linux.cmake diff --git a/cmake/3rdParty/Platform/Windows/AWSGameLiftServerSDK_windows.cmake b/cmake/3rdParty/Platform/Windows/AWSGameLiftServerSDK_windows.cmake deleted file mode 100644 index 5f93ef7030..0000000000 --- a/cmake/3rdParty/Platform/Windows/AWSGameLiftServerSDK_windows.cmake +++ /dev/null @@ -1,47 +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. -# - -if (LY_MONOLITHIC_GAME) - # Import Libs - set(AWSGAMELIFTSERVERSDK_LIB_PATH ${BASE_PATH}/lib/windows/intel64/vs2017/$,Debug,Release>) -else() - # Static Libs - set(AWSGAMELIFTSERVERSDK_LIB_PATH ${BASE_PATH}/bin/windows/intel64/vs2017/$,Debug,Release>) -endif() - -set(AWSGAMELIFTSERVERSDK_LIBS - ${AWSGAMELIFTSERVERSDK_LIB_PATH}/sioclient.lib - ${AWSGAMELIFTSERVERSDK_LIB_PATH}/libboost_date_time.lib - ${AWSGAMELIFTSERVERSDK_LIB_PATH}/libboost_random.lib - ${AWSGAMELIFTSERVERSDK_LIB_PATH}/libboost_system.lib - ${AWSGAMELIFTSERVERSDK_LIB_PATH}/libprotobuf$<$:d>.lib -) - -set(AWSGAMELIFTSERVERSDK_COMPILE_DEFINITIONS - USE_IMPORT_EXPORT - AWS_CUSTOM_MEMORY_MANAGEMENT - PLATFORM_SUPPORTS_AWS_NATIVE_SDK - GAMELIFT_USE_STD -) - -if (NOT LY_MONOLITHIC_GAME) - - # Add 'USE_IMPORT_EXPORT' for external linkage - LIST(APPEND AWSGAMELIFTSERVERSDK_COMPILE_DEFINITIONS USE_IMPORT_EXPORT) - - # Import Lib - LIST(APPEND AWSGAMELIFTSERVERSDK_LIBS ${AWSGAMELIFTSERVERSDK_LIB_PATH}/aws-cpp-sdk-gamelift-server.lib) - - # Shared libs - set(AWSGAMELIFTSERVERSDK_SHARED_LIB_PATH ${BASE_PATH}/bin/windows/intel64/vs2017/$,Debug,Release>) - set(AWSGAMELIFTSERVERSDK_RUNTIME_DEPENDENCIES ${AWSGAMELIFTSERVERSDK_SHARED_LIB_PATH}/aws-cpp-sdk-gamelift-server.dll) - -endif() \ No newline at end of file diff --git a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake index e79d6d9af1..1e2c80180d 100644 --- a/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake +++ b/cmake/3rdParty/Platform/Windows/BuiltInPackages_windows.cmake @@ -39,6 +39,7 @@ ly_associate_package(PACKAGE_NAME Blast-1.1.7-rev1-multiplatform ly_associate_package(PACKAGE_NAME PVRTexTool-4.24.0-rev4-multiplatform TARGETS PVRTexTool PACKAGE_HASH d0d6da61c7557de0d2c71fc35ba56c3be49555b703f0e853d4c58225537acf1e) # platform-specific: +ly_associate_package(PACKAGE_NAME AWSGameLiftServerSDK-3.4.1-rev1-windows TARGETS AWSGameLiftServerSDK PACKAGE_HASH a0586b006e4def65cc25f388de17dc475e417dc1e6f9d96749777c88aa8271b0) ly_associate_package(PACKAGE_NAME freetype-2.10.4.14-windows TARGETS freetype PACKAGE_HASH 88dedc86ccb8c92f14c2c033e51ee7d828fa08eafd6475c6aa963938a99f4bf3) ly_associate_package(PACKAGE_NAME tiff-4.2.0.14-windows TARGETS tiff PACKAGE_HASH ab60d1398e4e1e375ec0f1a00cdb1d812a07c0096d827db575ce52dd6d714207) ly_associate_package(PACKAGE_NAME AWSNativeSDK-1.7.167-rev3-windows TARGETS AWSNativeSDK PACKAGE_HASH 929873d4252c464620a9d288e41bd5d47c0bd22750aeb3a1caa68a3da8247c48) diff --git a/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake b/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake index fe4aa6bc82..25526b7aff 100644 --- a/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake +++ b/cmake/3rdParty/Platform/Windows/cmake_windows_files.cmake @@ -10,7 +10,6 @@ # set(FILES - AWSGameLiftServerSDK_windows.cmake BuiltInPackages_windows.cmake Crashpad_windows.cmake DirectXShaderCompiler_windows.cmake diff --git a/cmake/3rdParty/cmake_files.cmake b/cmake/3rdParty/cmake_files.cmake index 0d8e6d4bb1..fef363e9e4 100644 --- a/cmake/3rdParty/cmake_files.cmake +++ b/cmake/3rdParty/cmake_files.cmake @@ -11,7 +11,6 @@ set(FILES BuiltInPackages.cmake - FindAWSGameLiftServerSDK.cmake FindClang.cmake FindDirectXShaderCompiler.cmake Finddyad.cmake diff --git a/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json b/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json index cb974afd7e..97deb11ea6 100644 --- a/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json +++ b/scripts/build/package/Platform/3rdParty/package_filelists/3rdParty.json @@ -2,7 +2,6 @@ "@3rdParty": { "3rdParty.txt": "#include", "AWS/AWSNativeSDK/1.7.167-az.2/**": "#include", - "AWS/GameLift/3.4.0/**": "#include", "CMake/3.19.1/**": "#include", "DirectXShaderCompiler/1.0.1-az.1/**": "#include", "DirectXShaderCompiler/2020.08.07/**": "#include", diff --git a/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json b/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json index 75add157b4..d9e5d85090 100644 --- a/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json +++ b/scripts/build/package/Platform/Windows/package_filelists/3rdParty.json @@ -17,12 +17,6 @@ "bin/linux/**":"#include", "lib/linux/**":"#include" }, - "AWS/GameLift/3.4.0":{ - "*":"#include", - "include/**":"#include", - "bin/windows/**":"#include", - "lib/linux/libstdcxx/**":"#include" - }, "DirectXShaderCompiler/1.0.1-az.1":{ "*":"#include", "src/**":"#include",