Merge branch 'main' into carlitosan_scripting_first

This commit is contained in:
chcurran
2021-04-21 09:54:35 -07:00
134 changed files with 11610 additions and 484 deletions
@@ -157,7 +157,7 @@ endif()
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_pytest(
NAME AutomatedTesting::BlastTests
TEST_SUITE sandbox
TEST_SUITE periodic
TEST_SERIAL TRUE
PATH ${CMAKE_CURRENT_LIST_DIR}/Blast/TestSuite_Active.py
TIMEOUT 3600
@@ -28,7 +28,7 @@ namespace Physics
class CharacterColliderNodeConfiguration
{
public:
AZ_RTTI(CharacterColliderNodeConfiguration, "{C16F3301-0979-400C-B734-692D83755C39}");
AZ_RTTI(Physics::CharacterColliderNodeConfiguration, "{C16F3301-0979-400C-B734-692D83755C39}");
AZ_CLASS_ALLOCATOR_DECL
virtual ~CharacterColliderNodeConfiguration() = default;
@@ -42,7 +42,7 @@ namespace Physics
class CharacterColliderConfiguration
{
public:
AZ_RTTI(CharacterColliderConfiguration, "{4DFF1434-DF5B-4ED5-BE0F-D3E66F9B331A}");
AZ_RTTI(Physics::CharacterColliderConfiguration, "{4DFF1434-DF5B-4ED5-BE0F-D3E66F9B331A}");
AZ_CLASS_ALLOCATOR_DECL
virtual ~CharacterColliderConfiguration() = default;
@@ -63,21 +63,23 @@ namespace Physics
{
public:
AZ_CLASS_ALLOCATOR(CharacterConfiguration, AZ::SystemAllocator, 0);
AZ_RTTI(CharacterConfiguration, "{58D5A6CA-113B-4AC3-8D53-239DB0C4E240}", AzPhysics::SimulatedBodyConfiguration);
AZ_RTTI(Physics::CharacterConfiguration, "{58D5A6CA-113B-4AC3-8D53-239DB0C4E240}", AzPhysics::SimulatedBodyConfiguration);
virtual ~CharacterConfiguration() = default;
static void Reflect(AZ::ReflectContext* context);
AzPhysics::CollisionGroups::Id m_collisionGroupId; ///< Which layers does this character collide with.
AzPhysics::CollisionLayer m_collisionLayer; ///< Which collision layer is this character on.
MaterialSelection m_materialSelection; ///< Material selected from library for the body associated with the character.
AZ::Vector3 m_upDirection = AZ::Vector3::CreateAxisZ(); ///< Up direction for character orientation and step behavior.
float m_maximumSlopeAngle = 30.0f; ///< The maximum slope on which the character can move, in degrees.
float m_stepHeight = 0.5f; ///< Affects what size steps the character can climb.
float m_minimumMovementDistance = 0.001f; ///< To avoid jittering, the controller will not attempt to move distances below this.
float m_maximumSpeed = 100.0f; ///< If the accumulated requested velocity for a tick exceeds this magnitude, it will be clamped.
AZStd::string m_colliderTag; ///< Used to identify the collider associated with the character controller.
AzPhysics::CollisionGroups::Id m_collisionGroupId; //!< Which layers does this character collide with.
AzPhysics::CollisionLayer m_collisionLayer; //!< Which collision layer is this character on.
MaterialSelection m_materialSelection; //!< Material selected from library for the body associated with the character.
AZ::Vector3 m_upDirection = AZ::Vector3::CreateAxisZ(); //!< Up direction for character orientation and step behavior.
float m_maximumSlopeAngle = 30.0f; //!< The maximum slope on which the character can move, in degrees.
float m_stepHeight = 0.5f; //!< Affects what size steps the character can climb.
float m_minimumMovementDistance = 0.001f; //!< To avoid jittering, the controller will not attempt to move distances below this.
float m_maximumSpeed = 100.0f; //!< If the accumulated requested velocity for a tick exceeds this magnitude, it will be clamped.
AZStd::string m_colliderTag; //!< Used to identify the collider associated with the character controller.
AZStd::shared_ptr<Physics::ShapeConfiguration> m_shapeConfig = nullptr; //!< The shape to use when creating the character controller.
AZStd::vector<AZStd::shared_ptr<Physics::Shape>> m_colliders; //!< The list of colliders to attach to the character controller.
};
/// Basic implementation of common character-style needs as a WorldBody. Is not a full-functional ship-ready
@@ -88,7 +90,7 @@ namespace Physics
{
public:
AZ_CLASS_ALLOCATOR(Character, AZ::SystemAllocator, 0);
AZ_RTTI(Character, "{962E37A1-3401-4672-B896-0A6157CFAC97}", AzPhysics::SimulatedBody);
AZ_RTTI(Physics::Character, "{962E37A1-3401-4672-B896-0A6157CFAC97}", AzPhysics::SimulatedBody);
~Character() override = default;
@@ -29,7 +29,7 @@ namespace AzPhysics
struct SimulatedBodyConfiguration
{
AZ_CLASS_ALLOCATOR_DECL;
AZ_RTTI(SimulatedBodyConfiguration, "{52844E3D-79C8-4F34-AF63-5C45ADE77F85}");
AZ_RTTI(AzPhysics::SimulatedBodyConfiguration, "{52844E3D-79C8-4F34-AF63-5C45ADE77F85}");
static void Reflect(AZ::ReflectContext* context);
SimulatedBodyConfiguration() = default;
@@ -246,26 +246,6 @@ namespace Physics
using SystemRequests = System;
using SystemRequestBus = AZ::EBus<SystemRequests, SystemRequestsTraits>;
/// Physics character system global requests.
class CharacterSystemRequests
: public AZ::EBusTraits
{
public:
// EBusTraits
// singleton pattern
static const AZ::EBusHandlerPolicy HandlerPolicy = AZ::EBusHandlerPolicy::Single;
static const AZ::EBusAddressPolicy AddressPolicy = AZ::EBusAddressPolicy::Single;
virtual ~CharacterSystemRequests() = default;
/// Creates the physics representation used to handle basic character interactions (also known as a character
/// controller).
virtual AZStd::unique_ptr<Character> CreateCharacter(const CharacterConfiguration& characterConfig,
const ShapeConfiguration& shapeConfig, AzPhysics::SceneHandle& sceneHandle) = 0;
};
typedef AZ::EBus<CharacterSystemRequests> CharacterSystemRequestBus;
/// Physics system global debug requests.
class SystemDebugRequests
: public AZ::EBusTraits
@@ -37,6 +37,7 @@ namespace AzFramework
// ViewportControllerInterface ...
bool HandleInputChannelEvent(const ViewportControllerInputEvent& event) override;
void ResetInputChannels() override;
void UpdateViewport(const ViewportControllerUpdateEvent& event) override;
void RegisterViewportContext(ViewportId viewport) override;
void UnregisterViewportContext(ViewportId viewport) override;
@@ -58,6 +59,7 @@ namespace AzFramework
ViewportId GetViewportId() const { return m_viewportId; }
virtual bool HandleInputChannelEvent([[maybe_unused]]const ViewportControllerInputEvent& event) { return false; }
virtual void ResetInputChannels() {}
virtual void UpdateViewport([[maybe_unused]]const ViewportControllerUpdateEvent& event) {}
private:
@@ -30,6 +30,15 @@ namespace AzFramework
return instanceIt->second->HandleInputChannelEvent(event);
}
template <class TViewportControllerInstance, ViewportControllerPriority Priority>
void MultiViewportController<TViewportControllerInstance, Priority>::ResetInputChannels()
{
for (auto instanceIt = m_instances.begin(); instanceIt != m_instances.end(); ++instanceIt)
{
instanceIt->second->ResetInputChannels();
}
}
template <class TViewportControllerInstance, ViewportControllerPriority Priority>
void MultiViewportController<TViewportControllerInstance, Priority>::UpdateViewport(const ViewportControllerUpdateEvent& event)
{
@@ -49,6 +49,11 @@ namespace AzFramework
bool ViewportControllerList::HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event)
{
if (!IsEnabled())
{
return false;
}
// If our event priority is "custom", we should dispatch at all priority levels in order
using AzFramework::ViewportControllerPriority;
if (event.m_priority == AzFramework::ViewportControllerPriority::DispatchToAllPriorities)
@@ -76,6 +81,23 @@ namespace AzFramework
}
}
void ViewportControllerList::ResetInputChannels()
{
// We don't need to send this while we're disabled, we're guaranteed to call ResetInputChannels after being re-enabled.
if (!IsEnabled())
{
return;
}
for (const auto& controllerList : m_controllers)
{
for (const auto& controller : controllerList.second)
{
controller->ResetInputChannels();
}
}
}
bool ViewportControllerList::DispatchInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event)
{
if (auto priorityListIt = m_controllers.find(event.m_priority); priorityListIt != m_controllers.end())
@@ -106,6 +128,11 @@ namespace AzFramework
void ViewportControllerList::UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event)
{
if (!IsEnabled())
{
return;
}
// If our event priority is "custom", we should dispatch at all priority levels in reverse order
// Reverse order lets high priority controllers get the last say in viewport update operations
using AzFramework::ViewportControllerPriority;
@@ -174,4 +201,22 @@ namespace AzFramework
}
}
}
bool ViewportControllerList::IsEnabled() const
{
return m_enabled;
}
void ViewportControllerList::SetEnabled(bool enabled)
{
if (m_enabled != enabled)
{
m_enabled = enabled;
// If we've been re-enabled, reset our input channels as they may have missed state changes.
if (m_enabled)
{
ResetInputChannels();
}
}
}
} //namespace AzFramework
@@ -37,6 +37,9 @@ namespace AzFramework
//! either a controller returns true to consume the event in OnInputChannelEvent or the controller list is exhausted.
//! InputChannelEvents are sent to controllers in priority order (from the lowest priority value to the highest).
bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override;
//! Dispatches a ResetInputChannels call to all controllers registered to this list.
//! Calls to controllers are made in an undefined order.
void ResetInputChannels() override;
//! Dispatches an update tick to all controllers registered to this list.
//! This occurs in *reverse* priority order (i.e. from the highest priority value to the lowest) so that
//! controllers with the highest registration priority may override the transforms of the controllers with the
@@ -50,6 +53,12 @@ namespace AzFramework
//! All ViewportControllerLists have a priority of Custom to ensure
//! that they receive events at all priorities from any parent controllers.
AzFramework::ViewportControllerPriority GetPriority() const { return ViewportControllerPriority::DispatchToAllPriorities; }
//! Returns true if this controller list is enabled, i.e.
//! it is accepting and forwarding input and update events to its children.
bool IsEnabled() const;
//! Set this controller list's enabled state.
//! If a controller list is disabled, it will ignore all input and update events rather than dispatching them to its children.
void SetEnabled(bool enabled);
private:
void SortControllers();
@@ -58,5 +67,6 @@ namespace AzFramework
AZStd::unordered_map<AzFramework::ViewportControllerPriority, AZStd::vector<ViewportControllerPtr>> m_controllers;
AZStd::unordered_set<ViewportId> m_viewports;
bool m_enabled = true;
};
} //namespace AzFramework
@@ -18,6 +18,8 @@
#include <AzCore/std/typetraits/is_enum.h>
#include <AzCore/RTTI/TypeInfo.h>
#include <AzCore/RTTI/TypeSafeIntegral.h>
#include <AzCore/Name/Name.h>
#include <AzCore/Name/NameDictionary.h>
namespace AzNetworking
{
@@ -173,6 +175,22 @@ namespace AzNetworking
return true;
}
};
template<>
struct SerializeObjectHelper<AZ::Name>
{
static bool SerializeObject(ISerializer& serializer, AZ::Name& value)
{
AZ::Name::Hash nameHash = value.GetHash();
bool result = serializer.Serialize(nameHash, "NameHash");
if (result && serializer.GetSerializerMode() == SerializerMode::WriteToObject)
{
value = AZ::NameDictionary::Instance().FindName(nameHash);
}
return result;
}
};
}
#include <AzNetworking/Serialization/AzContainerSerializers.h>
@@ -491,6 +491,14 @@ namespace AzToolsFramework
EditorEntityContextNotificationBus::Broadcast(&EditorEntityContextNotification::OnStartPlayInEditorBegin);
//cache the current selected entities.
ToolsApplicationRequests::Bus::BroadcastResult(m_selectedBeforeStartingGame, &ToolsApplicationRequests::GetSelectedEntities);
//deselect entities if selected when entering game mode before deactivating the entities in StartPlayInEditor(...)
if (!m_selectedBeforeStartingGame.empty())
{
ToolsApplicationRequests::Bus::Broadcast(&ToolsApplicationRequests::MarkEntitiesDeselected, m_selectedBeforeStartingGame);
}
if (m_isLegacySliceService)
{
SliceEditorEntityOwnershipService* editorEntityOwnershipService =
@@ -507,8 +515,6 @@ namespace AzToolsFramework
m_isRunningGame = true;
ToolsApplicationRequests::Bus::BroadcastResult(m_selectedBeforeStartingGame, &ToolsApplicationRequests::GetSelectedEntities);
EditorEntityContextNotificationBus::Broadcast(&EditorEntityContextNotification::OnStartPlayInEditor);
}
@@ -679,6 +679,11 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event)
}
SetCurrentCursor(STD_CURSOR_GAME);
}
if (m_renderViewport)
{
m_renderViewport->GetControllerList()->SetEnabled(false);
}
}
break;
@@ -697,6 +702,11 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event)
RestoreViewportAfterGameMode();
}
if (m_renderViewport)
{
m_renderViewport->GetControllerList()->SetEnabled(true);
}
break;
case eNotify_OnCloseScene:
@@ -727,6 +737,8 @@ void EditorViewportWidget::OnEditorNotifyEvent(EEditorNotifyEvent event)
// meters above the terrain (default terrain height is 32)
viewTM.SetTranslation(Vec3(sx * 0.5f, sy * 0.5f, 34.0f));
SetViewTM(viewTM);
UpdateScene();
}
break;
@@ -408,6 +408,13 @@ bool LegacyViewportCameraControllerInstance::HandleInputChannelEvent(const AzFra
}
}
UpdateCursorCapture(shouldCaptureCursor);
return shouldConsumeEvent;
}
void LegacyViewportCameraControllerInstance::UpdateCursorCapture(bool shouldCaptureCursor)
{
if (m_capturingCursor != shouldCaptureCursor)
{
if (shouldCaptureCursor)
@@ -427,8 +434,14 @@ bool LegacyViewportCameraControllerInstance::HandleInputChannelEvent(const AzFra
m_capturingCursor = shouldCaptureCursor;
}
}
return shouldConsumeEvent;
void LegacyViewportCameraControllerInstance::ResetInputChannels()
{
m_modifiers = 0;
m_pressedKeys.clear();
UpdateCursorCapture(false);
m_inRotateMode = m_inMoveMode = m_inOrbitMode = m_inZoomMode = false;
}
void LegacyViewportCameraControllerInstance::UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event)
@@ -35,6 +35,7 @@ namespace SandboxEditor
explicit LegacyViewportCameraControllerInstance(AzFramework::ViewportId viewport);
bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override;
void ResetInputChannels() override;
void UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) override;
private:
@@ -53,6 +54,7 @@ namespace SandboxEditor
bool HandleMouseMove(const AzFramework::ScreenPoint& currentMousePos, const AzFramework::ScreenPoint& previousMousePos);
bool HandleMouseWheel(float zDelta);
bool IsKeyDown(Qt::Key key) const;
void UpdateCursorCapture(bool shouldCaptureCursor);
bool m_inRotateMode = false;
bool m_inMoveMode = false;
@@ -202,6 +202,12 @@ bool ViewportManipulatorControllerInstance::HandleInputChannelEvent(const AzFram
return interactionHandled;
}
void ViewportManipulatorControllerInstance::ResetInputChannels()
{
m_pendingDoubleClicks.clear();
m_state = AzToolsFramework::ViewportInteraction::MouseInteraction();
}
void ViewportManipulatorControllerInstance::UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event)
{
m_curTime = event.m_time;
@@ -26,6 +26,7 @@ namespace SandboxEditor
explicit ViewportManipulatorControllerInstance(AzFramework::ViewportId viewport);
bool HandleInputChannelEvent(const AzFramework::ViewportControllerInputEvent& event) override;
void ResetInputChannels() override;
void UpdateViewport(const AzFramework::ViewportControllerUpdateEvent& event) override;
private:
@@ -0,0 +1,11 @@
{
"Type": "JsonSerialization",
"Version": 1,
"ClassName": "PassAsset",
"ClassData": {
"PassTemplate": {
"Name": "DiffuseProbeGridClassificationPassTemplate",
"PassClass": "DiffuseProbeGridClassificationPass"
}
}
}
@@ -26,6 +26,10 @@
{
"Name": "DiffuseProbeGridRelocationPass",
"TemplateName": "DiffuseProbeGridRelocationPassTemplate"
},
{
"Name": "DiffuseProbeGridClassificationPass",
"TemplateName": "DiffuseProbeGridClassificationPassTemplate"
}
]
}
@@ -416,6 +416,10 @@
"Name": "DiffuseProbeGridRelocationPassTemplate",
"Path": "Passes/DiffuseProbeGridRelocation.pass"
},
{
"Name": "DiffuseProbeGridClassificationPassTemplate",
"Path": "Passes/DiffuseProbeGridClassification.pass"
},
{
"Name": "DiffuseGlobalIlluminationPassTemplate",
"Path": "Passes/DiffuseGlobalIllumination.pass"
@@ -18,7 +18,7 @@ partial ShaderResourceGroup RayTracingSceneSrg
{
RaytracingAccelerationStructure m_scene;
// directional Lights
// directional lights
struct DirectionalLight
{
float3 m_direction;
@@ -30,7 +30,33 @@ partial ShaderResourceGroup RayTracingSceneSrg
StructuredBuffer<DirectionalLight> m_directionalLights;
uint m_directionalLightCount;
// point Lights
// simple point lights
struct SimplePointLight
{
float3 m_position;
float m_invAttenuationRadiusSquared; // For a radius at which this light no longer has an effect, 1 / radius^2.
float3 m_rgbIntensityCandelas;
float m_padding; // explicit padding.
};
StructuredBuffer<SimplePointLight> m_simplePointLights;
uint m_simplePointLightCount;
// simple spot lights
struct SimpleSpotLight
{
float3 m_position;
float m_invAttenuationRadiusSquared; // For a radius at which this light no longer has an effect, 1 / radius^2.
float3 m_direction;
float m_cosInnerConeAngle; // cosine of the outer cone angle
float3 m_rgbIntensityCandelas;
float m_cosOuterConeAngle; // cosine of the inner cone angle
};
StructuredBuffer<SimpleSpotLight> m_simpleSpotLights;
uint m_simpleSpotLightCount;
// point lights (sphere)
struct PointLight
{
float3 m_position;
@@ -42,7 +68,7 @@ partial ShaderResourceGroup RayTracingSceneSrg
StructuredBuffer<PointLight> m_pointLights;
uint m_pointLightCount;
// disk Lights
// disk lights
struct DiskLight
{
float3 m_position;
@@ -60,7 +86,7 @@ partial ShaderResourceGroup RayTracingSceneSrg
StructuredBuffer<DiskLight> m_diskLights;
uint m_diskLightCount;
// capsule Lights
// capsule lights
struct CapsuleLight
{
float3 m_startPoint; // one of the end points of the capsule
@@ -74,7 +100,7 @@ partial ShaderResourceGroup RayTracingSceneSrg
StructuredBuffer<CapsuleLight> m_capsuleLights;
uint m_capsuleLightCount;
// quad Lights
// quad lights
struct QuadLight
{
float3 m_position;
@@ -0,0 +1,32 @@
{
"Type": "JsonSerialization",
"Version": 1,
"ClassName": "PrecompiledShaderAssetSourceData",
"ClassData":
{
"ShaderAssetFileName": "diffuseprobegridclassification.azshader",
"PlatformIdentifiers":
[
"pc"
],
"ShaderResourceGroupAssets":
[
"diffuseprobegridclassification_passsrg.azsrg"
],
"RootShaderVariantAssets":
[
{
"APIName": "dx12",
"RootShaderVariantAssetFileName": "diffuseprobegridclassification_dx12_0.azshadervariant"
},
{
"APIName": "vulkan",
"RootShaderVariantAssetFileName": "diffuseprobegridclassification_vulkan_0.azshadervariant"
},
{
"APIName": "null",
"RootShaderVariantAssetFileName": "diffuseprobegridclassification_null_0.azshadervariant"
}
]
}
}
@@ -136,6 +136,44 @@
"value": "1"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
},
@@ -203,6 +241,26 @@
"value": "2"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
}
]
}
]
},
@@ -221,7 +279,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -318,6 +376,34 @@
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
}
]
}
@@ -2691,7 +2777,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "10722138557170830784"
"value": "13399614758886099705"
}
]
}
@@ -2818,6 +2904,44 @@
"value": "1"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
},
@@ -2885,6 +3009,26 @@
"value": "2"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
}
]
}
]
},
@@ -2903,7 +3047,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -3000,6 +3144,34 @@
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
}
]
}
@@ -5373,7 +5545,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "10722138557170830784"
"value": "13399614758886099705"
}
]
}
@@ -5500,6 +5672,44 @@
"value": "1"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
},
@@ -5567,6 +5777,26 @@
"value": "2"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
}
]
}
]
},
@@ -5585,7 +5815,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -5682,6 +5912,34 @@
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
}
]
}
@@ -5766,7 +6024,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5798,7 +6056,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5830,7 +6088,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5862,7 +6120,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5894,7 +6152,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5926,7 +6184,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5958,7 +6216,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5990,7 +6248,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6022,7 +6280,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6054,7 +6312,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6086,7 +6344,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6118,7 +6376,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6150,7 +6408,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6182,7 +6440,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6214,7 +6472,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6246,7 +6504,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6278,7 +6536,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6310,7 +6568,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6342,7 +6600,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6374,7 +6632,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6406,7 +6664,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6438,7 +6696,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6470,7 +6728,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6502,7 +6760,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6534,7 +6792,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6566,7 +6824,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6598,7 +6856,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6630,7 +6888,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
}
@@ -8011,7 +8269,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "2959428625184507101"
"value": "8603598590297091788"
}
]
}
@@ -8055,7 +8313,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "6463331605863849001"
"value": "6181996982157220722"
}
]
}
@@ -136,6 +136,44 @@
"value": "1"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
},
@@ -203,6 +241,26 @@
"value": "2"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
}
]
}
]
},
@@ -221,7 +279,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -318,6 +376,34 @@
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
}
]
}
@@ -2691,7 +2777,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "2253369087368484601"
"value": "4760130259633911968"
}
]
}
@@ -2818,6 +2904,44 @@
"value": "1"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
},
@@ -2885,6 +3009,26 @@
"value": "2"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
}
]
}
]
},
@@ -2903,7 +3047,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -3000,6 +3144,34 @@
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
}
]
}
@@ -5373,7 +5545,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "2253369087368484601"
"value": "4760130259633911968"
}
]
}
@@ -5500,6 +5672,44 @@
"value": "1"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
},
@@ -5567,6 +5777,26 @@
"value": "2"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
}
]
}
]
},
@@ -5585,7 +5815,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -5682,6 +5912,34 @@
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
]
}
]
}
@@ -5766,7 +6024,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5798,7 +6056,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5830,7 +6088,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5862,7 +6120,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5894,7 +6152,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5926,7 +6184,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5958,7 +6216,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -5990,7 +6248,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6022,7 +6280,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6054,7 +6312,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6086,7 +6344,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6118,7 +6376,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6150,7 +6408,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6182,7 +6440,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6214,7 +6472,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6246,7 +6504,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6278,7 +6536,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6310,7 +6568,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6342,7 +6600,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6374,7 +6632,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6406,7 +6664,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6438,7 +6696,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6470,7 +6728,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6502,7 +6760,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6534,7 +6792,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6566,7 +6824,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6598,7 +6856,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6630,7 +6888,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
}
@@ -8011,7 +8269,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "2959428625184507101"
"value": "8603598590297091788"
}
]
}
@@ -8055,7 +8313,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "1715809227613203910"
"value": "15482970526060535234"
}
]
}
@@ -251,6 +251,44 @@
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
@@ -433,6 +471,26 @@
"value": "4"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "4"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
}
]
}
]
},
@@ -451,7 +509,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "4"
"value": "5"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -515,7 +573,7 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
}
@@ -599,7 +657,35 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
@@ -3217,7 +3303,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "3506265182085703910"
"value": "2492931172876496388"
}
]
}
@@ -3459,6 +3545,44 @@
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
@@ -3641,6 +3765,26 @@
"value": "4"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "4"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
}
]
}
]
},
@@ -3659,7 +3803,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "4"
"value": "5"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -3723,7 +3867,7 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
}
@@ -3807,7 +3951,35 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
@@ -6425,7 +6597,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "3506265182085703910"
"value": "2492931172876496388"
}
]
}
@@ -6575,7 +6747,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "4"
"value": "5"
}
]
}
@@ -6667,6 +6839,44 @@
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
@@ -6701,7 +6911,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
},
@@ -6739,7 +6949,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
}
@@ -6849,6 +7059,26 @@
"value": "4"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "4"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
}
]
}
]
},
@@ -6867,7 +7097,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "4"
"value": "5"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -6931,7 +7161,7 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
}
@@ -7015,7 +7245,35 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
}
]
}
@@ -7104,7 +7362,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7136,7 +7394,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7168,7 +7426,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7200,7 +7458,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7232,7 +7490,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7264,7 +7522,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7296,7 +7554,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7328,7 +7586,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7360,7 +7618,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7392,7 +7650,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7424,7 +7682,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7456,7 +7714,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7488,7 +7746,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7520,7 +7778,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7552,7 +7810,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7584,7 +7842,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7616,7 +7874,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7648,7 +7906,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7680,7 +7938,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7712,7 +7970,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7744,7 +8002,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7776,7 +8034,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7808,7 +8066,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7840,7 +8098,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7872,7 +8130,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7904,7 +8162,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7936,7 +8194,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -7968,7 +8226,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -8000,7 +8258,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -8032,7 +8290,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
},
@@ -8064,7 +8322,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "5"
"value": "6"
}
]
}
@@ -9589,7 +9847,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "16848591129341445217"
"value": "1426176521634445605"
}
]
}
@@ -9633,7 +9891,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "4017610420074377641"
"value": "1425135468820160161"
}
]
}
@@ -99,6 +99,44 @@
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
@@ -261,6 +299,26 @@
"value": "3"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "4"
}
]
}
]
},
@@ -279,7 +337,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -343,7 +401,7 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
"value": "2"
}
]
}
@@ -399,7 +457,35 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
}
]
}
@@ -3177,7 +3263,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "10943999648486519461"
"value": "12354971452077948474"
}
]
}
@@ -3267,6 +3353,44 @@
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
@@ -3429,6 +3553,26 @@
"value": "3"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "4"
}
]
}
]
},
@@ -3447,7 +3591,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -3511,7 +3655,7 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
"value": "2"
}
]
}
@@ -3567,7 +3711,35 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
}
]
}
@@ -6345,7 +6517,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "10943999648486519461"
"value": "12354971452077948474"
}
]
}
@@ -6435,6 +6607,44 @@
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
"typeId": "{913DBF3C-5556-4524-B928-174A42516D31}",
"version": 3,
"Objects": [
{
"field": "m_name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "m_type",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_access",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_count",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
},
{
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
}
]
},
{
"field": "element",
"typeName": "ShaderInputImageDescriptor",
@@ -6469,7 +6679,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
"value": "2"
}
]
},
@@ -6507,7 +6717,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
}
@@ -6597,6 +6807,26 @@
"value": "3"
}
]
},
{
"field": "element",
"typeName": "Interval",
"typeId": "{B121C9FE-1C23-4721-9C3E-6BE036612743}",
"version": 1,
"Objects": [
{
"field": "m_min",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
},
{
"field": "m_max",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "4"
}
]
}
]
},
@@ -6615,7 +6845,7 @@
"field": "m_groupSizeForImages",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
},
{
"field": "m_groupSizeForBufferUnboundedArrays",
@@ -6679,7 +6909,7 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
"value": "2"
}
]
}
@@ -6735,7 +6965,35 @@
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "2"
"value": "3"
}
]
}
]
},
{
"field": "element",
"typeName": "AZ::RHI::ReflectionNamePair<AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>>",
"typeId": "{DB3620EE-8854-52A8-B421-BFA17E6A687D}",
"version": 2,
"Objects": [
{
"field": "Name",
"typeName": "Name",
"typeId": "{3D2B920C-9EFD-40D5-AAE0-DF131C3D4931}",
"value": "m_probeStates"
},
{
"field": "Index",
"typeName": "AZ::RHI::Handle<unsigned int, ShaderInputImageDescriptor>",
"typeId": "{5C8C0729-5D41-5299-80F1-395F79B02D70}",
"version": 1,
"Objects": [
{
"field": "m_index",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "1"
}
]
}
@@ -6824,7 +7082,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -6856,7 +7114,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -6888,7 +7146,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -6920,7 +7178,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -6952,7 +7210,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -6984,7 +7242,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7016,7 +7274,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7048,7 +7306,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7080,7 +7338,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7112,7 +7370,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7144,7 +7402,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7176,7 +7434,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7208,7 +7466,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7240,7 +7498,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7272,7 +7530,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7304,7 +7562,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7336,7 +7594,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7368,7 +7626,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7400,7 +7658,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7432,7 +7690,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7464,7 +7722,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7496,7 +7754,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7528,7 +7786,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7560,7 +7818,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7592,7 +7850,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7624,7 +7882,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7656,7 +7914,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7688,7 +7946,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7720,7 +7978,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7752,7 +8010,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7784,7 +8042,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7816,7 +8074,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
},
@@ -7848,7 +8106,7 @@
"field": "m_registerId",
"typeName": "unsigned int",
"typeId": "{43DA906B-7DEF-4CA8-9790-854106D3F983}",
"value": "3"
"value": "4"
}
]
}
@@ -9469,7 +9727,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "14153574899631108967"
"value": "11445921412800959080"
}
]
}
@@ -9513,7 +9771,7 @@
"field": "m_hash",
"typeName": "AZ::u64",
"typeId": "{D6597933-47CD-4FC8-B911-63F3E2B0993A}",
"value": "8072403242124824453"
"value": "16873325821914315993"
}
]
}
@@ -96,6 +96,7 @@
#include <DiffuseProbeGrid/DiffuseProbeGridBlendDistancePass.h>
#include <DiffuseProbeGrid/DiffuseProbeGridBorderUpdatePass.h>
#include <DiffuseProbeGrid/DiffuseProbeGridRelocationPass.h>
#include <DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h>
#include <DiffuseProbeGrid/DiffuseProbeGridRenderPass.h>
#include <DiffuseProbeGrid/DiffuseProbeGridFeatureProcessor.h>
#include <ReflectionScreenSpace/ReflectionScreenSpaceBlurPass.h>
@@ -261,6 +262,7 @@ namespace AZ
passSystem->AddPassCreator(Name("DiffuseProbeGridBlendDistancePass"), &Render::DiffuseProbeGridBlendDistancePass::Create);
passSystem->AddPassCreator(Name("DiffuseProbeGridBorderUpdatePass"), &Render::DiffuseProbeGridBorderUpdatePass::Create);
passSystem->AddPassCreator(Name("DiffuseProbeGridRelocationPass"), &Render::DiffuseProbeGridRelocationPass::Create);
passSystem->AddPassCreator(Name("DiffuseProbeGridClassificationPass"), &Render::DiffuseProbeGridClassificationPass::Create);
passSystem->AddPassCreator(Name("DiffuseProbeGridRenderPass"), &Render::DiffuseProbeGridRenderPass::Create);
passSystem->AddPassCreator(Name("LuminanceHistogramGeneratorPass"), &LuminanceHistogramGeneratorPass::Create);
@@ -41,6 +41,7 @@ namespace AZ
m_irradianceImageAttachmentId = AZStd::string::format("ProbeIrradianceImageAttachmentId_%s", uuidString.c_str());
m_distanceImageAttachmentId = AZStd::string::format("ProbeDistanceImageAttachmentId_%s", uuidString.c_str());
m_relocationImageAttachmentId = AZStd::string::format("ProbeRelocationImageAttachmentId_%s", uuidString.c_str());
m_classificationImageAttachmentId = AZStd::string::format("ProbeClassificationImageAttachmentId_%s", uuidString.c_str());
// setup culling
m_cullable.m_cullData.m_scene = m_scene;
@@ -252,6 +253,20 @@ namespace AZ
AZ_Assert(result == RHI::ResultCode::Success, "Failed to initialize m_probeRelocationImage image");
}
// probe classification
{
uint32_t width = probeCountX;
uint32_t height = probeCountY;
m_classificationImage[m_currentImageIndex] = RHI::Factory::Get().CreateImage();
RHI::ImageInitRequest request;
request.m_image = m_classificationImage[m_currentImageIndex].get();
request.m_descriptor = RHI::ImageDescriptor::Create2D(RHI::ImageBindFlags::ShaderReadWrite, width, height, DiffuseProbeGridRenderData::ClassificationImageFormat);
RHI::ResultCode result = m_renderData->m_imagePool->InitImage(request);
AZ_Assert(result == RHI::ResultCode::Success, "Failed to initialize m_probeClassificationImage image");
}
m_updateTextures = false;
// textures have changed so we need to update the render Srg to bind the new ones
@@ -401,6 +416,10 @@ namespace AZ
imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeOffsets"));
m_rayTraceSrg->SetImageView(imageIndex, m_relocationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRelocationImageViewDescriptor).get());
// probe classification
imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates"));
m_rayTraceSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get());
// grid settings
constantIndex = srgLayout->FindShaderInputConstantIndex(Name("m_ambientMultiplier"));
m_rayTraceSrg->SetConstant(constantIndex, m_ambientMultiplier);
@@ -431,6 +450,9 @@ namespace AZ
imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeIrradiance"));
m_blendIrradianceSrg->SetImageView(imageIndex, m_irradianceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeIrradianceImageViewDescriptor).get());
imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates"));
m_blendIrradianceSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get());
SetGridConstants(m_blendIrradianceSrg);
}
@@ -451,6 +473,9 @@ namespace AZ
imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeDistance"));
m_blendDistanceSrg->SetImageView(imageIndex, m_distanceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeDistanceImageViewDescriptor).get());
imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates"));
m_blendDistanceSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get());
SetGridConstants(m_blendDistanceSrg);
}
@@ -559,6 +584,27 @@ namespace AZ
SetGridConstants(m_relocationSrg);
}
void DiffuseProbeGrid::UpdateClassificationSrg(const Data::Asset<RPI::ShaderResourceGroupAsset>& srgAsset)
{
if (!m_classificationSrg)
{
m_classificationSrg = RPI::ShaderResourceGroup::Create(srgAsset);
AZ_Error("DiffuseProbeGrid", m_classificationSrg.get(), "Failed to create Classification shader resource group");
}
const RHI::ShaderResourceGroupLayout* srgLayout = m_classificationSrg->GetLayout();
RHI::ShaderInputConstantIndex constantIndex;
RHI::ShaderInputImageIndex imageIndex;
imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeRayTrace"));
m_classificationSrg->SetImageView(imageIndex, m_rayTraceImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRayTraceImageViewDescriptor).get());
imageIndex = srgLayout->FindShaderInputImageIndex(AZ::Name("m_probeStates"));
m_classificationSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get());
SetGridConstants(m_classificationSrg);
}
void DiffuseProbeGrid::UpdateRenderObjectSrg()
{
if (!m_updateRenderObjectSrg)
@@ -601,6 +647,9 @@ namespace AZ
imageIndex = srgLayout->FindShaderInputImageIndex(Name("m_probeOffsets"));
m_renderObjectSrg->SetImageView(imageIndex, m_relocationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeRelocationImageViewDescriptor).get());
imageIndex = srgLayout->FindShaderInputImageIndex(Name("m_probeStates"));
m_renderObjectSrg->SetImageView(imageIndex, m_classificationImage[m_currentImageIndex]->GetImageView(m_renderData->m_probeClassificationImageViewDescriptor).get());
SetGridConstants(m_renderObjectSrg);
m_updateRenderObjectSrg = false;
@@ -30,6 +30,7 @@ namespace AZ
static const RHI::Format IrradianceImageFormat = RHI::Format::R16G16B16A16_UNORM;
static const RHI::Format DistanceImageFormat = RHI::Format::R32G32_FLOAT;
static const RHI::Format RelocationImageFormat = RHI::Format::R16G16B16A16_FLOAT;
static const RHI::Format ClassificationImageFormat = RHI::Format::R8_UINT;
// image pool
RHI::Ptr<RHI::ImagePool> m_imagePool;
@@ -43,6 +44,7 @@ namespace AZ
RHI::ImageViewDescriptor m_probeIrradianceImageViewDescriptor;
RHI::ImageViewDescriptor m_probeDistanceImageViewDescriptor;
RHI::ImageViewDescriptor m_probeRelocationImageViewDescriptor;
RHI::ImageViewDescriptor m_probeClassificationImageViewDescriptor;
// render pipeline state
RPI::Ptr<RPI::PipelineStateForDraw> m_pipelineState;
@@ -118,6 +120,7 @@ namespace AZ
const Data::Instance<RPI::ShaderResourceGroup>& GetBorderUpdateRowDistanceSrg() const { return m_borderUpdateRowDistanceSrg; }
const Data::Instance<RPI::ShaderResourceGroup>& GetBorderUpdateColumnDistanceSrg() const { return m_borderUpdateColumnDistanceSrg; }
const Data::Instance<RPI::ShaderResourceGroup>& GetRelocationSrg() const { return m_relocationSrg; }
const Data::Instance<RPI::ShaderResourceGroup>& GetClassificationSrg() const { return m_classificationSrg; }
const Data::Instance<RPI::ShaderResourceGroup>& GetRenderObjectSrg() const { return m_renderObjectSrg; }
// Srg updates
@@ -126,6 +129,7 @@ namespace AZ
void UpdateBlendDistanceSrg(const Data::Asset<RPI::ShaderResourceGroupAsset>& srgAsset);
void UpdateBorderUpdateSrgs(const Data::Asset<RPI::ShaderResourceGroupAsset>& rowSrgAsset, const Data::Asset<RPI::ShaderResourceGroupAsset>& columnSrgAsset);
void UpdateRelocationSrg(const Data::Asset<RPI::ShaderResourceGroupAsset>& srgAsset);
void UpdateClassificationSrg(const Data::Asset<RPI::ShaderResourceGroupAsset>& srgAsset);
void UpdateRenderObjectSrg();
// textures
@@ -133,12 +137,14 @@ namespace AZ
const RHI::Ptr<RHI::Image>& GetIrradianceImage() { return m_irradianceImage[m_currentImageIndex]; }
const RHI::Ptr<RHI::Image>& GetDistanceImage() { return m_distanceImage[m_currentImageIndex]; }
const RHI::Ptr<RHI::Image>& GetRelocationImage() { return m_relocationImage[m_currentImageIndex]; }
const RHI::Ptr<RHI::Image>& GetClassificationImage() { return m_classificationImage[m_currentImageIndex]; }
// attachment Ids
const RHI::AttachmentId GetRayTraceImageAttachmentId() const { return m_rayTraceImageAttachmentId; }
const RHI::AttachmentId GetIrradianceImageAttachmentId() const { return m_irradianceImageAttachmentId; }
const RHI::AttachmentId GetDistanceImageAttachmentId() const { return m_distanceImageAttachmentId; }
const RHI::AttachmentId GetRelocationImageAttachmentId() const { return m_relocationImageAttachmentId; }
const RHI::AttachmentId GetClassificationImageAttachmentId() const { return m_classificationImageAttachmentId; }
const DiffuseProbeGridRenderData* GetRenderData() const { return m_renderData; }
@@ -222,6 +228,7 @@ namespace AZ
RHI::Ptr<RHI::Image> m_irradianceImage[ImageFrameCount];
RHI::Ptr<RHI::Image> m_distanceImage[ImageFrameCount];
RHI::Ptr<RHI::Image> m_relocationImage[ImageFrameCount];
RHI::Ptr<RHI::Image> m_classificationImage[ImageFrameCount];
uint32_t m_currentImageIndex = 0;
bool m_updateTextures = false;
bool m_irradianceClearRequired = true;
@@ -235,6 +242,7 @@ namespace AZ
Data::Instance<RPI::ShaderResourceGroup> m_borderUpdateRowDistanceSrg;
Data::Instance<RPI::ShaderResourceGroup> m_borderUpdateColumnDistanceSrg;
Data::Instance<RPI::ShaderResourceGroup> m_relocationSrg;
Data::Instance<RPI::ShaderResourceGroup> m_classificationSrg;
Data::Instance<RPI::ShaderResourceGroup> m_renderObjectSrg;
bool m_updateRenderObjectSrg = true;
@@ -243,6 +251,7 @@ namespace AZ
RHI::AttachmentId m_irradianceImageAttachmentId;
RHI::AttachmentId m_distanceImageAttachmentId;
RHI::AttachmentId m_relocationImageAttachmentId;
RHI::AttachmentId m_classificationImageAttachmentId;
};
} // namespace Render
} // namespace AZ
@@ -132,6 +132,16 @@ namespace AZ
frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite);
}
// probe classification image
{
RHI::ImageScopeAttachmentDescriptor desc;
desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId();
desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor;
desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load;
frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite);
}
}
}
@@ -132,6 +132,16 @@ namespace AZ
frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite);
}
// probe classification image
{
RHI::ImageScopeAttachmentDescriptor desc;
desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId();
desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor;
desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load;
frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite);
}
}
}
@@ -0,0 +1,182 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h>
#include <Atom/RHI/Factory.h>
#include <Atom/RHI/PipelineState.h>
#include <Atom/RHI/FrameGraphInterface.h>
#include <Atom/RHI/FrameGraphAttachmentInterface.h>
#include <Atom/RHI/Device.h>
#include <Atom/RPI.Public/Pass/PassUtils.h>
#include <Atom/RPI.Public/RenderPipeline.h>
#include <Atom/RPI.Public/RPIUtils.h>
#include <Atom/RPI.Reflect/Pass/PassTemplate.h>
#include <Atom/RPI.Public/View.h>
#include <Atom/RPI.Public/Scene.h>
#include <DiffuseProbeGrid/DiffuseProbeGridFeatureProcessor.h>
#include <RayTracing/RayTracingFeatureProcessor.h>
namespace AZ
{
namespace Render
{
RPI::Ptr<DiffuseProbeGridClassificationPass> DiffuseProbeGridClassificationPass::Create(const RPI::PassDescriptor& descriptor)
{
RPI::Ptr<DiffuseProbeGridClassificationPass> pass = aznew DiffuseProbeGridClassificationPass(descriptor);
return AZStd::move(pass);
}
DiffuseProbeGridClassificationPass::DiffuseProbeGridClassificationPass(const RPI::PassDescriptor& descriptor)
: RPI::RenderPass(descriptor)
{
LoadShader();
}
void DiffuseProbeGridClassificationPass::LoadShader()
{
// load shader
// Note: the shader may not be available on all platforms
AZStd::string shaderFilePath = "Shaders/DiffuseGlobalIllumination/DiffuseProbeGridClassification.azshader";
m_shader = RPI::LoadShader(shaderFilePath);
if (m_shader == nullptr)
{
return;
}
// load pipeline state
RHI::PipelineStateDescriptorForDispatch pipelineStateDescriptor;
const auto& shaderVariant = m_shader->GetVariant(RPI::ShaderAsset::RootShaderVariantStableId);
shaderVariant.ConfigurePipelineState(pipelineStateDescriptor);
m_pipelineState = m_shader->AcquirePipelineState(pipelineStateDescriptor);
// load Pass Srg asset
m_srgAsset = m_shader->FindShaderResourceGroupAsset(RPI::SrgBindingSlot::Pass);
// retrieve the number of threads per thread group from the shader
const auto numThreads = m_shader->GetAsset()->GetAttribute(RHI::ShaderStage::Compute, Name{ "numthreads" });
if (numThreads)
{
const RHI::ShaderStageAttributeArguments& args = *numThreads;
bool validArgs = args.size() == 3;
if (validArgs)
{
validArgs &= args[0].type() == azrtti_typeid<int>();
validArgs &= args[1].type() == azrtti_typeid<int>();
validArgs &= args[2].type() == azrtti_typeid<int>();
}
if (!validArgs)
{
AZ_Error("PassSystem", false, "[DiffuseProbeClassificationPass '%s']: Shader '%s' contains invalid numthreads arguments.", GetPathName().GetCStr(), shaderFilePath.c_str());
return;
}
m_dispatchArgs.m_threadsPerGroupX = AZStd::any_cast<int>(args[0]);
m_dispatchArgs.m_threadsPerGroupY = AZStd::any_cast<int>(args[1]);
m_dispatchArgs.m_threadsPerGroupZ = AZStd::any_cast<int>(args[2]);
}
}
void DiffuseProbeGridClassificationPass::FrameBeginInternal(FramePrepareParams params)
{
RPI::Scene* scene = m_pipeline->GetScene();
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
if (!diffuseProbeGridFeatureProcessor || diffuseProbeGridFeatureProcessor->GetProbeGrids().empty())
{
// no diffuse probe grids
return;
}
RayTracingFeatureProcessor* rayTracingFeatureProcessor = scene->GetFeatureProcessor<RayTracingFeatureProcessor>();
AZ_Assert(rayTracingFeatureProcessor, "DiffuseProbeGridClassificationPass requires the RayTracingFeatureProcessor");
if (!rayTracingFeatureProcessor->GetSubMeshCount())
{
// empty scene
return;
}
RenderPass::FrameBeginInternal(params);
}
void DiffuseProbeGridClassificationPass::SetupFrameGraphDependencies(RHI::FrameGraphInterface frameGraph)
{
RenderPass::SetupFrameGraphDependencies(frameGraph);
RPI::Scene* scene = m_pipeline->GetScene();
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetProbeGrids())
{
// probe raytrace image
{
RHI::ImageScopeAttachmentDescriptor desc;
desc.m_attachmentId = diffuseProbeGrid->GetRayTraceImageAttachmentId();
desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeRayTraceImageViewDescriptor;
desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load;
frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite);
}
// probe classification image
{
RHI::ImageScopeAttachmentDescriptor desc;
desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId();
desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor;
desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load;
frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite);
}
}
}
void DiffuseProbeGridClassificationPass::CompileResources([[maybe_unused]] const RHI::FrameGraphCompileContext& context)
{
RPI::Scene* scene = m_pipeline->GetScene();
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetProbeGrids())
{
// the diffuse probe grid Srg must be updated in the Compile phase in order to successfully bind the ReadWrite shader inputs
// (see ValidateSetImageView() in ShaderResourceGroupData.cpp)
diffuseProbeGrid->UpdateClassificationSrg(m_srgAsset);
diffuseProbeGrid->GetClassificationSrg()->Compile();
}
}
void DiffuseProbeGridClassificationPass::BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context)
{
RHI::CommandList* commandList = context.GetCommandList();
RPI::Scene* scene = m_pipeline->GetScene();
DiffuseProbeGridFeatureProcessor* diffuseProbeGridFeatureProcessor = scene->GetFeatureProcessor<DiffuseProbeGridFeatureProcessor>();
// submit the DispatchItems for each DiffuseProbeGrid
for (auto& diffuseProbeGrid : diffuseProbeGridFeatureProcessor->GetProbeGrids())
{
const RHI::ShaderResourceGroup* shaderResourceGroup = diffuseProbeGrid->GetClassificationSrg()->GetRHIShaderResourceGroup();
commandList->SetShaderResourceGroupForDispatch(*shaderResourceGroup);
uint32_t probeCountX;
uint32_t probeCountY;
diffuseProbeGrid->GetTexture2DProbeCount(probeCountX, probeCountY);
RHI::DispatchItem dispatchItem;
dispatchItem.m_arguments = m_dispatchArgs;
dispatchItem.m_pipelineState = m_pipelineState;
dispatchItem.m_arguments.m_direct.m_totalNumberOfThreadsX = probeCountX;
dispatchItem.m_arguments.m_direct.m_totalNumberOfThreadsY = probeCountY;
dispatchItem.m_arguments.m_direct.m_totalNumberOfThreadsZ = 1;
commandList->Submit(dispatchItem);
}
}
} // namespace Render
} // namespace AZ
@@ -0,0 +1,63 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#include <AzCore/Memory/SystemAllocator.h>
#include <Atom/RHI/CommandList.h>
#include <Atom/RHI/DrawItem.h>
#include <Atom/RHI/ScopeProducer.h>
#include <Atom/RHI.Reflect/ShaderResourceGroupLayoutDescriptor.h>
#include <Atom/RPI.Public/Pass/ComputePass.h>
#include <Atom/RPI.Public/Shader/Shader.h>
#include <Atom/RPI.Public/Shader/ShaderResourceGroup.h>
#include <Atom/RPI.Reflect/Pass/PassName.h>
#include <Atom/RPI.Public/Image/AttachmentImage.h>
#include <DiffuseProbeGrid/DiffuseProbeGrid.h>
namespace AZ
{
namespace Render
{
//! Compute shader that classifies probes as active or inactive in the diffuse probe grid.
class DiffuseProbeGridClassificationPass final
: public RPI::RenderPass
{
public:
AZ_RPI_PASS(DiffuseProbeGridClassificationPass);
AZ_RTTI(AZ::Render::DiffuseProbeGridClassificationPass, "{98A6477A-F31C-4390-9BEB-9DB8E30BB281}", RPI::RenderPass);
AZ_CLASS_ALLOCATOR(DiffuseProbeGridClassificationPass, SystemAllocator, 0);
virtual ~DiffuseProbeGridClassificationPass() = default;
static RPI::Ptr<DiffuseProbeGridClassificationPass> Create(const RPI::PassDescriptor& descriptor);
private:
DiffuseProbeGridClassificationPass(const RPI::PassDescriptor& descriptor);
void LoadShader();
// Pass overrides
void FrameBeginInternal(FramePrepareParams params) override;
void SetupFrameGraphDependencies(RHI::FrameGraphInterface frameGraph) override;
void CompileResources(const RHI::FrameGraphCompileContext& context) override;
void BuildCommandListInternal(const RHI::FrameGraphExecuteContext& context) override;
// shader
Data::Instance<RPI::Shader> m_shader;
const RHI::PipelineState* m_pipelineState = nullptr;
Data::Asset<RPI::ShaderResourceGroupAsset> m_srgAsset;
RHI::DispatchDirect m_dispatchArgs;
};
} // namespace Render
} // namespace AZ
@@ -73,6 +73,7 @@ namespace AZ
m_probeGridRenderData.m_probeIrradianceImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::IrradianceImageFormat, 0, 0);
m_probeGridRenderData.m_probeDistanceImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::DistanceImageFormat, 0, 0);
m_probeGridRenderData.m_probeRelocationImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::RelocationImageFormat, 0, 0);
m_probeGridRenderData.m_probeClassificationImageViewDescriptor = RHI::ImageViewDescriptor::Create(DiffuseProbeGridRenderData::ClassificationImageFormat, 0, 0);
// load shader
// Note: the shader may not be available on all platforms
@@ -291,6 +291,19 @@ namespace AZ
frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite);
}
// probe classification
{
RHI::ResultCode result = frameGraph.GetAttachmentDatabase().ImportImage(diffuseProbeGrid->GetClassificationImageAttachmentId(), diffuseProbeGrid->GetClassificationImage());
AZ_Assert(result == RHI::ResultCode::Success, "Failed to import probeClassificationImage");
RHI::ImageScopeAttachmentDescriptor desc;
desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId();
desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor;
desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load;
frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite);
}
}
}
@@ -117,6 +117,16 @@ namespace AZ
frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite);
}
// probe classification image
{
RHI::ImageScopeAttachmentDescriptor desc;
desc.m_attachmentId = diffuseProbeGrid->GetClassificationImageAttachmentId();
desc.m_imageViewDescriptor = diffuseProbeGrid->GetRenderData()->m_probeClassificationImageViewDescriptor;
desc.m_loadStoreAction.m_loadAction = AZ::RHI::AttachmentLoadAction::Load;
frameGraph.UseShaderAttachment(desc, RHI::ScopeAttachmentAccess::ReadWrite);
}
}
Base::SetupFrameGraphDependencies(frameGraph);
@@ -21,6 +21,8 @@
#include <Atom/RPI.Reflect/Asset/AssetUtils.h>
#include <Atom/Feature/ImageBasedLights/ImageBasedLightFeatureProcessor.h>
#include <CoreLights/DirectionalLightFeatureProcessor.h>
#include <CoreLights/SimplePointLightFeatureProcessor.h>
#include <CoreLights/SimpleSpotLightFeatureProcessor.h>
#include <CoreLights/PointLightFeatureProcessor.h>
#include <CoreLights/DiskLightFeatureProcessor.h>
#include <CoreLights/CapsuleLightFeatureProcessor.h>
@@ -195,7 +197,23 @@ namespace AZ
constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_directionalLightCount"));
m_rayTracingSceneSrg->SetConstant(constantIndex, directionalLightFP->GetLightCount());
// point lights
// simple point lights
const auto simplePointLightFP = GetParentScene()->GetFeatureProcessor<SimplePointLightFeatureProcessor>();
bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_simplePointLights"));
m_rayTracingSceneSrg->SetBufferView(bufferIndex, simplePointLightFP->GetLightBuffer()->GetBufferView());
constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_simplePointLightCount"));
m_rayTracingSceneSrg->SetConstant(constantIndex, simplePointLightFP->GetLightCount());
// simple spot lights
const auto simpleSpotLightFP = GetParentScene()->GetFeatureProcessor<SimpleSpotLightFeatureProcessor>();
bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_simpleSpotLights"));
m_rayTracingSceneSrg->SetBufferView(bufferIndex, simpleSpotLightFP->GetLightBuffer()->GetBufferView());
constantIndex = srgLayout->FindShaderInputConstantIndex(AZ::Name("m_simpleSpotLightCount"));
m_rayTracingSceneSrg->SetConstant(constantIndex, simpleSpotLightFP->GetLightCount());
// point lights (sphere)
const auto pointLightFP = GetParentScene()->GetFeatureProcessor<PointLightFeatureProcessor>();
bufferIndex = srgLayout->FindShaderInputBufferIndex(AZ::Name("m_pointLights"));
m_rayTracingSceneSrg->SetBufferView(bufferIndex, pointLightFP->GetLightBuffer()->GetBufferView());
@@ -131,6 +131,8 @@ set(FILES
Source/DiffuseProbeGrid/DiffuseProbeGridBorderUpdatePass.h
Source/DiffuseProbeGrid/DiffuseProbeGridRelocationPass.cpp
Source/DiffuseProbeGrid/DiffuseProbeGridRelocationPass.h
Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.cpp
Source/DiffuseProbeGrid/DiffuseProbeGridClassificationPass.h
Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.cpp
Source/DiffuseProbeGrid/DiffuseProbeGridRenderPass.h
Source/DiffuseProbeGrid/DiffuseProbeGrid.cpp
@@ -77,6 +77,8 @@ namespace AZ
void OnRenderPipelineAdded(RenderPipelinePtr pipeline) override;
//! Ensures our default view remains set when our scene's render pipelines are modified.
void OnRenderPipelineRemoved(RenderPipeline* pipeline) override;
//! OnBeginPrepareRender is forwarded to our RenderTick notification to allow subscribers to do rendering.
void OnBeginPrepareRender() override;
//WindowNotificationBus interface
//! Used to fire a notification when our window resizes
@@ -205,7 +205,8 @@ namespace AZ
void Buffer::InitBufferView()
{
// Skip buffer view creation for input assembly buffers
if(RHI::CheckBitsAny(m_rhiBuffer->GetDescriptor().m_bindFlags, RHI::BufferBindFlags::InputAssembly | RHI::BufferBindFlags::DynamicInputAssembly))
if (m_rhiBuffer->GetDescriptor().m_bindFlags == RHI::BufferBindFlags::InputAssembly ||
m_rhiBuffer->GetDescriptor().m_bindFlags == RHI::BufferBindFlags::DynamicInputAssembly)
{
return;
}
@@ -104,12 +104,16 @@ namespace AZ
// add the current pipeline to next render tick if it's not already added.
if (m_currentPipeline && m_currentPipeline->GetRenderMode() != RenderPipeline::RenderMode::RenderOnce)
{
ViewportContextNotificationBus::Event(GetName(), &ViewportContextNotificationBus::Events::OnRenderTick);
ViewportContextIdNotificationBus::Event(GetId(), &ViewportContextIdNotificationBus::Events::OnRenderTick);
m_currentPipeline->AddToRenderTickOnce();
}
}
void ViewportContext::OnBeginPrepareRender()
{
ViewportContextNotificationBus::Event(GetName(), &ViewportContextNotificationBus::Events::OnRenderTick);
ViewportContextIdNotificationBus::Event(GetId(), &ViewportContextIdNotificationBus::Events::OnRenderTick);
}
AZ::Name ViewportContext::GetName() const
{
return m_name;
@@ -57,9 +57,14 @@ namespace AZ
return;
}
viewportData.context = viewportContext;
auto onSizeChanged = [contextName, viewportId](AzFramework::WindowSize size)
auto onSizeChanged = [this, viewportId](AzFramework::WindowSize size)
{
ViewportContextNotificationBus::Event(contextName, &ViewportContextNotificationBus::Events::OnViewportSizeChanged, size);
// Ensure we emit OnViewportSizeChanged with the correct name.
auto viewportContext = this->GetViewportContextById(viewportId);
if (viewportContext)
{
ViewportContextNotificationBus::Event(viewportContext->GetName(), &ViewportContextNotificationBus::Events::OnViewportSizeChanged, size);
}
ViewportContextIdNotificationBus::Event(viewportId, &ViewportContextIdNotificationBus::Events::OnViewportSizeChanged, size);
};
viewportContext->m_name = contextName;
@@ -174,6 +179,8 @@ namespace AZ
GetOrCreateViewStackForContext(newContextName);
viewportContext->m_name = newContextName;
UpdateViewForContext(newContextName);
// Ensure anyone listening on per-name viewport size updates gets notified.
ViewportContextNotificationBus::Event(newContextName, &ViewportContextNotificationBus::Events::OnViewportSizeChanged, viewportContext->GetViewportSize());
}
void ViewportContextManager::EnumerateViewportContexts(AZStd::function<void(ViewportContextPtr)> visitorFunction)
@@ -58,6 +58,15 @@ namespace AZ
auto atomViewportRequests = AZ::Interface<AZ::RPI::ViewportContextRequestsInterface>::Get();
const AZ::Name contextName = atomViewportRequests->GetDefaultViewportContextName();
AZ::RPI::ViewportContextNotificationBus::Handler::BusConnect(contextName);
#if defined(IMGUI_ENABLED)
ImGui::ImGuiManagerListenerBus::Broadcast(&ImGui::IImGuiManagerListener::SetResolutionMode, ImGui::ImGuiResolutionMode::LockToResolution);
auto defaultViewportContext = atomViewportRequests->GetDefaultViewportContext();
if (defaultViewportContext)
{
OnViewportSizeChanged(defaultViewportContext->GetViewportSize());
}
#endif
}
void ImguiAtomSystemComponent::Deactivate()
@@ -75,6 +84,13 @@ namespace AZ
{
#if defined(IMGUI_ENABLED)
ImGui::ImGuiManagerListenerBus::Broadcast(&ImGui::IImGuiManagerListener::Render);
#endif
}
void ImguiAtomSystemComponent::OnViewportSizeChanged(AzFramework::WindowSize size)
{
#if defined(IMGUI_ENABLED)
ImGui::ImGuiManagerListenerBus::Broadcast(&ImGui::IImGuiManagerListener::SetImGuiRenderResolution, ImVec2{aznumeric_cast<float>(size.m_width), aznumeric_cast<float>(size.m_height)});
#endif
}
}
@@ -54,6 +54,7 @@ namespace AZ
// ViewportContextNotificationBus overrides...
void OnRenderTick() override;
void OnViewportSizeChanged(AzFramework::WindowSize size) override;
DebugConsole m_debugConsole;
};
@@ -378,18 +378,36 @@ namespace EMotionFX
}
}
NodeIndexContainer AnimGraphComponent::s_emptyNodeIndexContainer = {};
const NodeIndexContainer& AnimGraphComponent::GetActiveStates() const
{
const AZStd::shared_ptr<AnimGraphSnapshot> snapshot = m_animGraphInstance->GetSnapshot();
AZ_Error("EMotionFX", snapshot, "Call GetActiveStates function but no snapshot is created for this instance.");
return snapshot->GetActiveNodes();
if (m_animGraphInstance)
{
const AZStd::shared_ptr<AnimGraphSnapshot> snapshot = m_animGraphInstance->GetSnapshot();
if (snapshot)
{
AZ_Warning("EMotionFX", false, "Call GetActiveStates function but no snapshot is created for this instance.");
return snapshot->GetActiveNodes();
}
}
return s_emptyNodeIndexContainer;
}
MotionNodePlaytimeContainer AnimGraphComponent::s_emptyMotionNodePlaytimeContainer = {};
const MotionNodePlaytimeContainer& AnimGraphComponent::GetMotionPlaytimes() const
{
const AZStd::shared_ptr<AnimGraphSnapshot> snapshot = m_animGraphInstance->GetSnapshot();
AZ_Error("EMotionFX", snapshot, "Call GetActiveStates function but no snapshot is created for this instance.");
return snapshot->GetMotionNodePlaytimes();
if (m_animGraphInstance)
{
const AZStd::shared_ptr<AnimGraphSnapshot> snapshot = m_animGraphInstance->GetSnapshot();
if (snapshot)
{
AZ_Warning("EMotionFX", false, "Call GetActiveStates function but no snapshot is created for this instance.");
return snapshot->GetMotionNodePlaytimes();
}
}
return s_emptyMotionNodePlaytimeContainer;
}
void AnimGraphComponent::UpdateActorExternal(float deltatime)
@@ -155,7 +155,9 @@ namespace EMotionFX
bool HasSnapshot() const override;
void CreateSnapshot(bool isAuthoritative) override;
void SetActiveStates(const NodeIndexContainer& activeStates) override;
static NodeIndexContainer s_emptyNodeIndexContainer;
const NodeIndexContainer& GetActiveStates() const override;
static MotionNodePlaytimeContainer s_emptyMotionNodePlaytimeContainer;
void SetMotionPlaytimes(const MotionNodePlaytimeContainer& motionNodePlaytimes) override;
const MotionNodePlaytimeContainer& GetMotionPlaytimes() const override;
void UpdateActorExternal(float deltatime) override;
@@ -0,0 +1,65 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <AzFramework/Components/TransformComponent.h>
#include <Include/Integration/AnimGraphNetworkingBus.h>
#include <Integration/Components/ActorComponent.h>
#include <Integration/Components/AnimGraphComponent.h>
#include <Tests/Integration/EntityComponentFixture.h>
namespace EMotionFX
{
class AnimGraphNetworkingBusTests
: public EntityComponentFixture
{
public:
void SetUp() override
{
EntityComponentFixture::SetUp();
m_entity = AZStd::make_unique<AZ::Entity>();
m_entityId = AZ::EntityId(740216387);
m_entity->SetId(m_entityId);
m_entity->CreateComponent<AzFramework::TransformComponent>();
m_entity->CreateComponent<Integration::ActorComponent>();
auto animGraphComponent = m_entity->CreateComponent<Integration::AnimGraphComponent>();
m_entity->Init();
m_entity->Activate();
AnimGraphInstance* animGraphInstance = animGraphComponent->GetAnimGraphInstance();
EXPECT_EQ(animGraphInstance, nullptr) << "Expecting an invalid anim graph instance as no asset has been set.";
}
void TearDown() override
{
m_entity->Deactivate();
EntityComponentFixture::TearDown();
}
AZ::EntityId m_entityId;
AZStd::unique_ptr<AZ::Entity> m_entity;
};
TEST_F(AnimGraphNetworkingBusTests, AnimGraphNetworkingBus_GetActiveStates_Test)
{
NodeIndexContainer result;
EMotionFX::AnimGraphComponentNetworkRequestBus::EventResult(result, m_entityId, &EMotionFX::AnimGraphComponentNetworkRequestBus::Events::GetActiveStates);
}
TEST_F(AnimGraphNetworkingBusTests, AnimGraphNetworkingBus_GetMotionPlaytimes_Test)
{
MotionNodePlaytimeContainer result;
EMotionFX::AnimGraphComponentNetworkRequestBus::EventResult(result, m_entityId, &EMotionFX::AnimGraphComponentNetworkRequestBus::Events::GetMotionPlaytimes);
}
} // end namespace EMotionFX
@@ -22,6 +22,7 @@ set(FILES
Tests/AnimGraphActionCommandTests.cpp
Tests/AnimGraphActionTests.cpp
Tests/AnimGraphComponentBusTests.cpp
Tests/AnimGraphNetworkingBusTests.cpp
Tests/AnimGraphCopyPasteTests.cpp
Tests/AnimGraphDeferredInitTests.cpp
Tests/AnimGraphEventHandlerCounter.h
+50 -7
View File
@@ -18,16 +18,16 @@ ly_add_target(
INCLUDE_DIRECTORIES
PRIVATE
${pal_source_dir}
Source
AZ::AzNetworking
Source
.
PUBLIC
Include
BUILD_DEPENDENCIES
PUBLIC
AZ::AzCore
AZ::AzFramework
AZ::AzNetworking
Gem::CertificateManager
3rdParty::AWSNativeSDK::Core
AUTOGEN_RULES
*.AutoPackets.xml,AutoPackets_Header.jinja,$path/$fileprefix.AutoPackets.h
*.AutoPackets.xml,AutoPackets_Inline.jinja,$path/$fileprefix.AutoPackets.inl
@@ -49,6 +49,8 @@ ly_add_target(
PRIVATE
Source
.
PUBLIC
Include
BUILD_DEPENDENCIES
PRIVATE
Gem::Multiplayer.Static
@@ -56,10 +58,27 @@ ly_add_target(
Gem::CertificateManager
)
################################################################################
# Tests
################################################################################
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
if (PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_target(
NAME Multiplayer.Tools MODULE
NAMESPACE Gem
OUTPUT_NAME Gem.Multiplayer.Tools
FILES_CMAKE
multiplayer_tools_files.cmake
INCLUDE_DIRECTORIES
PRIVATE
Source
.
PUBLIC
Include
BUILD_DEPENDENCIES
PRIVATE
AZ::AzToolsFramework
Gem::Multiplayer.Static
)
endif()
if (PAL_TRAIT_BUILD_TESTS_SUPPORTED)
ly_add_target(
NAME Multiplayer.Tests ${PAL_TRAIT_TEST_TARGET_TYPE}
NAMESPACE Gem
@@ -71,6 +90,8 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
${pal_source_dir}
Source
.
PUBLIC
Include
BUILD_DEPENDENCIES
PRIVATE
AZ::AzTest
@@ -80,3 +101,25 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED)
NAME Gem::Multiplayer.Tests
)
endif()
ly_add_target(
NAME Multiplayer.Debug ${PAL_TRAIT_MONOLITHIC_DRIVEN_MODULE_TYPE}
NAMESPACE Gem
FILES_CMAKE
multiplayer_debug_files.cmake
INCLUDE_DIRECTORIES
PRIVATE
Source
.
PUBLIC
Include
BUILD_DEPENDENCIES
PRIVATE
AZ::AzCore
AZ::AtomCore
AZ::AzFramework
AZ::AzNetworking
Gem::Atom_Feature_Common.Static
Gem::Multiplayer.Static
Gem::ImGui.Static
)
@@ -1168,6 +1168,12 @@ namespace {{ Component.attrib['Namespace'] }}
void {{ ComponentBaseName }}::Init()
{
if (m_netBindComponent == nullptr)
{
AZLOG_ERROR("NetBindComponent is null, ensure NetworkAttach is called prior to activating a networked entity");
return;
}
{{ DefineComponentServiceProxyGrabs(Component, ClassType, ComponentName)|indent(8) }}
{% if ComponentDerived %}
OnInit();
@@ -0,0 +1,36 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Source/Multiplayer_precompiled.h>
#include <Source/Debug/MultiplayerDebugModule.h>
#include <Source/Debug/MultiplayerDebugSystemComponent.h>
namespace Multiplayer
{
MultiplayerDebugModule::MultiplayerDebugModule()
: AZ::Module()
{
m_descriptors.insert(m_descriptors.end(), {
MultiplayerDebugSystemComponent::CreateDescriptor(),
});
}
AZ::ComponentTypeList MultiplayerDebugModule::GetRequiredSystemComponents() const
{
return AZ::ComponentTypeList
{
azrtti_typeid<MultiplayerDebugSystemComponent>(),
};
}
}
AZ_DECLARE_MODULE_CLASS(Gem_Multiplayer_Imgui, Multiplayer::MultiplayerDebugModule);
@@ -0,0 +1,31 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#include <AzCore/Module/Module.h>
namespace Multiplayer
{
class MultiplayerDebugModule
: public AZ::Module
{
public:
AZ_RTTI(MultiplayerDebugModule, "{9E1460FA-4513-4B5E-86B4-9DD8ADEFA714}", AZ::Module);
AZ_CLASS_ALLOCATOR(MultiplayerDebugModule, AZ::SystemAllocator, 0);
MultiplayerDebugModule();
~MultiplayerDebugModule() override = default;
AZ::ComponentTypeList GetRequiredSystemComponents() const override;
};
}
@@ -0,0 +1,123 @@
/*
* All or portions of this file Copyright(c) Amazon.com, Inc.or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution(the "License").All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file.Do not
* remove or modify any license notices.This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Source/Debug/MultiplayerDebugSystemComponent.h>
#include <AzCore/Serialization/SerializeContext.h>
#include <AzCore/Interface/Interface.h>
#include <Include/IMultiplayer.h>
namespace Multiplayer
{
void MultiplayerDebugSystemComponent::Reflect(AZ::ReflectContext* context)
{
if (AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context))
{
serializeContext->Class<MultiplayerDebugSystemComponent, AZ::Component>()
->Version(1);
}
}
void MultiplayerDebugSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
{
provided.push_back(AZ_CRC_CE("MultiplayerDebugSystemComponent"));
}
void MultiplayerDebugSystemComponent::GetRequiredServices([[maybe_unused]] AZ::ComponentDescriptor::DependencyArrayType& required)
{
;
}
void MultiplayerDebugSystemComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatbile)
{
incompatbile.push_back(AZ_CRC_CE("MultiplayerDebugSystemComponent"));
}
void MultiplayerDebugSystemComponent::Activate()
{
#ifdef IMGUI_ENABLED
ImGui::ImGuiUpdateListenerBus::Handler::BusConnect();
#endif
}
void MultiplayerDebugSystemComponent::Deactivate()
{
#ifdef IMGUI_ENABLED
ImGui::ImGuiUpdateListenerBus::Handler::BusDisconnect();
#endif
}
#ifdef IMGUI_ENABLED
void MultiplayerDebugSystemComponent::OnImGuiMainMenuUpdate()
{
if (ImGui::BeginMenu("Multiplayer"))
{
//{
// static int lossPercent{ 0 };
// lossPercent = static_cast<int>(net_UdpDebugLossPercent);
// if (ImGui::SliderInt("UDP Loss Percent", &lossPercent, 0, 100))
// {
// net_UdpDebugLossPercent = lossPercent;
// m_ClientAgent.UpdateConnectionCvars(net_UdpDebugLossPercent);
// }
//}
//
//{
// static int latency{ 0 };
// latency = static_cast<int>(net_UdpDebugLatencyMs);
// if (ImGui::SliderInt("UDP Latency Ms", &latency, 0, 3000))
// {
// net_UdpDebugLatencyMs = latency;
// m_ClientAgent.UpdateConnectionCvars(net_UdpDebugLatencyMs);
// }
//}
//
//{
// static int variance{ 0 };
// variance = static_cast<int>(net_UdpDebugVarianceMs);
// if (ImGui::SliderInt("UDP Variance Ms", &variance, 0, 1000))
// {
// net_UdpDebugVarianceMs = variance;
// m_ClientAgent.UpdateConnectionCvars(net_UdpDebugVarianceMs);
// }
//}
ImGui::Checkbox("Multiplayer Stats", &m_displayStats);
ImGui::EndMenu();
}
}
void MultiplayerDebugSystemComponent::OnImGuiUpdate()
{
if (m_displayStats)
{
if (ImGui::Begin("Multiplayer Stats", &m_displayStats, ImGuiWindowFlags_HorizontalScrollbar))
{
IMultiplayer* multiplayer = AZ::Interface<IMultiplayer>::Get();
Multiplayer::MultiplayerStats& stats = multiplayer->GetStats();
ImGui::Text("Multiplayer operating in %s mode", GetEnumString(multiplayer->GetAgentType()));
ImGui::Text("Total networked entities: %llu", aznumeric_cast<AZ::u64>(stats.m_entityCount));
ImGui::Text("Total client connections: %llu", aznumeric_cast<AZ::u64>(stats.m_clientConnectionCount));
ImGui::Text("Total server connections: %llu", aznumeric_cast<AZ::u64>(stats.m_serverConnectionCount));
ImGui::Text("Total property updates sent: %llu", aznumeric_cast<AZ::u64>(stats.m_propertyUpdatesSent));
ImGui::Text("Total property updates sent bytes: %llu", aznumeric_cast<AZ::u64>(stats.m_propertyUpdatesSentBytes));
ImGui::Text("Total property updates received: %llu", aznumeric_cast<AZ::u64>(stats.m_propertyUpdatesRecv));
ImGui::Text("Total property updates received bytes: %llu", aznumeric_cast<AZ::u64>(stats.m_propertyUpdatesRecvBytes));
ImGui::Text("Total RPCs sent: %llu", aznumeric_cast<AZ::u64>(stats.m_rpcsSent));
ImGui::Text("Total RPCs sent bytes: %llu", aznumeric_cast<AZ::u64>(stats.m_rpcsSentBytes));
ImGui::Text("Total RPCs received: %llu", aznumeric_cast<AZ::u64>(stats.m_rpcsRecv));
ImGui::Text("Total RPCs received bytes: %llu", aznumeric_cast<AZ::u64>(stats.m_rpcsRecvBytes));
}
ImGui::End();
}
}
#endif
}
@@ -0,0 +1,56 @@
/*
* All or portions of this file Copyright(c) Amazon.com, Inc.or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution(the "License").All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file.Do not
* remove or modify any license notices.This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#include <AzCore/Component/Component.h>
#ifdef IMGUI_ENABLED
# include <imgui/imgui.h>
# include <ImGuiBus.h>
#endif
namespace Multiplayer
{
class MultiplayerDebugSystemComponent final
: public AZ::Component
#ifdef IMGUI_ENABLED
, public ImGui::ImGuiUpdateListenerBus::Handler
#endif
{
public:
AZ_COMPONENT(MultiplayerDebugSystemComponent, "{060BF3F1-0BFE-4FCE-9C3C-EE991F0DA581}");
static void Reflect(AZ::ReflectContext* context);
static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
static void GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required);
static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatbile);
~MultiplayerDebugSystemComponent() override = default;
//! AZ::Component overrides
//! @{
void Activate() override;
void Deactivate() override;
//! @}
#ifdef IMGUI_ENABLED
//! ImGui::ImGuiUpdateListenerBus overrides
//! @{
void OnImGuiMainMenuUpdate() override;
void OnImGuiUpdate() override;
//! @}
#endif
private:
bool m_displayStats = false;
};
}
@@ -15,6 +15,8 @@
#include <Source/MultiplayerSystemComponent.h>
#include <Source/Components/NetBindComponent.h>
#include <Source/AutoGen/AutoComponentTypes.h>
#include <Source/Pipeline/NetBindMarkerComponent.h>
#include <Source/Pipeline/NetworkSpawnableHolderComponent.h>
#include <AzNetworking/Framework/NetworkingSystemComponent.h>
namespace Multiplayer
@@ -26,6 +28,8 @@ namespace Multiplayer
AzNetworking::NetworkingSystemComponent::CreateDescriptor(),
MultiplayerSystemComponent::CreateDescriptor(),
NetBindComponent::CreateDescriptor(),
NetBindMarkerComponent::CreateDescriptor(),
NetworkSpawnableHolderComponent::CreateDescriptor(),
});
CreateComponentDescriptors(m_descriptors);
@@ -133,23 +133,33 @@ namespace Multiplayer
// Let the network system know the frame is done and we can collect dirty bits
m_networkEntityManager.NotifyEntitiesDirtied();
MultiplayerStats& stats = GetStats();
stats.m_entityCount = GetNetworkEntityManager()->GetEntityCount();
stats.m_serverConnectionCount = 0;
stats.m_clientConnectionCount = 0;
// Send out the game state update to all connections
{
auto sendNetworkUpdates = [serverGameTimeMs](IConnection& connection)
auto sendNetworkUpdates = [serverGameTimeMs, &stats](IConnection& connection)
{
if (connection.GetUserData() != nullptr)
{
IConnectionData* connectionData = reinterpret_cast<IConnectionData*>(connection.GetUserData());
connectionData->Update(serverGameTimeMs);
if (connectionData->GetConnectionDataType() == ConnectionDataType::ServerToClient)
{
stats.m_clientConnectionCount++;
}
else
{
stats.m_serverConnectionCount++;
}
}
};
m_networkInterface->GetConnectionSet().VisitConnections(sendNetworkUpdates);
}
MultiplayerStats& stats = GetStats();
stats.m_entityCount = GetNetworkEntityManager()->GetEntityCount();
MultiplayerPackets::SyncConsole packet;
AZ::ThreadSafeDeque<AZStd::string>::DequeType cvarUpdates;
m_cvarCommands.Swap(cvarUpdates);
@@ -0,0 +1,65 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include <Source/Multiplayer_precompiled.h>
#include <Source/MultiplayerToolsModule.h>
#include <Pipeline/NetworkPrefabProcessor.h>
#include <AzCore/Serialization/Json/RegistrationContext.h>
#include <Prefab/Instance/InstanceSerializer.h>
namespace Multiplayer
{
//! Multiplayer Tools system component provides serialize context reflection for tools-only systems.
class MultiplayerToolsSystemComponent final
: public AZ::Component
{
public:
AZ_COMPONENT(MultiplayerToolsSystemComponent, "{65AF5342-0ECE-423B-B646-AF55A122F72B}");
static void Reflect(AZ::ReflectContext* context)
{
NetworkPrefabProcessor::Reflect(context);
}
MultiplayerToolsSystemComponent() = default;
~MultiplayerToolsSystemComponent() override = default;
/// AZ::Component overrides.
void Activate() override
{
}
void Deactivate() override
{
}
};
MultiplayerToolsModule::MultiplayerToolsModule()
: AZ::Module()
{
m_descriptors.insert(m_descriptors.end(), {
MultiplayerToolsSystemComponent::CreateDescriptor(),
});
}
AZ::ComponentTypeList MultiplayerToolsModule::GetRequiredSystemComponents() const
{
return AZ::ComponentTypeList
{
azrtti_typeid<MultiplayerToolsSystemComponent>(),
};
}
} // namespace Multiplayer
AZ_DECLARE_MODULE_CLASS(Gem_Multiplayer_Tools, Multiplayer::MultiplayerToolsModule);
@@ -0,0 +1,33 @@
/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#pragma once
#include <AzCore/Module/Module.h>
namespace Multiplayer
{
class MultiplayerToolsModule
: public AZ::Module
{
public:
AZ_RTTI(MultiplayerToolsModule, "{3F726172-21FC-48FA-8CFA-7D87EBA07E55}", AZ::Module);
AZ_CLASS_ALLOCATOR(MultiplayerToolsModule, AZ::SystemAllocator, 0);
MultiplayerToolsModule();
~MultiplayerToolsModule() override = default;
AZ::ComponentTypeList GetRequiredSystemComponents() const override;
};
} // namespace Multiplayer
@@ -13,6 +13,7 @@
#pragma once
#include <AzCore/EBus/Event.h>
#include <AzCore/Name/Name.h>
#include <AzCore/RTTI/TypeSafeIntegral.h>
#include <AzCore/std/string/fixed_string.h>
#include <AzNetworking/Serialization/ISerializer.h>
@@ -74,9 +75,36 @@ namespace Multiplayer
struct PrefabEntityId
{
AZ_TYPE_INFO(PrefabEntityId, "{EFD37465-CCAC-4E87-A825-41B4010A2C75}");
bool operator==(const PrefabEntityId&) const { return true; }
bool operator!=(const PrefabEntityId& rhs) const { return !(*this == rhs); }
bool Serialize(AzNetworking::ISerializer&) { return true; }
static constexpr uint32_t AllIndices = AZStd::numeric_limits<uint32_t>::max();
AZ::Name m_prefabName;
uint32_t m_entityOffset = AllIndices;
PrefabEntityId() = default;
explicit PrefabEntityId(AZ::Name name, uint32_t entityOffset = AllIndices)
: m_prefabName(name)
, m_entityOffset(entityOffset)
{
}
bool operator==(const PrefabEntityId& rhs) const
{
return m_prefabName == rhs.m_prefabName && m_entityOffset == rhs.m_entityOffset;
}
bool operator!=(const PrefabEntityId& rhs) const
{
return !(*this == rhs);
}
bool Serialize(AzNetworking::ISerializer& serializer)
{
serializer.Serialize(m_prefabName, "prefabName");
serializer.Serialize(m_entityOffset, "entityOffset");
return serializer.IsValid();
}
};
}
@@ -18,6 +18,7 @@
#include <Source/EntityDomains/IEntityDomain.h>
#include <Source/NetworkEntity/NetworkEntityUpdateMessage.h>
#include <Source/NetworkEntity/NetworkEntityRpcMessage.h>
#include <Source/NetworkEntity/INetworkEntityManager.h>
#include <Source/Components/NetBindComponent.h>
#include <Source/AutoGen/Multiplayer.AutoPackets.h>
#include <AzNetworking/ConnectionLayer/IConnection.h>
@@ -530,7 +531,7 @@ namespace Multiplayer
NetEntityId netEntityId,
NetEntityRole localNetworkRole,
AzNetworking::ISerializer& serializer,
[[maybe_unused]] const PrefabEntityId& prefabEntityId
const PrefabEntityId& prefabEntityId
)
{
ConstNetworkEntityHandle replicatorEntity = GetNetworkEntityManager()->GetEntity(netEntityId);
@@ -543,7 +544,16 @@ namespace Multiplayer
{
// @pereslav
//replicatorEntity = GetNetworkEntityManager()->CreateSingleEntityImmediateInternal(prefabEntityId, EntitySpawnType::Replicate, AutoActivate::DoNotActivate, netEntityId, localNetworkRole, AZ::Transform::Identity());
AZ_Assert(replicatorEntity != nullptr, "Failed to create entity from prefab");// %s", prefabEntityId.GetString());
INetworkEntityManager::EntityList entityList = GetNetworkEntityManager()->CreateEntitiesImmediate(
prefabEntityId, netEntityId, localNetworkRole,
AZ::Transform::Identity());
if (entityList.size() == 1)
{
replicatorEntity = entityList[0];
}
AZ_Assert(replicatorEntity != nullptr, "Failed to create entity from prefab %s", prefabEntityId.m_prefabName.GetCStr());
if (replicatorEntity == nullptr)
{
return false;
@@ -16,6 +16,7 @@
#include <Source/NetworkEntity/NetworkEntityHandle.h>
#include <AzCore/Component/Entity.h>
#include <AzCore/EBus/Event.h>
#include <AzCore/Asset/AssetCommon.h>
namespace Multiplayer
{
@@ -35,6 +36,7 @@ namespace Multiplayer
AZ_RTTI(INetworkEntityManager, "{109759DE-9492-439C-A0B1-AE46E6FD029C}");
using OwnedEntitySet = AZStd::unordered_set<ConstNetworkEntityHandle>;
using EntityList = AZStd::vector<NetworkEntityHandle>;
virtual ~INetworkEntityManager() = default;
@@ -50,7 +52,10 @@ namespace Multiplayer
//! @return the HostId for this INetworkEntityManager instance
virtual HostId GetHostId() const = 0;
// TODO: Spawn methods for entities within slices/prefabs/levels
//! Creates new entities of the given archetype
//! @param prefabEntryId the name of the spawnable to spawn
virtual EntityList CreateEntitiesImmediate(
const PrefabEntityId& prefabEntryId, NetEntityId netEntityId, NetEntityRole netEntityRole, const AZ::Transform& transform) = 0;
//! Returns an ConstEntityPtr for the provided entityId.
//! @param netEntityId the netEntityId to get an ConstEntityPtr for

Some files were not shown because too many files have changed in this diff Show More