- Added a pause button in imgui cpu profiler.
- Added a capture button to save cpu profiling data to a data file.
- Added some profile marks in both RPI and RHI.
Added new shader reinitialization signaling
This was done while working on "ATOM-15728 Shader Hot Reload Fails in Debug Build", but it turned out these changes did not actually fix the issue (or any other known hot-reload issue). Still, these improvements are appropriate as they correct logical oversights.
ShaderVariant was not listening to asset reloads. It needs to know when the ShaderVariantAsset reload happens so it can reinitialize it's members as well as propagate reinitialization messages. I added a member for the ShaderAsset as the class needs this to reinitialize itself. So now the class listens for reloads of both the ShaderVariantAsset and the ShaderAsset.
Shader was not listening for ShaderAsset reinitialization events.
Updated the API for ShaderReloadNotificationBus's OnShaderVariantReinitialized to include the ShaderVariant which is the most relevant information (the other information wasn't really being used anyway).
Testing: Ran ASV full test suite in dx12 and vulkan, saw only known issues. Tested hot reload in Material Editor and main Editor.
See also aws-lumberyard/o3de-atom-sampleviewer#118
* Before we were skipping actors in case there was animation data present in the source asset to avoid having many duplicated actors.
* There was an issue though for simple test fbx files containing a full character with a test motion.
* The new rule is that we will be exporting actors on default whenever there is a skeleton including either skinning data or morph targets, as these usually are not included for animation assets to not increase disk space heavily.
* Tested with several of our assets and always showed the expected behavior with the new way.
Updated window size and re-organized elements
Updated product name to include [Developer Preview]
Replaced font type with correct one
Replaced square O3DE logo with full name logo
Reworded and removed checkbox for EULA acceptance
This was done while working on "ATOM-15728 Shader Hot Reload Fails in Debug Build", but it turned out these changes did not actually fix the issue (or any other known hot-reload issue). Still, these improvements are appropriate as they correct logical oversights.
ShaderVariant was not listening to asset reloads. It needs to know when the ShaderVariantAsset reload happens so it can reinitialize it's members as well as propagate reinitialization messages. I added a member for the ShaderAsset as the class needs this to reinitialize itself. So now the class listens for reloads of both the ShaderVariantAsset and the ShaderAsset.
Shader was not listening for ShaderAsset reinitialization events.
Updated the API for ShaderReloadNotificationBus's OnShaderVariantReinitialized to include the ShaderVariant which is the most relevant information (the other information wasn't really being used anyway).
Fixed Shader Hot-Reload Race Condition
ATOM-15728 Shader Hot Reload Fails in Debug Build
The main change was to add OnAssetReady handlers to each of the asset classes. See comments in ShaderAsset::OnAssetReady for a detailed explanation. In short, OnAssetReloaded gets missed while assets are being reloaded at the same time on multiple threads, but OnAssetReady is always called whenever connecting to the AssetBus because of its AssetConnectionPolicy.
The above change required the addition of a new AssetInitBus to call the PostLoadInit() functions. Because OnAssetReady connects to buses that are not mutex-protected, they have to be connected on the main thread. AssetInitBus::PostLoadInit is called every frame in RPISystem::SimulationTick. All Atom's asset handlers that need to do post-load initialization must connect to the AssetInitBus, and the asset will disconnect itself after initialization is complete.
We also need the Shader class to handle OnShaderAssetReinitialized to properly handle the shader reload.
With these changes I can click back and forth between "Blending On" and "Blending Off" many times (like 20 times) without issue.
Testing: AtomSampleViewer passes in dx12 and vulkan (except for known issues). Opened several AtomTest levels. Opened a multilayer material in material editor and made changes to the multilayer forward pass .shader file and saw proper reload.
* Added a ModuleInterface class for sharing an AZ::Module implementation
The ModuleInterface class registers the SystemComponent that that comes
with the Client module and returns in it's GetRequiredSystemComponent
the Clients module SystemComponent
An EditorModule class has been added which inherits from the
ModuleInterface class and extends the registered SystemComponent
descriptors with it's SystemComponent.
It then overrides teh GetRequiredSystemComponent function and replaces
the required SystemComponent with it's Tools module SystemComponent
* Updated the DefaultProject list of Gems to match the decided Standard list of gems
* Updated the comment in the EditorModule constructor
The comment indicates that all component descriptors should be added to the m_descriptors list
* Added more detail to the ModuleInterface constructor about the registering the Component Descriptors
* Creating Builder variant aliases for all Asset Gems
* Added an AssetGem template for creating an Asset Gem
The AssetGem template is meant for non-code Gems
* Updated the engine_template.py commands to use pathlib
Each of the four commands: create-template, create-from-template,
create-project and create-gem have been updated to use pathlib.Path or
any path manipulation
Fix several python errors when instantiating a template with missing
o3de objects.
For example attempting to use the create-project command with the
"DefaultGem" template would result in a python exception instaed of a
error log and a return value 0..
Added a **force** option to the engine_template commands
to force overriding of existing files
* Optimized search through text files when the create-template command is
run when attempting to replace the license text section
* Adding a Minimal Project Template that contains the minimal set of gems
as stated by UX
* Minor changes to the DefaultProject template. Added a license section to the EngineFinder.cmake
* Adding the MinimalProject to the engine.json file
* Fixes issues with project paths w/ trailing slash
When launching AP with a --project-path that has a trailing slash, the
AssetBuilders would get that slash instead of a normalized version.
This would mess up the params sent to AssetBuilders.
* Missed a variable name replacement
* Addresses feedback on code style guidelines
Removed 'auto' keyword in favor of explicit types.
* Fixed crash caused by nesting the same slice twice
If the same slice is nested at multiple levels in the same slice hierarchy, the second conversion would reregister the prefab and crash. Now that case is detected and the slice isn't reconverted.
* Fixed json array patches where multiple elements are removed.
The patches now generate removals from back to front, instead of front to back, so that the indices remain valid as each patch is applied.