From f88c75830dfb9746c1fcb7b85184d39c2a5b297b Mon Sep 17 00:00:00 2001 From: Unity Technologies <@unity> Date: Fri, 13 Nov 2020 00:00:00 +0000 Subject: [PATCH] com.unity.entities@0.17.0-preview.41 ## [0.17.0] - 2020-11-13 ### Added * ISystemBase interface for making struct based systems that allow Burst compiling main thread update * New UnsafeBufferAccessor struct that permit to un-typed and unsafe access the dynamic buffers pointers. * New ArchetypeChunk.GetUnsafeAccessor public API that allow to retrieve dynamic buffers unsafe accessors using DynamicTypeHandle. * safety check in DynamicComponentDataArrayReinterpret that throw an ArgumentException if used to access the component data for IBufferDataElement type * ComponentSystemBase.TryGetSingleton * ComponentSystemBase.TryGetSingletonEntity * Tests for Tiny.UI transformations. * Added documentation for incremental conversion and dependencies * New scheduling API for `IJobEntityBatch` which limits the resulting batches to an input `NativeArray` * BlobAssetStore. AddUniqueBlobAsset. A much simpler approach to managing blob assets during conversion. BlobAssetComputationContext continues to be the recommended approach for scalable blob asset generation. * UnsafeUntypedBlobAsset gives a non-generic untyped blob that can be created and later casted to a specific BlobAssetType. This can be used for storing multiple types of blob assets in the same container. * GameObjectConversionSystem.IsBuildingForEditor returns true when building data that will be loaded by the editor (As opposed to building data that will be loaded by the standalone player). This can be used to strip out editor only debug data. * GameObjectConversionSystem.BuildConfigGUID returns the GUID of the build config that is used by this conversion context * Tiny.UI support for 9-Slice (including sprite sheet support) * `DynamicSharedComponentHandle` and related methods for accessing shared components without compile time type information. * The public static method `EntitySelectionProxy.CreateInstance` was added. It creates, configures, and returns a valid instance of `EntitySelectionProxy`. * The public static method `EntitySelectionProxy.SelectEntity` was added. It creates, configures, and selects an instance of `EntitySelectionProxy`, without returning it. * All the public properties and methods of `EntitySelectionProxy` have been documented. * Tiny.UI support for text alignment * Tiny.UI support for multi-line text * TypeManager will now store whether or not an `ISharedComponentData` is managed or unmanaged. * EntityScenesInBuild class that allows registering EntityScenes that are generated via a custom asset importer into the build. This is used by the Environment system to generate streamable tile data that is generated procedurally from tile inputs. * New EntityCommandBuffer methods that affect a set of entities matching a query. Unlike existing methods, these new methods 'capture' the entities from the query at record time rather than playback time: the array of entities is stored in the command, and then playback of the command affects all entities of the array. The methods are `AddComponentForEntityQuery(EntityQuery, ComponentType)`, `AddComponentForEntityQuery(EntityQuery, ComponentTypes)`, `RemoveComponentForEntityQuery(EntityQuery, ComponentType)`, `RemoveComponentForEntityQuery(EntityQuery, ComponentTypes)`, `DestroyEntitiesForEntityQuery(EntityQuery)`. * EntityManager.Debug.GetEntitiesForAuthoringObject and EntityManager.Debug.GetAuthoringObjectForEntity. They provide a convenient API to map game object authoring & entity runtime representation. * New `ComponentSystemGroup.EnableSystemSorting` property allows individual system groups to opt out of automatic system sorting. **PLEASE NOTE:** Certain system update order constraints are necessary for correct DOTS functionality. Disabling the automatic system sorting should be only be a last resort, and only on system groups with full control over which systems they contain. * Entities.WithFilter(NativeArray filteredEntities) allows for filtering with a set of specific entities in addition to the EntityQuery requirements * Added Live Conversion debug logging to more easily see what is reconverted (enable from the menu `DOTS/LiveLink Mode/Incremental Conversion Logging`) ### Changed * Update burst to 1.4.1. * Improved the performance of ILPostProcessor type resolution. * ProcessAfterLoadGroup is now public. This group runs after a subscene is loaded. * `Unity.Transforms` systems now use `IJobEntityBatch` instead of `IJobChunk`. Expect modest performance gains due to the new job type's lower scheduling overhead, depending on the workload size. * When `DOTS/Live Link Mode/Live Conversion in Edit Mode` is active in 2020.2 or later, conversion is now incremental * Removed deprecated `Entities.ForEach.WithDeallocateOnJobCompletion`. Please use `Entities.ForEach.WithDisposeOnCompletion` instead. * Fixed livelink patching for `BlobAssetReference` fields in managed components and shared components. * Updated package `com.unity.platforms` to version `0.9.0-preview.15`. * `TypeManager.Equals` and `TypeManager.GetHashCode` performance has been improved when operating on blittable component types. * BlobAsset and entity patching for managed IComponentData & ISharedComponentData now use an early out if the class is known to not contain any blob assets or entity references * Managed class IComponentData now supports patching of entity references in EntityCommandBuffer.AddComponent. * Improved EntityManager.GetCreatedAndDestroyedEntities performance by introducing an internal entity creation / destruction version number that is used to early out when calling GetCreatedAndDestroyedEntities * TypeManger.TypeInfo.Debug has been removed. TypeName has been moved directly into TypeInfo and renamed to DebugTypeName. * Nested or variant prefabs used in a scene now correctly trigger reimports on subscenes when the parents parent prefab changes * Update minimum editor version to 2020.1.2f1 * `EntitySelectionProxy` was streamlined to ensure that its usage does not override inspector locking behaviour and respects the Undo / Redo stack. With the new workflow, there is a 1:1 relationship between an Entity and its EntitySelectionProxy. Static utility methods were added to support this new workflow. * Rename `TypeManager.IsSharedComponent` to `IsSharedComponentType` and add `IsManagedType` *Enabled generic systems to be instantiated in non-tiny dots runtime * Updated platform packages to version `0.10.0-preview.1`. * Made SystemBase/JobComponentSystem classes partial in preparation of use of Roslyn source generators for code-generation (more to come). ### Deprecated * Forking of `GameObjectConversionSettings` is no longer supported * The public delegate `EntitySelectionProxy.EntityControlSelectButtonHandler` has been deprecated. * The public event `EntitySelectionProxy.EntityControlSelectButton` has been deprecated. * The public method `EntitySelectionProxy.SetEntity` has been deprecated. * The public method `EntitySelectionProxy.OnEntityControlSelectButton` has been deprecated. * The public property `EntitySelectionProxy.EntityManager` has been deprecated. Use `EntitySelectionProxy.World.EntityManager` manager instead. This change was made to remove boilerplate checks in the code. * Deprecated `Frozen` component as it is no longer in use ### Removed * Removed deprecated proxy component types. CopyTransformToGameObject, CopyTransformFromGameObject and CopyInitialTransformFromGameObject now use [GenerateAuthoringComponent] instead. * Removed expired `EntityManager.IsCreated` API * Removed expired API to compare `EntityManager` to `null` (`EntityManager` is a struct now) * Removed deprecated types and methods: `NativeArraySharedValue`, implicit `EntityQuery` conversion to `null`, `ComponentDataFromEntity.Exists` and `BufferFromEntity.Exists`, `ArchetypeChunkArray.GetComponentVersion`, `IJobEntityBatch.ScheduleSingle`, `IJobEntityBatch.ScheduleParallelBatch`, `EntityManager.LockChunk`, `EntityManager.UnlockChunk`, `World.AllWorlds`, `World.CreateSystem`, all `GetArchetypeChunkX` methods, `EntityCommandBuffer.ToConcurrent` and `EntityManager.CreateChunk` * `ComponentSystemBase.ExecutingSystemType` has been removed. With the introduction of unmanaged systems, this information has been incorrect. Furthermore, there cannot be a `static` global property for this since multiple worlds might execute at the same time. If you need this information, consider passing it manually. ### Fixed * Wrong query and check in ACS_DynamicComponentDataArrayReinterpret * Fixed ICE (internal compiler error) thrown when storing into a field in reference type in bursted/scheduled lambda. * `EntityQuery.ToEntityArray` will work when temp memory is passed in an a parameter for allocator * `EntityQuery.ToComponentDataArrayAsync` and `EntityQuery.CopyFromComponentDataArrayAsync` will throw errors if user tries to use Temp memory containers. * Hybrid Component Lights flickering when LiveLink edited. * Fix crash when using singleton access methods with types with generic arguments. * Code generation for indexers in structs with [BurstCompatible] attribute. * Fixed potential `JobHandle` leak if an exception was thrown while scheduling an `IJobForEach`. * Fixed that `DynamicBuffer.RemoveAtSwapBack` only copied the first byte of its element data * Updating the shadow world via the EntityDiffer is now using Burst * The 'New Sub Scene' menu item is no longer missing in the 'Create' drop down of the Hierarchy . * Overwriting Sub Scene file when creating new Sub Scene no longer logs an error but instead overwrites the user selected file. * Fixed livelink patching for `BlobAssetReference` fields in managed components and shared components. * Fixed entities getting lost during LiveLink when moving GameObjects between multiple subscenes * Deprecated call to UnityWebRequest.isNetworkError in Unity.Scenes.FileUtilityHybrid * Generic jobs now get reflection data generated in more cases * Generic jobs will always work to schedule in editor (but may require attributes in Burst scheduling cases) * Selecting entities in the Entity Debugger window will now respect the locked state of the inspector. * several bugs where writing EntityBinaryFiles was not resulting in deterministic files. It is now guranteed that if entities are constructed in the same order, it will result in the same binary exact file. * Fixed a case where LiveLink would sometimes leave dangling entities when a scene is opened and closed repeatedly * `TypeManager.InitializeAllComponentTypes` no longer uses `DateTime.Now`, which can be very slow in players * Structural changes right after scheduling a job in a `SystemBase` no longer crash a player * Sorting a `ComponentSystemGroup` now correctly sorts any child groups, even if the parent group is already sorted. * The subscene inspector no longer allows you to unload section 0 if another section is still loaded, and it also disallows loading any section before section 0 is loaded * `EntityManager.CopyAndReplaceEntitiesFrom` no longer fails when the Entity capacity of the destination is larger than the capacity of the source * Hybrid components on disabled GameObjects are now also converted * Children of a nested Parent not updating LocalToWorld if Parent's LocalToWorld was changed by a custom system with an archetype containing a WriteGroup for LocalToWorld * `EntityQuery` APIs which take an input `NativeArray` for filtering (such as `ToEntityArray()`) can now be called with ReadOnly `NativeArray` without throwing an exception. ### Upgrade guide * managed class IComponentData now supports patching of entity references in EntityCommandBuffer.AddComponent. This can result in a significant performance regression if there might be an entity on the managed component when playing the command buffer. If a managed component has a reference to another class that is not sealed it is unprovable that there may or may not be entity references on it. Thus we have to walk the whole class data to apply it. If there is in fact no entity reference on a class referenced from a managed component, then it is recommended to mark the referenced class as sealed, so that the type manager can prove that there is no entity references present on the managed component and thus completely skip all relatively slow entity patching code. ## [0.16.0] - 2020-09-24 ### Added * EntityManager method CreateEntity(EntityArchetype, int). Unlike existing overloads of CreateEntity, this new overload takes no Entity array and returns no Entity array, so it avoids waste and bother in cases where callers don't need the actual Entity values. * Special handling for Cameras and Colliders in preparation for root scene conversion, though they are disabled by default still * `World.MaximumDeltaTime` now controls the maximum deltaTime that is reported to a World. * Exception's stacktrace are recorded in conversion logs. * Add `IFixedRateManager` interface for fixed-timestep implementations. See `FixedRateUtils.cs` for reference implementations. * Add `ComponentSystemGroup.FixedRateManager` property, to store the current active `IFixedRateManager` implementation. * Added `SceneSystem.IsSectionLoaded` to enable querying if a specific section of a scene is loaded. * `EntityQuery.SetOrderVersionFilter()` and `EntityQuery.AddOrderVersionFilter()` which can be used to filter the Order Version independently from the Changed Version of a chunk. * DOTS naming standards to CONVENTIONS.md * libcurl Stevedore artifact registration * Mathematics tests are turned on in CI ### Changed * Improved performance of `EntityQuery.ToEntityArray()` * Platform packages updated to `0.9.0-preview.9` * Properties packages updated to `1.5.0-preview` * The job safety system has be moved to NativeJobs as C++ code * The UnsafeUtility memory allocators have been moved to NativeJobs * improved performance of EntityQuery.CopyFromComponentDataArray * changed chunk size from 16128 bytes (16 KB - 256 bytes) to exactly 16384 bytes (16 KB). * `TypeManager.GetFieldInfo` now takes in a `Type` to return an `NativeArray`. The passed in type must be registered to have field information generated explicitly via the `[GenerateComponentFieldInfo]` assembly attribute. * `IJobEntityBatch` and `IJobEntityBatchWithIndex` now quietly skip batches whose size is zero. This can happen legitimately if the requested `batchesPerChunk` value is higher than the entity count for a particular chunk. *Removed deprecated `ArchetypeChunk.Locked()` method. *Deprecated `ArchetypeChunk.BatchEntityCount` property. The `.Count` property should be used instead. * Removed usage of TempAssetCache for some livelink cases. Now these files are under SceneDependencyCache instead, so there is only one magic directory to deal with until we can remove it completely in future Unity versions. *Fixed Reduced overhead of `IJobEntityBatchWithIndex` prefiltering by up to 20% if `batchesPerChunk` is 1, or if `EntityQuery` filtering is disabled. ### Deprecated * `FixedStepSimulationSystemGroup.MaximumDeltaTime` has been deprecated. The maximum delta time is now stored in `World.MaximumDeltaTime`. For better compatibility with UnityEngine, the new field applies to both the fixed-rate and variable-rate timesteps. * `ComponentSystemGroup.UpdateCallback` is deprecated. Instead, the group calls the `ShouldGroupUpdate()` method on its `FixedRateManager` property (if non-null) to accomplish the same effect. * `FixedRateUtils.EnableFixedRateCatchUp()`, `FixedRateUtils.EnableFixedRateSimple()`, and `FixedRateUtils.DisableFixedRate()`. These functions were used to set the deprecated `ComponentSystemGroup.UpdateCallback` field; instead, just set `ComponentSystemGroup.FixedRateManager` directly. ### Removed * Old <2020.1 ifdef blocks in LiveLink scene culling code * Deprecated legacy sort order code in ComponentSystemGroup was removed ### Fixed * Removed GC-allocations in `SceneSystem` and `SceneSectionStreamingSystem` that were happening every frame * Issue with invalid GUID in SubScene importer causing Player LiveLink to stall waiting for an asset it will never get * Hybrid component transform syncing was not working when entity order changed * Hybrid components being editable when in Preview Scenes (by selecting gizmos) * Fixed an issue in 2020.2 which caused `NativeContainer` min-max ranges to be incorrectly patched when scheduling and `IJobChunk` or `IJobEntityBatch` with a "Single" or "Run" schedule call. * Fields marked with `RestrictAuthoringInputTo` can now be set to `None` in the inspector * The Entities package now uses a faster code path for `CreateArchetypeChunkArray()` more consistently. * Retroactively added a changelog entry that notes a behavior change in `RemoveComponent(EntityQuery, ComponentTypes)`. See 'Change' entry under 0.14.0. * Generic job reflection data across assemblies would sometimes not work * Fixed HLOD component throwing out of bounds exception when setup incorrectly against LODGroup. * Scene section meta data now works in standalone builds again * Native memory leak in EditorSubSceneLiveLinkSystem when failing to apply patches * Generic job registration is more robust when generic parameters * LiveLink will not generate errors on scenes that have not yet loaded scene sections * Corrected inverted test in `IJobEntityBatchWithIndex` if EntityQuery filtering is enabled. * `EntityManger.AddComponent(EntityQuery entityQuery)` and `EntityManger.AddComponentData(EntityQuery entityQuery, NativeArray componentArray)` is 2x faster. * Reduced overhead of `IJobEntityBatch` execution by 5-10% if `batchesPerChunk` is 1. ### Security --- CHANGELOG.md | 114 +- DocCodeSamples.Tests/BlobAssetExamples.cs | 24 + .../BlobAssetExamples.cs.meta | 2 +- .../ChunkComponentExamples.cs | 137 +- DocCodeSamples.Tests/ChunkIterationJob.cs | 4 + DocCodeSamples.Tests/ConversionExamples.cs | 188 ++ DocCodeSamples.Tests/DynamicBufferExamples.cs | 27 +- DocCodeSamples.Tests/EntityCommandBuffers.cs | 3 +- DocCodeSamples.Tests/EntityQueryExamples.cs | 23 +- .../IJobEntityBatchExamples.cs | 272 ++ DocCodeSamples.Tests/LambdaJobExamples.cs | 42 +- DocCodeSamples.Tests/LookupDataExamples.cs | 31 +- DocCodeSamples.Tests/StatefulSystem.cs | 3 +- DocCodeSamples.Tests/SystemBaseExamples.cs | 13 +- Documentation~/TableOfContents.md | 31 - Documentation~/api_index.md | 87 + Documentation~/chunk_iteration.md | 12 +- Documentation~/chunk_iteration_job.md | 12 +- Documentation~/component_data.md | 8 +- Documentation~/conversion.md | 1 + Documentation~/conversion_livelink.md | 63 + Documentation~/dynamic_buffers.md | 6 +- Documentation~/ecs_chunk_component.md | 25 +- Documentation~/ecs_components.md | 3 +- Documentation~/ecs_core.md | 9 +- Documentation~/ecs_creating_systems.md | 13 +- Documentation~/ecs_debugging.md | 3 +- Documentation~/ecs_entities.md | 13 +- Documentation~/ecs_entities_foreach.md | 17 +- Documentation~/ecs_entity_query.md | 12 +- Documentation~/ecs_generic_jobs.md | 248 ++ Documentation~/ecs_ijobentitybatch.md | 257 ++ Documentation~/ecs_job_overview.md | 4 +- Documentation~/ecs_job_withcode.md | 3 +- Documentation~/ecs_lookup_data.md | 6 +- Documentation~/ecs_write_groups.md | 11 +- Documentation~/filter.yml | 11 + Documentation~/gp_common_patterns.md | 3 +- Documentation~/gp_overview.md | 3 +- Documentation~/hybrid_component.md | 73 + Documentation~/images/infographic.js | 16 +- Documentation~/images/livelink_menu.png | Bin 0 -> 8413 bytes Documentation~/index.md | 39 +- Documentation~/install_setup.md | 62 + Documentation~/manual_iteration.md | 3 + Documentation~/projectMetadata.json | 5 + Documentation~/shared_component_data.md | 5 +- Documentation~/system_state_components.md | 3 +- Documentation~/system_update_order.md | 3 +- Documentation~/toc.md | 104 + Documentation~/transform_system.md | 6 +- Documentation~/world.md | 48 +- Unity.Burst.Tests/BurstDelegateTest.cs | 40 + Unity.Burst.Tests/Unity.Burst.Tests.asmdef | 3 +- Unity.Entities.CodeGen.Tests/AssemblyInfo.cs | 3 + .../AssemblyInfo.cs.meta | 3 + .../BlobAssetSafetyVerifierTests.cs | 122 + .../IJobEntity.meta | 2 +- .../IJobEntity/SourceGenerationTests.meta | 8 + .../IntegrationTest.cs | 207 +- .../LambdaJobs/LambdaJobIntegrationTest.cs | 2 +- .../LambdaJobsPostProcessorErrorTests.cs | 51 +- .../LambdaJobsPostProcessorTestBase.cs | 19 +- .../SingletonAccessIntegrationTest.cs | 2 +- .../Unity.Entities.CodeGen.Tests.asmdef | 13 +- .../BlobAssetSafetyVerifier.cs | 87 +- .../CecilExtensionMethods.cs | 36 +- Unity.Entities.CodeGen/Cloner.meta | 8 + Unity.Entities.CodeGen/Cloner/Cloner.cs | 53 + Unity.Entities.CodeGen/Cloner/Cloner.cs.meta | 3 + .../EntitiesILPostProcessor.cs | 160 +- .../ISystemBasePostProcessor.cs | 19 +- .../JobReflectionDataPostProcessor.cs | 184 +- .../LambdaJobs/EntitiesForEachAttributes.cs | 4 - .../LambdaJobs/EntitiesForEachJobCreator.cs | 12 +- .../LambdaJobs/LambdaJobsPostProcessor.cs | 23 +- .../LambdaJobs/UserError.cs | 20 +- .../SingletonAccessPostProcessor.cs | 21 +- .../StaticTypeRegistry/MonoExtensions.cs | 70 +- .../StaticTypeRegistryPostProcessor.cs | 73 +- .../SystemInfoGeneration.cs | 26 +- .../StaticTypeRegistry/TypeInfoGeneration.cs | 15 +- .../StaticTypeRegistry/TypeUtils.cs | 8 +- .../Unity.Entities.CodeGen.asmdef | 13 +- .../EntityContainerTest.cs | 32 + .../LiveLink/StartLiveLinkWindowTests.cs | 18 +- .../Unity.Entities.Editor.Tests.asmdef | 4 +- Unity.Entities.Editor/Decompiler.cs | 89 +- .../Editors/ComponentDataProxyBaseEditor.cs | 109 - .../Editors/DynamicBufferProxyBaseEditor.cs | 130 - .../EntityDebugger/EntityDebugger.cs | 68 +- .../EntityDebugger/EntityListView.cs | 16 +- .../EntityDebugger/SystemListView.cs | 2 +- .../Adapters/IMGUIAdapter.EntityGuid.cs | 2 +- .../EntityInspector/DynamicBufferContainer.cs | 15 +- .../EntityInspector/EntityContainer.cs | 31 +- .../EntityInspector/EntitySelectionProxy.cs | 181 +- .../EntitySelectionProxyEditor.cs | 9 +- .../EditorCompanionGameObjectUpdateSystem.cs | 4 +- .../LiveLink/LiveLinkCommands.cs | 51 - .../LiveLink/LiveLinkMenu.cs | 121 + ...kCommands.cs.meta => LiveLinkMenu.cs.meta} | 0 .../LiveLink/LiveLinkToolbar.cs | 71 +- .../LiveLink/StartLiveLinkWindow.cs | 43 +- .../PostprocessedILWindow.cs | 4 - .../WrappedComponentDataDrawer.cs | 31 - .../Unity.Entities.Editor.asmdef | 3 +- .../AuthoringComponentIntegrationTest.cs | 16 +- .../IBufferElementDataRuntimeTests.cs | 2 + ...Unity.Entities.Hybrid.CodeGen.Tests.asmdef | 10 +- .../AuthoringComponentPostProcessor_Shared.cs | 92 +- .../Unity.Entities.Hybrid.CodeGen.asmdef | 8 +- .../TestUtilities.cs | 6 + .../IncrementalConversionPerformanceTests.cs | 137 + ...rementalConversionPerformanceTests.cs.meta | 3 + Unity.Entities.Hybrid.Tests/AssemblyInfo.cs | 1 + ...ataProxy_EntityManager_IntegrationTests.cs | 170 - .../ComponentDataProxy_UnitTests.cs | 82 - .../ComponentDataProxy_UnitTests.cs.meta | 11 - ...ComponentGroupTransformAccessArrayTests.cs | 116 - ...nentGroupTransformAccessArrayTests.cs.meta | 11 - .../AuthoringObjectForEntityTests.cs | 98 + .../AuthoringObjectForEntityTests.cs.meta | 3 + .../Conversion/BlobAssetStoreTests.cs | 19 + .../Conversion/ConversionDependencyTests.cs | 220 +- .../Conversion/ConversionTestFixtureBase.cs | 2 + .../Conversion/ConversionTests.cs | 39 +- .../GameObjectConversionSettingsTests.cs | 4 + .../Conversion/Incremental.meta | 3 + .../Incremental/IncrementalHierarchyTests.cs | 468 +++ .../IncrementalHierarchyTests.cs.meta | 3 + .../IncrementalSceneConversionTests.cs | 246 ++ .../IncrementalSceneConversionTests.cs.meta | 3 + .../Conversion/Incremental/TestWithObjects.cs | 51 + .../Incremental/TestWithObjects.cs.meta | 3 + .../Conversion/Prefab.prefab | 3 +- .../Conversion/Prefab_Hierarchy.prefab | 6 +- ...Hierarchy_With_StaticOptimizeEntity.prefab | 76 + .../Conversion/Prefab_Reference_Prefab.prefab | 5 +- .../Conversion/SceneConversionTests.cs | 4 +- ...ctEntity_EntityManager_IntegrationTests.cs | 7 +- .../Runtime/EntityManagerTests.cs | 35 - .../Runtime/HybridComponentTests.cs | 17 + ...thCustomDefaultGameObjectInjectionWorld.cs | 16 +- .../TypeUtility_UnitTests.cs | 34 - .../TypeUtility_UnitTests.cs.meta | 11 - Unity.Entities.Hybrid/AssemblyInfo.cs | 2 + .../Components/ComponentDataProxy.cs | 65 - .../Components/ComponentDataProxy.cs.meta | 11 - .../Components/ComponentDataProxyBase.cs | 103 - .../Components/ComponentDataProxyBase.cs.meta | 11 - .../Components/DynamicBufferProxy.cs | 74 - .../Components/DynamicBufferProxy.cs.meta | 11 - .../Components/GameObjectEntity.cs | 13 +- .../Components/SharedComponentDataProxy.cs | 63 - .../SharedComponentDataProxy.cs.meta | 11 - Unity.Entities.Hybrid/ConvertToEntity.cs | 4 +- .../EntityManagerExtensions.cs | 35 +- .../GameObjectConversion/BlobAssetStore.cs | 44 +- .../ConversionDependencies.cs | 212 +- .../ConversionJournalData.cs | 32 +- .../ConversionLogUtils.cs | 97 + .../ConversionLogUtils.cs.meta | 2 +- .../ConversionSystemFilterSettings.cs | 9 - .../ConvertGameObjectToEntitySystem.cs | 17 - .../GameObjectConversionMappingSystem.cs | 448 ++- .../GameObjectConversionSettings.cs | 8 +- .../GameObjectConversionSystem.cs | 46 +- .../GameObjectConversionUtility.cs | 103 +- .../GameObjectConversion/Incremental.meta | 3 + .../Incremental/DependencyTracker.cs | 166 + .../Incremental/DependencyTracker.cs.meta | 3 + .../Incremental/IncrementalChangesSystem.cs | 273 ++ .../IncrementalChangesSystem.cs.meta | 3 + .../IncrementalConversionContext.cs | 382 +++ .../IncrementalConversionContext.cs.meta | 3 + .../Incremental/IncrementalConversionData.cs | 82 + .../IncrementalConversionData.cs.meta | 3 + .../Incremental/IncrementalConversionJobs.cs | 48 + .../IncrementalConversionJobs.cs.meta | 3 + .../Incremental/IncrementalHierarchy.cs | 371 +++ .../Incremental/IncrementalHierarchy.cs.meta | 3 + .../Incremental/LiveConversionSettings.cs | 55 + .../LiveConversionSettings.cs.meta | 3 + .../Incremental/SceneHierarchy.cs | 232 ++ .../Incremental/SceneHierarchy.cs.meta | 3 + .../UnityEngineExtensions.cs | 28 +- .../Injection/AutomaticWorldBootstrap.cs | 2 + .../Injection/CompanionGameObject.cs | 2 +- Unity.Entities.Hybrid/SceneSectionProxy.cs | 9 - .../SceneSectionProxy.cs.meta | 11 - Unity.Entities.Hybrid/TypeUtility.cs | 55 - Unity.Entities.Hybrid/TypeUtility.cs.meta | 11 - .../Unity.Entities.Hybrid.asmdef | 8 +- .../UpdateWorldTimeSystem.cs | 16 +- ...ComponentDataFromEntityPerformanceTests.cs | 4 +- .../Diff/EntityDifferPerformanceTests.cs | 1 + ...QueryIncrementalCachingPerformanceTests.cs | 286 +- .../LambdaJobsPerformanceTests.cs | 208 +- .../TypeManagerPerformanceTests.cs | 90 + .../TypeManagerPerformanceTests.cs.meta | 2 +- .../DependencyTestAuthoring.cs | 12 +- .../DependsOnComponentTestAuthoring.cs | 28 + .../DependsOnComponentTestAuthoring.cs.meta | 3 + ...pendsOnComponentTransitiveTestAuthoring.cs | 34 + ...OnComponentTransitiveTestAuthoring.cs.meta | 3 + .../DependsOnTransformTestAuthoring.cs | 26 + .../DependsOnTransformTestAuthoring.cs.meta | 3 + .../HybridComponentTestAuthoring.cs | 14 + .../HybridComponentTestAuthoring.cs.meta | 3 + Unity.Entities.TestComponents/IntTestData.cs | 12 + .../IntTestData.cs.meta | 2 +- .../MockDataAuthoring.cs | 28 + ...roxy.cs.meta => MockDataAuthoring.cs.meta} | 0 .../MockDataProxy.cs | 22 - .../MockDynamicBufferDataAuthoring.cs | 19 + ...=> MockDynamicBufferDataAuthoring.cs.meta} | 0 .../MockDynamicBufferDataProxy.cs | 18 - .../MockSharedDataAuthoring.cs | 24 + ...s.meta => MockSharedDataAuthoring.cs.meta} | 0 .../MockSharedDataProxy.cs | 16 - .../MockSharedDisallowMultiple.cs | 10 + .../MockSharedDisallowMultiple.cs.meta | 11 + .../MockSharedDisallowMultipleProxy.cs | 17 - .../MockSharedDisallowMultipleProxy.cs.meta | 11 - .../TestComponentAuthoring.cs | 1 - ...stComponentAuthoringIsBuildingForEditor.cs | 21 + ...ponentAuthoringIsBuildingForEditor.cs.meta | 11 + .../TestComponentWithBlobAssetAuthoring.cs | 26 + ...estComponentWithBlobAssetAuthoring.cs.meta | 3 + .../ArchetypeChunkArrayTests.cs | 271 +- Unity.Entities.Tests/ArchetypeTests.cs | 89 + Unity.Entities.Tests/ArchetypeTests.cs.meta | 11 + Unity.Entities.Tests/BlobificationTests.cs | 90 +- .../BufferElementDataTests.cs | 12 + Unity.Entities.Tests/ChangeVersionTests.cs | 6 +- .../ComponentSystemGroupTests.cs | 153 +- Unity.Entities.Tests/ComponentSystemTests.cs | 70 - Unity.Entities.Tests/CreateAndDestroyTests.cs | 184 +- .../Diff/CopyAndReplaceTests.cs | 13 + .../Diff/CopyEntitiesFromTests.cs | 2 +- .../Diff/EntityDifferTests.cs | 139 +- Unity.Entities.Tests/Diff/EntityGuidTests.cs | 8 +- .../Diff/EntityPatcherTests.cs | 102 +- Unity.Entities.Tests/Diff/Fuzzer.meta | 3 + .../Diff/Fuzzer/DifferPatcherFuzzer.cs | 384 +++ .../Diff/Fuzzer/DifferPatcherFuzzer.cs.meta | 3 + .../Fuzzer/EntityDifferPatcherFuzzTests.cs | 95 + .../EntityDifferPatcherFuzzTests.cs.meta | 3 + Unity.Entities.Tests/Diff/Fuzzer/Fuzzer.cs | 284 ++ .../Diff/Fuzzer/Fuzzer.cs.meta | 3 + .../DotsRuntimeTestAttributes.cs | 5 +- Unity.Entities.Tests/DynamicBufferTests.cs | 6 +- Unity.Entities.Tests/ECSTestsFixture.cs | 4 +- .../EntitiesAssert/EntitiesAssertTests.cs | 2 +- .../EntityCommandBufferTests.cs | 443 ++- ...ityManagerComponentGroupOperationsTests.cs | 8 - Unity.Entities.Tests/EntityManagerTests.cs | 219 +- .../EntityManagerUnmanagedTests.cs | 36 +- .../EntityQuerySyncChangeFilterTypesTests.cs | 1 - Unity.Entities.Tests/EntityQueryTests.cs | 1053 ++++++- .../EntityRemapUtilityTests.cs | 12 +- Unity.Entities.Tests/FastEqualityTests.cs | 133 +- .../ForEachBufferAccessTests.cs | 33 +- ...ForEachTests.cs => ForEachCodegenTests.cs} | 195 +- .../ForEachCodegenTests.cs.meta | 3 + .../ForEachComponentAccessTests.cs | 33 +- .../ForEachCodegen/ForEachTests.cs.meta | 11 - .../ForEachWithDeallocateOnJobCompletion.cs | 163 - ...rEachWithDeallocateOnJobCompletion.cs.meta | 3 - .../ForEachWithDisposeOnJobCompletion.cs | 4 +- .../ForEachWithFilterEntityArrayTests.cs | 179 ++ .../ForEachWithFilterEntityArrayTests.cs.meta | 3 + .../ForEachWithStructuralChangesTests.cs | 71 +- .../ForEachCodegen/SimpleJobTests.cs | 4 +- .../GenericJobScanningRepros.cs | 522 ++++ .../GenericJobScanningRepros.cs.meta | 11 + Unity.Entities.Tests/IJobEntityBatchTests.cs | 561 +++- Unity.Entities.Tests/IJobForEachTests.cs | 2 +- .../JobComponentSystemDependencyTests.cs | 2 +- Unity.Entities.Tests/JobSafetyTests.cs | 6 +- .../ManagedObjectUtilityTests.cs | 18 + Unity.Entities.Tests/SafetyTests.cs | 13 - .../Serialization/SerializeTests.cs | 2 +- .../Serialization/WorldTest.yaml | 127 +- Unity.Entities.Tests/SingletonTests.cs | 40 + Unity.Entities.Tests/SizeTests.cs | 12 - .../SystemBaseDependencyTests.cs | 67 +- .../SystemBaseSingletonAccessTests.cs | 25 +- Unity.Entities.Tests/TestComponents.cs | 34 +- Unity.Entities.Tests/TypeManagerTests.cs | 186 +- .../Unity.Entities.Tests.asmdef | 8 +- Unity.Entities.Tests/WorldTests.cs | 16 +- Unity.Entities/AssemblyInfo.cs | 3 + Unity.Entities/BlobBuilder.cs | 2 +- Unity.Entities/Blobs.cs | 111 +- Unity.Entities/BlockAllocator.cs | 2 +- Unity.Entities/ChunkDataUtility.cs | 54 +- .../LambdaJobDescription.cs | 147 +- .../LambdaJobQueryConstructionMethods.gen.cs | 10 + .../LambdaJobQueryConstructionMethods.tt | 4 + .../OnUpdateExecutionMethods.cs | 21 + .../OnUpdateExecutionMethods.cs.meta | 3 + Unity.Entities/ComponentDependencyManager.cs | 23 +- Unity.Entities/ComponentSafetyHandles.cs | 26 +- Unity.Entities/ComponentSystem.cs | 15 +- Unity.Entities/ComponentSystemBase.cs | 106 +- .../ComponentSystemBase.deprecated.cs | 52 - .../ComponentSystemBase.deprecated.cs.meta | 11 - Unity.Entities/ComponentSystemGroup.cs | 83 +- .../DOTSCompilerPatchedMethodAttribute.cs | 14 + ...DOTSCompilerPatchedMethodAttribute.cs.meta | 3 + Unity.Entities/DebugView.cs | 2 +- Unity.Entities/DefaultWorld.cs | 2 +- Unity.Entities/DefaultWorldInitialization.cs | 7 +- Unity.Entities/Diff/EntityChangeSet.cs | 178 +- Unity.Entities/Diff/EntityDiffer.cs | 137 +- Unity.Entities/Diff/EntityDifferBlobs.cs | 18 +- .../EntityDifferClearMissingReferences.cs | 8 - .../Diff/EntityDifferComponentChanges.cs | 114 +- .../Diff/EntityDifferCopyAndReplace.cs | 271 +- Unity.Entities/Diff/EntityManagerDiffer.cs | 2 +- Unity.Entities/Diff/EntityPatcher.cs | 91 +- Unity.Entities/Diff/EntityPatcherBlobs.cs | 36 +- Unity.Entities/ECBInterop.cs | 2 +- Unity.Entities/ECBInterop.interop.gen.cs | 8 +- Unity.Entities/EditorRenderData.cs | 4 - Unity.Entities/EntityCommandBuffer.cs | 642 +++- .../EntityCommandBuffer.interop.gen.cs | 8 +- Unity.Entities/EntityCommandBufferSystem.cs | 4 +- Unity.Entities/EntityComponentStore.cs | 282 +- .../EntityComponentStore.interop.gen.cs | 32 +- .../EntityComponentStoreChangeArchetype.cs | 50 + Unity.Entities/EntityComponentStoreChunk.cs | 2 + ...tityComponentStoreCreateDestroyEntities.cs | 35 +- Unity.Entities/EntityComponentStoreDebug.cs | 62 +- Unity.Entities/EntityDataAccess.cs | 326 +- Unity.Entities/EntityManager.Deprecated.cs | 74 - .../EntityManager.Deprecated.cs.meta | 3 - Unity.Entities/EntityManager.cs | 21 +- .../EntityManagerAccessComponentData.cs | 23 +- .../EntityManagerChangeArchetype.cs | 83 +- ...ntityManagerChangeArchetype.interop.gen.cs | 211 +- .../EntityManagerCopyEntitiesFrom.cs | 2 +- .../EntityManagerCreateDestroyEntities.cs | 53 +- Unity.Entities/EntityManagerDebug.cs | 149 +- ...EntityManagerExclusiveEntityTransaction.cs | 15 +- Unity.Entities/EntityManagerLocks.cs | 24 - Unity.Entities/EntityManagerLocks.cs.meta | 11 - Unity.Entities/EntityManagerMoveEntities.cs | 10 +- Unity.Entities/EntityManagerQuery.cs | 24 +- Unity.Entities/EntityManagerTypes.cs | 42 +- .../EntityManagerTypes.deprecated.cs | 68 - .../EntityManagerTypes.deprecated.cs.meta | 11 - Unity.Entities/EntityManagerVersions.cs | 3 +- Unity.Entities/EntityRemapUtility.cs | 142 +- Unity.Entities/IJobChunk.cs | 24 +- Unity.Entities/IJobEntity.cs | 13 + Unity.Entities/IJobEntity.cs.meta | 3 + Unity.Entities/IJobEntityBatch.cs | 914 ++---- Unity.Entities/IJobEntityBatchWithIndex.cs | 816 +++++ .../IJobEntityBatchWithIndex.cs.meta | 13 + Unity.Entities/IJobForEach.gen.cs | 648 +++- Unity.Entities/IJobForEach.tt | 14 +- Unity.Entities/ISystemBase.cs | 9 +- .../Iterators/ArchetypeChunkArray.cs | 453 ++- .../ArchetypeChunkArray.deprecated.cs | 256 -- .../ArchetypeChunkArray.deprecated.cs.meta | 11 - Unity.Entities/Iterators/BufferFromEntity.cs | 11 - .../Iterators/ChunkDataGatherJobs.cs | 32 +- .../Iterators/ChunkIterationUtility.cs | 433 ++- .../ChunkIterationUtility.interop.gen.cs | 234 +- .../Iterators/ComponentDataFromEntity.cs | 20 - Unity.Entities/Iterators/DynamicBuffer.cs | 3 +- Unity.Entities/Iterators/EntityQuery.cs | 248 +- .../Iterators/EntityQueryManager.cs | 45 +- Unity.Entities/JobComponentSystem.cs | 21 +- Unity.Entities/ManagedComponentStore.cs | 71 +- .../Properties/ManagedObjectRemap.cs | 2 +- .../Serialization/SerializeUtility.cs | 133 +- .../Serialization/SerializeUtilityToYaml.cs | 126 +- Unity.Entities/SortingUtilities.cs | 206 +- Unity.Entities/SourceGenerators.meta | 8 + .../AuthoringComponentSourceGenerator.dll | Bin 0 -> 25088 bytes ...AuthoringComponentSourceGenerator.dll.meta | 72 + .../AuthoringComponentSourceGenerator.pdb | Bin 0 -> 5104 bytes ...AuthoringComponentSourceGenerator.pdb.meta | 7 + Unity.Entities/SourceGenerators/Common.dll | Bin 0 -> 23040 bytes .../SourceGenerators/Common.dll.meta | 72 + Unity.Entities/SourceGenerators/Common.pdb | Bin 0 -> 6752 bytes .../SourceGenerators/Common.pdb.meta | 7 + .../JobEntitySourceGenerator.dll | Bin 0 -> 31232 bytes .../JobEntitySourceGenerator.dll.meta | 70 + .../JobEntitySourceGenerator.pdb | Bin 0 -> 7316 bytes .../JobEntitySourceGenerator.pdb.meta | 7 + .../LambdaJobsSourceGenerator.dll | Bin 0 -> 100352 bytes .../LambdaJobsSourceGenerator.dll.meta | 70 + .../LambdaJobsSourceGenerator.pdb | Bin 0 -> 27280 bytes .../LambdaJobsSourceGenerator.pdb.meta | 7 + .../AuthoringComponent/AuthoringComponent.cs | 87 + .../AuthoringComponentFactory.cs | 233 ++ .../AuthoringComponentGenerator.cs | 138 + .../AuthoringComponentReceiver.cs | 28 + .../Source~/AuthoringComponent/Enums.cs | 17 + .../SourceGenerators/Source~/Build.bee.cs | 55 + .../Source~/Common/EnumerableHelpers.cs | 17 + .../Common/ISourceGenerationDescription.cs | 9 + .../Source~/Common/SourceGenHelpers.cs | 114 + .../Source~/Common/SymbolExtensions.cs | 127 + .../Source~/Common/SyntaxExtensions.cs | 279 ++ .../Microsoft.CodeAnalysis.CSharp.dll | Bin 0 -> 5985664 bytes .../Microsoft.CodeAnalysis.CSharp.pdb | Bin 0 -> 2206548 bytes .../Infrastructure/Microsoft.CodeAnalysis.dll | Bin 0 -> 2793336 bytes .../Infrastructure/Microsoft.CodeAnalysis.pdb | Bin 0 -> 835720 bytes .../System.Collections.Immutable.dll | Bin 0 -> 189320 bytes .../JobEntity/JobEntityBatchGenerator.cs | 57 + .../Source~/JobEntity/JobEntityDescription.cs | 84 + .../JobEntity/JobEntityFieldDescription.cs | 22 + .../Source~/JobEntity/JobEntityReceiver.cs | 50 + .../JobEntity/JobEntitySourceGenerator.cs | 206 ++ .../JobEntity/SystemBaseDescription.cs | 112 + .../UpdatedSystemBaseTypeGenerator.cs | 108 + .../LambdaJobs/EntitiesSourceFactory.cs | 802 +++++ .../Source~/LambdaJobs/LambdaBodyRewriter.cs | 157 + .../LambdaJobs/LambdaBodySyntaxReplacer.cs | 335 ++ .../LambdaCapturedVariableDescription.cs | 125 + .../LambdaJobs/LambdaJobDescription.cs | 434 +++ .../Source~/LambdaJobs/LambdaJobsGenerator.cs | 323 ++ .../LambdaJobs/LambdaParamDescriptions.cs | 213 ++ .../Source~/LambdaJobs/PatchableMethods.cs | 99 + .../Source~/LambdaJobs/SyntaxNodeReplacer.cs | 38 + .../SourceGenerators/Source~/bee.exe | Bin 0 -> 1411072 bytes Unity.Entities/SourceGenerators/Version.cs | 7 + .../SourceGenerators/Version.cs.meta | 11 + Unity.Entities/Static.cs | 4 +- Unity.Entities/SystemBase.cs | 45 +- Unity.Entities/SystemBaseRegistry.cs | 2 +- Unity.Entities/SystemState.cs | 276 +- Unity.Entities/Types/Archetype.cs | 35 +- Unity.Entities/Types/BufferHeader.cs | 24 +- ...eComponents.cs => BurstCompatibleTypes.cs} | 16 + ...s.cs.meta => BurstCompatibleTypes.cs.meta} | 0 Unity.Entities/Types/Chunk.cs | 7 +- Unity.Entities/Types/ComponentType.cs | 2 +- Unity.Entities/Types/ComponentTypes.cs | 20 +- Unity.Entities/Types/EarlyInitHelpers.cs | 51 - Unity.Entities/Types/EarlyInitHelpers.cs.meta | 11 - Unity.Entities/Types/EntityArchetype.cs | 68 + Unity.Entities/Types/FastEquality.cs | 267 +- .../Types/FastEquality.interop.gen.cs | 97 + .../Types/FastEquality.interop.gen.cs.meta | 11 + Unity.Entities/Types/SceneTagComponent.cs | 4 +- Unity.Entities/Types/TypeHash.cs | 17 +- Unity.Entities/Types/TypeManager.cs | 386 +-- Unity.Entities/Types/TypeManagerSystems.cs | 48 +- Unity.Entities/Unity.Entities.asmdef | 7 +- Unity.Entities/UnsafeList.tt | 2 +- Unity.Entities/World.Deprecated.cs | 62 - Unity.Entities/World.Deprecated.cs.meta | 11 - Unity.Entities/World.cs | 725 +---- Unity.Entities/WorldUnmanaged.cs | 609 ++++ Unity.Entities/WorldUnmanaged.cs.meta | 3 + Unity.Entities/WorldUnmanagedImpl.Memory.cs | 201 ++ .../WorldUnmanagedImpl.Memory.cs.meta | 3 + .../EntitySceneImporterDeterminismChecker.cs | 42 + ...itySceneImporterDeterminismChecker.cs.meta | 3 + .../IgnoreBefore20202Attribute.cs | 25 + .../IgnoreBefore20202Attribute.cs.meta | 3 + .../IncrementalConversionChangesTests.cs | 315 ++ .../IncrementalConversionChangesTests.cs.meta | 3 + .../LiveLinkEditorConnectionTests.cs | 10 +- .../LiveLinkEditorTests.cs | 2738 +++++++++++++++-- .../SerializeUtilityDeterminism.cs | 93 + .../SerializeUtilityDeterminism.cs.meta | 3 + .../SubSceneConversionTests.cs | 57 +- .../SubSceneTestsHelper.cs | 2 +- Unity.Scenes.Editor.Tests/TestData.cs | 13 + Unity.Scenes.Editor.Tests/TestData.cs.meta | 3 + .../TestWithLiveConversion.cs | 37 + .../TestWithLiveConversion.cs.meta | 3 + .../TestWithSubScenes.cs | 2 + .../TestWithTempAssets.cs | 2 +- .../Unity.Scenes.Editor.Tests.asmdef | 7 +- Unity.Scenes.Editor/EditorEntityScenes.cs | 148 +- .../EditorSceneLiveLinkToPlayerSendSystem.cs | 2 +- .../EditorSubSceneLiveLinkSystem.cs | 21 +- .../EntitySectionBundlesBuildCustomizer.cs | 51 + ...ntitySectionBundlesBuildCustomizer.cs.meta | 3 + .../GameObjectSceneMetaDataImporter.cs | 121 + ...> GameObjectSceneMetaDataImporter.cs.meta} | 0 .../LiveLinkAssetBundleBuildSystem.cs | 6 +- .../LiveLink/LiveLinkBuildImporter.cs | 14 +- .../LiveLink/LiveLinkBuildPipeline.cs | 32 +- Unity.Scenes.Editor/LiveLinkConnection.cs | 340 +- Unity.Scenes.Editor/LiveLinkDiffGenerator.cs | 366 ++- .../ResourceCatalogBuildCode.cs | 2 +- Unity.Scenes.Editor/SceneMetaDataImporter.cs | 69 - Unity.Scenes.Editor/SubSceneBuildCode.cs | 135 +- Unity.Scenes.Editor/SubSceneContextMenu.cs | 60 +- .../SubSceneConversionSystem.cs | 2 +- Unity.Scenes.Editor/SubSceneFilesProvider.cs | 47 +- Unity.Scenes.Editor/SubSceneImporter.cs | 47 +- Unity.Scenes.Editor/SubSceneInspector.cs | 30 +- .../SubSceneInspectorUtility.cs | 44 +- .../SubSceneTransformHierarchyHook.cs | 3 + Unity.Scenes.Editor/TypeDependencyCache.cs | 2 +- .../Editmode/GameObjectSceneTests.cs | 163 + .../Editmode/GameObjectSceneTests.cs.meta | 11 + .../Editmode/SectionMetadataTests.cs | 2 +- .../Editmode/SubSceneTestFixture.cs | 6 +- .../Editmode/SubSceneTests.cs | 2 +- .../Editmode/Unity.Scenes.Hybrid.Tests.asmdef | 6 +- .../Playmode/AuthoringWithUnmanaged.cs | 23 + .../Playmode/AuthoringWithUnmanaged.cs.meta | 11 + .../Playmode/GameObjectSceneTests.cs | 368 +++ .../Playmode/GameObjectSceneTests.cs.meta | 11 + .../TestSceneWithSubSceneAutoLoadFalse.unity | 353 +++ ...tSceneWithSubSceneAutoLoadFalse.unity.meta | 7 + Unity.Scenes/AssemblyInfo.cs | 2 + Unity.Scenes/AssetBundleManager.cs | 36 +- Unity.Scenes/AssetDatabaseCompatibility.cs | 127 +- Unity.Scenes/AssetDependencyTracker.cs | 9 + Unity.Scenes/AsyncLoadSceneOperation.cs | 8 +- Unity.Scenes/EntityChangeSetSerialization.cs | 3 +- Unity.Scenes/EntitySceneOptimization.cs | 8 - Unity.Scenes/EntityScenesPaths.cs | 4 +- Unity.Scenes/GameObjectSceneComponents.cs | 51 + .../GameObjectSceneComponents.cs.meta | 11 + Unity.Scenes/GameObjectSceneManager.cs | 159 + Unity.Scenes/GameObjectSceneManager.cs.meta | 11 + Unity.Scenes/GameObjectSceneSystem.cs | 219 ++ Unity.Scenes/GameObjectSceneSystem.cs.meta | 11 + Unity.Scenes/GameObjectSceneUtility.cs | 274 ++ Unity.Scenes/GameObjectSceneUtility.cs.meta | 11 + Unity.Scenes/Hybrid/FileUtilityHybrid.cs | 3 +- .../LiveLinkPlayerAssetRefreshSystem.cs | 3 +- Unity.Scenes/LiveLink/LiveLinkPlayerSystem.cs | 6 +- .../LiveLinkResolveSceneReferenceSystem.cs | 3 - Unity.Scenes/LiveLinkPatcher.cs | 1 + Unity.Scenes/ResolveSceneReferenceSystem.cs | 9 +- Unity.Scenes/ResolveSceneSectionUtility.cs | 11 +- Unity.Scenes/ResourceCatalogData.cs | 36 +- Unity.Scenes/SceneSectionStreamingSystem.cs | 7 +- Unity.Scenes/SceneSystem.cs | 171 +- .../SceneWithBuildConfigurationGUIDs.cs | 78 +- Unity.Scenes/SubScene.cs | 11 +- .../TransformComponentEditors.cs | 52 - .../TransformComponentEditors.cs.meta | 11 - .../Unity.Transforms.Editor.asmdef | 17 - Unity.Transforms.Hybrid.Tests.meta | 8 + .../TransformIncrementalConversionTest.cs | 75 + ...TransformIncrementalConversionTest.cs.meta | 11 + .../Unity.Entities.Hybrid.Tests.asmdef | 33 + .../Unity.Entities.Hybrid.Tests.asmdef.meta | 2 +- Unity.Transforms.Hybrid/AssemblyInfo.cs | 2 + .../CopyInitialTransformFromGameObject.cs | 11 + ...opyInitialTransformFromGameObject.cs.meta} | 0 ...CopyInitialTransformFromGameObjectProxy.cs | 15 - .../CopyTransformFromGameObjectProxy.cs | 15 - .../CopyTransformFromGameObjectcs.cs | 11 + ... => CopyTransformFromGameObjectcs.cs.meta} | 0 .../CopyTransformFromPrimaryEntityTag.cs | 20 + .../CopyTransformFromPrimaryEntityTag.cs.meta | 3 + .../CopyTransformToGameObject.cs | 10 + ...meta => CopyTransformToGameObject.cs.meta} | 0 .../CopyTransformToGameObjectProxy.cs | 14 - Unity.Transforms.Hybrid/LocalToWorldProxy.cs | 12 - .../LocalToWorldProxy.cs.meta | 11 - .../NonUniformScaleProxy.cs | 12 - .../NonUniformScaleProxy.cs.meta | 11 - Unity.Transforms.Hybrid/RotationProxy.cs | 17 - Unity.Transforms.Hybrid/RotationProxy.cs.meta | 11 - .../TransformConversion.cs | 8 +- .../TransformIncrementalConversionSystem.cs | 165 + ...ansformIncrementalConversionSystem.cs.meta | 3 + Unity.Transforms.Hybrid/TranslationProxy.cs | 12 - .../TranslationProxy.cs.meta | 11 - .../ChangeHierarchyTests.cs | 60 - .../ChangeHierarchyTests.cs.meta | 11 - .../TransformPerformanceTests.cs | 219 ++ .../TransformPerformanceTests.cs.meta | 11 + Unity.Transforms.Tests/TransformTests.cs | 70 +- Unity.Transforms/CompositeRotation.cs | 94 +- Unity.Transforms/CompositeScale.cs | 70 +- Unity.Transforms/Frozen.cs | 1 + Unity.Transforms/LocalToParentSystem.cs | 24 +- Unity.Transforms/ParentScaleInverse.cs | 46 +- Unity.Transforms/ParentSystem.cs | 56 +- Unity.Transforms/PostRotationEuler.cs | 70 +- Unity.Transforms/RotationEuler.cs | 70 +- Unity.Transforms/TRSToLocalToParentSystem.cs | 58 +- Unity.Transforms/TRSToLocalToWorldSystem.cs | 52 +- Unity.Transforms/WorldToLocal.cs | 18 +- ValidationConfig.json | 20 + ValidationConfig.json.meta | 7 + package.json | 16 +- 596 files changed, 32270 insertions(+), 9665 deletions(-) create mode 100644 DocCodeSamples.Tests/BlobAssetExamples.cs rename Unity.Entities.Editor/Editors/DynamicBufferProxyBaseEditor.cs.meta => DocCodeSamples.Tests/BlobAssetExamples.cs.meta (83%) delete mode 100644 Documentation~/TableOfContents.md create mode 100644 Documentation~/api_index.md create mode 100644 Documentation~/conversion_livelink.md create mode 100644 Documentation~/ecs_generic_jobs.md create mode 100644 Documentation~/ecs_ijobentitybatch.md create mode 100644 Documentation~/hybrid_component.md create mode 100644 Documentation~/images/livelink_menu.png create mode 100644 Documentation~/install_setup.md create mode 100644 Documentation~/projectMetadata.json create mode 100644 Documentation~/toc.md create mode 100644 Unity.Entities.CodeGen.Tests/AssemblyInfo.cs create mode 100644 Unity.Entities.CodeGen.Tests/AssemblyInfo.cs.meta rename Unity.Transforms.Editor.meta => Unity.Entities.CodeGen.Tests/IJobEntity.meta (77%) create mode 100644 Unity.Entities.CodeGen.Tests/IJobEntity/SourceGenerationTests.meta create mode 100644 Unity.Entities.CodeGen/Cloner.meta create mode 100644 Unity.Entities.CodeGen/Cloner/Cloner.cs create mode 100644 Unity.Entities.CodeGen/Cloner/Cloner.cs.meta delete mode 100644 Unity.Entities.Editor/Editors/ComponentDataProxyBaseEditor.cs delete mode 100644 Unity.Entities.Editor/Editors/DynamicBufferProxyBaseEditor.cs delete mode 100644 Unity.Entities.Editor/LiveLink/LiveLinkCommands.cs create mode 100644 Unity.Entities.Editor/LiveLink/LiveLinkMenu.cs rename Unity.Entities.Editor/LiveLink/{LiveLinkCommands.cs.meta => LiveLinkMenu.cs.meta} (100%) delete mode 100644 Unity.Entities.Editor/PropertyDrawers/WrappedComponentDataDrawer.cs create mode 100644 Unity.Entities.Hybrid.PerformanceTests/IncrementalConversionPerformanceTests.cs create mode 100644 Unity.Entities.Hybrid.PerformanceTests/IncrementalConversionPerformanceTests.cs.meta delete mode 100644 Unity.Entities.Hybrid.Tests/ComponentDataProxy_EntityManager_IntegrationTests.cs delete mode 100644 Unity.Entities.Hybrid.Tests/ComponentDataProxy_UnitTests.cs delete mode 100644 Unity.Entities.Hybrid.Tests/ComponentDataProxy_UnitTests.cs.meta delete mode 100644 Unity.Entities.Hybrid.Tests/ComponentGroupTransformAccessArrayTests.cs delete mode 100644 Unity.Entities.Hybrid.Tests/ComponentGroupTransformAccessArrayTests.cs.meta create mode 100644 Unity.Entities.Hybrid.Tests/Conversion/AuthoringObjectForEntityTests.cs create mode 100644 Unity.Entities.Hybrid.Tests/Conversion/AuthoringObjectForEntityTests.cs.meta create mode 100644 Unity.Entities.Hybrid.Tests/Conversion/Incremental.meta create mode 100644 Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalHierarchyTests.cs create mode 100644 Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalHierarchyTests.cs.meta create mode 100644 Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalSceneConversionTests.cs create mode 100644 Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalSceneConversionTests.cs.meta create mode 100644 Unity.Entities.Hybrid.Tests/Conversion/Incremental/TestWithObjects.cs create mode 100644 Unity.Entities.Hybrid.Tests/Conversion/Incremental/TestWithObjects.cs.meta create mode 100644 Unity.Entities.Hybrid.Tests/Conversion/Prefab_Hierarchy_With_StaticOptimizeEntity.prefab delete mode 100644 Unity.Entities.Hybrid.Tests/TypeUtility_UnitTests.cs delete mode 100644 Unity.Entities.Hybrid.Tests/TypeUtility_UnitTests.cs.meta delete mode 100644 Unity.Entities.Hybrid/Components/ComponentDataProxy.cs delete mode 100644 Unity.Entities.Hybrid/Components/ComponentDataProxy.cs.meta delete mode 100644 Unity.Entities.Hybrid/Components/ComponentDataProxyBase.cs delete mode 100644 Unity.Entities.Hybrid/Components/ComponentDataProxyBase.cs.meta delete mode 100644 Unity.Entities.Hybrid/Components/DynamicBufferProxy.cs delete mode 100644 Unity.Entities.Hybrid/Components/DynamicBufferProxy.cs.meta delete mode 100644 Unity.Entities.Hybrid/Components/SharedComponentDataProxy.cs delete mode 100644 Unity.Entities.Hybrid/Components/SharedComponentDataProxy.cs.meta create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/ConversionLogUtils.cs rename Unity.Entities.Editor/PropertyDrawers/WrappedComponentDataDrawer.cs.meta => Unity.Entities.Hybrid/GameObjectConversion/ConversionLogUtils.cs.meta (83%) create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental.meta create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/DependencyTracker.cs create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/DependencyTracker.cs.meta create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalChangesSystem.cs create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalChangesSystem.cs.meta create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionContext.cs create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionContext.cs.meta create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionData.cs create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionData.cs.meta create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionJobs.cs create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionJobs.cs.meta create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalHierarchy.cs create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalHierarchy.cs.meta create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/LiveConversionSettings.cs create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/LiveConversionSettings.cs.meta create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/SceneHierarchy.cs create mode 100644 Unity.Entities.Hybrid/GameObjectConversion/Incremental/SceneHierarchy.cs.meta delete mode 100644 Unity.Entities.Hybrid/SceneSectionProxy.cs delete mode 100644 Unity.Entities.Hybrid/SceneSectionProxy.cs.meta delete mode 100644 Unity.Entities.Hybrid/TypeUtility.cs delete mode 100644 Unity.Entities.Hybrid/TypeUtility.cs.meta create mode 100644 Unity.Entities.PerformanceTests/TypeManagerPerformanceTests.cs rename Unity.Entities.Editor/Editors/ComponentDataProxyBaseEditor.cs.meta => Unity.Entities.PerformanceTests/TypeManagerPerformanceTests.cs.meta (83%) create mode 100644 Unity.Entities.TestComponents/DependsOnComponentTestAuthoring.cs create mode 100644 Unity.Entities.TestComponents/DependsOnComponentTestAuthoring.cs.meta create mode 100644 Unity.Entities.TestComponents/DependsOnComponentTransitiveTestAuthoring.cs create mode 100644 Unity.Entities.TestComponents/DependsOnComponentTransitiveTestAuthoring.cs.meta create mode 100644 Unity.Entities.TestComponents/DependsOnTransformTestAuthoring.cs create mode 100644 Unity.Entities.TestComponents/DependsOnTransformTestAuthoring.cs.meta create mode 100644 Unity.Entities.TestComponents/HybridComponentTestAuthoring.cs create mode 100644 Unity.Entities.TestComponents/HybridComponentTestAuthoring.cs.meta create mode 100644 Unity.Entities.TestComponents/IntTestData.cs rename Unity.Entities.Hybrid.Tests/ComponentDataProxy_EntityManager_IntegrationTests.cs.meta => Unity.Entities.TestComponents/IntTestData.cs.meta (83%) create mode 100644 Unity.Entities.TestComponents/MockDataAuthoring.cs rename Unity.Entities.TestComponents/{MockDataProxy.cs.meta => MockDataAuthoring.cs.meta} (100%) delete mode 100644 Unity.Entities.TestComponents/MockDataProxy.cs create mode 100644 Unity.Entities.TestComponents/MockDynamicBufferDataAuthoring.cs rename Unity.Entities.TestComponents/{MockDynamicBufferDataProxy.cs.meta => MockDynamicBufferDataAuthoring.cs.meta} (100%) delete mode 100644 Unity.Entities.TestComponents/MockDynamicBufferDataProxy.cs create mode 100644 Unity.Entities.TestComponents/MockSharedDataAuthoring.cs rename Unity.Entities.TestComponents/{MockSharedDataProxy.cs.meta => MockSharedDataAuthoring.cs.meta} (100%) delete mode 100644 Unity.Entities.TestComponents/MockSharedDataProxy.cs create mode 100644 Unity.Entities.TestComponents/MockSharedDisallowMultiple.cs create mode 100644 Unity.Entities.TestComponents/MockSharedDisallowMultiple.cs.meta delete mode 100644 Unity.Entities.TestComponents/MockSharedDisallowMultipleProxy.cs delete mode 100644 Unity.Entities.TestComponents/MockSharedDisallowMultipleProxy.cs.meta create mode 100644 Unity.Entities.TestComponents/TestComponentAuthoringIsBuildingForEditor.cs create mode 100644 Unity.Entities.TestComponents/TestComponentAuthoringIsBuildingForEditor.cs.meta create mode 100644 Unity.Entities.TestComponents/TestComponentWithBlobAssetAuthoring.cs create mode 100644 Unity.Entities.TestComponents/TestComponentWithBlobAssetAuthoring.cs.meta create mode 100644 Unity.Entities.Tests/ArchetypeTests.cs create mode 100644 Unity.Entities.Tests/ArchetypeTests.cs.meta create mode 100644 Unity.Entities.Tests/Diff/Fuzzer.meta create mode 100644 Unity.Entities.Tests/Diff/Fuzzer/DifferPatcherFuzzer.cs create mode 100644 Unity.Entities.Tests/Diff/Fuzzer/DifferPatcherFuzzer.cs.meta create mode 100644 Unity.Entities.Tests/Diff/Fuzzer/EntityDifferPatcherFuzzTests.cs create mode 100644 Unity.Entities.Tests/Diff/Fuzzer/EntityDifferPatcherFuzzTests.cs.meta create mode 100644 Unity.Entities.Tests/Diff/Fuzzer/Fuzzer.cs create mode 100644 Unity.Entities.Tests/Diff/Fuzzer/Fuzzer.cs.meta rename Unity.Entities.Tests/ForEachCodegen/{ForEachTests.cs => ForEachCodegenTests.cs} (82%) create mode 100644 Unity.Entities.Tests/ForEachCodegen/ForEachCodegenTests.cs.meta delete mode 100644 Unity.Entities.Tests/ForEachCodegen/ForEachTests.cs.meta delete mode 100644 Unity.Entities.Tests/ForEachCodegen/ForEachWithDeallocateOnJobCompletion.cs delete mode 100644 Unity.Entities.Tests/ForEachCodegen/ForEachWithDeallocateOnJobCompletion.cs.meta create mode 100644 Unity.Entities.Tests/ForEachCodegen/ForEachWithFilterEntityArrayTests.cs create mode 100644 Unity.Entities.Tests/ForEachCodegen/ForEachWithFilterEntityArrayTests.cs.meta create mode 100644 Unity.Entities.Tests/GenericJobScanningRepros.cs create mode 100644 Unity.Entities.Tests/GenericJobScanningRepros.cs.meta create mode 100644 Unity.Entities/CodeGeneratedJobForEach/OnUpdateExecutionMethods.cs create mode 100644 Unity.Entities/CodeGeneratedJobForEach/OnUpdateExecutionMethods.cs.meta delete mode 100644 Unity.Entities/ComponentSystemBase.deprecated.cs delete mode 100644 Unity.Entities/ComponentSystemBase.deprecated.cs.meta create mode 100644 Unity.Entities/DOTSCompilerPatchedMethodAttribute.cs create mode 100644 Unity.Entities/DOTSCompilerPatchedMethodAttribute.cs.meta delete mode 100644 Unity.Entities/EntityManager.Deprecated.cs delete mode 100644 Unity.Entities/EntityManager.Deprecated.cs.meta delete mode 100644 Unity.Entities/EntityManagerLocks.cs delete mode 100644 Unity.Entities/EntityManagerLocks.cs.meta delete mode 100644 Unity.Entities/EntityManagerTypes.deprecated.cs delete mode 100644 Unity.Entities/EntityManagerTypes.deprecated.cs.meta create mode 100644 Unity.Entities/IJobEntity.cs create mode 100644 Unity.Entities/IJobEntity.cs.meta create mode 100644 Unity.Entities/IJobEntityBatchWithIndex.cs create mode 100644 Unity.Entities/IJobEntityBatchWithIndex.cs.meta delete mode 100644 Unity.Entities/Iterators/ArchetypeChunkArray.deprecated.cs delete mode 100644 Unity.Entities/Iterators/ArchetypeChunkArray.deprecated.cs.meta create mode 100644 Unity.Entities/SourceGenerators.meta create mode 100644 Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.dll create mode 100644 Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.dll.meta create mode 100644 Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.pdb create mode 100644 Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.pdb.meta create mode 100644 Unity.Entities/SourceGenerators/Common.dll create mode 100644 Unity.Entities/SourceGenerators/Common.dll.meta create mode 100644 Unity.Entities/SourceGenerators/Common.pdb create mode 100644 Unity.Entities/SourceGenerators/Common.pdb.meta create mode 100644 Unity.Entities/SourceGenerators/JobEntitySourceGenerator.dll create mode 100644 Unity.Entities/SourceGenerators/JobEntitySourceGenerator.dll.meta create mode 100644 Unity.Entities/SourceGenerators/JobEntitySourceGenerator.pdb create mode 100644 Unity.Entities/SourceGenerators/JobEntitySourceGenerator.pdb.meta create mode 100644 Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.dll create mode 100644 Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.dll.meta create mode 100644 Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.pdb create mode 100644 Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.pdb.meta create mode 100644 Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponent.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentFactory.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentGenerator.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentReceiver.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/AuthoringComponent/Enums.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/Build.bee.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/Common/EnumerableHelpers.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/Common/ISourceGenerationDescription.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/Common/SourceGenHelpers.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/Common/SymbolExtensions.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/Common/SyntaxExtensions.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/Infrastructure/Microsoft.CodeAnalysis.CSharp.dll create mode 100644 Unity.Entities/SourceGenerators/Source~/Infrastructure/Microsoft.CodeAnalysis.CSharp.pdb create mode 100644 Unity.Entities/SourceGenerators/Source~/Infrastructure/Microsoft.CodeAnalysis.dll create mode 100644 Unity.Entities/SourceGenerators/Source~/Infrastructure/Microsoft.CodeAnalysis.pdb create mode 100644 Unity.Entities/SourceGenerators/Source~/Infrastructure/System.Collections.Immutable.dll create mode 100644 Unity.Entities/SourceGenerators/Source~/JobEntity/JobEntityBatchGenerator.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/JobEntity/JobEntityDescription.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/JobEntity/JobEntityFieldDescription.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/JobEntity/JobEntityReceiver.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/JobEntity/JobEntitySourceGenerator.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/JobEntity/SystemBaseDescription.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/JobEntity/UpdatedSystemBaseTypeGenerator.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/LambdaJobs/EntitiesSourceFactory.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/LambdaJobs/LambdaBodyRewriter.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/LambdaJobs/LambdaBodySyntaxReplacer.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/LambdaJobs/LambdaCapturedVariableDescription.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/LambdaJobs/LambdaJobDescription.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/LambdaJobs/LambdaJobsGenerator.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/LambdaJobs/LambdaParamDescriptions.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/LambdaJobs/PatchableMethods.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/LambdaJobs/SyntaxNodeReplacer.cs create mode 100644 Unity.Entities/SourceGenerators/Source~/bee.exe create mode 100644 Unity.Entities/SourceGenerators/Version.cs create mode 100644 Unity.Entities/SourceGenerators/Version.cs.meta rename Unity.Entities/Types/{BurstCompatibleComponents.cs => BurstCompatibleTypes.cs} (64%) rename Unity.Entities/Types/{BurstCompatibleComponents.cs.meta => BurstCompatibleTypes.cs.meta} (100%) delete mode 100644 Unity.Entities/Types/EarlyInitHelpers.cs delete mode 100644 Unity.Entities/Types/EarlyInitHelpers.cs.meta create mode 100644 Unity.Entities/Types/FastEquality.interop.gen.cs create mode 100644 Unity.Entities/Types/FastEquality.interop.gen.cs.meta delete mode 100644 Unity.Entities/World.Deprecated.cs delete mode 100644 Unity.Entities/World.Deprecated.cs.meta create mode 100644 Unity.Entities/WorldUnmanaged.cs create mode 100644 Unity.Entities/WorldUnmanaged.cs.meta create mode 100644 Unity.Entities/WorldUnmanagedImpl.Memory.cs create mode 100644 Unity.Entities/WorldUnmanagedImpl.Memory.cs.meta create mode 100644 Unity.Scenes.Editor.Tests/EntitySceneImporterDeterminismChecker.cs create mode 100644 Unity.Scenes.Editor.Tests/EntitySceneImporterDeterminismChecker.cs.meta create mode 100644 Unity.Scenes.Editor.Tests/IgnoreBefore20202Attribute.cs create mode 100644 Unity.Scenes.Editor.Tests/IgnoreBefore20202Attribute.cs.meta create mode 100644 Unity.Scenes.Editor.Tests/IncrementalConversionChangesTests.cs create mode 100644 Unity.Scenes.Editor.Tests/IncrementalConversionChangesTests.cs.meta create mode 100644 Unity.Scenes.Editor.Tests/SerializeUtilityDeterminism.cs create mode 100644 Unity.Scenes.Editor.Tests/SerializeUtilityDeterminism.cs.meta create mode 100644 Unity.Scenes.Editor.Tests/TestData.cs create mode 100644 Unity.Scenes.Editor.Tests/TestData.cs.meta create mode 100644 Unity.Scenes.Editor.Tests/TestWithLiveConversion.cs create mode 100644 Unity.Scenes.Editor.Tests/TestWithLiveConversion.cs.meta create mode 100644 Unity.Scenes.Editor/EntitySectionBundlesBuildCustomizer.cs create mode 100644 Unity.Scenes.Editor/EntitySectionBundlesBuildCustomizer.cs.meta create mode 100644 Unity.Scenes.Editor/GameObjectSceneMetaDataImporter.cs rename Unity.Scenes.Editor/{SceneMetaDataImporter.cs.meta => GameObjectSceneMetaDataImporter.cs.meta} (100%) delete mode 100644 Unity.Scenes.Editor/SceneMetaDataImporter.cs create mode 100644 Unity.Scenes.Hybrid.Tests/Editmode/GameObjectSceneTests.cs create mode 100644 Unity.Scenes.Hybrid.Tests/Editmode/GameObjectSceneTests.cs.meta create mode 100644 Unity.Scenes.Hybrid.Tests/Playmode/AuthoringWithUnmanaged.cs create mode 100644 Unity.Scenes.Hybrid.Tests/Playmode/AuthoringWithUnmanaged.cs.meta create mode 100644 Unity.Scenes.Hybrid.Tests/Playmode/GameObjectSceneTests.cs create mode 100644 Unity.Scenes.Hybrid.Tests/Playmode/GameObjectSceneTests.cs.meta create mode 100644 Unity.Scenes.Hybrid.Tests/TestSceneWithSubSceneAutoLoadFalse.unity create mode 100644 Unity.Scenes.Hybrid.Tests/TestSceneWithSubSceneAutoLoadFalse.unity.meta create mode 100644 Unity.Scenes/GameObjectSceneComponents.cs create mode 100644 Unity.Scenes/GameObjectSceneComponents.cs.meta create mode 100644 Unity.Scenes/GameObjectSceneManager.cs create mode 100644 Unity.Scenes/GameObjectSceneManager.cs.meta create mode 100644 Unity.Scenes/GameObjectSceneSystem.cs create mode 100644 Unity.Scenes/GameObjectSceneSystem.cs.meta create mode 100644 Unity.Scenes/GameObjectSceneUtility.cs create mode 100644 Unity.Scenes/GameObjectSceneUtility.cs.meta delete mode 100644 Unity.Transforms.Editor/TransformComponentEditors.cs delete mode 100644 Unity.Transforms.Editor/TransformComponentEditors.cs.meta delete mode 100644 Unity.Transforms.Editor/Unity.Transforms.Editor.asmdef create mode 100644 Unity.Transforms.Hybrid.Tests.meta create mode 100644 Unity.Transforms.Hybrid.Tests/TransformIncrementalConversionTest.cs create mode 100644 Unity.Transforms.Hybrid.Tests/TransformIncrementalConversionTest.cs.meta create mode 100644 Unity.Transforms.Hybrid.Tests/Unity.Entities.Hybrid.Tests.asmdef rename Unity.Transforms.Editor/Unity.Transforms.Editor.asmdef.meta => Unity.Transforms.Hybrid.Tests/Unity.Entities.Hybrid.Tests.asmdef.meta (76%) create mode 100644 Unity.Transforms.Hybrid/CopyInitialTransformFromGameObject.cs rename Unity.Transforms.Hybrid/{CopyInitialTransformFromGameObjectProxy.cs.meta => CopyInitialTransformFromGameObject.cs.meta} (100%) delete mode 100644 Unity.Transforms.Hybrid/CopyInitialTransformFromGameObjectProxy.cs delete mode 100644 Unity.Transforms.Hybrid/CopyTransformFromGameObjectProxy.cs create mode 100644 Unity.Transforms.Hybrid/CopyTransformFromGameObjectcs.cs rename Unity.Transforms.Hybrid/{CopyTransformFromGameObjectProxy.cs.meta => CopyTransformFromGameObjectcs.cs.meta} (100%) create mode 100644 Unity.Transforms.Hybrid/CopyTransformFromPrimaryEntityTag.cs create mode 100644 Unity.Transforms.Hybrid/CopyTransformFromPrimaryEntityTag.cs.meta create mode 100644 Unity.Transforms.Hybrid/CopyTransformToGameObject.cs rename Unity.Transforms.Hybrid/{CopyTransformToGameObjectProxy.cs.meta => CopyTransformToGameObject.cs.meta} (100%) delete mode 100644 Unity.Transforms.Hybrid/CopyTransformToGameObjectProxy.cs delete mode 100644 Unity.Transforms.Hybrid/LocalToWorldProxy.cs delete mode 100644 Unity.Transforms.Hybrid/LocalToWorldProxy.cs.meta delete mode 100644 Unity.Transforms.Hybrid/NonUniformScaleProxy.cs delete mode 100644 Unity.Transforms.Hybrid/NonUniformScaleProxy.cs.meta delete mode 100644 Unity.Transforms.Hybrid/RotationProxy.cs delete mode 100644 Unity.Transforms.Hybrid/RotationProxy.cs.meta create mode 100644 Unity.Transforms.Hybrid/TransformIncrementalConversionSystem.cs create mode 100644 Unity.Transforms.Hybrid/TransformIncrementalConversionSystem.cs.meta delete mode 100644 Unity.Transforms.Hybrid/TranslationProxy.cs delete mode 100644 Unity.Transforms.Hybrid/TranslationProxy.cs.meta delete mode 100644 Unity.Transforms.PerformanceTests/ChangeHierarchyTests.cs delete mode 100644 Unity.Transforms.PerformanceTests/ChangeHierarchyTests.cs.meta create mode 100644 Unity.Transforms.PerformanceTests/TransformPerformanceTests.cs create mode 100644 Unity.Transforms.PerformanceTests/TransformPerformanceTests.cs.meta create mode 100644 ValidationConfig.json create mode 100644 ValidationConfig.json.meta diff --git a/CHANGELOG.md b/CHANGELOG.md index 9903be49..6c461f18 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,115 @@ # Change log +## [0.17.0] - 2020-11-13 + +### Added + +* ISystemBase interface for making struct based systems that allow Burst compiling main thread update +* New UnsafeBufferAccessor struct that permit to un-typed and unsafe access the dynamic buffers pointers. +* New ArchetypeChunk.GetUnsafeAccessor public API that allow to retrieve dynamic buffers unsafe accessors using DynamicTypeHandle. +* safety check in DynamicComponentDataArrayReinterpret that throw an ArgumentException if used to access the component data for IBufferDataElement type +* ComponentSystemBase.TryGetSingleton +* ComponentSystemBase.TryGetSingletonEntity +* Tests for Tiny.UI transformations. +* Added documentation for incremental conversion and dependencies +* New scheduling API for `IJobEntityBatch` which limits the resulting batches to an input `NativeArray` +* BlobAssetStore. AddUniqueBlobAsset. A much simpler approach to managing blob assets during conversion. BlobAssetComputationContext continues to be the recommended approach for scalable blob asset generation. +* UnsafeUntypedBlobAsset gives a non-generic untyped blob that can be created and later casted to a specific BlobAssetType. This can be used for storing multiple types of blob assets in the same container. +* GameObjectConversionSystem.IsBuildingForEditor returns true when building data that will be loaded by the editor (As opposed to building data that will be loaded by the standalone player). This can be used to strip out editor only debug data. +* GameObjectConversionSystem.BuildConfigGUID returns the GUID of the build config that is used by this conversion context +* Tiny.UI support for 9-Slice (including sprite sheet support) +* `DynamicSharedComponentHandle` and related methods for accessing shared components without compile time type information. +* The public static method `EntitySelectionProxy.CreateInstance` was added. It creates, configures, and returns a valid instance of `EntitySelectionProxy`. +* The public static method `EntitySelectionProxy.SelectEntity` was added. It creates, configures, and selects an instance of `EntitySelectionProxy`, without returning it. +* All the public properties and methods of `EntitySelectionProxy` have been documented. +* Tiny.UI support for text alignment +* Tiny.UI support for multi-line text +* TypeManager will now store whether or not an `ISharedComponentData` is managed or unmanaged. +* EntityScenesInBuild class that allows registering EntityScenes that are generated via a custom asset importer into the build. This is used by the Environment system to generate streamable tile data that is generated procedurally from tile inputs. +* New EntityCommandBuffer methods that affect a set of entities matching a query. Unlike existing methods, these new methods 'capture' the entities from the query at record time rather than playback time: the array of entities is stored in the command, and then playback of the command affects all entities of the array. The methods are `AddComponentForEntityQuery(EntityQuery, ComponentType)`, `AddComponentForEntityQuery(EntityQuery, ComponentTypes)`, `RemoveComponentForEntityQuery(EntityQuery, ComponentType)`, `RemoveComponentForEntityQuery(EntityQuery, ComponentTypes)`, `DestroyEntitiesForEntityQuery(EntityQuery)`. +* EntityManager.Debug.GetEntitiesForAuthoringObject and EntityManager.Debug.GetAuthoringObjectForEntity. They provide a convenient API to map game object authoring & entity runtime representation. +* New `ComponentSystemGroup.EnableSystemSorting` property allows individual system groups to opt out of automatic system sorting. **PLEASE NOTE:** Certain system update order constraints are necessary for correct DOTS functionality. Disabling the automatic system sorting should be only be a last resort, and only on system groups with full control over which systems they contain. +* Entities.WithFilter(NativeArray filteredEntities) allows for filtering with a set of specific entities in addition to the EntityQuery requirements +* Added Live Conversion debug logging to more easily see what is reconverted (enable from the menu `DOTS/LiveLink Mode/Incremental Conversion Logging`) + +### Changed + +* Update burst to 1.4.1. +* Improved the performance of ILPostProcessor type resolution. +* ProcessAfterLoadGroup is now public. This group runs after a subscene is loaded. +* `Unity.Transforms` systems now use `IJobEntityBatch` instead of `IJobChunk`. Expect modest performance gains due to the new job type's lower scheduling overhead, depending on the workload size. +* When `DOTS/Live Link Mode/Live Conversion in Edit Mode` is active in 2020.2 or later, conversion is now incremental +* Removed deprecated `Entities.ForEach.WithDeallocateOnJobCompletion`. Please use `Entities.ForEach.WithDisposeOnCompletion` instead. +* Fixed livelink patching for `BlobAssetReference` fields in managed components and shared components. +* Updated package `com.unity.platforms` to version `0.9.0-preview.15`. +* `TypeManager.Equals` and `TypeManager.GetHashCode` performance has been improved when operating on blittable component types. +* BlobAsset and entity patching for managed IComponentData & ISharedComponentData now use an early out if the class is known to not contain any blob assets or entity references +* Managed class IComponentData now supports patching of entity references in EntityCommandBuffer.AddComponent. +* Improved EntityManager.GetCreatedAndDestroyedEntities performance by introducing an internal entity creation / destruction version number that is used to early out when calling GetCreatedAndDestroyedEntities +* TypeManger.TypeInfo.Debug has been removed. TypeName has been moved directly into TypeInfo and renamed to DebugTypeName. +* Nested or variant prefabs used in a scene now correctly trigger reimports on subscenes when the parents parent prefab changes +* Update minimum editor version to 2020.1.2f1 +* `EntitySelectionProxy` was streamlined to ensure that its usage does not override inspector locking behaviour and respects the Undo / Redo stack. With the new workflow, there is a 1:1 relationship between an Entity and its EntitySelectionProxy. Static utility methods were added to support this new workflow. +* Rename `TypeManager.IsSharedComponent` to `IsSharedComponentType` and add `IsManagedType` +*Enabled generic systems to be instantiated in non-tiny dots runtime +* Updated platform packages to version `0.10.0-preview.1`. +* Made SystemBase/JobComponentSystem classes partial in preparation of use of Roslyn source generators for code-generation (more to come). + +### Deprecated + +* Forking of `GameObjectConversionSettings` is no longer supported +* The public delegate `EntitySelectionProxy.EntityControlSelectButtonHandler` has been deprecated. +* The public event `EntitySelectionProxy.EntityControlSelectButton` has been deprecated. +* The public method `EntitySelectionProxy.SetEntity` has been deprecated. +* The public method `EntitySelectionProxy.OnEntityControlSelectButton` has been deprecated. +* The public property `EntitySelectionProxy.EntityManager` has been deprecated. Use `EntitySelectionProxy.World.EntityManager` manager instead. This change was made to remove boilerplate checks in the code. +* Deprecated `Frozen` component as it is no longer in use + +### Removed + +* Removed deprecated proxy component types. CopyTransformToGameObject, CopyTransformFromGameObject and CopyInitialTransformFromGameObject now use [GenerateAuthoringComponent] instead. +* Removed expired `EntityManager.IsCreated` API +* Removed expired API to compare `EntityManager` to `null` (`EntityManager` is a struct now) +* Removed deprecated types and methods: `NativeArraySharedValue`, implicit `EntityQuery` conversion to `null`, `ComponentDataFromEntity.Exists` and `BufferFromEntity.Exists`, `ArchetypeChunkArray.GetComponentVersion`, `IJobEntityBatch.ScheduleSingle`, `IJobEntityBatch.ScheduleParallelBatch`, `EntityManager.LockChunk`, `EntityManager.UnlockChunk`, `World.AllWorlds`, `World.CreateSystem`, all `GetArchetypeChunkX` methods, `EntityCommandBuffer.ToConcurrent` and `EntityManager.CreateChunk` +* `ComponentSystemBase.ExecutingSystemType` has been removed. With the introduction of unmanaged systems, this information has been incorrect. Furthermore, there cannot be a `static` global property for this since multiple worlds might execute at the same time. If you need this information, consider passing it manually. + +### Fixed + +* Wrong query and check in ACS_DynamicComponentDataArrayReinterpret +* Fixed ICE (internal compiler error) thrown when storing into a field in reference type in bursted/scheduled lambda. +* `EntityQuery.ToEntityArray` will work when temp memory is passed in an a parameter for allocator +* `EntityQuery.ToComponentDataArrayAsync` and `EntityQuery.CopyFromComponentDataArrayAsync` will throw errors if user tries to use Temp memory containers. +* Hybrid Component Lights flickering when LiveLink edited. +* Fix crash when using singleton access methods with types with generic arguments. +* Code generation for indexers in structs with [BurstCompatible] attribute. +* Fixed potential `JobHandle` leak if an exception was thrown while scheduling an `IJobForEach`. +* Fixed that `DynamicBuffer.RemoveAtSwapBack` only copied the first byte of its element data +* Updating the shadow world via the EntityDiffer is now using Burst +* The 'New Sub Scene' menu item is no longer missing in the 'Create' drop down of the Hierarchy . +* Overwriting Sub Scene file when creating new Sub Scene no longer logs an error but instead overwrites the user selected file. +* Fixed livelink patching for `BlobAssetReference` fields in managed components and shared components. +* Fixed entities getting lost during LiveLink when moving GameObjects between multiple subscenes +* Deprecated call to UnityWebRequest.isNetworkError in Unity.Scenes.FileUtilityHybrid +* Generic jobs now get reflection data generated in more cases +* Generic jobs will always work to schedule in editor (but may require attributes in Burst scheduling cases) +* Selecting entities in the Entity Debugger window will now respect the locked state of the inspector. +* several bugs where writing EntityBinaryFiles was not resulting in deterministic files. It is now guranteed that if entities are constructed in the same order, it will result in the same binary exact file. +* Fixed a case where LiveLink would sometimes leave dangling entities when a scene is opened and closed repeatedly +* `TypeManager.InitializeAllComponentTypes` no longer uses `DateTime.Now`, which can be very slow in players +* Structural changes right after scheduling a job in a `SystemBase` no longer crash a player +* Sorting a `ComponentSystemGroup` now correctly sorts any child groups, even if the parent group is already sorted. +* The subscene inspector no longer allows you to unload section 0 if another section is still loaded, and it also disallows loading any section before section 0 is loaded +* `EntityManager.CopyAndReplaceEntitiesFrom` no longer fails when the Entity capacity of the destination is larger than the capacity of the source +* Hybrid components on disabled GameObjects are now also converted +* Children of a nested Parent not updating LocalToWorld if Parent's LocalToWorld was changed by a custom system with an archetype containing a WriteGroup for LocalToWorld +* `EntityQuery` APIs which take an input `NativeArray` for filtering (such as `ToEntityArray()`) can now be called with ReadOnly `NativeArray` without throwing an exception. + +### Upgrade guide + +* managed class IComponentData now supports patching of entity references in EntityCommandBuffer.AddComponent. This can result in a significant performance regression if there might be an entity on the managed component when playing the command buffer. If a managed component has a reference to another class that is not sealed it is unprovable that there may or may not be entity references on it. Thus we have to walk the whole class data to apply it. If there is in fact no entity reference on a class referenced from a managed component, then it is recommended to mark the referenced class as sealed, so that the type manager can prove that there is no entity references present on the managed component and thus completely skip all relatively slow entity patching code. + + + ## [0.16.0] - 2020-09-24 ### Added @@ -20,7 +130,6 @@ * Improved performance of `EntityQuery.ToEntityArray()` * Platform packages updated to `0.9.0-preview.9` -* Burst package updated to `1.3.7` * Properties packages updated to `1.5.0-preview` * The job safety system has be moved to NativeJobs as C++ code * The UnsafeUtility memory allocators have been moved to NativeJobs @@ -93,7 +202,6 @@ * Deprecated `RequiresEntityConversion` attribute since it is not used anymore ### Removed - * Removed previously deprecated `LiveLinkBuildImporter.GetHash` ### Fixed @@ -805,7 +913,7 @@ Removed the following deprecated API as announced in/before `0.1.1-preview`: * Moved `NativeString` code from Unity.Entities to Unity.Collections. * Updated dependencies for this package. * Significantly improved `Entity` instantiation performance when running in-Editor. -* Added support for managed `IComponentData` types such as `class MyComponent : IComponentData {}` which allows managed types such as GameObjects or List<>s to be stored in components. Users should use managed components sparingly in production code when possible as these components cannot be used by the Job System or archetype chunk storage and thus will be significantly slower to work with. Refer to the documentation for [component data](../manual/component_data.html) for more details on managed component use, implications and prevention. +* Added support for managed `IComponentData` types such as `class MyComponent : IComponentData {}` which allows managed types such as GameObjects or List<>s to be stored in components. Users should use managed components sparingly in production code when possible as these components cannot be used by the Job System or archetype chunk storage and thus will be significantly slower to work with. Refer to the documentation for [component data](xref:ecs-component-data) for more details on managed component use, implications and prevention. * 'SubSceneStreamingSystem' has been renamed to `SceneSectionStreamingSystem` and is now internal * Deprecated `_SceneEntities` in `SubScene.cs`. Please use `SceneSystem.LoadAsync` / `Unload` with the respective SceneGUID instead. * Updated `com.unity.serialization` to `0.6.3-preview`. diff --git a/DocCodeSamples.Tests/BlobAssetExamples.cs b/DocCodeSamples.Tests/BlobAssetExamples.cs new file mode 100644 index 00000000..b0ddf43b --- /dev/null +++ b/DocCodeSamples.Tests/BlobAssetExamples.cs @@ -0,0 +1,24 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using NUnit.Framework; +using Unity.Entities; +using Unity.Mathematics; + +// The files in this namespace are used to test the code samples in the documentation. +namespace Doc.CodeSamples.Tests +{ + + #region builderclassexample + + public class UsingBuilder + { + } + + #endregion + + public class BlobAssetExamples + { + + } +} diff --git a/Unity.Entities.Editor/Editors/DynamicBufferProxyBaseEditor.cs.meta b/DocCodeSamples.Tests/BlobAssetExamples.cs.meta similarity index 83% rename from Unity.Entities.Editor/Editors/DynamicBufferProxyBaseEditor.cs.meta rename to DocCodeSamples.Tests/BlobAssetExamples.cs.meta index d4a8c792..67992eba 100644 --- a/Unity.Entities.Editor/Editors/DynamicBufferProxyBaseEditor.cs.meta +++ b/DocCodeSamples.Tests/BlobAssetExamples.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 264c0a9f6442d486e9963a7f986a7ccc +guid: 9fd31545bfc81459a8be3ddf2580c8fb MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/DocCodeSamples.Tests/ChunkComponentExamples.cs b/DocCodeSamples.Tests/ChunkComponentExamples.cs index 090f7dcc..b260cdfe 100644 --- a/DocCodeSamples.Tests/ChunkComponentExamples.cs +++ b/DocCodeSamples.Tests/ChunkComponentExamples.cs @@ -9,6 +9,7 @@ namespace Doc.CodeSamples.Tests { #region declare-chunk-component + public struct ChunkComponentA : IComponentData { public float Value; @@ -16,6 +17,7 @@ public struct ChunkComponentA : IComponentData #endregion #region full-chunk-example + public class ChunkComponentExamples : SystemBase { private EntityQuery ChunksWithChunkComponentA; @@ -23,21 +25,25 @@ protected override void OnCreate() { EntityQueryDesc ChunksWithComponentADesc = new EntityQueryDesc() { - All = new ComponentType[] { ComponentType.ChunkComponent() } + All = new ComponentType[] { + ComponentType.ChunkComponent() + } }; - ChunksWithChunkComponentA = GetEntityQuery(ChunksWithComponentADesc); + ChunksWithChunkComponentA + = GetEntityQuery(ChunksWithComponentADesc); } [BurstCompile] - struct ChunkComponentCheckerJob : IJobChunk + struct ChunkComponentCheckerJob : IJobEntityBatch { public ComponentTypeHandle ChunkComponentATypeHandle; - public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) { - var compValue = chunk.GetChunkComponentData(ChunkComponentATypeHandle); + var compValue + = batchInChunk.GetChunkComponentData(ChunkComponentATypeHandle); //... var squared = compValue.Value * compValue.Value; - chunk.SetChunkComponentData(ChunkComponentATypeHandle, + batchInChunk.SetChunkComponentData(ChunkComponentATypeHandle, new ChunkComponentA() { Value = squared }); } } @@ -46,14 +52,18 @@ protected override void OnUpdate() { var job = new ChunkComponentCheckerJob() { - ChunkComponentATypeHandle = GetComponentTypeHandle() + ChunkComponentATypeHandle + = GetComponentTypeHandle() }; - this.Dependency = job.Schedule(ChunksWithChunkComponentA, this.Dependency); + this.Dependency + = job.ScheduleParallel(ChunksWithChunkComponentA, 1, + this.Dependency); } } #endregion #region aabb-chunk-component + public struct ChunkAABB : IComponentData { public AABB Value; @@ -66,17 +76,25 @@ public class AddAABBSystem : SystemBase EntityQuery queryWithoutChunkComponent; protected override void OnCreate() { - queryWithoutChunkComponent = GetEntityQuery(new EntityQueryDesc() + queryWithoutChunkComponent + = GetEntityQuery(new EntityQueryDesc() { - All = new ComponentType[] { ComponentType.ReadOnly() }, - None = new ComponentType[] { ComponentType.ChunkComponent() } + All = new ComponentType[] { + ComponentType.ReadOnly() + }, + None = new ComponentType[]{ + ComponentType.ChunkComponent() + } }); } protected override void OnUpdate() { // This is a structural change and a sync point - EntityManager.AddChunkComponentData(queryWithoutChunkComponent, new ChunkAABB()); + EntityManager.AddChunkComponentData( + queryWithoutChunkComponent, + new ChunkAABB() + ); } } @@ -86,34 +104,44 @@ public class UpdateAABBSystem : SystemBase EntityQuery queryWithChunkComponent; protected override void OnCreate() { - queryWithChunkComponent = GetEntityQuery(new EntityQueryDesc() + queryWithChunkComponent + = GetEntityQuery(new EntityQueryDesc() { - All = new ComponentType[] { ComponentType.ReadOnly(), - ComponentType.ChunkComponent()} + All = new ComponentType[] + { + ComponentType.ReadOnly(), + ComponentType.ChunkComponent() + } }); } [BurstCompile] - struct AABBJob : IJobChunk + struct AABBJob : IJobEntityBatch { - [ReadOnly] public ComponentTypeHandle LocalToWorldTypeHandleInfo; + [ReadOnly] + public ComponentTypeHandle LocalToWorldTypeHandleInfo; public ComponentTypeHandle ChunkAabbTypeHandleInfo; public uint L2WChangeVersion; - public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) { - bool chunkHasChanges = chunk.DidChange(LocalToWorldTypeHandleInfo, L2WChangeVersion); + bool chunkHasChanges + = batchInChunk.DidChange(LocalToWorldTypeHandleInfo, + L2WChangeVersion); if (!chunkHasChanges) return; // early out if the chunk transforms haven't changed - NativeArray transforms = chunk.GetNativeArray(LocalToWorldTypeHandleInfo); + NativeArray transforms + = batchInChunk.GetNativeArray(LocalToWorldTypeHandleInfo); UnityEngine.Bounds bounds = new UnityEngine.Bounds(); bounds.center = transforms[0].Position; for (int i = 1; i < transforms.Length; i++) { bounds.Encapsulate(transforms[i].Position); } - chunk.SetChunkComponentData(ChunkAabbTypeHandleInfo, new ChunkAABB() { Value = bounds.ToAABB() }); + batchInChunk.SetChunkComponentData( + ChunkAabbTypeHandleInfo, + new ChunkAABB() { Value = bounds.ToAABB() }); } } @@ -121,11 +149,14 @@ protected override void OnUpdate() { var job = new AABBJob() { - LocalToWorldTypeHandleInfo = GetComponentTypeHandle(true), - ChunkAabbTypeHandleInfo = GetComponentTypeHandle(false), + LocalToWorldTypeHandleInfo + = GetComponentTypeHandle(true), + ChunkAabbTypeHandleInfo + = GetComponentTypeHandle(false), L2WChangeVersion = this.LastSystemVersion }; - this.Dependency = job.Schedule(queryWithChunkComponent, this.Dependency); + this.Dependency + = job.ScheduleParallel(queryWithChunkComponent, 1, this.Dependency); } } #endregion @@ -141,46 +172,68 @@ protected override void OnUpdate() private void snippets() { #region component-list-chunk-component - ComponentType[] compTypes = {ComponentType.ChunkComponent(), - ComponentType.ReadOnly()}; + + ComponentType[] compTypes = { + ComponentType.ChunkComponent(), + ComponentType.ReadOnly() + }; Entity entity = EntityManager.CreateEntity(compTypes); #endregion #region em-snippet + EntityManager.AddChunkComponentData(entity); #endregion #region desc-chunk-component - EntityQueryDesc ChunksWithoutComponentADesc = new EntityQueryDesc() + + EntityQueryDesc ChunksWithoutComponentADesc + = new EntityQueryDesc() { - None = new ComponentType[] { ComponentType.ChunkComponent() } + None = new ComponentType[]{ + ComponentType.ChunkComponent() + } }; - EntityQuery ChunksWithoutChunkComponentA = GetEntityQuery(ChunksWithoutComponentADesc); + EntityQuery ChunksWithoutChunkComponentA + = GetEntityQuery(ChunksWithoutComponentADesc); - EntityManager.AddChunkComponentData(ChunksWithoutChunkComponentA, + EntityManager.AddChunkComponentData( + ChunksWithoutChunkComponentA, new ChunkComponentA() { Value = 4 }); #endregion #region use-chunk-component - EntityQueryDesc ChunksWithChunkComponentADesc = new EntityQueryDesc() + + EntityQueryDesc ChunksWithChunkComponentADesc + = new EntityQueryDesc() { - All = new ComponentType[] { ComponentType.ChunkComponent() } + All = new ComponentType[] { + ComponentType.ChunkComponent() + } }; #endregion #region archetype-chunk-component - EntityArchetype ArchetypeWithChunkComponent = EntityManager.CreateArchetype( + + EntityArchetype ArchetypeWithChunkComponent + = EntityManager.CreateArchetype( ComponentType.ChunkComponent(typeof(ChunkComponentA)), ComponentType.ReadWrite()); - Entity newEntity = EntityManager.CreateEntity(ArchetypeWithChunkComponent); + Entity newEntity + = EntityManager.CreateEntity(ArchetypeWithChunkComponent); #endregion { EntityQuery ChunksWithChunkComponentA = default; #region read-chunk-component - NativeArray chunks = ChunksWithChunkComponentA.CreateArchetypeChunkArray(Allocator.TempJob); + + NativeArray chunks + = ChunksWithChunkComponentA.CreateArchetypeChunkArray( + Allocator.TempJob); + foreach (var chunk in chunks) { - var compValue = EntityManager.GetChunkComponentData(chunk); + var compValue = + EntityManager.GetChunkComponentData(chunk); //.. } chunks.Dispose(); @@ -188,22 +241,28 @@ private void snippets() } #region read-entity-chunk-component + if (EntityManager.HasChunkComponent(entity)) { - ChunkComponentA chunkComponentValue = EntityManager.GetChunkComponentData(entity); + ChunkComponentA chunkComponentValue = + EntityManager.GetChunkComponentData(entity); } #endregion { ArchetypeChunk chunk = default; #region set-chunk-component - EntityManager.SetChunkComponentData(chunk, new ChunkComponentA() { Value = 7 }); + + EntityManager.SetChunkComponentData( + chunk, new ChunkComponentA() { Value = 7 }); #endregion } #region set-entity-chunk-component + var entityChunk = EntityManager.GetChunk(entity); - EntityManager.SetChunkComponentData(entityChunk, + EntityManager.SetChunkComponentData( + entityChunk, new ChunkComponentA() { Value = 8 }); #endregion } diff --git a/DocCodeSamples.Tests/ChunkIterationJob.cs b/DocCodeSamples.Tests/ChunkIterationJob.cs index 43daed94..107639ae 100644 --- a/DocCodeSamples.Tests/ChunkIterationJob.cs +++ b/DocCodeSamples.Tests/ChunkIterationJob.cs @@ -7,6 +7,7 @@ using UnityEngine; using NUnit.Framework; +// Only used in obsolete IJobChunk docs -- do not update to use IJobEntityBatch // The files in this namespace are used to compile/test the code samples in the documentation. namespace Doc.CodeSamples.Tests { @@ -22,6 +23,7 @@ public struct RotationSpeed : IComponentData } #region rotationspeedsystem + public class RotationSpeedSystem : SystemBase { private EntityQuery m_Query; @@ -87,6 +89,7 @@ public class RotationSpeedSystemExample2 : SystemBase private EntityQuery m_Query; #region oncreate2 + protected override void OnCreate() { var queryDescription = new EntityQueryDesc() @@ -282,6 +285,7 @@ protected override void OnUpdate() } #region basic-ijobchunk + [GenerateAuthoringComponent] public struct Target : IComponentData { diff --git a/DocCodeSamples.Tests/ConversionExamples.cs b/DocCodeSamples.Tests/ConversionExamples.cs index c7780a2c..6e9f9040 100644 --- a/DocCodeSamples.Tests/ConversionExamples.cs +++ b/DocCodeSamples.Tests/ConversionExamples.cs @@ -159,3 +159,191 @@ public void Convert(Entity entity, EntityManager dstManager, } #endregion } + + +#if !UNITY_DISABLE_MANAGED_COMPONENTS +namespace docnamespace_DependencyOnAsset +{ +#region DependencyOnAsset +public struct BoundsComponent : IComponentData +{ + public Bounds Bounds; +} + +[ConverterVersion("unity", 1)] +public class MeshBoundingBoxDependency : MonoBehaviour, IConvertGameObjectToEntity +{ + public Mesh Mesh; + + public void Convert(Entity entity, EntityManager dstManager, + GameObjectConversionSystem conversionSystem) + { + dstManager.AddComponentData(entity, new BoundsComponent { + Bounds = Mesh.bounds + }); + // Declare the dependency on the asset. Note the lack of a check for null. + conversionSystem.DeclareAssetDependency(gameObject, Mesh); + } +} +#endregion + +#region NoDependencyOnAssetReference +public class MeshComponent : IComponentData +{ + public Mesh Mesh; +} + +[ConverterVersion("unity", 1)] +public class MeshReference : MonoBehaviour, IConvertGameObjectToEntity +{ + public Mesh Mesh; + + public void Convert(Entity entity, EntityManager dstManager, + GameObjectConversionSystem conversionSystem) + { + dstManager.AddComponentData(entity, new MeshComponent { + Mesh = Mesh + }); + // No need to declare a dependency here, we're merely referencing an asset. + } +} +#endregion + +#region DependencyOnName +public struct NameComponent : IComponentData { + public Unity.Collections.FixedString32 Name; +} + +[ConverterVersion("unity", 1)] +public class NameFromGameObject : MonoBehaviour, IConvertGameObjectToEntity +{ + public GameObject Other; + + public void Convert(Entity entity, EntityManager dstManager, + GameObjectConversionSystem conversionSystem) + { + dstManager.AddComponentData(entity, new NameComponent { + Name = Other.name + }); + // Note the lack of a null check + conversionSystem.DeclareDependency(gameObject, Other); + } +} +#endregion + +#region DependencyOnComponent +[ConverterVersion("unity", 1)] +public class MeshFromOtherComponent : MonoBehaviour, IConvertGameObjectToEntity +{ + public MeshFilter MeshFilter; + + public void Convert(Entity entity, EntityManager dstManager, + GameObjectConversionSystem conversionSystem) + { + dstManager.AddComponentData(entity, new MeshComponent { + Mesh = MeshFilter.sharedMesh + }); + // Note the lack of a null check + conversionSystem.DeclareDependency(gameObject, MeshFilter); + } +} +#endregion + +#region DependencyOnTransformComponent +public struct Offset : IComponentData +{ + public Unity.Mathematics.float3 Value; +} + +[ConverterVersion("unity", 1)] +public class ReadFromOwnTransform : MonoBehaviour, IConvertGameObjectToEntity +{ + public void Convert(Entity entity, EntityManager dstManager, + GameObjectConversionSystem conversionSystem) + { + dstManager.AddComponentData(entity, new Offset { + Value = transform.position + }); + + // We need to explicitly declare a dependency on the transform data, + // even when it is on the same object. + conversionSystem.DeclareDependency(gameObject, transform); + } +} +#endregion + +#region DependencyOnOtherMeshFilterComponent +[ConverterVersion("unity", 1)] +public class ReadFromOtherMeshFilter : MonoBehaviour, IConvertGameObjectToEntity +{ + public GameObject Other; + + public void Convert(Entity entity, EntityManager dstManager, + GameObjectConversionSystem conversionSystem) + { + if (Other != null) { + var meshFilter = Other.GetComponent(); + dstManager.AddComponentData(entity, new MeshComponent { + Mesh = meshFilter.sharedMesh + }); + + // In this case, we need a null-check: meshFilter can only be + // accessed when Other is not null. + // It would be simpler to expose a reference to a Meshfilter on this + // MonoBehaviour. + conversionSystem.DeclareDependency(gameObject, meshFilter); + } + + // Note the lack of a null-check + conversionSystem.DeclareDependency(gameObject, Other); + } +} +#endregion + +#region GetPrimaryEntityFailure +public struct EntityReference : IComponentData +{ + public Entity Entity; +} + +[ConverterVersion("unity", 1)] +public class GetEntityReference : MonoBehaviour, IConvertGameObjectToEntity +{ + public GameObject Other; + + public void Convert(Entity entity, EntityManager dstManager, + GameObjectConversionSystem conversionSystem) + { + dstManager.AddComponentData(entity, new EntityReference { + Entity = conversionSystem.GetPrimaryEntity(Other) + }); + + // This line is required right now, unfortunately. + // Note the lack of a null-check. + conversionSystem.DeclareDependency(gameObject, Other); + } +} +#endregion +} +#endif + +#if !UNITY_DISABLE_MANAGED_COMPONENTS +namespace docnamespace_HybridComponent +{ + using Doohickey = UnityEngine.Camera; + + #region HybridComponent_ConversionSystem + [ConverterVersion("unity", 1)] + public class DoohickeyConversionSystem : GameObjectConversionSystem + { + protected override void OnUpdate() + { + Entities.ForEach((Doohickey doohickey) => + { + AddHybridComponent(doohickey); + }); + } + } + #endregion +} +#endif diff --git a/DocCodeSamples.Tests/DynamicBufferExamples.cs b/DocCodeSamples.Tests/DynamicBufferExamples.cs index 7a8bccee..4beb4d11 100644 --- a/DocCodeSamples.Tests/DynamicBufferExamples.cs +++ b/DocCodeSamples.Tests/DynamicBufferExamples.cs @@ -4,10 +4,11 @@ namespace Doc.CodeSamples.Tests { #region add-in-job + using Unity.Entities; using Unity.Jobs; - public class CreateEntitiesWithBuffers : SystemBase + public partial class CreateEntitiesWithBuffers : SystemBase { // A command buffer system executes command buffers in its own OnUpdate public EntityCommandBufferSystem CommandBufferSystem; @@ -95,7 +96,7 @@ public struct DataToSpawn : IComponentData public int ElementCount; } - public class AddBufferSnippets : SystemBase + public partial class AddBufferSnippets : SystemBase { protected override void OnCreate() { @@ -161,7 +162,7 @@ protected override void OnUpdate() #region access-buffer-system - public class DynamicBufferSystem : SystemBase + public partial class DynamicBufferSystem : SystemBase { protected override void OnUpdate() { @@ -183,7 +184,7 @@ protected override void OnUpdate() #region access-ijfe - public class DynamicBufferForEachSystem : SystemBase + public partial class DynamicBufferForEachSystem : SystemBase { private EntityQuery query; @@ -252,7 +253,7 @@ NativeArray intermediateSums #region access-chunk-job - public class DynamicBufferJobSystem : SystemBase + public partial class DynamicBufferJobSystem : SystemBase { private EntityQuery query; @@ -265,7 +266,7 @@ protected override void OnCreate() query = GetEntityQuery(queryDescription); } - public struct BuffersInChunks : IJobChunk + public struct BuffersInChunks : IJobEntityBatch { //The data type and safety object public BufferTypeHandle BufferTypeHandle; @@ -273,21 +274,19 @@ public struct BuffersInChunks : IJobChunk //An array to hold the output, intermediate sums public NativeArray sums; - public void Execute(ArchetypeChunk chunk, - int chunkIndex, - int firstEntityIndex) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) { //A buffer accessor is a list of all the buffers in the chunk BufferAccessor buffers - = chunk.GetBufferAccessor(BufferTypeHandle); + = batchInChunk.GetBufferAccessor(BufferTypeHandle); - for (int c = 0; c < chunk.Count; c++) + for (int c = 0; c < batchInChunk.Count; c++) { //An individual dynamic buffer for a specific entity DynamicBuffer buffer = buffers[c]; for(int i = 0; i < buffer.Length; i++) { - sums[chunkIndex] += buffer[i].Value; + sums[batchIndex] += buffer[i].Value; } } } @@ -318,7 +317,7 @@ NativeArray intermediateSums BuffersInChunks bufferJob = new BuffersInChunks(); bufferJob.BufferTypeHandle = GetBufferTypeHandle(); bufferJob.sums = intermediateSums; - this.Dependency = bufferJob.ScheduleParallel(query, this.Dependency); + this.Dependency = bufferJob.ScheduleParallel(query, 1, this.Dependency); //Schedule the second job, which depends on the first SumResult finalSumJob = new SumResult(); @@ -527,7 +526,7 @@ private void ShowAdd() } } - public class ReinterpretExample : SystemBase + public partial class ReinterpretExample : SystemBase { protected override void OnUpdate() { diff --git a/DocCodeSamples.Tests/EntityCommandBuffers.cs b/DocCodeSamples.Tests/EntityCommandBuffers.cs index 8ccf516f..adfbce32 100644 --- a/DocCodeSamples.Tests/EntityCommandBuffers.cs +++ b/DocCodeSamples.Tests/EntityCommandBuffers.cs @@ -7,12 +7,13 @@ namespace Doc.CodeSamples.Tests { #region ecb_concurrent + struct Lifetime : IComponentData { public byte Value; } - class LifetimeSystem : SystemBase + partial class LifetimeSystem : SystemBase { EndSimulationEntityCommandBufferSystem m_EndSimulationEcbSystem; protected override void OnCreate() diff --git a/DocCodeSamples.Tests/EntityQueryExamples.cs b/DocCodeSamples.Tests/EntityQueryExamples.cs index 3b998f75..16ed2dec 100644 --- a/DocCodeSamples.Tests/EntityQueryExamples.cs +++ b/DocCodeSamples.Tests/EntityQueryExamples.cs @@ -7,6 +7,7 @@ namespace Doc.CodeSamples.Tests { #region singleton-type-example + public struct Singlet : IComponentData { public int Value; @@ -20,11 +21,12 @@ public struct Position : IComponentData { public float3 Value; } public struct RotationQuaternion : IComponentData { public quaternion Value; } public struct Displacement : IComponentData { public float3 Value; } - public class EntityQueryExamples : SystemBase + public partial class EntityQueryExamples : SystemBase { void queryFromList() { #region query-from-list + EntityQuery query = GetEntityQuery(typeof(Rotation), ComponentType.ReadOnly()); #endregion @@ -33,11 +35,12 @@ void queryFromList() void queryFromDescription() { #region query-from-description + EntityQueryDesc description = new EntityQueryDesc { None = new ComponentType[] { - typeof(Frozen) + typeof(Static) }, All = new ComponentType[] { @@ -85,6 +88,7 @@ protected override void OnUpdate() #region set-singleton + queryForSingleton.SetSingleton(new Singlet {Value = 1}); #endregion } @@ -93,6 +97,7 @@ void ManualExamples1() { { #region define-query + EntityQuery query = GetEntityQuery(typeof(RotationQuaternion), ComponentType.ReadOnly()); @@ -100,9 +105,10 @@ EntityQuery query } { #region query-desc + var queryDescription = new EntityQueryDesc { - None = new ComponentType[] { typeof(Frozen) }, + None = new ComponentType[] { typeof(Static) }, All = new ComponentType[]{ typeof(RotationQuaternion), ComponentType.ReadOnly() } }; @@ -111,6 +117,7 @@ EntityQuery query } { #region combine-query + var desc1 = new EntityQueryDesc { All = new ComponentType[] { typeof(RotationQuaternion) } @@ -129,16 +136,18 @@ EntityQuery query { EntityManager entityManager = World.EntityManager; #region create-query + EntityQuery query = entityManager.CreateEntityQuery(typeof(RotationQuaternion), ComponentType.ReadOnly()); #endregion } - + } } #region query-writegroup + public struct C1 : IComponentData { } [WriteGroup(typeof(C1))] @@ -168,7 +177,8 @@ protected override void OnUpdate() #endregion #region get-query - public class RotationSpeedSys : SystemBase + + public partial class RotationSpeedSys : SystemBase { private EntityQuery query; @@ -193,6 +203,7 @@ protected override void OnUpdate() #endregion #region get-query-ijobchunk + public class RotationSystem : SystemBase { private EntityQuery query; @@ -210,6 +221,7 @@ protected override void OnUpdate() } #endregion #region shared-component-filter + struct SharedGrouping : ISharedComponentData { public int Group; @@ -247,6 +259,7 @@ protected override void OnUpdate() class UpdateSystem : SystemBase { #region change-filter + EntityQuery query; protected override void OnCreate() diff --git a/DocCodeSamples.Tests/IJobEntityBatchExamples.cs b/DocCodeSamples.Tests/IJobEntityBatchExamples.cs index 7d2fc4ac..6ced5836 100644 --- a/DocCodeSamples.Tests/IJobEntityBatchExamples.cs +++ b/DocCodeSamples.Tests/IJobEntityBatchExamples.cs @@ -12,6 +12,7 @@ namespace Doc.CodeSamples.Tests { #region basic-ijobentitybatch + [GenerateAuthoringComponent] public struct ExpensiveTarget : IComponentData { @@ -80,4 +81,275 @@ protected override void OnUpdate() } } #endregion + + public struct VelocityVector: IComponentData + { + public float3 Value; + } + + #region typical-struct + public struct UpdateTranslationFromVelocityJob : IJobEntityBatch + { + public ComponentTypeHandle velocityTypeHandle; + public ComponentTypeHandle translationTypeHandle; + public float DeltaTime; + + [BurstCompile] + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) + { + NativeArray velocityVectors = + batchInChunk.GetNativeArray(velocityTypeHandle); + NativeArray translations = + batchInChunk.GetNativeArray(translationTypeHandle); + + for(int i = 0; i < batchInChunk.Count; i++) + { + float3 translation = translations[i].Value; + float3 velocity = velocityVectors[i].Value; + float3 newTranslation = translation + velocity * DeltaTime; + + translations[i] = new Translation() { Value = newTranslation }; + } + } + } + #endregion + + #region schedule-job + public class UpdateTranslationFromVelocitySystem : SystemBase + { + EntityQuery query; + + protected override void OnCreate() + { + // Set up the query + var description = new EntityQueryDesc() + { + All = new ComponentType[] + {ComponentType.ReadWrite(), + ComponentType.ReadOnly()} + }; + query = this.GetEntityQuery(description); + } + + protected override void OnUpdate() + { + // Instantiate the job struct + var updateFromVelocityJob + = new UpdateTranslationFromVelocityJob(); + + // Set the job component type handles + // "this" is your SystemBase subclass + updateFromVelocityJob.translationTypeHandle + = this.GetComponentTypeHandle(false); + updateFromVelocityJob.velocityTypeHandle + = this.GetComponentTypeHandle(true); + + // Set other data need in job, such as time + updateFromVelocityJob.DeltaTime = World.Time.DeltaTime; + + // Schedule the job + this.Dependency + = updateFromVelocityJob.ScheduleParallel(query, 1, this.Dependency); + } + #endregion + } + + //For extracting one or a few lines for the docs + public struct UpdateTranslationAndAlignToVelocityJob : IJobEntityBatch + { + public ComponentTypeHandle velocityTypeHandle; + #region component-handle + public ComponentTypeHandle translationTypeHandle; + #endregion + public ComponentTypeHandle rotationTypeHandle; + public ComponentTypeHandle l2wTypeHandle; + public float DeltaTime; + + [BurstCompile] + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) + { + NativeArray velocityVectors = + batchInChunk.GetNativeArray(velocityTypeHandle); + #region component-array + NativeArray translations = + batchInChunk.GetNativeArray(translationTypeHandle); + #endregion + for (int i = 0; i < batchInChunk.Count; i++) + { + float3 translation = translations[i].Value; + float3 velocity = velocityVectors[i].Value; + float3 newTranslation = translation + velocity * DeltaTime; + + translations[i] = new Translation() { Value = newTranslation }; + } + + #region batch-has-component + // If entity has Rotation and LocalToWorld components, + // slerp to align to the velocity vector + if (batchInChunk.Has(rotationTypeHandle) && + batchInChunk.Has(l2wTypeHandle)) + { + NativeArray rotations + = batchInChunk.GetNativeArray(rotationTypeHandle); + NativeArray transforms + = batchInChunk.GetNativeArray(l2wTypeHandle); + + // By putting the loop inside the check for the + // optional components, we can check once per batch + // rather than once per entity. + for (int i = 0; i < batchInChunk.Count; i++) + { + float3 direction = math.normalize(velocityVectors[i].Value); + float3 up = transforms[i].Up; + quaternion rotation = rotations[i].Value; + + quaternion look = quaternion.LookRotation(direction, up); + quaternion newRotation = math.slerp(rotation, look, DeltaTime); + + rotations[i] = new Rotation() { Value = newRotation }; + } + } + #endregion + } + } + + public class OneLinerSystem : SystemBase + { + EntityQuery query; + + protected override void OnCreate() + { + var description = new EntityQueryDesc() + { + All = new ComponentType[] + {ComponentType.ReadWrite(), + ComponentType.ReadOnly()} + }; + query = this.GetEntityQuery(description); + } + + protected override void OnUpdate() + { + var updateFromVelocityJob + = new UpdateTranslationAndAlignToVelocityJob(); + #region component-set-handle + // "this" is your SystemBase subclass + updateFromVelocityJob.translationTypeHandle + = this.GetComponentTypeHandle(false); + #endregion + updateFromVelocityJob.rotationTypeHandle + = this.GetComponentTypeHandle(false); + updateFromVelocityJob.velocityTypeHandle + = this.GetComponentTypeHandle(true); + updateFromVelocityJob.l2wTypeHandle + = this.GetComponentTypeHandle(true); + updateFromVelocityJob.DeltaTime = World.Time.DeltaTime; + + this.Dependency = updateFromVelocityJob.ScheduleParallel(query, 1, this.Dependency); + } + } + + #region skip-unchanged-batches-job + struct UpdateOnChangeJob : IJobEntityBatch + { + public ComponentTypeHandle InputATypeHandle; + public ComponentTypeHandle InputBTypeHandle; + [ReadOnly] public ComponentTypeHandle OutputTypeHandle; + public uint LastSystemVersion; + + [BurstCompile] + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) + { + var inputAChanged = batchInChunk.DidChange(InputATypeHandle, LastSystemVersion); + var inputBChanged = batchInChunk.DidChange(InputBTypeHandle, LastSystemVersion); + + // If neither component changed, skip the current batch + if (!(inputAChanged || inputBChanged)) + return; + + var inputAs = batchInChunk.GetNativeArray(InputATypeHandle); + var inputBs = batchInChunk.GetNativeArray(InputBTypeHandle); + var outputs = batchInChunk.GetNativeArray(OutputTypeHandle); + + for (var i = 0; i < outputs.Length; i++) + { + outputs[i] = new Output { Value = inputAs[i].Value + inputBs[i].Value }; + } + } + } + #endregion + + #region skip-unchanged-batches-system + public class UpdateDataOnChangeSystem : SystemBase { + + EntityQuery query; + + protected override void OnUpdate() + { + var job = new UpdateOnChangeJob(); + + job.LastSystemVersion = this.LastSystemVersion; + + job.InputATypeHandle = GetComponentTypeHandle(true); + job.InputBTypeHandle = GetComponentTypeHandle(true); + job.OutputTypeHandle = GetComponentTypeHandle(false); + + this.Dependency = job.ScheduleParallel(query, 1, this.Dependency); + } + + protected override void OnCreate() + { + query = GetEntityQuery( + new ComponentType[] + { + ComponentType.ReadOnly(), + ComponentType.ReadOnly(), + ComponentType.ReadWrite() + } + ); + } + } + #endregion + public class UpdateFilteredDataSystem : SystemBase + { + + #region filter-query + EntityQuery query; + + protected override void OnCreate() + { + query = GetEntityQuery( + new ComponentType[] + { + ComponentType.ReadOnly(), + ComponentType.ReadOnly(), + ComponentType.ReadWrite() + } + ); + + query.SetChangedVersionFilter( + new ComponentType[] + { + typeof(InputA), + typeof(InputB) + } + ); + } + #endregion + + protected override void OnUpdate() + { + var job = new UpdateOnChangeJob(); + + job.LastSystemVersion = this.LastSystemVersion; + + job.InputATypeHandle = GetComponentTypeHandle(true); + job.InputBTypeHandle = GetComponentTypeHandle(true); + job.OutputTypeHandle = GetComponentTypeHandle(false); + + this.Dependency = job.ScheduleParallel(query, 1, this.Dependency); + } + + } + } diff --git a/DocCodeSamples.Tests/LambdaJobExamples.cs b/DocCodeSamples.Tests/LambdaJobExamples.cs index cc5727a3..3b775f67 100644 --- a/DocCodeSamples.Tests/LambdaJobExamples.cs +++ b/DocCodeSamples.Tests/LambdaJobExamples.cs @@ -9,7 +9,8 @@ namespace Doc.CodeSamples.Tests using Random = Unity.Mathematics.Random; #region entities-foreach-example - class ApplyVelocitySystem : SystemBase + + partial class ApplyVelocitySystem : SystemBase { protected override void OnUpdate() { @@ -24,7 +25,8 @@ protected override void OnUpdate() } #endregion #region job-with-code-example - public class RandomSumJob : SystemBase + + public partial class RandomSumJob : SystemBase { private uint seed = 1; @@ -70,7 +72,7 @@ NativeArray result #endregion //Used to verify the BuffersByEntity example (not shown in docs) - public class MakeData : SystemBase + public partial class MakeData : SystemBase { protected override void OnCreate() { @@ -100,7 +102,8 @@ public struct IntBufferData : IBufferElementData } #region dynamicbuffer - public class BufferSum : SystemBase + + public partial class BufferSum : SystemBase { private EntityQuery query; @@ -158,11 +161,12 @@ public struct Destination : IComponentData public int Value; } - public class WithAllExampleSystem : SystemBase + public partial class WithAllExampleSystem : SystemBase { protected override void OnUpdate() { #region entity-query + Entities.WithAll() .WithAny() .WithNone() @@ -179,9 +183,10 @@ public struct Data : IComponentData { public float Value; } - public class WithStoreQuerySystem : SystemBase + public partial class WithStoreQuerySystem : SystemBase { #region store-query + private EntityQuery query; protected override void OnUpdate() { @@ -209,11 +214,12 @@ NativeArray dataSquared #endregion } - public class WithChangeExampleSystem : SystemBase + public partial class WithChangeExampleSystem : SystemBase { protected override void OnUpdate() { #region with-change-filter + Entities .WithChangeFilter() .ForEach((ref Destination outputData, @@ -241,7 +247,8 @@ public class ColorTable } #region with-shared-component - public class ColorCycleJob : SystemBase + + public partial class ColorCycleJob : SystemBase { protected override void OnUpdate() { @@ -258,11 +265,12 @@ protected override void OnUpdate() } #endregion - public class ReadWriteModExample : SystemBase + public partial class ReadWriteModExample : SystemBase { protected override void OnUpdate() { #region read-write-modifiers + Entities.ForEach( (ref Destination outputData, in Source inputData) => @@ -275,7 +283,8 @@ protected override void OnUpdate() } #region basic-ecb - public class MyJobSystem : SystemBase + + public partial class MyJobSystem : SystemBase { private EndSimulationEntityCommandBufferSystem commandBufferSystem; @@ -301,11 +310,12 @@ public struct Movement : IComponentData public float3 Value; } - public class EFESystem : SystemBase + public partial class EFESystem : SystemBase { protected override void OnUpdate() { #region lambda-params + Entities.ForEach( (Entity entity, int entityInQueryIndex, @@ -334,7 +344,7 @@ struct Data8 : IComponentData{} struct Data9 : IComponentData{} struct Data10 : IComponentData{} struct Data11 : IComponentData{} - + #region lambda-params-many static class BringYourOwnDelegate @@ -353,7 +363,7 @@ public static TDescription ForEach buffersOfAllEntities } #endregion #region lookup-ijobchunk + public class MoveTowardsEntitySystem : SystemBase { private EntityQuery query; [BurstCompile] - private struct MoveTowardsJob : IJobChunk + private struct MoveTowardsJob : IJobEntityBatch { // Read-write data in the current chunk public ComponentTypeHandle PositionTypeHandleAccessor; @@ -105,15 +107,13 @@ private struct MoveTowardsJob : IJobChunk // Non-entity data public float deltaTime; - public void Execute(ArchetypeChunk chunk, - int chunkIndex, - int firstEntityIndex) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) { // Get arrays of the components in chunk NativeArray positions - = chunk.GetNativeArray(PositionTypeHandleAccessor); + = batchInChunk.GetNativeArray(PositionTypeHandleAccessor); NativeArray targets - = chunk.GetNativeArray(TargetTypeHandleAccessor); + = batchInChunk.GetNativeArray(TargetTypeHandleAccessor); for (int i = 0; i < positions.Length; i++) { @@ -165,7 +165,7 @@ protected override void OnUpdate() job.deltaTime = this.Time.DeltaTime; // Schedule the job using Dependency property - this.Dependency = job.Schedule(query, this.Dependency); + this.Dependency = job.ScheduleParallel(query, 1, this.Dependency); } } #endregion @@ -180,7 +180,7 @@ protected override void OnCreate() } [BurstCompile] - private struct ChaserSystemJob : IJobChunk + private struct ChaserSystemJob : IJobEntityBatch { // Read-write data in the current chunk public ComponentTypeHandle PositionTypeHandleAccessor; @@ -191,6 +191,7 @@ private struct ChaserSystemJob : IJobChunk // Read-only data stored (potentially) in other chunks #region lookup-ijobchunk-declare + [ReadOnly] public ComponentDataFromEntity EntityPositions; #endregion @@ -198,13 +199,13 @@ private struct ChaserSystemJob : IJobChunk // Non-entity data public float deltaTime; - public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) { // Get arrays of the components in chunk NativeArray positions - = chunk.GetNativeArray(PositionTypeHandleAccessor); + = batchInChunk.GetNativeArray(PositionTypeHandleAccessor); NativeArray targets - = chunk.GetNativeArray(TargetTypeHandleAccessor); + = batchInChunk.GetNativeArray(TargetTypeHandleAccessor); for (int i = 0; i < positions.Length; i++) { @@ -217,6 +218,7 @@ NativeArray targets // Update translation to move the chasing enitity toward the target #region lookup-ijobchunk-read + float3 targetPosition = EntityPositions[targetEntity].Position; #endregion float3 chaserPosition = positions[i].Value; @@ -231,6 +233,7 @@ protected override void OnUpdate() { // Create the job #region lookup-ijobchunk-set + var job = new ChaserSystemJob(); job.EntityPositions = this.GetComponentDataFromEntity(true); #endregion @@ -243,7 +246,7 @@ protected override void OnUpdate() job.deltaTime = this.Time.DeltaTime; // Schedule the job using Dependency property - this.Dependency = job.Schedule(query, this.Dependency); + this.Dependency = job.ScheduleParallel(query, 1, this.Dependency); } } } diff --git a/DocCodeSamples.Tests/StatefulSystem.cs b/DocCodeSamples.Tests/StatefulSystem.cs index 3f8b71d4..794ac226 100644 --- a/DocCodeSamples.Tests/StatefulSystem.cs +++ b/DocCodeSamples.Tests/StatefulSystem.cs @@ -1,6 +1,7 @@ namespace Doc.CodeSamples.Tests { #region stateful-example + using Unity.Entities; using Unity.Jobs; using Unity.Collections; @@ -15,7 +16,7 @@ public struct StateComponentB : ISystemStateComponentData public int State; } - public class StatefulSystem : SystemBase + public partial class StatefulSystem : SystemBase { private EntityCommandBufferSystem ecbSource; diff --git a/DocCodeSamples.Tests/SystemBaseExamples.cs b/DocCodeSamples.Tests/SystemBaseExamples.cs index 33056434..435a3662 100644 --- a/DocCodeSamples.Tests/SystemBaseExamples.cs +++ b/DocCodeSamples.Tests/SystemBaseExamples.cs @@ -22,7 +22,7 @@ public struct Velocity : IComponentData public float3 Value; } - public class ECSSystem : SystemBase + public partial class ECSSystem : SystemBase { protected override void OnUpdate() { @@ -46,7 +46,7 @@ protected override void OnUpdate() #endregion - public class EntitiesBasicExample : SystemBase + public partial class EntitiesBasicExample : SystemBase { protected override void OnUpdate() { @@ -77,7 +77,7 @@ protected override void OnUpdate() #region basic-job - public class JobSystem : SystemBase + public partial class JobSystem : SystemBase { NativeArray EndlessSequence; @@ -121,12 +121,13 @@ public struct ReadonlyComponent : IComponentData { } - public class LambdaParamsEx : SystemBase + public partial class LambdaParamsEx : SystemBase { protected override void OnUpdate() { Entities #region lambda-params + .ForEach((Entity entity, int entityInQueryIndex, ref WritableComponent aReadwriteComponent, @@ -147,7 +148,7 @@ public struct AnotherComponent : IComponentData { } - public class SimpleDependencyManagement : SystemBase + public partial class SimpleDependencyManagement : SystemBase { #region simple-dependency @@ -185,7 +186,7 @@ protected override void OnUpdate() #endregion } - public class ManualDependencyManagement : SystemBase + public partial class ManualDependencyManagement : SystemBase { #region manual-dependency diff --git a/Documentation~/TableOfContents.md b/Documentation~/TableOfContents.md deleted file mode 100644 index 573c6ff7..00000000 --- a/Documentation~/TableOfContents.md +++ /dev/null @@ -1,31 +0,0 @@ -* [Overview](index.md) -* [Core ECS](ecs_core.md) - * [Entities](ecs_entities.md) - * [Entity queries](ecs_entity_query.md) - * [Worlds](world.md) - * [Components](ecs_components.md) - * [General purpose components](component_data.md) - * [Shared components](shared_component_data.md) - * [System state components](system_state_components.md) - * [Dynamic buffer components](dynamic_buffers.md) - * [Chunk components](ecs_chunk_component.md) - * [Systems](ecs_systems.md) - * [Creating systems](ecs_creating_systems.md) - * [Using Entities.ForEach](ecs_entities_foreach.md) - * [Using Job.WithCode](ecs_job_withcode.md) - * [Using IJobEntityBatch](ecs_ijobentitybatch.md) - * [Using IJobChunk](chunk_iteration_job.md) - * [Manual iteration](manual_iteration.md) - * [System update order](system_update_order.md) - * [ECS job dependencies](ecs_job_dependencies.md) - * [Looking up data](ecs_lookup_data.md) - * [Entity command buffers](entity_command_buffer.md) - * [Sync points and structural changes](sync_points.md) - * [Component WriteGroups](ecs_write_groups.md) - * [Versions and generations](version_numbers.md) - * [C# Job System extensions](ecs_job_extensions.md) - * [Conversion Workflow](conversion.md) -* [Creating gameplay](gp_overview.md) - * [Transforms](transform_system.md) - * [Rendering](gp_rendering.md) - * [Common patterns](gp_common_patterns.md) \ No newline at end of file diff --git a/Documentation~/api_index.md b/Documentation~/api_index.md new file mode 100644 index 00000000..cd31911d --- /dev/null +++ b/Documentation~/api_index.md @@ -0,0 +1,87 @@ +--- +uid: api-index +--- + +# Entity Component System API reference + + +| Entity types | | +| :--- | :--- | +| [Entity] | The fundamental identifier in ECS | +| [EntityArchetype] | A unique combination of component types | +| [EntityQuery] | Use to select entities with specific characteristics | +| [EntityQueryDesc] | Use to create [EntityQuery] objects | +| [EntityManager] | Manages entities and provides utility methods | +| [World] | An isolated collection of entities | + +| Component types | | +| :--- | :--- | +| [IComponentData] | A marker interface for general purpose components | +| [ISharedComponentData] | A marker interface for components shared by many entities | +| [ISystemStateComponentData] | A marker interface for specialized system components | +| [IBufferElementData] | A marker interface for buffer elements | +| [DynamicBuffer] | The API to access buffer elements | +| [BlobAssetReference] | A reference to a blob asset in a component | + +| System types | | +| :--- | :--- | +| [ComponentSystemBase] | Defines a set of basic functionality for systems | +| [SystemBase] | The base class to extend when writing an ECS system | +| [GameObjectConversionSystem] | The base class to extend when writing GameObject conversion systems | +| [ComponentSystemGroup] | A group of systems that update as a unit | + +| ECS job types | | +| :--- | :--- | +| [Entities.ForEach] | An implicitly created job that iterates over a set of entities | +| [Job.WithCode] | An implicitly created single job | +| [IJobEntityBatch] | An interface to implement to explicitly create a job that iterates over the entities returned by an entity query in batches | + +| Other important types | | +| :--- | :--- | +| [ArchetypeChunk] | The storage unit for entity components | +| [EntityCommandBuffer] | A buffer for recording entity modifications used to reduce structural changes | +| [ComponentType] | Use to define types when creating entity queries | +| [BlobBuilder] | A utility class for creating blob assets, which are immutable data structures that can be safely shared between jobs using [BlobAssetReference] instances | +| [ICustomBootstrap] | An interface to implement to create your own system loop | + +| Attributes | | +| :--- | :--- | +| [UpdateInGroup] | Defines the [ComponentSystemGroup] to which a system should be added | +| [UpdateBefore] | Specifies that one system must update before another | +| [UpdateAfter] | Specifies that one system must update after another| +| [DisableAutoCreation] | Prevents a system from being automatically discovered and run when your application starts up | +| [ExecuteAlways] | Specifies that a system's update function must be invoked every frame, even when no entities are returned by the system's entity query | +| [GenerateAuthoringComponent] | Generates a MonoBehaviour-based Component for an ECS IComponentData struct, allowing you to add it directly to a GameObject in the Unity Editor | +| [ConverterVersion] | Use to ensure that serialized data is up to date with conversion code | + + +[Entity]: xref:Unity.Entities.Entity +[EntityArchetype]: xref:Unity.Entities.EntityArchetype +[EntityQuery]: xref:Unity.Entities.EntityQuery +[EntityQueryDesc]: xref:Unity.Entities.EntityQueryDesc +[EntityManager]: xref:Unity.Entities.EntityManager +[World]: xref:Unity.Entities.World +[IComponentData]: xref:Unity.Entities.IComponentData +[ISharedComponentData]: xref:Unity.Entities.ISharedComponentData +[ISystemStateComponentData]: xref:Unity.Entities.ISystemStateComponentData +[IBufferElementData]: xref:Unity.Entities.IBufferElementData +[DynamicBuffer]: xref:Unity.Entities.DynamicBuffer`1 +[ComponentSystemBase]: xref:Unity.Entities.ComponentSystemBase +[SystemBase]: xref:Unity.Entities.SystemBase +[GameObjectConversionSystem]: xref:Global%20Namespace.GameObjectConversionSystem +[ComponentSystemGroup]: xref:Unity.Entities.ComponentSystemGroup +[Entities.ForEach]: xref:Unity.Entities.SystemBase.Entities +[Job.WithCode]: xref:Unity.Entities.SystemBase.Job +[IJobEntityBatch]: xref:Unity.Entities.IJobEntityBatch +[ArchetypeChunk]: xref:Unity.Entities.ArchetypeChunk +[EntityCommandBuffer]: xref:Unity.Entities.EntityCommandBuffer +[ICustomBootstrap]: xref:Unity.Entities.ICustomBootstrap +[ComponentType]: xref:Unity.Entities.ComponentType +[BlobBuilder]: xref:Unity.Entities.BlobBuilder +[UpdateInGroup]: xref:Unity.Entities.UpdateInGroupAttribute +[UpdateBefore]: xref:Unity.Entities.UpdateBeforeAttribute +[UpdateAfter]: xref:Unity.Entities.UpdateAfterAttribute +[DisableAutoCreation]: xref:Unity.Entities.DisableAutoCreationAttribute +[ExecuteAlways]: xref:UnityEngine.ExecuteAlways +[GenerateAuthoringComponent]: xref:Unity.Entities.GenerateAuthoringComponentAttribute +[ConverterVersion]: xref:Unity.Entities.ConverterVersionAttribute diff --git a/Documentation~/chunk_iteration.md b/Documentation~/chunk_iteration.md index cabb6da9..5254d8fb 100644 --- a/Documentation~/chunk_iteration.md +++ b/Documentation~/chunk_iteration.md @@ -11,25 +11,27 @@ The ECS API provides a number of ways to accomplish iteration, each with its own * [SystemBase.Entities.ForEach] — the simplest efficient way to process component data entity by entity. -* [IJobChunk] — iterates over the eligible blocks of memory (called a **[chunk]**) that contain matching entities. The job `Execute()` function can use a for loop to iterate over the elements inside each chunk. You can use [IJobChunk] for more complex situations than [Entities.ForEach] supports, while maintaining maximum efficiency. +* [IJobEntityBatch] — iterates over the eligible blocks of memory (called a **[chunk]**) that contain matching entities. The job `Execute()` function can use a for loop to iterate over batches of the elements inside each chunk. You can use [IJobEntityBatch] for more complex situations than [Entities.ForEach] supports, while maintaining maximum efficiency. -* [Manual iteration] — if the previous methods are insufficient, you can manually iterate over entities or Chunks. For example, you can use a job such as `IJobParallelFor` to get a `NativeArray` that contains entities or the Chunks of the entities that you want to process and iterate over. +* [Manual iteration] — if the previous methods are insufficient, you can manually iterate over entities or Chunks. For example, you can use a job such as `IJobParallelFor` to iterate over a `NativeArray` that contains entities or the chunks of the entities that you want to process. The [EntityQuery] class provides a way to construct a view of your data that contains only the specific data you need for a given algorithm or process. Many of the iteration methods in the list above use an [EntityQuery], either explicitly or internally. **Important:** The following iteration types should not be used in new code: +* IJobChunk * IJobForEach * IJobForEachWithEntity * ComponentSystem * JobComponentSystem -These types are being phased out in preference to [SystemBase] and will become obsolete once they have gone through a deprecation cycle. Use [SystemBase] and [SystemBase.Entities.ForEach] or [IJobChunk] to replace them. +These types are being phased out in preference to [SystemBase] and will become obsolete once they have gone through a deprecation cycle. Use [SystemBase] and [SystemBase.Entities.ForEach] or [IJobEntityBatch] to replace them. [SystemBase]: entities_job_foreach.md [Entities.ForEach]: entities_job_foreach.md [SystemBase.Entities.ForEach]: entities_job_foreach.md -[IJobChunk]: chunk_iteration_job.md +[IJobEntityBatch]: ecs_ijobentitybatch.md [EntityQuery]: ecs_entity_query.md -[Chunk]: xref:Unity.Entities.ArchetypeChunk \ No newline at end of file +[Chunk]: xref:Unity.Entities.ArchetypeChunk +[Manual iteration]: manual_iteration.md \ No newline at end of file diff --git a/Documentation~/chunk_iteration_job.md b/Documentation~/chunk_iteration_job.md index 684604bd..92f42cff 100644 --- a/Documentation~/chunk_iteration_job.md +++ b/Documentation~/chunk_iteration_job.md @@ -4,6 +4,9 @@ uid: ecs-ijobchunk # Using IJobChunk jobs +> [!NOTE] +> IJobChunk has been superseded by [IJobEntityBatch](xref:ecs-ijobentitybatch), which should be used for new code. + You can implement [IJobChunk](xref:Unity.Entities.IJobChunk) inside a system to iterate through your data by chunk. When you schedule an IJobChunk job in the `OnUpdate()` function of a system, the job invokes your `Execute()` function once for each chunk that matches the entity query passed to the job's `Schedule()` method. You can then iterate over the data inside each chunk, entity by entity. Iterating with IJobChunk requires more code setup than does Entities.ForEach, but is also more explicit and represents the most direct access to the data, as it is actually stored. @@ -45,7 +48,8 @@ You can also combine multiple queries. To do this, pass an array of `EntityQuery [!code-cs[oncreate3](../DocCodeSamples.Tests/ChunkIterationJob.cs#oncreate3)] -**Note:** Do not include completely optional components in the `EntityQueryDesc`. To handle optional components, use the `chunk.Has()` method inside `IJobChunk.Execute()` to determine whether the current ArchetypeChunk has the optional component or not. Because all entities in the same chunk have the same components, you only need to check whether an optional component exists once per chunk: not once per entity. +> [!NOTE] +> Do not include completely optional components in the `EntityQueryDesc`. To handle optional components, use the `chunk.Has()` method inside `IJobChunk.Execute()` to determine whether the current ArchetypeChunk has the optional component or not. Because all entities in the same chunk have the same components, you only need to check whether an optional component exists once per chunk: not once per entity. For efficiency and to avoid needless creation of garbage-collected reference types, you should create the `EntityQueries` for a system in the system’s `OnCreate()` function and store the result in an instance variable. (In the above examples, the `m_Query` variable is used for this purpose.) @@ -88,7 +92,8 @@ If you have the `Any` filter in your EntityQueryDesc or have completely optional if (chunk.Has(OptionalCompType)) {//...} -__Note:__ If you use a concurrent entity command buffer, pass the `chunkIndex` argument as the `sortKey` parameter to the command buffer functions. +> [!NOTE] +> If you're recording an `EntityCommandBuffer.ParallelWriter` inside the `Execute()` function, pass the `chunkIndex` argument as the `sortKey` parameter to the command buffer functions. @@ -108,7 +113,8 @@ As with all the job struct fields, you must assign its value before you schedule [!code-cs[changefilteronupdate](../DocCodeSamples.Tests/ChunkIterationJob.cs#changefilteronupdate)] -**Note:** For efficiency, the change version applies to whole chunks not individual entities. If another job which has the ability to write to that type of component accesses a chunk, then ECS increments the change version for that component and the `DidChange()` function returns true. ECS increments the change version even if the job that declares write access to a component does not actually change the component value. +> [!NOTE] +> For efficiency, the change version applies to whole chunks not individual entities. If another job which has the ability to write to that type of component accesses a chunk, then ECS increments the change version for that component and the `DidChange()` function returns true. ECS increments the change version even if the job that declares write access to a component does not actually change the component value. ## Instantiate and schedule the job diff --git a/Documentation~/component_data.md b/Documentation~/component_data.md index e9913bfe..73c9f4be 100644 --- a/Documentation~/component_data.md +++ b/Documentation~/component_data.md @@ -2,9 +2,9 @@ uid: ecs-component-data --- -# General purpose components +# General-purpose components -`ComponentData` in Unity (also known as a component in standard ECS terms) is a struct that contains only the instance data for an [entity](ecs_entities.md). `ComponentData` should not contain methods beyond utility functions to access the data in the struct. You should implement all of your game logic and behavior in systems. To put this in terms of the object-oriented Unity system, this is somewhat similar to a Component class, but one that **only contains variables**. +An ECS component (not an instance of the managed `UnityEngine.Component` class) is a struct that contains only the instance data for an [entity](ecs_entities.md). ECS components should not contain methods beyond utility functions to access the data in the struct. You should implement all of your game logic and behavior in systems. To put this in terms of the object-oriented Unity system, this is similar to a Component class, but one that **only contains variables**. The Unity ECS API provides an interface called [IComponentData](xref:Unity.Entities.IComponentData) that you can implement in your code to declare a general-purpose component type. @@ -21,7 +21,7 @@ transform.position += deltaTime * playerInput.move * settings.playerMoveSpeed; group.transform[index] = transform; // Write ``` -`IComponentData` structs must not contain references to managed objects. This is because `ComponentData` lives in simple non-garbage-collected tracked [Chunk memory](chunk_iteration.md), which has many performance advantages. +`IComponentData` structs must not contain references to managed objects. This is because `ComponentData` lives in simple non-garbage-collected tracked [Chunk memory](xref:Unity.Entities.ArchetypeChunk), which has many performance advantages. ### Managed IComponentData @@ -32,7 +32,7 @@ These components are used the same way as value type `IComponentData`. However, Because managed `IComponentData` is a managed type, it has the following performance drawbacks compared to value-type `IComponentData`: * It cannot be used with the Burst Compiler * It cannot be used in job structs -* It cannot use [Chunk memory](chunk_iteration.md) +* It cannot use [Chunk memory](xref:Unity.Entities.ArchetypeChunk) * It requires garbage collection You should try to limit the number of managed components, and use blittable types as much as possible. diff --git a/Documentation~/conversion.md b/Documentation~/conversion.md index 626017b2..c1a24ca1 100644 --- a/Documentation~/conversion.md +++ b/Documentation~/conversion.md @@ -299,6 +299,7 @@ internal class FooAuthoring : MonoBehaviour, IConvertGameObjectToEntity, Note the following restrictions: +* Generated authoring types _will_ overwrite existing types with the same names. E.g., if you have an `IComponentData` type named `MyAwesomeComponent` with the `[GenerateAuthoringComponent]` attribute, your own implementation of `MyAwesomeComponentAuthoring` will be overwritten by the generated `MyAwesomeComponentAuthoring`. * Only one component in a single C# file can have a generated authoring component, and the C# file must not have another MonoBehaviour in it. * The file doesn't have to follow any naming convention, i.e. it doesn't have to be named after the generated authoring component. * ECS only reflects public fields and they have the same name as that specified in the component. diff --git a/Documentation~/conversion_livelink.md b/Documentation~/conversion_livelink.md new file mode 100644 index 00000000..36d2be08 --- /dev/null +++ b/Documentation~/conversion_livelink.md @@ -0,0 +1,63 @@ +--- +uid: conversion-livelink +--- +# Conversion for LiveLink + +Unity 2020.2 and later support converting GameObject data to Entities in real-time. To enable this feature, toggle on Live Conversion via the menu item `DOTS/Live Link Mode/Live Conversion in EditMode`. When enabled, all objects in open subscenes are automatically converted to entities in the editor. Any undoable changes to objects in these open subscenes lead to a reconversion of the affected GameObjects in the subscene. The result of this reconversion is then compared to the last known conversion result (the `shadow world` of the subscene) to generate a patch. This patch is applied to the editor world and sent to any connected LiveLink players. + +## Incremental Conversion +The key feature that enables editing entity data at scale is _incremental conversion_: Whenever there is a change to a GameObject, the LiveLink code automatically detects this change and marks the GameObject for reconversion. This ensures that only the data that has actually changed is reconverted. All undoable operations are detected as changes. If an operation is not undoable, it is not detected. Since conversion might run every frame in the editor, it is crucial to ensure that the set of objects to convert is as small as possible. This introduces the difficulty that the result of incrementally converting a subset of the objects in a scene must match a full reconversion of the scene. + +### Dependency Management +Generally speaking, changes to a GameObject only trigger a reconversion of that specific GameObject. GameObjects are always converted as a whole, so any change will reconvert the entire GameObject. In some cases, your conversion code might depend on other data. If your conversion code depends on more than just the input object, you need to express these additional dependencies explicitly. These are the dependencies that are currently available: + * depending on an asset (meaning that the conversion result depends on the contents of an asset), + * depending on another GameObject (meaning that the conversion result depends on the state of another GameObject, e.g. the presence of components), + * depending on a component on another GameObject (meaning that the conversion result depends on the state of the component data of another GameObject). + +In the following, we will give an example and an explanation for all types of dependencies. + +#### Depending on the content of an Asset +When your conversion code reads the contents of an asset, you need to declare a dependency on the asset itself. This dependency means that the GameObject needs to be converted whenever the asset changes its content. As a concrete example, assume that you have conversion code that makes use of the bounding box around a mesh. This bounding box depends on the contents of a mesh asset. The GameObject thus needs to be reconverted whenever this mesh changes. + +[!code-cs[conversion](../DocCodeSamples.Tests/ConversionExamples.cs#DependencyOnAsset)] + +Note the lack of a check for `null`: All methods for declaring dependencies correctly handle the case of `null`, and it is imperative that you do not perform this check yourself. Unity overrides the comparison operator for the `UnityEngine.Object` type to also equal `null` when the object has been destroyed. Even though the object might be destroyed, we can still extract identifying data from it. This is crucial for correctly handling dependencies on objects that might be deleted and later restored (e.g. the deletion of an object is undone). + +You _do not_ need to declare a dependency if you merely _reference_ an asset. References are stable and can be tracked automatically. For example, if your code is merely storing a reference to a mesh there is no need to declare a dependency: + +[!code-cs[conversion](../DocCodeSamples.Tests/ConversionExamples.cs#NoDependencyOnAssetReference)] + +#### Depending on another GameObject +Dependencies on another GameObject need to be declared when you depend on general properties of the GameObject, e.g. its name, whether it is enabled, or the presence of components on that GameObject. + +[!code-cs[conversion](../DocCodeSamples.Tests/ConversionExamples.cs#DependencyOnName)] + +Note here that when you depend on the contents of a component on a GameObject you must declare a dependency on that component instead, see below. + +#### Depending on Component data +Conversion code might also depend on the component data on this or another GameObject. This is expected to be the most common kind of dependency. For example, your conversion code might depend on a `MeshFilter` that may or may not be stored on another GameObject. + +[!code-cs[conversion](../DocCodeSamples.Tests/ConversionExamples.cs#DependencyOnComponent)] + +Dependencies on Transform components specifically are mandatory: While GameObjects themselves are the smallest unit of conversion, there is code that relies on this dependency information on a component level. `Transform` components are hierarchical and a change to one transform component actually changes an entire hierarchy. There is a special code path for handling this case specifically, since moving around large hierarchies cannot rely on reconverting the entire hierarchy every frame. Instead, transform data on the converted entities is patched directly and only GameObjects whose conversion result actually depends on the transform data are reconverted (e.g. the conversion result depends on the rotation of the object or the specific position of the object in a scene). + +[!code-cs[conversion](../DocCodeSamples.Tests/ConversionExamples.cs#DependencyOnTransformComponent)] + +Dependencies on transform data should be used sparingly since they run the danger of making editing large scenes slow. This is the only case in which you need to declare a reference on a component on the same GameObject. + +When you store a reference to a GameObject instead of a component and use that to acquire a reference to a component, you also need to declare a dependency against the GameObject itself: + +[!code-cs[conversion](../DocCodeSamples.Tests/ConversionExamples.cs#DependencyOnOtherMeshFilterComponent)] + +### Debugging Incremental Conversion Failures +The result of incrementally reconverting a subset of objects in a scene must match the result of a full conversion bit-by-bit. This is a hard requirement. Verifying this requirement is a challenge. To facilitate this, you can use `DOTS/Live Link Mode/Debug Incremental Conversion`. This will run a full conversion after every incremental conversion and compare the results. If there are any differences between the two conversion results, it will print out a summary of the differences. + +The most common source for a mismatch between the two conversions are missing dependencies. When you are missing a dependency, a change to a GameObject or asset will not correctly reconvert all GameObjects whose conversion result depend on that GameObject or asset. + + +## Known Issues +There are known issues around `GetPrimaryEntity`. As of version 0.17 of the entities package, there is no way to express a dependency on the existence of a GameObject and `GetPrimaryEntity` does not register such a dependency. Therefore, the following demonstrates how to properly get a reference to another entity: + +[!code-cs[conversion](../DocCodeSamples.Tests/ConversionExamples.cs#GetPrimaryEntityFailure)] + +If the dependency registered on the last line is not present, you may run into an invalid conversion state: Specifically, deleting the GameObject referred to by `Other` and undoing said deletion will not reconvert your GameObject and lead to an invalid Entity reference. diff --git a/Documentation~/dynamic_buffers.md b/Documentation~/dynamic_buffers.md index ce0556e0..cdb9582d 100644 --- a/Documentation~/dynamic_buffers.md +++ b/Documentation~/dynamic_buffers.md @@ -16,7 +16,8 @@ ECS manages the container. For most purposes, you can use a declared `IBufferEle To specify an “internal capacity" for a dynamic buffer component, use the [InternalBufferCapacity attribute](xref:Unity.Entities.InternalBufferCapacityAttribute). The internal capacity defines the number of elements the dynamic buffer stores in the [ArchetypeChunk](xref:Unity.Entities.ArchetypeChunk) along with the other components of an entity. If you increase the size of a buffer beyond the internal capacity, the buffer allocates a heap memory block outside the current chunk and moves all existing elements. ECS manages this external buffer memory automatically, and frees the memory when the buffer component is removed. -**Note:** If the data in a buffer is not dynamic, you can use a [blob asset](xref:Unity.Entities.BlobBuilder) instead of a dynamic buffer. Blob assets can store structured data, including arrays. Multiple entities can share blob assets. +> [!NOTE] +> If the data in a buffer is not dynamic, you can use a [blob asset](xref:Unity.Entities.BlobBuilder) instead of a dynamic buffer. Blob assets can store structured data, including arrays. Multiple entities can share blob assets. ## Declaring buffer element types @@ -70,7 +71,8 @@ The following job creates a new entity using a command buffer and then adds a dy [!code-cs[declare](../DocCodeSamples.Tests/DynamicBufferExamples.cs#add-in-job)] -**Note:** You are not required to add data to the dynamic buffer immediately. However, you won't have access to the buffer again until after the entity command buffer you are using is executed. +> [!NOTE] +> You are not required to add data to the dynamic buffer immediately. However, you won't have access to the buffer again until after the entity command buffer you are using is executed. ## Accessing buffers diff --git a/Documentation~/ecs_chunk_component.md b/Documentation~/ecs_chunk_component.md index 089ad7a1..0dca2cda 100644 --- a/Documentation~/ecs_chunk_component.md +++ b/Documentation~/ecs_chunk_component.md @@ -12,7 +12,10 @@ Chunk components contain data that applies to all entities in a specific chunk. Although chunk components can have values unique to an individual chunk, they are still part of the archetype of the entities in the chunk. Therefore, if you remove a chunk component from an entity, ECS moves that entity to a different chunk (possibly a new one). Likewise, if you add a chunk component to an entity, ECS moves that entity to a different chunk because its archetype changes; the addition of the chunk component does not affect the remaining entities in the original chunk. -If you use an entity in a chunk to change the value of a chunk component, it changes the value of the chunk component that is common to all the entities in that chunk. If you change the archetype of an entity so that it moves into a new chunk that has the same type of chunk component, then the existing value in the destination chunk is unaffected. **Note:** If the entity is moved to a newly created chunk, then ECS creates a new chunk component for that chunk and assigns its default value. +If you use an entity in a chunk to change the value of a chunk component, it changes the value of the chunk component that is common to all the entities in that chunk. If you change the archetype of an entity so that it moves into a new chunk that has the same type of chunk component, then the existing value in the destination chunk is unaffected. + +> [!NOTE] +> If the entity is moved to a newly created chunk, then ECS creates a new chunk component for that chunk and assigns its default value. The main differences between working with chunk components and general-purpose components is that you use different functions to add, set, and remove them. @@ -25,7 +28,7 @@ The main differences between working with chunk components and general-purpose c | | | | **[ArchetypeChunk methods]** |   | | Read | [GetChunkComponentData<T>(ArchetypeChunkComponentType<T>)] | -| Check | [HasChunkComponent<T>(ArchetypeChunkComponentType<T>)] | +| Check | [HasChunkComponent<T>(ArchetypeChunkComponentType<T>)]| | Write | [SetChunkComponentData<T>(ArchetypeChunkComponentType<T>, T)] | | | | | **[EntityManager methods]** |  | @@ -52,7 +55,7 @@ Chunk components use the interface type [IComponentData]. ## Creating a chunk component -To add a chunk component directly, use an entity in the target chunk, or use an entity query that selects a group of target chunks. You cannot add chunk components inside a job, nor can they be added with an `EntityCommandBuffer`. +To add a chunk component directly, use an entity in the target chunk, or use an entity query that selects a group of target chunks. You cannot add chunk components inside a job, nor can they be added with an [EntityCommandBuffer]. You can also include chunk components as part of the [EntityArchetype] or list of [ComponentType] objects that ECS uses to create entities. ECS creates the chunk components for each chunk and stores entities with that archetype. @@ -107,7 +110,10 @@ Given an entity, you can access a chunk component in the chunk that contains the ## Updating a chunk component -You can update a chunk component given a reference to the [chunk](xref:Unity.Entities.ArchetypeChunk) it belongs to. In an `IJobChunk` job, you can call [ArchetypeChunk.SetChunkComponentData]. On the main thread, you can use the EntityManager version: [EntityManager.SetChunkComponentData]. **Note:** You cannot access chunk components using SystemBase Entities.ForEach because you do not have access to the `ArchetypeChunk` object or the EntityManager. +You can update a chunk component given a reference to the [chunk](xref:Unity.Entities.ArchetypeChunk) it belongs to. In an `IJobChunk` job, you can call [ArchetypeChunk.SetChunkComponentData]. On the main thread, you can use the EntityManager version: [EntityManager.SetChunkComponentData]. + +> [!NOTE] +> You cannot access chunk components using SystemBase Entities.ForEach because you do not have access to the `ArchetypeChunk` object or the EntityManager. **With the ArchetypeChunk instance** @@ -121,7 +127,8 @@ To update a chunk component on the main thread, use the EntityManager: If you have an entity in the chunk rather than the chunk reference itself, you can also use the EntityManger to get the chunk that contains the entity: -**Note:** If you only want to read a chunk component and not write to it, you should use [ComponentType.ChunkComponentReadOnly] when you define the entity query to avoid creating unnecessary job scheduling constraints. +> [!NOTE] +> If you only want to read a chunk component and not write to it, you should use [ComponentType.ChunkComponentReadOnly] when you define the entity query to avoid creating unnecessary job scheduling constraints. ## Deleting a chunk component @@ -131,7 +138,6 @@ Use the [EntityManager.RemoveChunkComponent] functions to delete a chunk compone If you remove a chunk component from an individual entity, that entity moves to a different chunk because the archetype of the entity changes. The chunk keeps the unchanged chunk component as long as there are other entities that remain in the chunk. - ## Using a chunk component in a query To use a chunk component in an entity query, you must use either the [ComponentType.ChunkComponent<T>] or [ComponentType.ChunkComponentReadOnly<T>] functions to specify the type. Otherwise, ECS treats the component as a general-purpose component instead of a Chunk component. @@ -155,6 +161,7 @@ Note that if you need to read the components in a chunk to determine the proper [!code-cs[aabb-chunk-component](../DocCodeSamples.Tests/ChunkComponentExamples.cs#aabb-chunk-component)] +[ArchetypeChunk.SetChunkComponentData]: xref:Unity.Entities.ArchetypeChunk.SetChunkComponentData* [AddChunkComponentData<T>(Entity)]: xref:Unity.Entities.EntityManager.AddChunkComponentData``1(Unity.Entities.Entity) [AddChunkComponentData<T>(EntityQuery, T)]: xref:Unity.Entities.EntityManager.AddChunkComponentData``1(Unity.Entities.EntityQuery,``0) [AddComponents(Entity,ComponentTypes)]: xref:Unity.Entities.EntityManager.AddComponents(Unity.Entities.Entity,Unity.Entities.ComponentTypes) @@ -170,13 +177,14 @@ Note that if you need to read the components in a chunk to determine the proper [[GetChunkComponentData<T>(Entity)]: xref:Unity.Entities.EntityManager.GetChunkComponentData``1(Unity.Entities.Entity [EntityManager.RemoveChunkComponent]: xref:Unity.Entities.EntityManager.RemoveChunkComponent* [EntityManager.SetChunkComponentData<T>(ArchetypeChunk, T)]: xref:Unity.Entities.EntityManager.SetChunkComponentData* +[EntityManager.SetChunkComponentData]: xref:Unity.Entities.EntityManager.SetChunkComponentData* [EntityQueryDesc]: xref:Unity.Entities.EntityQueryDesc [EntityQuery]: xref:Unity.Entities.EntityQuery -[Unity.Entities.EntityManager.GetComponentTypeHandle* [GetChunkComponentData<T>(ArchetypeChunk)]: xref:Unity.Entities.EntityManager.GetChunkComponentData``1(Unity.Entities.ArchetypeChunk) [GetChunkComponentData<T>(ArchetypeChunkComponentType<T>)]: xref:Unity.Entities.ArchetypeChunk.GetChunkComponentData* [GetChunkComponentData<T>(Entity)]: xref:Unity.Entities.EntityManager.GetChunkComponentData``1(Unity.Entities.Entity) [HasChunkComponent<T>(ArchetypeChunkComponentType<T>)]: xref:Unity.Entities.ArchetypeChunk.HasChunkComponent* +[GetComponentTypeHandle]: xref:Unity.Entities.EntityManager.GetComponentTypeHandle* [HasChunkComponent<T>(Entity)]: xref:Unity.Entities.EntityManager.HasChunkComponent* [IComponentData]: xref:Unity.Entities.IComponentData [IJobEntityBatch]: xref:Unity.Entities.IJobEntityBatch @@ -185,4 +193,5 @@ Note that if you need to read the components in a chunk to determine the proper [RemoveChunkComponentData<T>(EntityQuery)]: xref:Unity.Entities.EntityManager.RemoveChunkComponentData* [SetChunkComponentData<T>(ArchetypeChunkComponentType<T>, T)]: xref:Unity.Entities.ArchetypeChunk.SetChunkComponentData* [Updating a chunk component]: #update -[chunk]: xref:Unity.Entities.ArchetypeChunk \ No newline at end of file +[chunk]: xref:Unity.Entities.ArchetypeChunk +[EntityCommandBuffer]: xref:Unity.Entities.EntityCommandBuffer \ No newline at end of file diff --git a/Documentation~/ecs_components.md b/Documentation~/ecs_components.md index c52109f0..623f5c48 100644 --- a/Documentation~/ecs_components.md +++ b/Documentation~/ecs_components.md @@ -10,6 +10,7 @@ A component in ECS is a struct that has one of the following "marker interfaces" * [IComponentData] — Use for [general purpose](xref:ecs-component-data) and [chunk components]. * [IBufferElementData] — Associates [dynamic buffers] with an entity. * [ISharedComponentData] — Categorizes or groups entities by value within an archetype. For more information, see [Shared Component Data]. +* [Hybrid Components] — A way of adding UnityEngine components to entities. * [ISystemStateComponentData] — Associates a system-specific state with an entity and detects when individual entities are created or destroyed. For more information, see [System State Components]. * [ISharedSystemStateComponentData] — a combination of shared and system state data. See [System State Components]. * [Blob assets] – While not technically a "component," you can use blob assets to store data. Blob assets can be referenced by one or more components using a [BlobAssetReference] and are immutable. You can use blob assets to share data between assets and access that data in C# jobs. @@ -29,4 +30,4 @@ This diagram illustrates how ECS stores component data chunks by their archetype [ISharedSystemStateComponentData]: xref:Unity.Entities.ISystemStateSharedComponentData [ISystemStateComponentData]: xref:Unity.Entities.ISystemStateComponentData [System State Components]: xref:ecs-system-state-component-data - \ No newline at end of file +[Hybrid Components]: hybrid_component.md diff --git a/Documentation~/ecs_core.md b/Documentation~/ecs_core.md index 7f4d505c..c3361049 100644 --- a/Documentation~/ecs_core.md +++ b/Documentation~/ecs_core.md @@ -36,7 +36,8 @@ This organizational scheme provides a one-to-many relationship between archetype ECS does not store the entities that are in a chunk in a specific order. When an entity is created or changed to a new archetype, ECS puts it into the first chunk that stores the archetype, and that has space. Chunks remain tightly packed, however; when an entity is removed from an archetype, ECS moves the components of the last entity in the chunk into the newly vacated slots in the component arrays. -**Note:** The values of shared components in an archetype also determine which entities are stored in which chunk. All of the entities in a given chunk have the exact same values for any shared components. If you change the value of any field in a shared component, the modified entity moves to a different chunk, just as it would if you changed that entity's archetype. A new chunk is allocated, if necessary. +> [!NOTE] +> The values of shared components in an archetype also determine which entities are stored in which chunk. All of the entities in a given chunk have the exact same values for any shared components. If you change the value of any field in a shared component, the modified entity moves to a different chunk, just as it would if you changed that entity's archetype. A new chunk is allocated, if necessary. Use shared components to group entities within an archetype when it is more efficient to process them together. For example, the Hybrid Renderer defines its [RenderMesh component] to achieve this. @@ -48,11 +49,11 @@ To identify which entities a system should process, use an [EntityQuery]. An ent * **Any** — the archetype must contain at least one of the component types in the **Any** category. * **None** — the archetype must not contain any of the component types in the **None** category. -An entity query provides a list of the chunks that contain the types of components the query requires. You can then iterate over the components in those chunks directly with [IJobChunk]. +An entity query provides a list of the chunks that contain the types of components the query requires. You can then iterate over the components in those chunks directly with [IJobEntityBatch]. ## Jobs -To take advantage of multiple threads, you can use the [C# Job system]. ECS provides the [SystemBase] class, along with the `Entities.ForEach` and [IJobChunk] `Schedule()` and `ScheduleParallel()` methods, to transform data outside the main thread. `Entities.ForEach` is the simplest to use and typically requires fewer lines of code to implement. You can use IJobChunk for more complex situations that `Entities.ForEach` does not handle. +To take advantage of multiple threads, you can use the [C# Job system]. ECS provides the [SystemBase] class, along with the `Entities.ForEach` and [IJobEntityBatch] `Schedule()` and `ScheduleParallel()` methods, to transform data outside the main thread. `Entities.ForEach` is the simplest to use and typically requires fewer lines of code to implement. You can use IJobChunk for more complex situations that `Entities.ForEach` does not handle. ECS schedules jobs on the main thread in the [order that your systems are arranged]. As jobs are scheduled, ECS keeps track of which jobs read and write which components. A job that reads a component is dependent on any prior scheduled job that writes to the same component and vice versa. The job scheduler uses job dependencies to determine which jobs it can run in parallel and which must run in sequence. @@ -78,7 +79,7 @@ When you create your game or application in the Unity Editor, you can use GameOb [Entity component buffer systems]: xref:Unity.Entities.EntityCommandBufferSystem [EntityQuery]: xref:Unity.Entities.EntityQuery [group]: xref:Unity.Entities.ComponentSystemGroup -[IJobChunk]: chunk_iteration_job.md +[IJobEntityBatch]: ecs_ijobentitybatch.md [RenderMesh component]: https://docs.unity3d.com/Packages/com.unity.rendering.hybrid@latest?subfolder=/api/Unity.Rendering.RenderMesh.html [simulation group]: xref:Unity.Entities.SimulationSystemGroup [System Update Order]: system_update_order.md diff --git a/Documentation~/ecs_creating_systems.md b/Documentation~/ecs_creating_systems.md index 267a2189..88243614 100644 --- a/Documentation~/ecs_creating_systems.md +++ b/Documentation~/ecs_creating_systems.md @@ -1,4 +1,7 @@ -## Creating a system +--- +uid: ecs-creating-systems +--- +# Creating a system Implement the abstract class [SystemBase] to create an ECS system. @@ -21,7 +24,7 @@ All the system events run on the main thread. Ideally, your [OnUpdate()] functio * [Entities.ForEach] -- the simplest way to iterate over ECS component data. * [Job.WithCode] -- execute a lambda function as a single, background job. -* [IJobChunk] -- a "lower level" mechanism for iterating over ECS component data chunk-by-chunk. +* [IJobEntityBatch] -- a "lower level" mechanism for iterating over ECS component data chunk-by-chunk. * [C# Job System] -- create and schedule general purpose C# jobs. The following example illustrates using [Entities.ForEach] to implement a system that updates one component based on the value of another: @@ -33,7 +36,7 @@ The following example illustrates using [Entities.ForEach] to implement a system [Job.WithCode]: xref:Unity.Entities.SystemBase.Job [EntityCommandBufferSystem]: xref:ecs-entity-command-buffer [EntityCommandBuffer]: xref:Unity.Entities.EntityCommandBuffer -[IJobChunk]: xref:Unity.Entities.IJobChunk +[IJobEntityBatch]: xref:Unity.Entities.IJobEntityBatch [OnCreate()]: xref:Unity.Entities.ComponentSystemBase.OnCreate* [OnDestroy()]: xref:Unity.Entities.ComponentSystemBase.OnDestroy* [OnStartRunning()]: xref:Unity.Entities.ComponentSystemBase.OnStartRunning* @@ -55,7 +58,3 @@ The following example illustrates using [Entities.ForEach] to implement a system [System update order]: system_update_order.md [ShouldRunSystem()]: xref:Unity.Entities.ComponentSystemBase.ShouldRunSystem* - -[ComponentSystem]: https://docs.unity3d.com/Packages/com.unity.entities@0.5/manual/entity_iteration_foreach.html -[IJobForEach]: https://docs.unity3d.com/Packages/com.unity.entities@0.5/manual/entity_iteration_job.html -[JobComponentSystem]: https://docs.unity3d.com/Packages/com.unity.entities@0.5/manual/entities_job_foreach.html diff --git a/Documentation~/ecs_debugging.md b/Documentation~/ecs_debugging.md index fdce4832..14e4e3f6 100644 --- a/Documentation~/ecs_debugging.md +++ b/Documentation~/ecs_debugging.md @@ -32,7 +32,8 @@ Use the System Display control drop down at the top of the list to control what Select a system to view its details. -**Note:** If you select the EntityManager entry in the System list, then you have different options on the System details section. +> [!NOTE] +> If you select the EntityManager entry in the System list, then you have different options on the System details section. ### System details diff --git a/Documentation~/ecs_entities.md b/Documentation~/ecs_entities.md index 3cc88476..13e46273 100644 --- a/Documentation~/ecs_entities.md +++ b/Documentation~/ecs_entities.md @@ -2,15 +2,10 @@ uid: ecs-entities --- # Entities - -Entities are one of the three principle elements of an Entity Component System architecture. They represent the individual "things" in your game or application. An entity has neither behavior nor data; instead, it identifies which pieces of data belong together. [Systems](ecs_systems.md) provide the behavior, and [components](ecs_components.md) store the data. +Entities are one of the three principal elements of an Entity Component System architecture. They represent the individual "things" in your game or application. An entity has neither behavior nor data; instead, it identifies which pieces of data belong together. [Systems](ecs_systems.md) provide the behavior, and [components](ecs_components.md) store the data. -An entity is essentially an ID. The easiest way to think of it is as a super lightweight [GameObject](https://docs.unity3d.com/Manual/class-GameObject.html) that does not even have a name by default. Entity IDs are stable; you can use them to store a reference to another component or entity. For example, a child entity in a hierarchy might need to reference its parent entity. +An entity is essentially an ID. The easiest way to think of it is as a lightweight [GameObject](https://docs.unity3d.com/Manual/class-GameObject.html) that does not even have a name by default. Entity IDs are stable; you can use them to store a reference to another component or entity. For example, a child entity in a hierarchy might need to reference its parent entity. An [EntityManager](xref:Unity.Entities.EntityManager) manages all of the entities in a [World](xref:Unity.Entities.World). An EntityManager maintains the list of entities and organizes the data associated with an entity for optimal performance. @@ -18,7 +13,7 @@ Although an entity does not have a type, groups of entities can be categorized b ## Creating entities -The easiest way to create an entity is in the Unity Editor. You can set ECS to convert both GameObjects placed in a Scene and Prefabs into entities at runtime. For more dynamic parts of your game or application, you can create spawning systems that create multiple entities in a job. Finally, you can use one of the [EntityManager.CreateEntity](xref:Unity.Entities.EntityManager.CreateEntity) functions to create entities one at a time. +The easiest way to create an entity is in the Unity Editor. You can set ECS to convert both GameObjects placed in a Scene and Prefabs into entities at runtime. For more dynamic parts of your game or application, you can create spawning systems that create multiple entities in a job. Finally, you can use one of the [EntityManager.CreateEntity](xref:Unity.Entities.EntityManager.CreateEntity) functions to create entities one at a time. Creating entities with the EntityManager is typically the least efficient method. ### Creating entities with an EntityManager @@ -46,4 +41,4 @@ The EntityManager provides functions to remove a component from a single entity ## Iterating entities -Iterating over all entities that have a matching set of components, is at the center of the ECS architecture. See [Accessing entity Data](chunk_iteration.md). \ No newline at end of file +Iterating over all entities that have a matching set of components, is at the center of the ECS architecture. See [Accessing entity data](chunk_iteration.md). \ No newline at end of file diff --git a/Documentation~/ecs_entities_foreach.md b/Documentation~/ecs_entities_foreach.md index 96a0c6a3..6cf9bb43 100644 --- a/Documentation~/ecs_entities_foreach.md +++ b/Documentation~/ecs_entities_foreach.md @@ -26,7 +26,10 @@ In this example, only the Destination and Source components can be accessed insi ### Accessing the EntityQuery object -To access the [EntityQuery] object that [Entities.ForEach] creates, use [WithStoreEntityQueryInField(ref query)] with the ref parameter modifier. This function assigns a reference to the query to the field you provide. **Note:** The EntityQuery is created in OnCreate. This method gives a copy of that query that can be used at any time (even before the Entities.ForEach is invoked). Also, this EntityQuery does not have any of the filters that the Entities.ForEach invocation sets up. +To access the [EntityQuery] object that [Entities.ForEach] creates, use [WithStoreEntityQueryInField(ref query)] with the ref parameter modifier. This function assigns a reference to the query to the field you provide. + +> [!NOTE] +> The EntityQuery is created in OnCreate. This method gives a copy of that query that can be used at any time (even before the Entities.ForEach is invoked). Also, this EntityQuery does not have any of the filters that the Entities.ForEach invocation sets up. The following example illustrates how to access the EntityQuery object implicitly created for an [Entities.ForEach] construction. In this case, the example uses the EntityQuery object to invoke the [CalculateEntityCount()] method. The example uses this count to create a native array with enough space to store one value per entity selected by the query: @@ -91,7 +94,8 @@ You can declare the three [special, named parameters](#named-parameters) `entity [!code-cs[lambda-params](../DocCodeSamples.Tests/LambdaJobExamples.cs#lambda-params-many)] -**Note:** The default limit of eight arguments for a ForEach lambda function was chosen because declaring too many delegates and overloads has a negative effect on IDE performance. A unique delegate type and ForEach overload is required for each combination of ref/in/value and number of arguments. +> [!NOTE] +> The default limit of eight arguments for a ForEach lambda function was chosen because declaring too many delegates and overloads has a negative effect on IDE performance. A unique delegate type and ForEach overload is required for each combination of ref/in/value and number of arguments. ### Component parameters @@ -102,13 +106,15 @@ To update a component value, you must pass it to the lambda function by referenc To designate a component passed to the lambda function as read-only, use the `in` keyword in the parameter list. -**Note:** Using `ref` means that the components in the current chunk are marked as changed, even if the lambda function does not actually modify them. For efficiency, always designate components that your lambda function does not modify as read only using the `in` keyword. +> [!NOTE] +> Using `ref` means that the components in the current chunk are marked as changed, even if the lambda function does not actually modify them. For efficiency, always designate components that your lambda function does not modify as read only using the `in` keyword. The following example passes a Source component parameter to the job as read-only, and a Destination component parameter as writable: [!code-cs[read-write-modifiers](../DocCodeSamples.Tests/LambdaJobExamples.cs#read-write-modifiers)] -**Note:** Currently, you cannot pass chunk components to the Entities.ForEach lambda function. +> [!NOTE] +> Currently, you cannot pass chunk components to the Entities.ForEach lambda function. For dynamic buffers, use DynamicBuffer<T> rather than the Component type stored in the buffer: @@ -136,7 +142,8 @@ See [SystemBase.Entities] for more information about setting attributes for capt You can also indicate that you want captured NativeContainers or types that contain NativeContainers to be Disposed of after your [Entities.ForEach] runs by using `WithDisposeOnCompletion(variable)`. This will either Dispose of the types immediately after the lambda runs (in the case of `Run()`) or schedule them to be Diposed later with a Job and return the JobHandle (in the case of `Schedule()`/`ScheduleParallel()`). -**Note:** When executing the function with `Run()` you can write to captured variables that are not native containers. However, you should still use blittable types where possible so that the function can be compiled with [Burst]. +> [!NOTE] +> When executing the function with `Run()` you can write to captured variables that are not native containers. However, you should still use blittable types where possible so that the function can be compiled with [Burst]. ## Supported Features diff --git a/Documentation~/ecs_entity_query.md b/Documentation~/ecs_entity_query.md index b670715d..bbf43f2c 100644 --- a/Documentation~/ecs_entity_query.md +++ b/Documentation~/ecs_entity_query.md @@ -13,7 +13,8 @@ You can use an [EntityQuery] to do the following: The entity and component arrays an [EntityQuery] returns are guaranteed to be "parallel", that is, the same index value always applies to the same entity in any array. -**Note:** The SystemBase [Entities.ForEach] constructions create internal [EntityQuery] instances based on the component types and attributes you specify for these APIs. You cannot use a different [EntityQuery] object with [Entities.ForEach], (though you can get the query object that an [Entities.ForEach] instance constructs and use it elsewhere). +> [!NOTE] +> The SystemBase [Entities.ForEach] constructions create internal [EntityQuery] instances based on the component types and attributes you specify for these APIs. You cannot use a different [EntityQuery] object with [Entities.ForEach], (though you can get the query object that an [Entities.ForEach] instance constructs and use it elsewhere). ## Defining a query @@ -37,7 +38,8 @@ For example, the following query includes archetypes that contain the RotationQu [!code-cs[query-desc](../DocCodeSamples.Tests/EntityQueryExamples.cs#query-desc)] -**Note:** Do not include optional components in the [EntityQueryDesc]. To handle optional components, use the [ArchetypeChunk.Has] method to determine whether a chunk contains the optional component or not. Because all entities within the same chunk have the same components, you only need to check whether an optional component exists once per chunk: not once per entity. +> [!NOTE] +> Do not include optional components in the [EntityQueryDesc]. To handle optional components, use the [ArchetypeChunk.Has] method to determine whether a chunk contains the optional component or not. Because all entities within the same chunk have the same components, you only need to check whether an optional component exists once per chunk: not once per entity. ### Query options @@ -94,7 +96,8 @@ Filters exclude entities that otherwise would be included among those returned b The filters you set remain in effect until you call [ResetFilter] on the query object. -**Note:** Write Groups use a different mechanism. See [Query options]. +> [!NOTE] +> Write Groups use a different mechanism. See [Query options]. ### Shared component filters @@ -112,7 +115,8 @@ If you only need to update entities when a component value has changed, you can [!code-cs[change-filter](../DocCodeSamples.Tests/EntityQueryExamples.cs#change-filter)] -**Note:** For efficiency, the change filter applies to whole chunks, not individual entities. The change filter also only checks whether a system has run that declared write access to the component, not whether it actually changed any data. In other words, if another job which had the ability to write to that type of component accesses the chunk, then the change filter includes all entities in that chunk. This is why you should always declare read only access to components that you do not need to modify. +> [!NOTE] +> For efficiency, the change filter applies to whole chunks, not individual entities. The change filter also only checks whether a system has run that declared write access to the component, not whether it actually changed any data. In other words, if another job which had the ability to write to that type of component accesses the chunk, then the change filter includes all entities in that chunk. This is why you should always declare read only access to components that you do not need to modify. ## Executing the query diff --git a/Documentation~/ecs_generic_jobs.md b/Documentation~/ecs_generic_jobs.md new file mode 100644 index 00000000..77fe034f --- /dev/null +++ b/Documentation~/ecs_generic_jobs.md @@ -0,0 +1,248 @@ +--- +uid: ecs-generic_jobs +--- + +# Generic jobs + +In normal C#, we can use inheritance and interfaces to make a piece of code work with a range of types. For example: + +```csharp + // The method is not limited to just one kind of + // input but rather any type which implements IBlendable. + void foo(IBlendable a) {...} +``` + +In HPC#, we can't use managed types or virtual method calls, so generics are our only option for making a piece of code operate on a range of types: + +```csharp + // This method can operate on any IBlendable struct (and can call the + // IBlendable methods) but requires no managed objects or virtual method calls. + void foo(T a) where T : struct, IBlendable {...} +``` + +Jobs must be written in HPC#, so for a job to operate upon a range of types, it must be generic: + +```csharp + [BurstCompile()] + public struct BlendJob : IJob + where T : struct, IBlendable + { + public NativeReference blendable; + + public void Execute() + { + var val = blendable.Value; + val.Blend(); + blendable.Value = val; + } + } +``` + +# Scheduling generic jobs from Bursted code + +Scheduling a generic job from Burst-compiled code requires reflection data for the concrete specialization of the job. Unfortunately, this reflection is not automatically genererated for all concrete specializations, so in some cases you must register them manually: + +```csharp +// This assembly attribute allows Burst-compiled +// code in the same assembly to schedule the +// concrete specialization for MyJob. */ +[assembly: RegisterGenericJobType(typeof(MyJob))] +``` + +Attempting to schedule a job for which the concrete specialization is not registered in an assembly throws an exception. + +Which assembly a type is registered in doesn't matter, *e.g.* if a job type is registered only in assembly *Foo*, it can be scheduled fine in assembly *Bar*. + +Redundantly registering the same concrete specialization more than once is not an error. + +## Automatic registration of concrete job types + +When you instantiate a concrete specialization of a generic job directly, the specialization is automatically registered in the assembly: + +```csharp +// Registers specialization for MyJob in the assembly. +var job = new MyJob(); +``` + +However, when instantiating a concrete specialization *indirectly*, it is *not* automatically registered... + +```csharp +void makeJob() +{ + new MyJob().Schedule(); +} + +void foo() +{ + makeJob(); // does NOT register MyJob +} +``` + +...*unless* the generic job is included in the signature as either the return type or an `out` param: + +```csharp +MyJob makeJob() +{ + var j = new MyJob() + j.Schedule(); + return j; +} + +void foo() +{ + makeJob(); // registers MyJob +} +``` + +This indirect registration works through multiple levels of generic method calls: + +```csharp +MyJob makeJob() +{ + var j = new MyJob() + j.Schedule(); + return j; +} + +void foo() +{ + makeJob(); +} + +void bar() +{ + foo(); // registers MyJob +} +``` + +Another sometimes useful trick is to nest the generic job in another class or struct: + +```csharp +struct BlendJobWrapper where T : struct, IBlendable +{ + public T blendable; + + [BurstCompile()] + public struct BlendJob : IJob + { + public T blendable; + + public void Execute() {...} + } + + public JobHandle Schedule(JobHandle dep = new JobHandle()) + { + return new BlendJob { blendable = blendable }.Schedule(dep); + } +} +``` + +Above, if `BlendJobWrapper` is registered automatically or manually, then `BlendJob` is also effectively registered. A wrapper type around just one generic job doesn't really solve anything, but these wrapper types can allow for more elegant job creation and scheduling when multiple generic jobs are used in conjunction (as shown in the next section). + +## Example: Jobified sorting + +The `NativeSortExtension` class has methods for sorting, including this one that uses jobs to do the sorting: + +```csharp +public unsafe static JobHandle Sort(T* array, int length, U comp, JobHandle deps) + where T : unmanaged + where U : IComparer +{ + if (length == 0) + return inputDeps; + + var segmentSortJob = new SegmentSort { Data = array, Comp = comp, Length = length, SegmentWidth = 1024 }; + var segmentSortMergeJob = new SegmentSortMerge { Data = array, Comp = comp, Length = length, SegmentWidth = 1024 }; + + var segmentCount = (length + 1023) / 1024; + var workerSegmentCount = segmentCount / math.max(1, JobsUtility.MaxJobThreadCount); + var handle = segmentSortJob.Schedule(segmentCount, workerSegmentCount, deps); + return segmentSortMergeJob.Schedule(segmentSortJobHandle); +} +``` + +Note that the sorting is split across two jobs: the first splits the array into subsections and sorts them individually (in parallel); the second waits for the first and then merges these sorted subsections into a final sorted result. + +As currently defined, however, the method will *not* automatically register concrete specializations of the two generic jobs (`SegmentSort` and `SegmentSortMerge`) because neither type is used as the return type or as an `out` parameter of the method. + +An ugly solution would be to make both jobs into `out` parameters:: + +```csharp +public unsafe static JobHandle Sort(T* array, int length, U comp, JobHandle deps + out SegmentSort segmentSortJob, out SegmentSortMerge segmentSortMergeJob) + where T : unmanaged + where U : IComparer +{ + if (length == 0) + return inputDeps; + + segmentSortJob = new SegmentSort { Data = array, Comp = comp, Length = length, SegmentWidth = 1024 }; + segmentSortMergeJob = new SegmentSortMerge { Data = array, Comp = comp, Length = length, SegmentWidth = 1024 }; + + var segmentCount = (length + 1023) / 1024; + var workerSegmentCount = segmentCount / math.max(1, JobsUtility.MaxJobThreadCount); + var handle = segmentSortJob.Schedule(segmentCount, workerSegmentCount, deps); + return segmentSortMergeJob.Schedule(segmentSortJobHandle); +} +``` + +This solves the registration problem, but users would have to pass `out` arguments to get two job structs they probably don't want. + +The arguably more elegant solution is to wrap both job types together in a wrapper type: + +```csharp +unsafe struct SortJob : + where T : unamanged + where U : IComparer +{ + public T* data; + public U comparer; + public int length; + + unsafe struct SegmentSort : IJobParallelFor + { + [NativeDisableUnsafePtrRestriction] + public T* data; + public U comp; + public int length; + public int segmentWidth; + + public void Execute(int index) {...} + } + + unsafe struct SegmentSortMerge : IJob + { + [NativeDisableUnsafePtrRestriction] + public T* data; + public U comp; + public int length; + public int segmentWidth; + + public void Execute() {...} + } + + public JobHandle Schedule(JobHandle dep = new JobHandle()) + { + if (length == 0) + return inputDeps; + + var segmentSortJob = new SegmentSort { Data = array, Comp = comp, Length = length, SegmentWidth = 1024 }; + var segmentSortMergeJob = new SegmentSortMerge { Data = array, Comp = comp, Length = length, SegmentWidth = 1024 }; + + var segmentCount = (length + 1023) / 1024; + var workerSegmentCount = segmentCount / math.max(1, JobsUtility.MaxJobThreadCount); + var handle = segmentSortJob.Schedule(segmentCount, workerSegmentCount, deps); + return segmentSortMergeJob.Schedule(segmentSortJobHandle); + } +} +``` + +In this arrangement, rather than call a `Sort()` method, users create an instance of `SortJob` and call its `Schedule()` method. Just by making a concrete instantiation of `SortJob`, users are also automatically registering the needed concrete specializations of `SegmentSort` and `SegmentSortMerge`. + +So this pattern of nesting generic jobs enables a convenient API that schedules related sets of generic jobs together. + +## Why doesn't the compiler always register the needed reflection data automatically? + +The compiler could figure it out, but it would slow down compilation considerably. More details in [this forum post](https://forum.unity.com/threads/will-registergenericjobtype-be-required-for-all-generic-jobs-going-forward.974187/#post-6384873). + + diff --git a/Documentation~/ecs_ijobentitybatch.md b/Documentation~/ecs_ijobentitybatch.md new file mode 100644 index 00000000..79abd481 --- /dev/null +++ b/Documentation~/ecs_ijobentitybatch.md @@ -0,0 +1,257 @@ +--- +uid: ecs-ijobentitybatch +--- + +# Using Entity Batch jobs + +Implement [IJobEntityBatch] or [IJobEntityBatchWithIndex] inside a system to iterate through your data in batches of entities. + +When you schedule an [IJobEntityBatch] job in the [OnUpdate] function of a system, the system identifies the chunks that should be passed to the job using the entity query you pass to the schedule function. The job invokes your `Execute` function once for each batch of entities in those chunks. By default, the batch size is a full chunk, but you can set the batch size to be some fraction of a chunk when scheduling the job. No matter the batch size, the entities in a given batch are always stored in the same chunk. In your job’s `Execute` function, you can iterate over the data inside each batch, entity by entity. + +Use [IJobEntityBatchWithIndex] when you need an index value for all entities across the set of batches. Otherwise, [IJobEntityBatch] is more efficient since it doesn’t need to calculate these indices. + +To implement a batch job: + +1. [Query for data with an EntityQuery] to identify the entities that you want to process. + +2. [Define the job struct] using either [IJobEntityBatch] or [IJobEntityBatchWithIndex]. + +3. [Declare the data your job accesses]. On the job structure, include fields for ComponentTypeHandle objects that identify the types of components the job must directly access. Also, specify whether the job reads or writes to those components. You can also include fields that identify data you want to look up for entities that aren’t part of the query, as well as fields for non-entity data. + +4. [Write the Execute function] of the job struct to transform your data. Get the NativeArray instances for the components the job reads or writes and then iterate over the current batch to perform the desired work. + +5. [Schedule the job] in the system OnUpdate function, passing the entity query identifying the entities to process to the schedule function. + +> [!NOTE] +> Iterating with [IJobEntityBatch] or [IJobEntityBatchWithIndex] is more complicated and requires more code setup than using Entities.ForEach, and should only be used when necessary or more efficient. + +For more information, the [ECS samples repository] contains a simple HelloCube example that demonstrates how to use IJobEntityBatch. + +> [!NOTE] +> [IJobEntityBatch] supersedes [IJobChunk]. The primary differences are that you can schedule an [IJobEntityBatch] to iterate over smaller batches of entities than a full chunk and that you use the variant [IJobEntityBatchWithIndex] if you need an job-wide index for the entities in each batch. + + +## Query for data with an EntityQuery + +An [EntityQuery] defines the set of component types that an [EntityArchetype] must contain for the system to process its associated chunks and entities. An archetype can have additional components, but it must have at least those that the query defines. You can also exclude archetypes that contain specific types of components. + +Pass the query that selects the entities your job should process to the schedule method that you use to schedule the job. + +See [Using an EntityQuery to query data] for information about defining queries. + +> [!NOTE] +> Do not include completely optional components in the [EntityQuery]. To handle optional components, use the [ArchetypeChunk.Has] method inside [IJobEntityBatch.Execute] to determine whether the current [ArchetypeChunk] has the optional component or not. Because all entities in the same batch have the same components, you only need to check whether an optional component exists once per batch, not once per entity. + + +## Define the job struct + +A job struct consists of an [Execute] function that does the work to be performed and fields that declare the data used by the `Execute` function. + +A typical [IJobEntityBatch] job struct looks like: + +[!code-cs[typical-struct](../DocCodeSamples.Tests/IJobEntityBatchExamples.cs#typical-struct)] + +This example accesses the data for two components of an entity, VelocityVector and [Translation], and calculates a new translation based on the time elapsed since the last update. + +### IJobEntityBatch versus IJobEntityBatchWithIndex + +The only difference between [IJobEntityBatch] and [IJobEntityBatchWithIndex] is that [IJobEntityBatchWithIndex] passes an `indexOfFirstEntityInQuery` parameter when it invokes the Execute function on a batch. This parameter is the index of the first entity in the current batch in the list of all entities selected by the entity query. + +Use [IJobEntityBatchWithIndex] when you need an individual index for each entity. For example, if you calculate a unique result for each entity, you could use this index to write each result to a different element of a [native array]. If you don’t use the `indexOfFirstEntityInQuery` value, use [IJobEntityBatch] instead, to avoid the overhead of calculating the index values. + +> [!NOTE] +> When you are adding commands to an [EntityCommandBuffer.ParallelWriter] , you can use the `batchIndex` parameter as the `sortKey` argument of the command buffer functions. You do not need to use [IJobEntityBatchWithIndex] just to get a unique sort key for each entity. The `batchIndex` parameter available from both job types works for this purpose. + + +### Declare the data your job accesses + +The fields in your job struct declare the data available to your Execute function. These fields fall into four general categories: + +* [ComponentTypeHandle] fields -- component handle fields allow your Execute function to access the entity components and buffers stored in the current chunk. See [Accessing entity component and buffer data]. + +* [ComponentDataFromEntity], [BufferFromEntity] fields -- these "data from entity" fields allow your Execute function to look up data for any entity no matter where it is stored. (This type of random access is the least efficient way to access data and should only be used when necessary.) See [Looking up data for other entities]. + +* Other fields -- you can declare other fields for your struct as needed. You can set the value of such fields each time you schedule the job. See [Accessing other data]. + +* Output fields -- in addition to updating writable entity components or buffers in a job, you can also write to [native container] fields declared for the job struct. Such fields must be a native container, such as a [NativeArray]; you cannot use other data types. + + +#### Accessing entity component and buffer data + +Accessing data stored in a component of one of the entities in the query is three-step process: + +__First__, you must define a [ComponentTypeHandle] field on the job struct, setting T to the data type of the component. For example: + +[!code-cs[component-handle](../DocCodeSamples.Tests/IJobEntityBatchExamples.cs#component-handle)] + +__Next__, you use this handle field inside the job’s `Execute` method to access the array containing the data for that type component (as a [NativeArray]). This array contains an element for every entity in a batch: + +[!code-cs[component-array](../DocCodeSamples.Tests/IJobEntityBatchExamples.cs#component-array)] + +__Finally__, when you schedule the job (in the system’s [OnUpdate] method, you assign a value to the type handle field using the [ComponentSystemBase.GetComponentTypeHandle] function: + +[!code-cs[component-set-handle](../DocCodeSamples.Tests/IJobEntityBatchExamples.cs#component-set-handle)] + +Always set the component handle fields of a job every time you schedule the job. Do not cache a type handle and use it later. + +Each array of component data in a batch is aligned such that a given index corresponds to the same entity in all arrays. In other words, if your job uses two components of an entity, use the same array index in both data arrays to access data for the same entity. + +You can use [ComponentTypeHandle] variables to access component types that you do not include in the [EntityQuery]. However, you must check to make sure that the current batch contains the component before you try to access it. Use the [Has] function to check whether the current batch contains a specific component type: + +The [ComponentTypeHandle] fields are part of the ECS job safety system that prevents race conditions when reading and writing of data in jobs. Always set the `isReadOnly` argument of the [GetComponentTypeHandle] function to accurately reflect how the component is accessed in a job. + + +#### Looking up data for other entities + +Accessing component data through an [EntityQuery] and an [IJobEntityBatch] job (or [Entities.ForEach]) is almost always the most efficient way to access your data. However, there are often cases where you need to look up data in a random-access fashion, for example, when one entity depends on data in another. To perform this type of data lookup, you must pass a different type of handle to your job through the job struct: + +[ComponentDataFromEntity] -- access the component of any entity with that component type + +[BufferFromEntity] -- access a buffer of any entity with that buffer type + +These types provide an array-like interface to components and buffers, indexed by [Entity] object. In addition to being relatively inefficient because of the random data access, looking up data this way can also increase the chances that you run into the safeguards erected by the job safety system. For example, if you try to set the transform of one entity based on the transform of another entity, the job safety system cannot tell if this is safe, since you have access to all transforms through the [ComponentDataFromEntity] object. You could be writing to the same data you are reading and so creating a race condition. + +To use [ComponentDataFromEntity] and [BufferFromEntity], declare a field of type [ComponentDataFromEntity] or [BufferFromEntity] on the job struct and set the value of the field before scheduling the job. + +For more information, see [Looking up data]. + + +#### Accessing other data + +If you need other information when executing a job, you can define a field on the job struct and then access the field inside the `Execute` method. You can only set the value when scheduling the job and that value remains the same for all batches. + +For example, if you are updating moving objects, you most likely need to pass in the time elapsed since the previous update. To do this, you could define a field named `DeltaTime`, set its value in `OnUpdate` and use that value in the job `Execute` function. At each frame, you would calculate and assign a new value to your `DeltaTime` field before scheduling the job for the new frame. + + +### Write the Execute function + +Write the `Execute` function of your job struct to transform your data from its input state to the desired output state. + +The signature of the [IJobEntityBatch.Execute] method is: + +```cs +void Execute(ArchetypeChunk batchInChunk, int batchIndex) +``` +And for [IJobEntityBatchWithIndex.Execute], the signature is: + +```cs +void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirstEntityInQuery) +``` + +#### The batchInChunk parameter + +The `batchInChunk` parameter provides the [ArchetypeChunk] instance that contains the entities and components for this iteration of the job. Because a chunk can only contain a single archetype, all of the entities in a chunk have the same set of components. By default, this object includes all the entities in a single chunk; however, if you schedule the job with [ScheduleParallel], you can specify that a batch contains only a fraction of the number of entities in the chunk. + +Use the `batchInChunk` parameter to get the [NativeArray] instances you need to access the component data. (You must also declare a field with the corresponding component type handle — and set that field when scheduling the job.) + +#### The batchIndex parameter + +The `batchIndex` parameter is the index of the current batch in the list of all batches created for the current job. The batches in a job are not necessarily processed in the indexed order. + +You can use the `batchIndex` value in situations where you have a native container with one element per batch to which you want to write a value computed in your `Execute` function. Use the `batchIndex` as the array index into this container. + +If you use a parallel writing [entity command buffer], pass the `batchIndex` argument as the `sortKey` parameter to the command buffer functions. + +#### The indexOfFirstEntityInQuery parameter + +An [IJobEntityBatchWithIndex] `Execute` function has an additional parameter named `indexofFirstEntityInQuery`. If you picture the entities selected by your query as a single list, `indexOfFirstEntityInQuery` would be the index into that list of the first entity in the current batch. The batches in a job are not necessarily processed in the indexed order. + +#### Optional components + +If you have the [Any] filter in your entity query or have completely optional components that don’t appear in the query at all, you can use the [ArchetypeChunk.Has] function to test whether the current chunk contains one of those components before you use it: + +[!code-cs[batch-has-component](../DocCodeSamples.Tests/IJobEntityBatchExamples.cs#batch-has-component)] + + +## Schedule the job + +To run an [IJobEntityBatch] job, you must create an instance of your job struct, set the struct fields, and then schedule the job. When you do this in the [OnUpdate] function of a [SystemBase] implementation, the system schedules the job to run every frame. + +[!code-cs[schedule-job](../DocCodeSamples.Tests/IJobEntityBatchExamples.cs#schedule-job)] + +When you call the [GetComponentTypeHandle] function to set your component type variables, make sure that you set the `isReadOnly` parameter to true for components that the job reads, but doesn’t write. Setting these parameters correctly can have a significant impact on how efficiently the ECS framework can schedule your jobs. These access mode settings must match their equivalents in both the struct definition, and the [EntityQuery]. + +Do not cache the return value of [GetComponentTypeHandle] in a system class variable. You must call the function every time the system runs, and pass the updated value to the job. + +### Scheduling options + +You can control how a job executes by choosing the appropriate function when you schedule the job: + +* [Run] -- executes the job immediately on the current (main) thread. Run also completes any scheduled jobs that the current job depends upon. Batch size is always 1 (an entire chunk). + +* [Schedule] -- schedules the job to run on a worker thread after any scheduled jobs that the current job depends upon. The jobs execute function is called once for each chunk selected by the entity query. Chunks are processed in sequence. Batch size is always 1. + +* [ScheduleParallel] -- Like Schedule, except that you can specify a batch size and the batches are processed in parallel (assuming worker threads are available) rather than sequentially. + +### Setting the batch size + +To set a batch size, use the [ScheduleParallel] method to schedule the job and set the `batchesPerChunk` parameter to a positive integer. Use a value of 1 to set the batch size to a full chunk. + +Each chunk selected by the query used to schedule the job is divided into the number of batches specified by `batchesPerChunk`. Each batch from the same chunk contains approximately the same number of entities; however, batches from different chunks may contain very different numbers of entities. The largest batch size is 1, which means that all the entities in each chunk are processed together in one call to your `Execute` function. Entities from different chunks can never be included in the same batch. + +> [!NOTE] +> Typically, it is most efficient to use a `batchesPerChunk` setting of 1 to process all the entities in a chunk in a single call to `Execute`. However, that is not always the case. For example, if you have a small number of entities and an expensive algorithm performed by your `Execute` function, you could gain additional benefit from parallel processing by using smaller batches of entities. + +## Skipping chunks with unchanged entities + +If you only need to update entities when a component value has changed, you can add that component type to the change filter of the [EntityQuery] that selects the entities and chunks for the job. For example, if you have a system that reads two components and only needs to update a third when one of the first two has changed, you can use an [EntityQuery] as follows: + +[!code-cs[filter-query](../DocCodeSamples.Tests/IJobEntityBatchExamples.cs#filter-query)] + +The [EntityQuery] change filter supports up to two components. If you want to check more or you aren't using an [EntityQuery], you can make the check manually. To make this check, use the [ArchetypeChunk.DidChange] function to compare the chunk’s change version for the component to the system's [LastSystemVersion]. If this function returns false, you can skip the current chunk altogether because none of the components of that type have changed since the last time the system ran. + +You must use a struct field to pass the [LastSystemVersion] from the system into the job, as follows: + +[!code-cs[skip-unchanged-batches-job](../DocCodeSamples.Tests/IJobEntityBatchExamples.cs#skip-unchanged-batches-job)] + +As with all the job struct fields, you must assign its value before you schedule the job: + +[!code-cs[skip-unchanged-batches-system](../DocCodeSamples.Tests/IJobEntityBatchExamples.cs#skip-unchanged-batches-system)] + +> [!NOTE] +> For efficiency, the change version applies to whole chunks not individual entities. If another job which has the ability to write to that type of component accesses a chunk, then ECS increments the change version for that component and the DidChange function returns true. ECS increments the change version even if the job that declares write access to a component does not actually change the component value. (This is one of the reasons you should always read-only when you are reading component data and not updating it.) + + +[Accessing entity component and buffer data]: #access-components +[Accessing other data]: #access-other-data +[Any]: xref:Unity.Entities.EntityQueryDesc.Any +[ArchetypeChunk.DidChange]: xref:Unity.Entities.ArchetypeChunk.DidChange* +[ArchetypeChunk.Has]: xref:Unity.Entities.ArchetypeChunk.Has* +[ArchetypeChunk]: xref:Unity.Entities.ArchetypeChunk +[BufferFromEntity]: xref:Unity.Entities.BufferFromEntity`1 +[ComponentDataFromEntity]: xref:Unity.Entities.ComponentDataFromEntity`1 +[ComponentTypeHandle]: xref:Unity.Entities.ComponentTypeHandle`1 +[ComponentSystemBase.GetComponentTypeHandle]: xref:Unity.Entities.ComponentSystemBase.GetComponentTypeHandle* +[ComponentTypeHandle]: xref:Unity.Entities.ComponentTypeHandle`1 +[Declare the data your job accesses]: #declare-data +[Define the job struct]: #define-the-job-struct +[ECS samples repository]: https://github.com/Unity-Technologies/EntityComponentSystemSamples +[Entities.ForEach]: xref:ecs-entities-foreach +[entity command buffer]: xref:ecs-entity-command-buffer +[EntityQuery]: xref:Unity.Entities.EntityQuery +[GetComponentTypeHandle]: xref:Unity.Entities.ComponentSystemBase.GetComponentTypeHandle* +[Has]: xref:Unity.Entities.ArchetypeChunk.Has* +[IJobEntityBatch.Execute]: xref:Unity.Entities.IJobEntityBatch.Execute* +[Execute]: xref:Unity.Entities.IJobEntityBatch.Execute* +[IJobEntityBatchWithIndex]: xref:Unity.Entities.IJobEntityBatchWithIndex +[IJobEntityBatchWithIndex.Execute]: xref:Unity.Entities.IJobEntityBatchWithIndex.Execute* +[IJobEntityBatch]: xref:Unity.Entities.IJobEntityBatch +[LastSystemVersion]: xref:Unity.Entities.ComponentSystemBase.LastSystemVersion +[Looking up data for other entities]: #look-up-data +[Looking up data]: xref:ecs-data-lookup +[native array]: xref:Unity.Collections.NativeArray`1 +[native container]: xref:JobSystemNativeContainer +[NativeArray]: xref:Unity.Collections.NativeArray`1 +[OnUpdate]: xref:Unity.Entities.SystemBase.OnUpdate* +[Query for data with an EntityQuery]: #write-the-query +[Run]: xref:Unity.Entities.JobEntityBatchExtensions.Run* +[Schedule the job]: #schedule-the-job +[ScheduleParallel]: xref:Unity.Entities.JobEntityBatchExtensions.ScheduleParallel* +[Schedule]: xref:Unity.Entities.JobEntityBatchExtensions.Schedule* +[SystemBase]: xref:Unity.Entities.SystemBase +[Translation]: xref:Unity.Transforms.Translation +[Using an EntityQuery to query data]: xref:ecs-entity-query +[Write the Execute function]: #write-execute-function +[IJobChunk]: xref:ecs-ijobchunk +[EntityArchetype]: xref:Unity.Entities.EntityArchetype +[Entity]: xref:Unity.Entities.Entity diff --git a/Documentation~/ecs_job_overview.md b/Documentation~/ecs_job_overview.md index 116296eb..471f72cf 100644 --- a/Documentation~/ecs_job_overview.md +++ b/Documentation~/ecs_job_overview.md @@ -3,7 +3,7 @@ uid: ecs-jobs --- # Jobs in ECS -ECS uses the [C# Job System] extensively. Whenever possible, you should use the jobs in your system code. The [SystemBase] class provides [Entities.ForEach] and [Job.WithCode] to help implement your game logic as multithreaded code. In more complex situations, you can use [IJobChunk]. +ECS uses the [C# Job System] extensively. Whenever possible, you should use the jobs in your system code. The [SystemBase] class provides [Entities.ForEach] and [Job.WithCode] to help implement your game logic as multithreaded code. In more complex situations, you can use [IJobEntityBatch]. For example, the following system updates positions: @@ -37,4 +37,4 @@ For more information about systems, see [ECS Systems](ecs_systems.md). [SystemBase]: xref:Unity.Entities.SystemBase [Entities.ForEach]: ecs_entities_foreach.md [Job.WithCode]: ecs_job_withcode.md -[IJobChunk]: chunk_iteration_job.md \ No newline at end of file +[IJobEntityBatch]: ecs_ijobentitybatch.md \ No newline at end of file diff --git a/Documentation~/ecs_job_withcode.md b/Documentation~/ecs_job_withcode.md index f2b3a4fb..3c6e6fd7 100644 --- a/Documentation~/ecs_job_withcode.md +++ b/Documentation~/ecs_job_withcode.md @@ -10,7 +10,8 @@ The following example uses one [Job.WithCode] lambda function to fill a [native [!code-cs[job-with-code-example](../DocCodeSamples.Tests/LambdaJobExamples.cs#job-with-code-example)] -**Note:** To run a parallel job, implement [IJobFor], which you can schedule using [ScheduleParallel()] in the system [OnUpdate()] function. +> [!NOTE] +> To run a parallel job, implement [IJobFor], which you can schedule using [ScheduleParallel()] in the system [OnUpdate()] function. ## Variables diff --git a/Documentation~/ecs_lookup_data.md b/Documentation~/ecs_lookup_data.md index ebf59ed8..0d82ddbe 100644 --- a/Documentation~/ecs_lookup_data.md +++ b/Documentation~/ecs_lookup_data.md @@ -21,9 +21,9 @@ Accessing data stored in [dynamic buffers] requires an extra step. You must decl [!code-cs[lookup-foreach-buffer](../DocCodeSamples.Tests/LookupDataExamples.cs#lookup-foreach-buffer)] -## Looking up entity data in IJobChunk +## Looking up entity data in IJobEntityBatch -To randomly access component data in an IJobChunk or other job struct, use one of the following types to get an array-like interface to component, indexed by [Entity] object: +To randomly access component data in an [IJobEntityBatch] or other job struct, use one of the following types to get an array-like interface to component, indexed by [Entity] object: * [ComponentDataFromEntity] * [BufferFromEntity] @@ -62,6 +62,6 @@ If the data you are looking up overlaps the data you are directly reading and wr [dynamic buffers]: xref:ecs-dynamic-buffers [Entities.ForEach]: xref:Unity.Entities.SystemBase.Entities [OnUpdate()]: xref:Unity.Entities.SystemBase.OnUpdate* -[IJobChunk]: xref:Unity.Entities.IJobChunk +[IJobEntityBatch]: xref:Unity.Entities.IJobEntityBatch [ReadOnly]: https://docs.unity3d.com/ScriptReference/Unity.Collections.ReadOnlyAttribute.html [NativeDisableParallelForRestriction]: https://docs.unity3d.com/ScriptReference/Unity.Collections.NativeDisableParallelForRestrictionAttribute.html \ No newline at end of file diff --git a/Documentation~/ecs_write_groups.md b/Documentation~/ecs_write_groups.md index dfd150c4..58cf1226 100644 --- a/Documentation~/ecs_write_groups.md +++ b/Documentation~/ecs_write_groups.md @@ -66,7 +66,8 @@ When this executes, the following happens: The benefit is that this allows the system to exclude entities based on a type that is unknown to the system and might live in a different package. -**Note:** For more examples, see the `Unity.Transforms` code, which uses write groups for every component it updates, including `LocalToWorld`. +> [!NOTE] +> For more examples, see the `Unity.Transforms` code, which uses write groups for every component it updates, including `LocalToWorld`. ## Creating write groups To create write groups, add the `WriteGroup` attribute to the declarations of each component type in the write group. The `WriteGroup` attribute takes one parameter, which is the type of component that the components in the group uses to update. A single component can be a member of more than one write group. @@ -92,7 +93,8 @@ public struct B : IComponentData } ``` -**Note:** You do not add the target of the write group (component `W` in the example above) to its own write group. +> [!NOTE] +> You do not add the target of the write group (component `W` in the example above) to its own write group. ## Enabling write group filtering @@ -188,7 +190,10 @@ public class RotationAngleAxisSystem : SystemBase If you want to extend another system rather than override it, or if you want to allow future systems to override or extend your system, then you can enable write group filtering on your own system. However, when you do this, neither system handles no combinations of components by default. You must explicitly query for and process each combination. -In the previous example, it defined a write group that contains components `A` and `B` that targets component `W`. If you add a new component, called `C`, to the write group, then the new system that knows about `C` can query for entities that contain `C` and it does not matter if those entities also have components `A` or `B`. However, if the new system also enables write group filtering, that is no longer true. If you only require component `C`, then write group filtering excludes any entities with either `A` or `B`. Instead, you must explicitly query for each combination of components that make sense. **Note:** You can use the `Any` clause of the query when appropriate. +In the previous example, it defined a write group that contains components `A` and `B` that targets component `W`. If you add a new component, called `C`, to the write group, then the new system that knows about `C` can query for entities that contain `C` and it does not matter if those entities also have components `A` or `B`. However, if the new system also enables write group filtering, that is no longer true. If you only require component `C`, then write group filtering excludes any entities with either `A` or `B`. Instead, you must explicitly query for each combination of components that make sense. + +> [!NOTE] +> You can use the `Any` clause of the query when appropriate. ```csharp var query = new EntityQueryDesc diff --git a/Documentation~/filter.yml b/Documentation~/filter.yml index d4ead7d0..5c6c0301 100644 --- a/Documentation~/filter.yml +++ b/Documentation~/filter.yml @@ -44,3 +44,14 @@ apiRules: - exclude: uidRegex: ^Some\.Namespace type: Namespace + - exclude: + uidRegex: ^docnamespace_ + type: Namespace + - exclude: + uidRegex: ^Unity.TestTools + type: Namespace + - exclude: + uidRegex: ^docnamespace.* + type: Namespace + - exclude: + uidRegex: .*Test.* diff --git a/Documentation~/gp_common_patterns.md b/Documentation~/gp_common_patterns.md index 1b6d2795..f8993c68 100644 --- a/Documentation~/gp_common_patterns.md +++ b/Documentation~/gp_common_patterns.md @@ -78,7 +78,8 @@ public class RotationSpeedSystem_ForEach : SystemBase } ``` -**Note:** this pattern copies the data into your job struct (and back out if used with `.Run`). If you do this with very large job structs it can have some performance overhead due to struct copying. In this case it might be a sign that your job should be split up into multiple smaller jobs. +> [!NOTE] +> This pattern copies the data into your job struct (and back out if used with `.Run`). If you do this with very large job structs it can have some performance overhead due to struct copying. In this case it might be a sign that your job should be split up into multiple smaller jobs. For more information about creating ECS systems, see: diff --git a/Documentation~/gp_overview.md b/Documentation~/gp_overview.md index a2c21039..92ae8e35 100644 --- a/Documentation~/gp_overview.md +++ b/Documentation~/gp_overview.md @@ -59,7 +59,8 @@ It's best practice to use standard MonoBehaviours to author, and use `IConvertGa You can use [IConvertGameObjectToEntity](xref:Unity.Entities.IConvertGameObjectToEntity) to customize the conversion of any GameObject in a SubScene, or a GameObject that has a `ConvertToEntity` MonoBehaviour, or one that is a child of a GameObject that has a `ConvertToEntity` MonoBehaviour. -**Note:** The authoring workflow for DOTS-based applications is an area of active development. The general outlines are in place, but you should anticipate many changes in this area in the near future. +> [!NOTE] +> The authoring workflow for DOTS-based applications is an area of active development. The general outlines are in place, but you should anticipate many changes in this area in the near future. ## Generated authoring components diff --git a/Documentation~/hybrid_component.md b/Documentation~/hybrid_component.md new file mode 100644 index 00000000..78f93bc9 --- /dev/null +++ b/Documentation~/hybrid_component.md @@ -0,0 +1,73 @@ +--- +uid: hybrid-components +--- +# DOTS Hybrid Components + +## Prelude + +Please note that Hybrid Components are not compatible with [Project Tiny]. + +## Purpose + +Many existing features of Unity don’t have a DOTS equivalent (yet). So in many cases, DOTS projects will be hybrid: a mix of classic GameObjects and ECS. + +Hybrid Components provide a way to conveniently access UnityEngine components from ECS code. They were initially designed to deal with rendering components like lights, reflection probes, post-process volumes, etc. + +The major limitations associated with Hybrid Components include: +- Only for data-like components, most [event functions] won’t be called. +- No performance benefits over GameObjects, including no jobs, no Burst, no improvement in memory usage. +- Not a general purpose feature, the use of hybrid components is explicit (opt-in). +- As of entities 0.16, hybrid components aren’t fully supported by LiveLink. +- Hybrid Components can only be created at conversion time. + +## Component Objects + +Hybrid Components are implemented on top of [Component] objects, so let’s first discuss what Component objects are. +Component objects are regular UnityEngine components added to an entity by using [AddComponentObject] and accessed via [GetComponentObject], allowing those types of components to be used in queries and a few other places. + +Internally, references to such components are not stored in chunks but in managed arrays. The chunks only contain indices to those arrays instead of storing the components themselves. + +This means that every access to a Component object requires an extra indirection and also that the entities don’t "own" those components. You must use caution when dealing with Component objects because of the chance that many problematic situations can arise because of this lack of clearly defined ownership. For example, it is possible to share the same component between multiple entities or to destroy components without removing them. + +## Companion GameObjects + +Hybrid components were designed to solve the ownership problem of [Component] objects. + +Since regular UnityEngine components cannot exist on their own, hybrid components use hidden GameObjects (via `HideFlags`) that we call "Companion GameObjects" in this context. + +ECS makes the management of these companion GameObjects transparent in a way that your code should never have to worry about them. + +> [!NOTE] +> The design is based on the constraint that the entity is in charge of the companion GameObject. The GameObject shouldn’t modify the entity or its other components. + +## Conversion + +Conversion systems can declare some UnityEngine component instances from the authoring GameObjects as hybrid components by using [AddHybridComponent]. + +[!code-cs[conversion](../DocCodeSamples.Tests/ConversionExamples.cs#HybridComponent_ConversionSystem)] + +At the end of conversion, each authoring GameObject that has at least one hybrid component will be cloned, all the other components will be removed from the clone, and that clone will be stored alongside the entity and become its companion GameObject. + +## CompanionLink + +The link between an entity and its companion GameObject is aptly named `CompanionLink`. A `CompanionLink` is a managed component (`IComponentData` class) that also implements `IDisposable` and `ICloneable`. This component manages the lifecycle of the companion GameObject and contains a reference to the GameObject. + +This allows entity prefab instantiation and entity destruction to just work transparently. + +> [!NOTE] +> This is a one way link from an entity to a companion GameObject. There is no link back from the companion GameObject to the entity. + +## Copy to GameObject.Transform + +If it exists, the transform matrix in the `LocalToWorld` component of the entity is copied to its companion GameObject’s `Transform`. Those GameObjects are always in world space, the transform hierarchy only exists on the ECS side. + +> [!NOTE] +> This copy only happens in one direction. Direct modification of the companion’s transform is an error, it will be overwritten by the synchronization system eventually. Since this synchronization system is reactive, there is no guarantee when this will happen. It is only guaranteed to happen when the `LocalToWorld` component of the entity is modified. + +[Project Tiny]: https://docs.unity3d.com/Packages/com.unity.tiny.all@latest +[event functions]: https://docs.unity3d.com/Manual/EventFunctions.html +[AddComponentObject]: xref:Unity.Entities.EntityManager.AddComponentObject* +[GetComponentObject]: xref:Unity.Entities.EntityManager.GetComponentObject* +[Component]: xref:UnityEngine.Component +[AddHybridComponent]: xref:Global%20Namespace.GameObjectConversionSystem.AddHybridComponent* + diff --git a/Documentation~/images/infographic.js b/Documentation~/images/infographic.js index 4ed47dff..756d8314 100644 --- a/Documentation~/images/infographic.js +++ b/Documentation~/images/infographic.js @@ -1,15 +1,13 @@ var slideNumber = 1; advanceSlide(0); -document.getElementById('slides').addEventListener('click', changeSlide); +document.getElementById('previous').addEventListener('click', previousSlide); +document.getElementById('next').addEventListener('click', nextSlide); -function changeSlide(evt){ - var rect = evt.target.getBoundingClientRect(); - - if(evt.clientX > rect.left + (rect.right - rect.left)/2){ - advanceSlide(1); - } else { - advanceSlide(-1); - } +function nextSlide(evt){ + advanceSlide(1); +} +function previousSlide(evt){ + advanceSlide(-1); } function advanceSlide(n) { diff --git a/Documentation~/images/livelink_menu.png b/Documentation~/images/livelink_menu.png new file mode 100644 index 0000000000000000000000000000000000000000..f3f1e96a5eb8def739b51f94ef38efb51e49fdcb GIT binary patch literal 8413 zcmYj%byQT}7cU?^q{NJLNY}s@rMsm=x*O?|F6jmV=~hAnBm{I;0tap<~E5 zzTaAJy+3Z8bI<*pea^o7vt!+OEe$0?d@6i2G&DjLWqBPmG;|Q^J^>dSb@nuP>w&tU zd+R94qSZ~%z)=lM2N`u4G_;0Pz`Yd~s*UHNY~+oGMg;wLpbxoM*`lE_c&W(C==qx; z6#~A~D&!9B6})`;k~A$AL??;Mex^kl%+SqKt0Vo%xHnw-NQcE<8xvF8(D#QAUSk{Y zUGI;m-(G$kETb4d&=nH0Q_Bo{m*T=p&U6B#K9XRlAjVf8Lsr+-G$+SI_9Q2|*b0ub zgB{v?;6?EN{BEUILnh#E$sz(!aFXONA`{ewV+eB)oYZZFVFOZJcdRvP8XUAFfbIio z-`42o_JU%jfX0cGJOUB?1m%1Spd>3$2=xDZ0sODuUClAgZ=*kYQPtvh`r9fULC8|G zlkU~nf0MS(^L2!DP%w4`9tVse9-u`zVhb9yv)s3_vz^f<6E_G83}4NXz~+0-m5e!T=Udan2oGgG2y?q-*$vQu5$wBZ z4I2Ez|4_{IC9;PWJJP8dTvSdn=l~kr?UN2ulMofn3wgR*pQH=eCgtzHA%HH3gKm!d zI#2omivvIlZp8&~(s(Qf?e=)jGu_w&{L{j0yFL9GwcmbLE@|^%?8IuMMLKsWp#DEPGnN=WEFHQ95JeHyjk|8`ML*)pfdD~+>R zBiHHQs!L_eQOY$3we|+zK!=(n5VYUf;%>;yvlVvs}@7(cu{7>SYqH7P4N#_EEQ3?;^`;yUIop}W7F zUDv)*lfB*DQL9CqdeLH&gF}7T!-1R&IBrxh?D77v@Hn`#^H@V|=gxnC%X~_BvcXCX zYo*?yIHU!%p>d&ZNs`@lz1E=@u3wYo+Husv_&Pv%t%N6#J{ykQE1pDjo=?=x1Z(Wv z8Mb*?ZBgmP@Kd-njlW)W>o{UahC`=VyZRoGFB|gFR?yCjbAJZLU4GG%}T&e zyKaBif0{!ZS_-*dZQ^NN5jf=e&tZZ_glK5lF57JTCcLWa(2g(Tdq02cf;9kdXlKE9 z-t0X3;&R3G*L)YkSI2Ys{HsCNn`y*%DAC6{yc9X}Up733-=)`vHU|>V&nr8(S@_bu z9g+DXI8jbNE_CRiIrv4vXTygd0K6nNi=`SDZ!JTwJJwa~RJd9jkGt>Qco)g)1P}}V z3D?;{-_&cF@7#U0`1Nf~V=}dny?f|+eiOudFNU0s6YR{vD4;2R8Wo3cjmgZ+yhs;x z$Y}M4BNfe)yM*R*B@J#b_4de4XF}rjYu3FAg?L(I#D>9y52?R(rKU6Iw7!XJ z*2C?5&!>?QKWCB;?UmrozQ-ZDAT|5ip!?Gy1qSP?i*LD6RoaWnl{Tc#bKlZY$o|Mt z3*H)Xtq2aBEd9~b{PlaqcHgCo@=K2)T0iB${zK+55n=j(K&*5tIK|ltN*i8?HbDFd zBWn*zLyf4fK|i=~WazHcuJR7ie!!dG(!VdZQfcvYJ3oNyS5}YlOpko7+FqPB=1n<; zMQN6nfn`+eDM54{5UE?0q^D&p5OnmzU~K?R9^EQ})^CMB=w>69Wz3UA%9zzXVAKS* z|G`O!U}IXK@hdv=rjfB0H|0M%e|k~6$Tm_X@ra}RwF_1VD<|)->fl4>+7_Si`xt)q z3p2~`IZO(6H(#x({RtRJ<@A@d?8+XU>=ZW9Et0VNE&3)C_pZ0bwEU@(w^g_p@YgO2 zX|*P;8uyuzZ%`ZZC?M2btISoMvi^A0x;Pp3=uN7=HmNtEIR+seE_}bl;V+t<>YQc{ zZBwuXJy;$s{aDbR_TMmU4)0dNB?Ln{f$#4Oj)smo|dmOJ~Q}OPQfvF=KEL3^GZ( z2Q4o*w)Q+62`J~afU6F17b9@!*qx@?#2C2sWCy*-Q<87^4ZjXm5{RPF$koJdO)Hd9 z$1q5q^ggpXp6!LaaIh-L_V(qZA2cLdeKi7QGgIf`gXVDh#}#^wa9FR>IsW%(qg3=W ziC@d;FE)F%t=`vsw{{Nq$I8`m(6l#=F(yazJCM9ahvu(Z8ve}4i_e9;qFJd3X1lTj z2hf9T*x}Ev_q(|c3CAeQKQN@Pti_tatWCK*nD?ul?WKla*oWiiBmlB9jtec-o!OFG zX=XV7srg3DGztFU?y10gg7iS2-oezeJ;Lz*@w$h&A-<2SXawT5^X4vd09=tC0R$CI z1PchhAmK=va)m8}ldA3hV4>XRc=l@>ye)ndxn_&1@7vZ6Bmz@UwLR-k8Zy;UJPgGt zW=d{Fm;i@S9+tn966HOi!(Xz^sbt4bs(IEW_bNr^6a)y$+4h-MgU`nq=LpspHdoFS+6hGWTE)_SI_i0PWQ?`~Df+#`+WiwrJn@Oof;WSj{|9=HOA4y^uf)lFJ>(iIb+0s*ZsZe>38i(66=<~@m!Q07EVE+&@cLbstnqHn z0PcSslKsE=Kn->I(RE~F&ZU5&fsLGn9ue-(ue0`ECk^YM&|bw=Mtt5BFk^YYUmA<; z?q?_&sZZQAd#Y-0AC{O+l>6=`DYP@ggW11*Oo=8X{vjVK`%X8&4VuGE5n(l=usi%a zKa+!~uKn-V!}f!^jC?*m>1AE>a8`;m>~1= zfYO$lufUyzQfJ27JtcAK1yn)7GN&}b=`=<3Z{G(^9a-w(yk-jxs9X6nD-APQynYmM2+Wj#oihXu>8N6#Dv~n&9GbDT>n7$^cR8a zU3g_NZRxx$+Qehb4d@`wAsU|Z+csb0o9&$K&Z9PU?LEaVH}~| zHuWNM!@dYtTqNMus@cBz%+s1v1BId0+Gf-$u6{CW=ThP%(-JECqWaH+p>ndb3g8W+ z#jW4pt2Lq6f&HX$;*f>uRRlX&7t4kmH*3wm*}lqOoRkAs^R1a$QYBl~hx`K8R$jL` z4&oE}o$CB)R}`2G@(z+lg=|)pUjuHTWckx4SC#K+;aLxk5$3^oCcXnAQNYw{K`D-% zL37K;vq>Z14{A#@dJU!)}vXo{?{wZus~hEk!S2|nlt2_=Os95ed0u$dg-ar7Ih zL)0eEjLKJxkw@Td6!}jEt=W)ijDs6`)yQGtshOl8*cT`8BA6U=caYkhpkd9?EMy33 zvvFW?wv_yI8_So|I|gp{013~fKCof%bSWfK4*Mt80_`p^FwRfwO-ZaHcpInORPY_F zGL)#tasu}2)D%s_5zmLfp8SJyg{Z2aQ~NhBM%}x@(Qs5(|Hwc7$Fp7{$@$b z29ly|JTH7oB+ts8KcUH!v!8^&cDhXqbm4kW40E zcTKo2<4tI17uVNn?sPVvp5~>{-Z@w!%%M3%US0c^-BV>7pTCsZ@cOdi|7IS8Rd}DB z$%)!4iTw$G=9Lcj4PDmoNNE??sL983D}xO=i@rZBj)w#h+K76zx>!fQuYzQ+$O5as zi59wug9D!Tcy1VUa~afS8tvUEykZa(?cq5oZ*LDUL$0c?7Bu1`b8ge&%(;I{h|UDZ zBdBMNOuL@<2pRK}6?U}3^FV`Y8!zP%ll>#NX?e~$pI?YB+gi#p)w1i!a(2WV?D~H3 z62L;EpbuLOZdY>(Pvb8{Tjl3;!Z&NK5b?+|pZLuM50ZO1DCXxr^NK$y7ZXn!%QoMn zOW*P$*t7)4n>fS?p@zX)rovW%T{N4d^!dD92hu)XIl96;HZ~XxKAflgC_A8_m$#e! zHc(_+O@zJ9pnL3v_E#u zXA}5APNl*Q?|9$3WJIt^&IrwE3)MUGox=xt(4*wJ8f81Pk#;z)2=ng{w`3Wcs}IqO zKl2#C>buiUZD$-hzsr&)STVM!e9UrI;_8&}YY8}otfl>=_k54+B+Y0KO1?$S1ULm1 zTDVhk8BY; zq-{dTwt}?((hxY>hVOjz%BwC^Hg^*e95oFgf;c8NsII~#rY31tY*P@Cs zJtxQspz_*PQLJ4o&d?ZH?WpcO@*zQ{5@{*IYsNn9lV{Pg45`SkaJB}`5Lz_dY*$xC z8-C(hah)W2$NH|1yf!m9Tu5MbUehsR_U+5yLQe6!jI61} zGDKbv?9Op{Gei{W;02QrtyfSmffgwTCWZsKFKaQ=KuZ7DcTq1;hEjr-ylXDc%+!@e zsn+Eb)A+B?<;RdY7=wSyL!$ZC{teFb zWt>Y1bUtJn?sXSyM7eewf6u=p56o)=h+zBLVB(m#G@QT4L3m|U8Y(~-1orq&wFL^) zb{I$q&8h2IPdtrPy21^iAlaL;)$HygOja0m{Bz~{SbsN|*uN|;(NQ`%%LgMn=Gdso z&6FqSTtfmPSR0Odf-Xh%c;?58-yop=eEO4Ste$Hi_-DV7mhfPWlgLTl7!D9q@{L+YvSU1l=5X%4HI(Y-Q(|S-wUrUX4NhMCe&Y zu^N1ZGeZIxU{pU0ehqvrGR5wqYv7GR#--zTfMpCs)hIsV)#Q?8JsgMieAYa_!cdK6zztvc;!FpB_e^>z zN7m)qN|6)o>b?FY#Q9rv>nlJOk#))`N()zSf*uCC^hT^4t zi%p$L^hgh?lrieLAxD3khKos-*@U*NBzZ=9di^Gtw;z{Hb|AR#TZ9iPej4cp$!DB< zO`JB9qu8_B`AZyRP^nNPqS~N{^&pF@u1$9EO^Vc`|BJ{{g%VABV?kUZletHkw0{BL zXuMXRThGILBSP&`1!)67gtbw+@UgsQtxLtg?2nimd_h1NIz=IWrgI%c5r&ANc1ydK zNpvY=5RkfCoZR-Gw+IVqdAM30y-EDg%g8HrJC*9<`O2n5TZUA^1LI@&X zqxxS|B?4wXQwocyG@D7)qw~P*7(b}ymqf`&TJJIbMI6Z!bW)1w1_F6UPML4}_UKz8 zOYLQilf_a}cl%0GoX=)K&a7}RCb9_1jFh31p~df3a=hTU$&FZg-m>hv-?pI082rTj z2!LNxceADcCNrp4g)VTP@x_G;RgN7Y6SkWX_5QRf-*{d3?ceW}VGQhWJCKm$p!EzEyF2t%#)-a5>q1v3$X3UydM0jRDPVJI?Hkaalim|X3i*k)N+M~d zyn*Ab zm6m$BN+&Am0m=OoWjVO zP)Wlmn+ks7)PE-d3s$kiAFSgBJ%?!7;J%h^@xt!3sLb1?#RopU0;;NgW>u;RdtQrQ zCM$x>DMV21OhxR721*zR8ESvzWm!*Dk+R#={dV1T95Oxaj88r20~Q?-Jy=uJ@fHJa4?5Mmzm0Kj953^sYLf54L+!`fFtK;#UGrU80gd~GBwkDf};}@+UAeH!U8I( zc*MB0uMTLoBF^?JRn@Ja`)v1lw=))EY_P$VF5sZbs)TZ9c+m9q`z7iZ;XW;EZ(kC+ zoAxleSe!f(^3u78du+|*IXwr)aq+<~GSG{1J=2>DRF<| zoLSUy8FM5-s!mhQQxDYQe{8X)=8$D|sy5U0apa?D6F|RECHc$vg>Rm=0Bj&W<+YY^ zwndnnQzl9D^8yB>Z<YxdOb0~jrUpkn)kfJg(Ju<(}MCFE1PCE zOn~M9BT3d)jB;mw>Nw_jUU7{wOII&``V7|A%Rt^!1+fuzx!L7HXMN-?a$CFNrdQ+X>1v}0yBcr1^?{>ocy`dSe@Ovm0CJZ6~B>7`9sHt_JLNNXyH>m%!s3aUYJge!CD zQTJY~Jph_w)Z|bZ>#dji3?5=op)AZAnT}{@$@)Tb4L>)X3a}MsOyG(hjlD0aWRn1n znFGT#zwL&9;cNKa4dihktrt^Z7`IS24$6E(8){sGEwp*=!gq(`#A7Q~g?$?UfA zJN|QMeuG*=PjI(#UE)jh;}dH%9)pc(>R0bPWp_YDBZMR^Sp^Ys-i0zO7D8jqX%+mFMUKBVZm zEQswzU#{`vDej)1KM$+BNqWl|cl9aplOkQ}DhmE?Ewm7>Z2 zLx4QZyEBz_E||DV8T;Qz3Z+n&vaEAOrYhvCWEhlRoKa^<9+@5W#9BR6i48qrAhx@%Qp2#MiDXdO?rS^NO6~rx3YU3E_qMy4O5}+G#p}g-$iv;G zm75MlKU0A2fzlY^^1ryJNZykkW}C%$sT+4-O>DC-O~_`};jpR`Ade6wif?mmU zghc3hzdOZ`x5{2RxrH?dAwH*pSSCN*-;^-1bF(jkyqiw|y+B&={!#k&8^WmdaAIsF zM5^1PU>a-fsk4y030rjBTLGL-Idj#!4?T=se?Cx^`}T_5{3KrgCgR=SohD263HQs_ z!$cZh!*MEctManV(LWOsVrr)58kAMO?T*{*N6x%9+_K$`cW#EJ8xLz~kX;a@#=f{y z|Nb##@N*gGUh0|a{U{4#rXAPoq<~Y8JIH_Fc;^LVs}~!~7~`y_znkzbmBAMT747J! z$3FtcIcP%#{t9!(9%(_sF30QJ>=taN>jtEro>njimu)9{;6^;AQV8#A0d2}C-)!q- zfL2S9mSxad{x8BlTnM>lMHJVfg=wXRjh zwZ@LOomW<^viaxaQ|;@#8$cdcTmP$>H?iMuzfT&NU{_(TI&Yr~-XHZ>6s&|9C0^H? z38uZV$awA9=D6*+lzpR01f1=Okl!>@ePW6dZx!>D7IcJE`7;PN`qo1x7b$sr%?_P) zKGk|%Uzi~T*}iO+;f0S$eBa*6wre8ET~xa!o!|@`BSd)M;)W^l3BvV_d3nbVYuDlD z(e0sq+4u9>U(J~2KWap^GI;4k)dwHBBaJ=-VrhTmiia9_x0^ru8^fKkBE6I`TGm*A zCQ#XCO~37YFB%wd;9Redt(F-N>4QXm8NhU-=Ji(wvC|J_+$Iz%1Et%#OerL&A2exL|*^5c+^?u=ho8nIIj zVU*)2R$O)79Ad1a>T%=jC{XH9_r!7zJBuRW^jbNPk1=HA4xpHHeDb`G5>sw*F0A#7 z=rHSMS%2_5g{Jy1Z=A9CFY`teUR1@Z}cZA;yW!;{V+P7fi2n%TKUtH z^;l>H6<Z zOdg z^~w1hGnKAm$r%r4qAXAD96fgPgJa9{l+t}98ThQo;?5%yZ=NEUbR>yB2lQ3)tth;_ zg0Hiz<`zTE=mUgbM(%~`PCSE1osn{wWqdy^71v7G>t`*}!7%vzF899fWg$QroGNEZ zd6M4lTpvY#*3(v*DCkl}++5Ov+a=!;mXkQIB<^3P&X`49l}6_Pf9j^3A=umeDAVC&mqz}XfP;ye+X zNG*w3CLUdb8x-7q^7?$4vn|Er z{ySClR8<|^m#{tJ2ys=qDwxFMn5akn_6}bDrn^PwU+k8rvpu<=q)2+aRvL)XN@BCI zDM3U4Y%#;_iE%GPZdyA1ceJcLPGiLQd5!+)#dlOiY;4!Hu+Bw$8<1aS-4Pb{utVK6 zM_I?xG+=#QWX7dvB2dd?+vDA?KT-Ela;K)a-KZtd^cOKLLpRQJjB - - - - - - - - - +
+ + + + + + + +
+ + # Entity Component System The Entity Component System (ECS) is the core of the Unity Data-Oriented Tech Stack. As the diff --git a/Documentation~/install_setup.md b/Documentation~/install_setup.md new file mode 100644 index 00000000..b9fde97e --- /dev/null +++ b/Documentation~/install_setup.md @@ -0,0 +1,62 @@ +--- +uid: install-setup +--- + +# DOTS Project Setup + +Compared to creating a classic Unity project, a few additional steps are required for a DOTS project. + +## Package installation + +> [!NOTE] +> In all following steps, check each package's documentation to determine which versions of Unity are compatible with the package. + +Starting with Unity 2020.1, the DOTS packages are not listed in the package manager, even when preview packages are enabled. There are two alternative options to install those packages: + +* You can use "Add package from git URL..." under the **+** menu at the top left of the package manager to add packages either by name (such as `com.unity.entities`), or by git URL (but this option isn't available for DOTS packages). Note that it might take a few moments before the package starts installing. +* Alternatively, you can add DOTS packages by directly editing the `Packages\manifest.json` file in your project. This file requires not only the package name but also a version which can be found by looking at the documentation of each package (such as `"com.unity.entities" : "x.x.x-preview.x"`). + +> [!NOTE] +> The use of a Git URL instead of just a name in the Package Manager requires having the git command line tools installed. + +Follow the link for more information about [installing hidden packages](https://docs.unity3d.com/Packages/Installation/manual/index.html). + +## Recommended packages + +Check the overview of the currently available [DOTS packages](https://unity.com/dots/packages). + +The recommended set of core packages to be added to a DOTS project is: + +* [com.unity.entities](https://docs.unity3d.com/Packages/com.unity.entities@latest) +* [com.unity.rendering.hybrid](https://docs.unity3d.com/Packages/com.unity.rendering.hybrid@latest) +* [com.unity.dots.editor](https://docs.unity3d.com/Packages/com.unity.dots.editor@latest) + +## Domain Reload + +In most DOTS projects, you'll want to avoid the slow [Domain Reload](https://docs.unity3d.com/Manual/ConfigurableEnterPlayMode.html) that occurs upon entering playmode. To do this, under the `"Edit > Project Settings > Editor"` menu, check the "Enter Play Mode Options" checkbox but leave the "Reload Domain" and "Reload Scene" boxes unchecked. Keep in mind that you must [be mindful of your use of static fields and static event handlers](https://docs.unity3d.com/Manual/DomainReloading.html) when Domain Reloads are disabled. + +## Standalone Builds + +Making standalone builds of DOTS projects requires installing the corresponding platform package for each of your target platforms: + +* [com.unity.platforms.android](https://docs.unity3d.com/Packages/com.unity.platforms.android@latest) +* [com.unity.platforms.ios](https://docs.unity3d.com/Packages/com.unity.platforms.ios@latest) +* [com.unity.platforms.linux](https://docs.unity3d.com/Packages/com.unity.platforms.linux@latest) +* [com.unity.platforms.macos](https://docs.unity3d.com/Packages/com.unity.platforms.macos@latest) +* [com.unity.platforms.web](https://docs.unity3d.com/Packages/com.unity.platforms.web@latest) +* [com.unity.platforms.windows](https://docs.unity3d.com/Packages/com.unity.platforms.windows@latest) + +After installing the platform packages you need, create a "Classic Build Configuration" asset for each platform (via the `"Assets > Create > Build"` menu). The properties of that asset will contain a "Scene List", which is the only way of adding subscenes to a standalone project. Make sure you add at least one scene or that the "Build Current Scene" checkbox is toggled on. + +> [!WARNING] +> **Do not use** the Build and Run menu "`File > Build and Run`" to build DOTS projects. It might work in some cases but this approach is not supported. You must build your project using the Build or Build and Run buttons at the top of the Build Configuration Asset Inspector window. +> +> In particular, entity subscenes are not included in builds made via the Build and Run menu and will fail to load with the following error message showing up in a development build: "Could not open `/.entityheader` for read".) + +## Live Link Build + +In order to connect the editor to a player and have the changes made to the authoring GameObjects synchronized, a Live Link Build has to be created. Simply add the "Live Link" component to the build configuration (and apply the changes). + +![](images/livelink_menu.png) + +The build configuration can now be selected in the Live Link menu (right of the Play/Pause/Stop buttons) via "Start Live Link ...". Make sure only one editor is running on the host machine, as having multiple editors running will confuse the player. diff --git a/Documentation~/manual_iteration.md b/Documentation~/manual_iteration.md index d5fdd322..ab8fa16f 100644 --- a/Documentation~/manual_iteration.md +++ b/Documentation~/manual_iteration.md @@ -1,3 +1,6 @@ +--- +uid: ecs-manual-iteration +--- # Manual iteration You can request all of the chunks explicitly in a NativeArray and process them with a job such as `IJobParallelFor`. You should use this method if you need to manage chunks in a way that is not appropriate for the simplified model of iterating over all of the chunks in an EntityQuery. The following is an example of this: diff --git a/Documentation~/projectMetadata.json b/Documentation~/projectMetadata.json new file mode 100644 index 00000000..11f3f1c8 --- /dev/null +++ b/Documentation~/projectMetadata.json @@ -0,0 +1,5 @@ +{ + "useMemberPages": true, + "hideGlobalNamespace": false, + "symbolDefines":"" +} diff --git a/Documentation~/shared_component_data.md b/Documentation~/shared_component_data.md index 29c7cca1..74a5afcb 100644 --- a/Documentation~/shared_component_data.md +++ b/Documentation~/shared_component_data.md @@ -7,7 +7,8 @@ Shared components are a special kind of data component that you can use to subdi Shared components allow your systems to process like entities together. For example, the shared component `Rendering.RenderMesh`, which is part of the Hybrid.rendering package, defines several fields, including **mesh**, **material**, and **receiveShadows**. When your application renders, it is most efficient to process all of the 3D objects that have the same value for those fields together. Because a shared component specifies these properties, the EntityManager places the matching entities together in memory so that the rendering system can efficiently iterate over them. -**Note:** If you over-use shared components, it might lead to poor chunk utilization. This is because when you use a shared component it involves a combinatorial expansion of the number of memory chunks based on archetype and every unique value of each shared component field. As such, avoid adding any fields that aren't needed to sort entities into a category to a shared component. To view chunk utilization, use the [Entity Debugger](ecs_debugging.md). +> [!NOTE] +> If you over-use shared components, it might lead to poor chunk utilization. This is because when you use a shared component it involves a combinatorial expansion of the number of memory chunks based on archetype and every unique value of each shared component field. As such, avoid adding any fields that aren't needed to sort entities into a category to a shared component. To view chunk utilization, use the [Entity Debugger](ecs_debugging.md). If you add or remove a component from an entity, or change the value of a shared component, The EntityManager moves the entity to a different chunk, and creates a new chunk if necessary. @@ -31,7 +32,7 @@ For an example of this, see the `RenderMeshSystemV2` file `Packages/com.unity.en ## Important notes about SharedComponentData: -* ECS groups entities with the same `SharedComponentData` together in the same [chunks](chunk_iteration.md). It stores the index to the `SharedComponentData` once per chunk, not per entity. As a result, `SharedComponentData` has zero memory overhead on a per entity basis. +* ECS groups entities with the same `SharedComponentData` together in the same [chunks](xref:Unity.Entities.ArchetypeChunk). It stores the index to the `SharedComponentData` once per chunk, not per entity. As a result, `SharedComponentData` has zero memory overhead on a per entity basis. * You can use [EntityQuery](xref:Unity.Entities.EntityQuery) to iterate over all entities with the same type. You can also use [EntityQuery.SetFilter()](xref:Unity.Entities.EntityQuery.SetSharedComponentFilter*) to iterate specifically over entities that have a specific `SharedComponentData` value. Because of the data layout, this iteration has a low overhead. * You can use `EntityManager.GetAllUniqueSharedComponents` to retrieve all unique `SharedComponentData` that is added to any alive entities. * ECS automatically [reference counts](https://en.wikipedia.org/wiki/Reference_counting) `SharedComponentData`. diff --git a/Documentation~/system_state_components.md b/Documentation~/system_state_components.md index 04c87496..ff845e22 100644 --- a/Documentation~/system_state_components.md +++ b/Documentation~/system_state_components.md @@ -78,6 +78,7 @@ The following example shows a simplified system that illustrates how to manage e * `m_activeEntities` selects entities that have both the general-purpose and the system state component. In a real application, other systems might be the ones that process or destroy the entities. * `m_destroyedEntities` selects entities that have the system state, but not the general-purpose component. Since the system state component is never added to an entity by itself, the entities that this query selects must have been deleted, either by this system or another system. The system reuses the destroyed entities query to run a job and remove the system state component from the entities, which allows the ECS code to recycle the entity identifier. -**Note:** This simplified example does not maintain any state within the system. One purpose for system state components is to track when persistent resources need to be allocated or cleaned up. +> [!NOTE] +> This simplified example does not maintain any state within the system. One purpose for system state components is to track when persistent resources need to be allocated or cleaned up. [!code-cs[stateful-example](../DocCodeSamples.Tests/StatefulSystem.cs#stateful-example)] diff --git a/Documentation~/system_update_order.md b/Documentation~/system_update_order.md index 365d36c5..820eb212 100644 --- a/Documentation~/system_update_order.md +++ b/Documentation~/system_update_order.md @@ -90,7 +90,8 @@ For example, here’s the typical procedure of a custom `MyCustomBootstrap.Initi 4. Optionally add them to one of the default world groups 4. Return list of unhandled systems to DefaultWorldInitialization. -**Note:** the ECS framework finds your ICustomBootstrap implementation by reflection. +> [!NOTE] +> The ECS framework finds your ICustomBootstrap implementation by reflection. ## Tips and Best Practices diff --git a/Documentation~/toc.md b/Documentation~/toc.md new file mode 100644 index 00000000..9bccf32e --- /dev/null +++ b/Documentation~/toc.md @@ -0,0 +1,104 @@ +# @ecs-overview + +# @install-setup + +# @ecs-concepts + +## @ecs-entities + +### @ecs-iteration + +### @ecs-entity-query + +### @ecs-world + +## @ecs-components + +### @ecs-component-data + +### @hybrid-components + +### @ecs-shared-component-data + +### @ecs-system-state-component-data + +### @ecs-dynamic-buffers + +### @ecs-chunk-component-data + +## @ecs-systems + +### @ecs-creating-systems + +#### @ecs-entities-foreach + +#### @ecs-job-withcode + +#### @ecs-ijobentitybatch + +#### @ecs-ijobchunk + +#### @ecs-manual-iteration + +### @ecs-system-update-order + +### @ecs-job-dependencies + +### @ecs-data-lookup + +### @ecs-entity-command-buffer + +## @sync-points + +## @ecs-writegroups + +## @ecs-version-numbers + +## @ecs-job-extensions + +## @ecs-generic_jobs + +# @gameplay-overview + +## @conversion + +### @conversion-livelink + +## @gameplay-transform-system + +## @gameplay-rendering + +## @gameplay-common-patterns + +# DOTS packages +## [com.unity.2d.entities](https://docs.unity3d.com/Packages/com.unity.2d.entities@latest) +## [com.unity.2d.entities.physics](https://docs.unity3d.com/Packages/com.unity.2d.entities.physics@latest) +## [com.unity.animation](https://docs.unity3d.com/Packages/com.unity.animation@latest) +## [com.unity.audio.dspgraph](https://docs.unity3d.com/Packages/com.unity.audio.dspgraph@latest) +## [com.unity.collections](https://docs.unity3d.com/Packages/com.unity.collections@latest) +## [com.unity.compositor](https://docs.unity3d.com/Packages/com.unity.compositor@latest) +## [com.unity.dataflowgraph](https://docs.unity3d.com/Packages/com.unity.dataflowgraph@latest) +## [com.unity.dots.editor](https://docs.unity3d.com/Packages/com.unity.dots.editor@latest) +## [com.unity.dots.runtime](https://docs.unity3d.com/Packages/com.unity.dots.runtime@latest) +## [com.unity.graphtools.foundation](https://docs.unity3d.com/Packages/com.unity.graphtools.foundation@latest) +## [com.unity.jobs](https://docs.unity3d.com/Packages/com.unity.jobs@latest) +## [com.unity.media.utilities](https://docs.unity3d.com/Packages/com.unity.media.utilities@latest) +## [com.unity.netcode](https://docs.unity3d.com/Packages/com.unity.netcode@latest) +## [com.unity.physics](https://docs.unity3d.com/Packages/com.unity.physics@latest) +## [com.havok.physics](https://docs.unity3d.com/Packages/com.havok.physics@latest) +## [com.unity.platforms](https://docs.unity3d.com/Packages/com.unity.platforms@latest) +### [com.unity.platforms.android](https://docs.unity3d.com/Packages/com.unity.platforms.android@latest) +### [com.unity.platforms.ios](https://docs.unity3d.com/Packages/com.unity.platforms.ios@latest) +### [com.unity.platforms.linux](https://docs.unity3d.com/Packages/com.unity.platforms.linux@latest) +### [com.unity.platforms.macos](https://docs.unity3d.com/Packages/com.unity.platforms.macos@latest) +### [com.unity.platforms.web](https://docs.unity3d.com/Packages/com.unity.platforms.web@latest) +### [com.unity.platforms.windows](https://docs.unity3d.com/Packages/com.unity.platforms.windows@latest) +## [com.unity.rendering.hybrid](https://docs.unity3d.com/Packages/com.unity.rendering.hybrid@latest) +## [com.unity.searcher](https://docs.unity3d.com/Packages/com.unity.searcher@latest) +## [com.unity.timeline.dots](https://docs.unity3d.com/Packages/com.unity.timeline.dots@latest) +## [com.unity.tiny.all](https://docs.unity3d.com/Packages/com.unity.tiny.all@latest) +### [com.unity.tiny](https://docs.unity3d.com/Packages/com.unity.tiny@latest) +### [com.unity.tiny.desktop](https://docs.unity3d.com/Packages/com.unity.tiny.desktop@latest) +### [com.unity.tiny.web](https://docs.unity3d.com/Packages/com.unity.tiny.web@latest) +## [com.unity.transport](https://docs.unity3d.com/Packages/com.unity.transport@latest) + diff --git a/Documentation~/transform_system.md b/Documentation~/transform_system.md index 33ae38fb..b9835357 100644 --- a/Documentation~/transform_system.md +++ b/Documentation~/transform_system.md @@ -86,7 +86,8 @@ e.g. If the following components are present... LocalToWorld components associated with Parent Entity IDs are guaranteed to be computed before multiplies with LocalToParent associated with Child Entity ID. -Note: Cyclical graph relationships are invalid. Results are undefined. +> [!NOTE] +> Cyclical graph relationships are invalid. Results are undefined. When the hierarchy (topology) is changed (i.e. Any Parent component is added, removed or changed) internal state is added as SystemStateComponentData as: @@ -401,7 +402,8 @@ e.g. If the following components are present... Section 5: Hierarchical Transforms (Advanced) --------------------------------------------- -Note: Advanced Hierarchical transform component rules largely mirror the use of the non-hierarchical components, except that they are writing to LocalToParent (instead of LocalToWorld.) The main additional component unique to hierarchical transforms is ParentScaleInverse. +> [!NOTE] +> Advanced Hierarchical transform component rules largely mirror the use of the non-hierarchical components, except that they are writing to LocalToParent (instead of LocalToWorld.) The main additional component unique to hierarchical transforms is ParentScaleInverse. ----- diff --git a/Documentation~/world.md b/Documentation~/world.md index 6659e6a8..8c22e39d 100644 --- a/Documentation~/world.md +++ b/Documentation~/world.md @@ -3,16 +3,52 @@ uid: ecs-world --- # World -A World owns both an [EntityManager](xref:Unity.Entities.EntityManager) and a set of [Systems](ecs_systems.md). You can create as many World objects as you like. Commonly you can create a simulation World and a rendering or presentation World. +A [World] organizes entities into isolated groups. A world owns both an [EntityManager](xref:Unity.Entities.EntityManager) and a set of [Systems](ecs_systems.md). Entities created in one world only have meaning in that world, but can be transfered to other worlds (with [EntityManager.MoveEntitiesFrom]). Systems can only access entities in the same world. You can create as many worlds as you like. -By default you create a single World when you enter __Play Mode__ and populate it with all available `ComponentSystemBase` objects in the Project. However, you can disable the default World creation and replace it with your own code via global defines as follows: +By default Unity creates a default [World] when your application starts up (or you enter __Play Mode__). Unity instantiates all systems (classes that extend [ComponentSystemBase]) and adds them to this default world. Unity also creates specialized worlds in the Editor. For example, it creates an Editor world for entities and systems that run only in the Editor, not in playmode and also creates conversion worlds for managing the conversion of GameObjects to entities. See [WorldFlags] for examples of different types of worlds that can be created. + +Use [World.DefaultGameObjectInjectionWorld] to access the default world. + +## Managing systems + +The [World] object provides methods for creating, accessing and removing systems from the world. + +In most cases, you can use [GetOrCreateSystem] to get an instance of a system (creating an instance if one doesn't already exist). + +## Time + +The value of the [Time] property of systems is controlled by the [World] a system is in. By default, Unity creates a [TimeData] entity for each world, which is updated by a [UpdateWorldTimeSystem] instance to reflect the elapsed time since the previous frame. A system's [Time] property is an alias for the current world time. + +The [FixedStepSimulationSystemGroup] treats time differently than other system groups. Instead of updating once at the current delta time, systems in the fixed step simulation group update at a fixed interval and might update more than once per frame if the fixed interval is a small enough fraction of the frame time. + +If you need finer control of time in a [World], you can specify a time value directly with [World.SetTime]. You can also [PushTime] to temporarily change the world time and then [PopTime] to return to the previous time (in a time stack). + +## Custom initialization + +To initialize you game manually at startup, you can implement the [ICustomBootstrap] interface. Unity runs your `ICustomBootstrap` implementation with the default world so that you can modify or entirely replace the system creation and initialization sequence. + +You can also disable the default World creation entirely by defining the following global symbols: * `#UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP_RUNTIME_WORLD` disables generation of the default runtime World. * `#UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP_EDITOR_WORLD` disables generation of the default Editor World. * `#UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP` disables generation of both default Worlds. -## Further information - -- **Default World creation code** (see file: _Packages/com.unity.entities/Unity.Entities.Hybrid/Injection/DefaultWorldInitialization.cs_) -- **Automatic bootstrap entry point** (see file: _Packages/com.unity.entities/Unity.Entities.Hybrid/Injection/AutomaticWorldBootstrap.cs_) +Your code is then responsible for creating any needed worlds, as well as instantiating and updating systems. You can use the Unity scriptable [PlayerLoop] to modify the normal Unity player loop so that your systems are updated when required. + [World]: xref:Unity.Entities.World + [EntityManager]: xref:Unity.Entities.EntityManager + [Systems]: ecs_systems.md + [ComponentSystemBase]: xref:Unity.Entities.ComponentSystemBase + [ICustomBootstrap]: xref:Unity.Entities.ICustomBootstrap +[PlayerLoop]: xref:UnityEngine.LowLevel.PlayerLoop +[EntityManager.MoveEntitiesFrom]: xref:Unity.Entities.EntityManager.MoveEntitiesFrom* +[WorldFlags]: xref:Unity.Entities.WorldFlags +[World.DefaultGameObjectInjectionWorld]: xref:Unity.Entities.World.DefaultGameObjectInjectionWorld +[GetOrCreateSystem]: xref:Unity.Entities.World.GetOrCreateSystem* +[FixedStepSimulationSystemGroup]: xref:Unity.Entities.FixedStepSimulationSystemGroup +[World.SetTime]: xref:Unity.Entities.World.SetTime(Unity.Core.TimeData) +[TimeData]: xref:Unity.Core.TimeData +[UpdateWorldTimeSystem]: xref:Unity.Entities.UpdateWorldTimeSystem +[PushTime]: xref:Unity.Entities.World.PushTime(Unity.Core.TimeData) +[PopTime]: xref:Unity.Entities.World.PopTime +[Time]: xref:Unity.Entities.ComponentSystemBase.Time diff --git a/Unity.Burst.Tests/BurstDelegateTest.cs b/Unity.Burst.Tests/BurstDelegateTest.cs index 5fdbbf6a..7cd5cbd1 100644 --- a/Unity.Burst.Tests/BurstDelegateTest.cs +++ b/Unity.Burst.Tests/BurstDelegateTest.cs @@ -4,6 +4,7 @@ using Unity.Burst; using Unity.Collections.LowLevel.Unsafe; using Unity.Jobs; +using Unity.Entities; [BurstCompile] public unsafe class BurstDelegateTest @@ -69,4 +70,43 @@ public void CompileMissingBurstCompile() { Assert.Throws(() => BurstCompiler.CompileFunctionPointer(DoThingMissingBurstCompile)); } + +#if UNITY_2020_1_OR_NEWER + [BurstCompile] + private struct DivideByZeroJob : IJobBurstSchedulable + { + [NativeDisableUnsafePtrRestriction] + public int I; + + public void Execute() + { + I = 42 / I; + + // This is never hit because the above throws an exception. + I = 13; + } + } + + private delegate void CallJobDelegate(ref DivideByZeroJob job); + + [BurstCompile(CompileSynchronously = true)] + private static void CallJob(ref DivideByZeroJob job) + { + job.Run(); + + // Even though job.Run() throws an exception in its body, the job system catches + // that exception and handles it. So this statement is hit. + job.I++; + } + + [Test, Ignore("DOTS-2992")] + public void CallJobFromFunctionPointer() + { + IJobBurstSchedulableExtensions.JobStruct.Initialize(); + var funcPtr = BurstCompiler.CompileFunctionPointer(CallJob); + var job = new DivideByZeroJob { I = 0 }; + funcPtr.Invoke(ref job); + Assert.AreEqual(job.I, 1); + } +#endif } diff --git a/Unity.Burst.Tests/Unity.Burst.Tests.asmdef b/Unity.Burst.Tests/Unity.Burst.Tests.asmdef index 54b64f2f..f0a909e7 100644 --- a/Unity.Burst.Tests/Unity.Burst.Tests.asmdef +++ b/Unity.Burst.Tests/Unity.Burst.Tests.asmdef @@ -4,7 +4,8 @@ "Unity.Jobs", "Unity.Mathematics", "Unity.Collections", - "Unity.Burst" + "Unity.Burst", + "Unity.Entities" ], "optionalUnityReferences": [ "TestAssemblies" diff --git a/Unity.Entities.CodeGen.Tests/AssemblyInfo.cs b/Unity.Entities.CodeGen.Tests/AssemblyInfo.cs new file mode 100644 index 00000000..301cc9fc --- /dev/null +++ b/Unity.Entities.CodeGen.Tests/AssemblyInfo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Unity.Entities.Hybrid.CodeGen.Tests")] diff --git a/Unity.Entities.CodeGen.Tests/AssemblyInfo.cs.meta b/Unity.Entities.CodeGen.Tests/AssemblyInfo.cs.meta new file mode 100644 index 00000000..4588191d --- /dev/null +++ b/Unity.Entities.CodeGen.Tests/AssemblyInfo.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 780050ad9d084c04a3e8228048f5cd8a +timeCreated: 1600173562 \ No newline at end of file diff --git a/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs b/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs index 19989030..84474643 100644 --- a/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs +++ b/Unity.Entities.CodeGen.Tests/BlobAssetSafetyVerifier/BlobAssetSafetyVerifierTests.cs @@ -3,6 +3,7 @@ using System.Linq; using Mono.Cecil; using NUnit.Framework; +using Unity.Collections; using Unity.CompilationPipeline.Common.Diagnostics; using Unity.Entities.CodeGen.Tests.TestTypes; @@ -162,6 +163,127 @@ public void ValidBlobReferenceUsageSucceeds() AssertProducesNoError(typeof(ClassWithValidBlobReferenceUsage)); } + struct ManagedBlob + { + public string s; + } + + class WithManagedRefsInBlob_Class + { + void Method() + { + var builder = new BlobBuilder(Allocator.Temp); + ref var root = ref builder.ConstructRoot(); + root.s = "foo"; + EnsureNotOptimizedAway(root); + } + } + + [Test] + public void ManagedRefsInBlobThrows() + { + AssertProducesError( + typeof(WithManagedRefsInBlob_Class), + "error ConstructBlobWithRefTypeViolation: You may not build a type ManagedBlob with Construct as ManagedBlob.s is a reference or pointer. Only non-reference types are allowed in Blobs."); + } + + unsafe struct BlobWithPointer + { + public int* p; + } + + class WithPointerInBlob_Class + { + unsafe void Method() + { + var builder = new BlobBuilder(Allocator.Temp); + ref var root = ref builder.ConstructRoot(); + root.p = null; + EnsureNotOptimizedAway(root); + } + } + + [Test] + public void PointerInBlobThrows() + { + AssertProducesError( + typeof(WithPointerInBlob_Class), + "error ConstructBlobWithRefTypeViolation: You may not build a type BlobWithPointer with Construct as BlobWithPointer.p is a reference or pointer. Only non-reference types are allowed in Blobs."); + } + + struct UnmanagedPtrInBlobPtr + { + public BlobPtr ptr; + } + + class WithUnmanagedPtrInBlobPtr_Class + { + unsafe void Method() + { + var builder = new BlobBuilder(Allocator.Temp); + ref var root = ref builder.ConstructRoot(); + ref var blobWithPtr = ref builder.Allocate(ref root.ptr); + blobWithPtr.p = null; + EnsureNotOptimizedAway(ref root); + } + } + + [Test] + public void NestedPointerInBlobThrows() + { + AssertProducesError( + typeof(WithUnmanagedPtrInBlobPtr_Class), + "error ConstructBlobWithRefTypeViolation: You may not build a type UnmanagedPtrInBlobPtr with Construct as UnmanagedPtrInBlobPtr.ptr.Value.p is a reference or pointer. Only non-reference types are allowed in Blobs."); + } + + struct ManagedRefInBlobArray + { + public BlobArray array; + } + + class WithManagedRefInBlobArray_Class + { + unsafe void Method() + { + var builder = new BlobBuilder(Allocator.Temp); + ref var root = ref builder.ConstructRoot(); + builder.Construct(ref root.array, new[] {new ManagedBlob {s = "foo"}}); + EnsureNotOptimizedAway(ref root); + } + } + + [Test] + public void ManagedRefInBlobArrayThrows() + { + AssertProducesError( + typeof(WithManagedRefInBlobArray_Class), + "error ConstructBlobWithRefTypeViolation: You may not build a type ManagedRefInBlobArray with Construct as ManagedRefInBlobArray.array[].s is a reference or pointer. Only non-reference types are allowed in Blobs."); + } + + struct ManagedRefInStaticField + { + public static string s_ManagedString; + public int i; + } + + class WithManagedRefInStaticField_Class + { + void Method() + { + var builder = new BlobBuilder(Allocator.Temp); + ref var root = ref builder.ConstructRoot(); + root.i = 42; + EnsureNotOptimizedAway(ref root); + } + } + + [Test] + public void ManagedRefInStaticField_Doesnt_Throw() + { + AssertProducesNoError(typeof(WithManagedRefInStaticField_Class)); + } + + void AssertProducesNoError(Type typeWithCodeUnderTest) { Assert.DoesNotThrow(() => diff --git a/Unity.Transforms.Editor.meta b/Unity.Entities.CodeGen.Tests/IJobEntity.meta similarity index 77% rename from Unity.Transforms.Editor.meta rename to Unity.Entities.CodeGen.Tests/IJobEntity.meta index d2e4a389..a929de53 100644 --- a/Unity.Transforms.Editor.meta +++ b/Unity.Entities.CodeGen.Tests/IJobEntity.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e5907a8ef953040a697aa68325e02cf5 +guid: 2df8ddf4c911de24389ec825e9fe2e6b folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/Unity.Entities.CodeGen.Tests/IJobEntity/SourceGenerationTests.meta b/Unity.Entities.CodeGen.Tests/IJobEntity/SourceGenerationTests.meta new file mode 100644 index 00000000..df5fd0fd --- /dev/null +++ b/Unity.Entities.CodeGen.Tests/IJobEntity/SourceGenerationTests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8db1f1164f6c5254389ffe0de87966eb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities.CodeGen.Tests/IntegrationTest.cs b/Unity.Entities.CodeGen.Tests/IntegrationTest.cs index 5e0b76b2..153e0a03 100644 --- a/Unity.Entities.CodeGen.Tests/IntegrationTest.cs +++ b/Unity.Entities.CodeGen.Tests/IntegrationTest.cs @@ -7,7 +7,6 @@ using Mono.Cecil; using NUnit.Framework; using Unity.Entities.Editor; -using Unity.Entities.Hybrid; namespace Unity.Entities.CodeGen.Tests { @@ -15,103 +14,193 @@ namespace Unity.Entities.CodeGen.Tests public abstract class IntegrationTest : LambdaJobsPostProcessorTestBase { // Make sure to not check this in with true or your tests will always pass! - public static bool overwriteExpectationWithReality = false; + readonly bool overwriteExpectationWithReality = false; protected abstract string ExpectedPath { get; } protected virtual string AdditionalIL => string.Empty; static bool IsAssemblyBuiltAsDebug() { - var debuggableAttributes = typeof(IntegrationTest).Assembly.GetCustomAttributes(typeof(DebuggableAttribute), false); - return debuggableAttributes.Any(debuggableAttribute => ((DebuggableAttribute)debuggableAttribute).IsJITTrackingEnabled); + return typeof(IntegrationTest).Assembly + .GetCustomAttributes(typeof(DebuggableAttribute), false) + .Any(debuggableAttribute => ((DebuggableAttribute)debuggableAttribute).IsJITTrackingEnabled); } - protected void RunTest(TypeReference type) + protected struct GeneratedType + { + public string Name; + public bool IsNestedType; + public string ParentTypeName; + } + + protected void RunSourceGenerationTest(GeneratedType[] generatedTypes, string generatedTypesDllFullPath) { // Ideally these tests to run in Release codegen or otherwise the generated IL won't be deterministic (due to differences between /optimize+ and /optimize-). // We attempt to make the tests generate the same decompiled C# in any case (by making sure all variables are used). if (IsAssemblyBuiltAsDebug()) - UnityEngine.Debug.LogWarning("Integration tests should only be run with release code optimizations turned on for consistent codegen. Switch your settings in Preferences->External Tools->Editor Attaching (in 2019.3) or Preferences->General->Code Optimization On Startup (in 2020.1+) to be able to run these tests."); + { + UnityEngine.Debug.LogWarning( + "Integration tests should only be run with release code optimizations turned on for consistent codegen. " + + "Switch your settings in Preferences->General->Code Optimization " + + "On Startup (in 2020.1+) to be able to run these tests."); + } - var expectationFile = Path.GetFullPath($"{ExpectedPath}/{GetType().Name}.expectation.txt"); - var jobCSharp = Decompiler.DecompileIntoCSharpAndIL(type, DecompiledLanguage.CSharpOnly).CSharpCode; - var actualLines = jobCSharp.Split('\n').Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); + foreach (GeneratedType generatedType in generatedTypes) + { + string expectationFilePath = + generatedType.IsNestedType + ? $"{ExpectedPath}/{TrimEnd(generatedType.ParentTypeName, "Authoring")}.expectation.txt" + : $"{ExpectedPath}/{TrimEnd(generatedType.Name, "Authoring")}.expectation.txt"; - var shouldOverWrite = overwriteExpectationWithReality || !File.Exists(expectationFile); + string expectationFile = Path.GetFullPath(expectationFilePath); - if (shouldOverWrite) + string typeToDecompile = generatedType.IsNestedType ? generatedType.ParentTypeName : generatedType.Name; + string decompiledCode = Decompiler.DecompileIntoCSharp(typeToDecompile, generatedTypesDllFullPath).StandardOutput.ReadToEnd(); + string[] decompiledCodeLines = decompiledCode.Split('\n').Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); + + if (overwriteExpectationWithReality) + File.WriteAllText(expectationFile, decompiledCode); + else + { + if (!File.Exists(expectationFile)) + Assert.Fail($"Expectation file {expectationFile} does not exist."); + } + + string expectedCode = File.ReadAllText(expectationFile); + string[] expectedCodeLines = expectedCode.Split('\n').Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); + + var validationResult = Validate(expectedCodeLines, decompiledCodeLines); + + if (!validationResult.Success || overwriteExpectationWithReality) + { + LogDebugMessages(decompiledCode); + } + if (overwriteExpectationWithReality) + { + continue; + } + Assert.IsTrue(validationResult.Success, $"Test failed: {validationResult.FailureReason}."); + } + + string TrimEnd(string source, string value) { - File.WriteAllText(expectationFile, jobCSharp); + return !source.EndsWith(value) ? source : source.Remove(source.LastIndexOf(value)); } - string expected = File.ReadAllText(expectationFile); - var expectedLines = expected.Split('\n').Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); + } - var attributeRegex = new Regex(@"^[\t, ]*\[[\w]+(\(.*\))*\][\s]*$"); - var actualAttributes = new List(); - var expectedAttributes = new List(); + void LogDebugMessages(string decompiledCode) + { + string tempFolder = Path.GetTempPath(); + string path = $@"{tempFolder}decompiled.cs"; + File.WriteAllText(path, decompiledCode + Environment.NewLine + Environment.NewLine + AdditionalIL); + + Console.WriteLine("Actual Decompiled C#: "); + Console.WriteLine(decompiledCode); + + if (!String.IsNullOrEmpty(AdditionalIL)) + { + Console.WriteLine("Addition IL: "); + Console.WriteLine(AdditionalIL); + } + UnityEngine.Debug.Log($"Wrote expected C# code to editor log and to {path}"); + } + + static (bool Success, string FailureReason) Validate(IReadOnlyList expectedLines, IReadOnlyList actualLines) + { string failureReason = default; - bool success = expectedLines.Length == actualLines.Length; + bool success = expectedLines.Count == actualLines.Count; + if (!success) { - failureReason = $"Incorrect number of lines. Make sure the expectation file contains only the C#, not the IL. Expected lines: {expectedLines.Length}, actual lines: {actualLines.Length}"; + failureReason = $"Incorrect number of lines. Make sure the expectation file contains only the C#, not the IL. Expected lines: {expectedLines.Count}, actual lines: {actualLines.Count}"; Console.WriteLine(failureReason); + + return (false, failureReason); } - if (success) + Regex attributeRegex = new Regex(@"^[\t, ]*\[[\w]+(\(.*\))*\][\s]*$"); + + var actualAttributes = new List(); + var expectedAttributes = new List(); + + for (int i = 0; i < actualLines.Count; ++i) { - for (int i = 0; i < actualLines.Length; ++i) + string actualLine = actualLines[i]; + string expectedLine = expectedLines[i]; + + if (attributeRegex.IsMatch(actualLine)) { - string actualLine = actualLines[i]; - string expectedLine = expectedLines[i]; - - if (attributeRegex.IsMatch(actualLine)) - { - actualAttributes.Add(actualLine.Trim()); - expectedAttributes.Add(expectedLine.Trim()); - continue; - } - - if (expectedLine != actualLine) - { - success = false; - failureReason = $"Mismatched line at {i}.\nExpected line:\n\n{expectedLine}\n\nActual line:\n\n{actualLine}\n\n"; - Console.WriteLine(failureReason); - break; - } + actualAttributes.Add(actualLine.Trim()); + expectedAttributes.Add(expectedLine.Trim()); + continue; } - actualAttributes.Sort(); - expectedAttributes.Sort(); - if (success && !expectedAttributes.SequenceEqual(actualAttributes)) + if (expectedLine == actualLine) { - success = false; - var expectedAttributesStr = String.Join("\n", expectedAttributes); - var actualAttributesStr = String.Join("\n", actualAttributes); - failureReason = $"Mismatched attributes.\nExpected attributes:\n\n{expectedAttributesStr}\n\nActual attributes:\n\n {actualAttributesStr}\n\n"; - Console.WriteLine(failureReason); + continue; } + + failureReason = $"Mismatched line at {i}.\nExpected line:\n\n{expectedLine}\n\nActual line:\n\n{actualLine}\n\n"; + Console.WriteLine(failureReason); + + return (false, failureReason); } - if (!success || overwriteExpectationWithReality) + actualAttributes.Sort(); + expectedAttributes.Sort(); + + if (expectedAttributes.SequenceEqual(actualAttributes)) { - var tempFolder = Path.GetTempPath(); - var path = $@"{tempFolder}decompiled.cs"; - File.WriteAllText(path, jobCSharp + Environment.NewLine + Environment.NewLine + AdditionalIL); - Console.WriteLine("Actual Decompiled C#: "); - Console.WriteLine(jobCSharp); - if (!String.IsNullOrEmpty(AdditionalIL)) - { - Console.WriteLine("Addition IL: "); - Console.WriteLine(AdditionalIL); - } - UnityEngine.Debug.Log($"Wrote expected csharp to editor log and to {path}"); + return (true, string.Empty); + } + + string expectedAttributesStr = String.Join("\n", expectedAttributes); + string actualAttributesStr = String.Join("\n", actualAttributes); + + failureReason = $"Mismatched attributes.\nExpected attributes:\n\n{expectedAttributesStr}\n\nActual attributes:\n\n {actualAttributesStr}\n\n"; + Console.WriteLine(failureReason); + + return (false, failureReason); + } + + // TODO: Remove this method once all tests are updated to use its overload, RunTest(string authoringTypeName, string authoringTypeDllFullPath) + protected void RunPostprocessingTest(TypeReference type) + { + // Ideally these tests to run in Release codegen or otherwise the generated IL won't be deterministic (due to differences between /optimize+ and /optimize-). + // We attempt to make the tests generate the same decompiled C# in any case (by making sure all variables are used). + if (IsAssemblyBuiltAsDebug()) + UnityEngine.Debug.LogWarning("Integration tests should only be run with release code optimizations turned on for consistent codegen. Switch your settings in Preferences->External Tools->Editor Attaching (in 2019.3) or Preferences->General->Code Optimization On Startup (in 2020.1+) to be able to run these tests."); + + var expectationFile = Path.GetFullPath($"{ExpectedPath}/{GetType().Name}.expectation.txt"); + var jobCSharp = Decompiler.DecompileIntoCSharpAndIL(type, DecompiledLanguage.CSharpOnly).CSharpCode; + var actualLines = jobCSharp.Split('\n').Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); + + var shouldOverWrite = overwriteExpectationWithReality; + + if (shouldOverWrite) + File.WriteAllText(expectationFile, jobCSharp); + else + { + if (!File.Exists(expectationFile)) + Assert.Fail($"Expectation file {expectationFile} does not exist."); + } + + + string expected = File.ReadAllText(expectationFile); + var expectedLines = expected.Split('\n').Where(s => !string.IsNullOrWhiteSpace(s)).ToArray(); + + var validationResult = Validate(expectedLines, actualLines); + + if (!validationResult.Success || overwriteExpectationWithReality) + { + LogDebugMessages(jobCSharp); } if (shouldOverWrite) return; - Assert.IsTrue(success, $"Test failed: {failureReason}."); + Assert.IsTrue(validationResult.Success, $"Test failed: {validationResult.FailureReason}."); } } } diff --git a/Unity.Entities.CodeGen.Tests/LambdaJobs/LambdaJobIntegrationTest.cs b/Unity.Entities.CodeGen.Tests/LambdaJobs/LambdaJobIntegrationTest.cs index bd2e6afe..41e9f4c8 100644 --- a/Unity.Entities.CodeGen.Tests/LambdaJobs/LambdaJobIntegrationTest.cs +++ b/Unity.Entities.CodeGen.Tests/LambdaJobs/LambdaJobIntegrationTest.cs @@ -40,7 +40,7 @@ protected void RunTest(Type type) _methodIL.AppendLine(instruction.ToString()); } - RunTest(jobStructForLambdaJob.TypeDefinition.DeclaringType); + RunPostprocessingTest(jobStructForLambdaJob.TypeDefinition.DeclaringType); } } } diff --git a/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorErrorTests.cs b/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorErrorTests.cs index 434e248f..d97869f8 100644 --- a/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorErrorTests.cs +++ b/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorErrorTests.cs @@ -1,3 +1,4 @@ +#if !ROSLYN_SOURCEGEN_ENABLED // Still need to add error reporting for lambda jobs source generation using System; using System.Linq; using NUnit.Framework; @@ -1112,16 +1113,6 @@ public void DeallocateOnJobCompletionWarnsAboutArgumentType_CorrectDeallocateOnJ { AssertProducesNoError(typeof(CorrectDeallocateOnJobCompletionUsageWithStruct)); } - [Test] - public void DeallocateOnJobCompletionWarnsAboutArgumentType_IncorrectDeallocateOnJobCompletionUsageWithStruct() - { - AssertProducesError(typeof(IncorrectDeallocateOnJobCompletionUsageWithStruct), nameof(UserError.DC0035), "structWithPrimitiveType"); - } - [Test] - public void DeallocateOnJobCompletionWarnsAboutArgumentType_IncorrectDeallocateOnJobCompletionUsageWithPrimitiveType() - { - AssertProducesError(typeof(IncorrectDeallocateOnJobCompletionUsageWithPrimitiveType), nameof(UserError.DC0035), "myVar"); - } class CorrectDeallocateOnJobCompletionUsageWithNativeContainer : TestSystemBase { @@ -1150,27 +1141,6 @@ void Test() } } -#pragma warning disable 0618 - class IncorrectDeallocateOnJobCompletionUsageWithStruct : TestSystemBase - { - void Test() - { - StructWithPrimitiveType structWithPrimitiveType = default; - structWithPrimitiveType.field = default; - Entities.WithDeallocateOnJobCompletion(structWithPrimitiveType).ForEach((ref Translation t) => { t.Value += structWithPrimitiveType.field; }).Schedule(); - } - } - - class IncorrectDeallocateOnJobCompletionUsageWithPrimitiveType : TestSystemBase - { - void Test() - { - int myVar = 0; - Entities.WithDeallocateOnJobCompletion(myVar).ForEach((ref Translation t) => { t.Value += myVar; }).Schedule(); - } - } -#pragma warning restore 0618 - [Test] public void DisableContainerSafetyRestrictionWarnsAboutArgumentType_CorrectDisableContainerSafetyRestrictionUsageWithNativeContainer() { @@ -1800,6 +1770,24 @@ public class InvalidWithAnyInWithAllComponentGeneratesError_System : SystemBase public class InvalidWithAnyInLambdaParamComponentGeneratesError_System : SystemBase { protected override void OnUpdate() { Entities.WithAny().ForEach((ref Translation translation) => { }).Run(); } } + + public class JobWithCodeCapturingFieldInSystem_System : SystemBase + { + public int _someField; + protected override void OnUpdate() + { + Job.WithCode(() => + { + _someField = 123; + }).Run(); + } + } + + [Test] + public void JobWithCodeCapturingFieldInSystem() + { + AssertProducesError(typeof(JobWithCodeCapturingFieldInSystem_System), nameof(UserError.DC0001), "_someField"); + } } public static class TestSystemBaseExtensionMethods @@ -1810,3 +1798,4 @@ public static void MyTestExtension(this TestSystemBase test) {} public static void MyTestExtensionInterface(this ITestInterface test) {} } } +#endif diff --git a/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs b/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs index 6eb8f85b..28a78f46 100644 --- a/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs +++ b/Unity.Entities.CodeGen.Tests/LambdaJobsPostProcessorTestBase.cs @@ -8,9 +8,9 @@ using Mono.Cecil.Cil; using Mono.Cecil.Rocks; using NUnit.Framework; -using NUnit.Framework.Constraints; +using Unity.CompilationPipeline.Common; using Unity.CompilationPipeline.Common.Diagnostics; -using Unity.Entities.CodeGen; +using UnityEditor.Compilation; namespace Unity.Entities.CodeGen.Tests { @@ -87,6 +87,9 @@ static MemoryStream PdbStreamFor(string assemblyLocation) [MethodImpl(MethodImplOptions.NoInlining)] protected static T EnsureNotOptimizedAway(T x) { return x; } + [MethodImpl(MethodImplOptions.NoInlining)] + protected static ref T EnsureNotOptimizedAway(ref T x) { return ref x; } + private class OnDemandResolver : IAssemblyResolver { public void Dispose() @@ -109,6 +112,16 @@ public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters p } } + protected static void AssertSourceGenerationFailure(CompilerMessage[] compilerMessages, string expectedErrorMessage) + { + Assert.IsTrue(compilerMessages.Length == 1); + + CompilerMessage compilerMessage = compilerMessages.Single(); + + Assert.AreEqual(compilerMessage.type, CompilerMessageType.Error); + Assert.IsTrue(compilerMessage.message.Contains(expectedErrorMessage)); + } + protected abstract void AssertProducesInternal(Type systemType, DiagnosticType type, string[] shouldContains, bool useFailResolver = false); protected void AssertProducesWarning(Type systemType, params string[] shouldContainWarnings) @@ -146,7 +159,7 @@ protected void AssertProducesNoError(Type systemType) var assemblyDefinition = AssemblyDefinitionFor(systemType); var testSystemType = assemblyDefinition.MainModule .GetAllTypes() - .Where(TypeDefinitionExtensions.IsComponentSystem) + .Where(type => type.IsComponentSystem()) .FirstOrDefault(t => t.Name == systemType.Name); foreach (var methodToAnalyze in testSystemType.Methods.ToList()) diff --git a/Unity.Entities.CodeGen.Tests/SingletonAccess/SingletonAccessIntegrationTest.cs b/Unity.Entities.CodeGen.Tests/SingletonAccess/SingletonAccessIntegrationTest.cs index 9ddab5da..ab4ce227 100644 --- a/Unity.Entities.CodeGen.Tests/SingletonAccess/SingletonAccessIntegrationTest.cs +++ b/Unity.Entities.CodeGen.Tests/SingletonAccess/SingletonAccessIntegrationTest.cs @@ -37,7 +37,7 @@ protected void RunTest(Type type) _methodIL.AppendLine(instruction.ToString()); } - RunTest(methodToAnalyze.DeclaringType); + RunPostprocessingTest(methodToAnalyze.DeclaringType); } } } diff --git a/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef b/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef index 8308796c..be9b7a3b 100644 --- a/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef +++ b/Unity.Entities.CodeGen.Tests/Unity.Entities.CodeGen.Tests.asmdef @@ -7,6 +7,7 @@ "Unity.Entities.CodeGen", "Unity.Entities.CodeGen.Tests.TestTypes", "Unity.Burst", + "Unity.Mathematics", "Unity.Properties", "UnityEngine.TestRunner", "UnityEditor.TestRunner", @@ -24,12 +25,18 @@ "Mono.Cecil.Rocks.dll", "Mono.Cecil.Pdb.dll", "nunit.framework.dll", - "nunit.framework.dll" + "ExternalCSharpCompiler.dll" ], "autoReferenced": false, "defineConstraints": [ "UNITY_INCLUDE_TESTS" ], - "versionDefines": [], + "versionDefines": [ + { + "name": "com.unity.roslyn", + "expression": "0.0.0-preview.3", + "define": "ROSLYN_SOURCEGEN_ENABLED" + } + ], "noEngineReferences": false -} \ No newline at end of file +} diff --git a/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs b/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs index 0e4970b5..b04c6e23 100644 --- a/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs +++ b/Unity.Entities.CodeGen/BlobAssetSafety/BlobAssetSafetyVerifier.cs @@ -42,6 +42,52 @@ void AssertNoBlobAssetLeavesBlobAssetStorage() } } + public static bool IsOrHasReferenceTypeField(TypeReference type, HashSet validatedTypes, MethodDefinition method, List diagnosticMessages, out string fieldDescription) + { + fieldDescription = null; + if (!type.IsValueType()) + return true; + + if (validatedTypes.Contains(type)) + return false; + + validatedTypes.Add(type); + + if (type.IsGenericInstance) + { + var isBlobArray = type.GetElementType().TypeReferenceEquals(typeof(BlobArray<>)); + if (isBlobArray || type.GetElementType().TypeReferenceEquals(typeof(BlobPtr<>))) + { + var instance = (GenericInstanceType) type; + if (instance.GenericArguments.Count == 1 && IsOrHasReferenceTypeField(instance.GenericArguments[0], + validatedTypes, method, diagnosticMessages, out var fieldInGenericArg)) + { + var genericIdentifier = isBlobArray ? "[]" : ".Value"; + fieldDescription = genericIdentifier + fieldInGenericArg; + return true; + } + } + } + + // Allow this if we fail resolve but generate warning (in TryResolve) + if (!TryResolve(type, method, diagnosticMessages, out var typeDefinition)) + return false; + + foreach (var field in typeDefinition.Fields) + { + if(field.IsStatic) + continue; + + if (IsOrHasReferenceTypeField(field.FieldType, validatedTypes, method, diagnosticMessages, out var fieldInFieldType)) + { + fieldDescription = "." + field.Name + fieldInFieldType; + return true; + } + } + + return false; + } + public static List VerifyMethod(MethodDefinition method, HashSet _nonRestrictedTypes) { var diagnosticMessages = new List(); @@ -69,16 +115,9 @@ bool IsTypeRestrictedToBlobAssetStorage(TypeReference tr) anr.Name == "System.Private.CoreLib") return false; - // Don't do a CheckedResolve here. If we somehow fail we don't want to block the user. - var td = tr.Resolve(); - if (td == null) + if (!TryResolve(tr, method, diagnosticMessages, out var td)) { - diagnosticMessages.Add( - UserError.MakeWarning("ResolveFailureWarning", - $"Unable to resolve type {tr.FullName} for verification.", - method, method.Body.Instructions.FirstOrDefault())); _nonRestrictedTypes.Add(tr); - return false; } @@ -102,6 +141,22 @@ bool IsTypeRestrictedToBlobAssetStorage(TypeReference tr) foreach (var instruction in method.Body.Instructions) { + if (instruction.IsInvocation(out var targetMethod) && + targetMethod.DeclaringType.TypeReferenceEquals(typeof(BlobBuilder)) && + targetMethod.Name == nameof(BlobBuilder.ConstructRoot) && + targetMethod is GenericInstanceMethod genericTargetMethod) + { + foreach (var arg in genericTargetMethod.GenericArguments) + { + var validatedTypes = new HashSet(); + if (IsOrHasReferenceTypeField(arg, validatedTypes, method, diagnosticMessages, out var fieldDescription)) + { + string errorFieldPath = fieldDescription == null ? arg.Name : arg.Name + fieldDescription; + var message = $"You may not build a type {arg.Name} with {nameof(BlobBuilder.Construct)} as {errorFieldPath} is a reference or pointer. Only non-reference types are allowed in Blobs."; + diagnosticMessages.Add(UserError.MakeError("ConstructBlobWithRefTypeViolation", message, method, instruction)); + } + } + } if (instruction.OpCode == OpCodes.Ldfld) { var fieldReference = (FieldReference)instruction.Operand; @@ -145,6 +200,22 @@ bool IsTypeRestrictedToBlobAssetStorage(TypeReference tr) return diagnosticMessages; } + // Don't do a CheckedResolve here. If we somehow fail we don't want to block the user. + static bool TryResolve(TypeReference tr, MethodDefinition method, List diagnosticMessages, out TypeDefinition td) + { + td = tr.Resolve(); + if (td == null) + { + diagnosticMessages.Add( + UserError.MakeWarning("ResolveFailureWarning", + $"Unable to resolve type {tr.FullName} for verification.", + method, method.Body.Instructions.FirstOrDefault())); + return false; + } + + return true; + } + private static string FancyNameFor(TypeReference typeReference) { if (typeReference is GenericInstanceType git) diff --git a/Unity.Entities.CodeGen/CecilExtensionMethods.cs b/Unity.Entities.CodeGen/CecilExtensionMethods.cs index 7ac6f7de..364f4d11 100644 --- a/Unity.Entities.CodeGen/CecilExtensionMethods.cs +++ b/Unity.Entities.CodeGen/CecilExtensionMethods.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Reflection; +using System.Runtime.CompilerServices; using Mono.Cecil; using Mono.Cecil.Cil; using Unity.Burst; @@ -262,23 +263,33 @@ public static bool IsSystemBase(this TypeDefinition arg) return IsSystemBase(baseTypeRef.Resolve()); } - public static bool IsComponentSystem(this TypeDefinition arg) + public static bool IsComponentSystem(this TypeDefinition arg, bool isFirstIteration = true) { - var baseTypeRef = arg.BaseType; - - if (baseTypeRef == null) - return false; + while (true) + { + var baseTypeRef = arg.BaseType; - if (baseTypeRef.Namespace == "Unity.Entities" && baseTypeRef.Name == nameof(ComponentSystemBase)) - return true; + if (baseTypeRef == null) return false; - if (baseTypeRef.Name == "Object" && baseTypeRef.Namespace == "System") - return false; + if (baseTypeRef.Namespace == "Unity.Entities" && baseTypeRef.Name == nameof(ComponentSystemBase)) return true; - if (baseTypeRef.Name == "ValueType" && baseTypeRef.Namespace == "System") - return false; + // Early out if we can count on source generators adding this attribute to every system +#if ROSLYN_SOURCEGEN_ENABLED + if (isFirstIteration && arg.CustomAttributes.All(a => a.Constructor.DeclaringType.Name != nameof(CompilerGeneratedAttribute))) + return false; +#endif - return IsComponentSystem(baseTypeRef.Resolve()); + switch (baseTypeRef.Name) + { + case "Object" when baseTypeRef.Namespace == "System": + case "ValueType" when baseTypeRef.Namespace == "System": + return false; + default: + arg = baseTypeRef.Resolve(); + isFirstIteration = false; + break; + } + } } public static bool IsUnityEngineObject(this TypeDefinition typeDefinition) @@ -586,6 +597,7 @@ public static int GetPopDelta(this Instruction instruction) } public static bool IsLoadFieldOrLoadFieldAddress(this Instruction instruction) => (instruction.OpCode == OpCodes.Ldfld || instruction.OpCode == OpCodes.Ldflda); + public static bool IsLoadField(this Instruction instruction) => (instruction.OpCode == OpCodes.Ldfld || instruction.OpCode == OpCodes.Ldflda); public static bool IsStoreField(this Instruction instruction) => (instruction.OpCode == OpCodes.Stfld); public static bool IsLoadConstantInt(this Instruction instruction, out int intValue) diff --git a/Unity.Entities.CodeGen/Cloner.meta b/Unity.Entities.CodeGen/Cloner.meta new file mode 100644 index 00000000..db0a5ba8 --- /dev/null +++ b/Unity.Entities.CodeGen/Cloner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: dd14f38c45ec34b44a40a2e64424561f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities.CodeGen/Cloner/Cloner.cs b/Unity.Entities.CodeGen/Cloner/Cloner.cs new file mode 100644 index 00000000..489167d4 --- /dev/null +++ b/Unity.Entities.CodeGen/Cloner/Cloner.cs @@ -0,0 +1,53 @@ +#if ROSLYN_SOURCEGEN_ENABLED + +using System.Linq; +using Mono.Cecil; +using Mono.Cecil.Cil; +using Unity.Entities; +using Unity.Entities.CodeGen; + +class Cloner : EntitiesILPostProcessor +{ + protected override bool PostProcessImpl(TypeDefinition[] componentSystemTypes) + { + var madeChange = false; + foreach (var c in componentSystemTypes) + { + var typeMethods = c.Methods.ToArray(); + foreach (var patchedMethod in typeMethods.Where(m => m.CustomAttributes.Any( + attribute => attribute.AttributeType.Name == nameof(DOTSCompilerPatchedMethodAttribute)))) + { + var patchedMethodName = patchedMethod.CustomAttributes.First(attribute => attribute.AttributeType.Name == nameof(DOTSCompilerPatchedMethodAttribute)) + .ConstructorArguments.First().Value.ToString(); + var original = c.Methods.Single(m => m.Name == patchedMethodName); + + foreach (var displayClass in original.Body.Variables.Select(v => v.VariableType).OfType().Where(IsDisplayClass)) + { + original.DeclaringType.NestedTypes.Remove(displayClass); + } + + original.Body = patchedMethod.Body; + c.Methods.Remove(patchedMethod); + + var sequencePoints = original.DebugInformation.SequencePoints; + sequencePoints.Clear(); + foreach (var sp in patchedMethod.DebugInformation.SequencePoints) + sequencePoints.Add(sp); + original.DebugInformation.Scope = patchedMethod.DebugInformation.Scope; + + madeChange = true; + } + } + return madeChange; + } + + static bool IsDisplayClass(TypeDefinition arg) => arg.Name.Contains("<>"); + + protected override bool PostProcessUnmanagedImpl(TypeDefinition[] unmanagedComponentSystemTypes) + { + return false; + } +} + +#endif + diff --git a/Unity.Entities.CodeGen/Cloner/Cloner.cs.meta b/Unity.Entities.CodeGen/Cloner/Cloner.cs.meta new file mode 100644 index 00000000..a799050a --- /dev/null +++ b/Unity.Entities.CodeGen/Cloner/Cloner.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7b33605996cd41d0bea0aab517e0ae77 +timeCreated: 1590050675 \ No newline at end of file diff --git a/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs b/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs index fffc2511..b410fa55 100644 --- a/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs +++ b/Unity.Entities.CodeGen/EntitiesILPostProcessor.cs @@ -16,6 +16,8 @@ namespace Unity.Entities.CodeGen { internal class EntitiesILPostProcessors : ILPostProcessor { + bool _ReferencesEntities; + bool _ReferencesJobs; public static string[] Defines { get; internal set; } static EntitiesILPostProcessor[] FindAllEntitiesILPostProcessors() @@ -41,28 +43,39 @@ public override ILPostProcessResult Process(ICompiledAssembly compiledAssembly) using (var marker = new EntitiesILPostProcessorProfileMarker(compiledAssembly.Name)) { + var diagnostics = new List(); bool madeAnyChange = false; Defines = compiledAssembly.Defines; var assemblyDefinition = AssemblyDefinitionFor(compiledAssembly); var postProcessors = FindAllEntitiesILPostProcessors(); TypeDefinition[] componentSystemTypes; - using (marker.CreateChildMarker("GetAllComponentTypes")) - componentSystemTypes = assemblyDefinition.MainModule.GetAllTypes().Where(TypeDefinitionExtensions.IsComponentSystem).ToArray(); - - using (marker.CreateChildMarker("InjectOnCreateForCompiler")) + try { - foreach (var systemType in componentSystemTypes) + using (marker.CreateChildMarker("GetAllComponentTypes")) + componentSystemTypes = assemblyDefinition.MainModule.GetAllTypes().Where(type => type.IsComponentSystem()).ToArray(); + + using (marker.CreateChildMarker("InjectOnCreateForCompiler")) { - InjectOnCreateForCompiler(systemType); - madeAnyChange = true; + foreach (var systemType in componentSystemTypes) + { + InjectOnCreateForCompiler(systemType); + madeAnyChange = true; + } } } + catch (FoundErrorInUserCodeException e) + { + diagnostics.AddRange(e.DiagnosticMessages); + return null; + } - var diagnostics = new List(); foreach (var postProcessor in postProcessors) { - postProcessor.Defines = Defines; + postProcessor.Initialize(Defines, _ReferencesEntities, _ReferencesJobs); + if (!postProcessor.WillProcess()) + continue; + using (marker.CreateChildMarker(postProcessor.GetType().Name)) { diagnostics.AddRange(postProcessor.PostProcess(assemblyDefinition, componentSystemTypes, out var madeChange)); @@ -125,8 +138,12 @@ static void InjectOnCreateForCompiler(TypeDefinition typeDefinition) var onCreateForCompilerName = EntitiesILHelpers.GetOnCreateForCompilerName(); var preExistingMethod = typeDefinition.Methods.FirstOrDefault(m => m.Name == onCreateForCompilerName); + + // Disable for now to allow for source generated onCreateForCompilerName methods +#if !ROSLYN_SOURCEGEN_ENABLED if (preExistingMethod != null) UserError.DC0026($"It's not allowed to implement {onCreateForCompilerName}'", preExistingMethod).Throw(); +#endif EntitiesILHelpers.GetOrMakeOnCreateForCompilerMethodFor(typeDefinition); } @@ -136,17 +153,47 @@ public override ILPostProcessor GetInstance() return this; } + // Today there is no mechanism for sorting which ILPostProcessor runs relative to another + // As such a sort order mechanism was added to this ILPP via running "EntitiesILPostProcessor"s + // and sorting by `SortWeight`. However, some "EntitiesILPostProcessor"s need to run even if an assembly + // doesn't references Entities.dll, so we extend the WillProcess implementation here to be inclusive + // to other assemblies until the CompilationPipeline.ILPostProcessing API is extended public override bool WillProcess(ICompiledAssembly compiledAssembly) { if (compiledAssembly.Name == "Unity.Entities") + { + _ReferencesEntities = true; + _ReferencesJobs = true; return true; - return compiledAssembly.References.Any(f => Path.GetFileName(f) == "Unity.Entities.dll") && - !compiledAssembly.Name.Contains("CodeGen.Tests"); + } + if (compiledAssembly.Name == "Unity.Jobs") + { + _ReferencesEntities = false; + _ReferencesJobs = true; + return true; + } + + if (compiledAssembly.Name.EndsWith("CodeGen.Tests")) + return false; + + for (int i = 0; + (!_ReferencesEntities || !_ReferencesJobs) // If we found both we can stop searching + && i < compiledAssembly.References.Length; ++i) + { + var fileName = Path.GetFileNameWithoutExtension(compiledAssembly.References[i]); + if (fileName == "Unity.Entities") + _ReferencesEntities = true; + else if (fileName == "Unity.Jobs") + _ReferencesJobs = true; + } + + return _ReferencesEntities || _ReferencesJobs; } class PostProcessorAssemblyResolver : IAssemblyResolver { - private readonly string[] _references; + private readonly string[] _referenceDirectories; + private Dictionary> _referenceToPathMap; Dictionary _cache = new Dictionary(); private ICompiledAssembly _compiledAssembly; private AssemblyDefinition _selfAssembly; @@ -154,7 +201,19 @@ class PostProcessorAssemblyResolver : IAssemblyResolver public PostProcessorAssemblyResolver(ICompiledAssembly compiledAssembly) { _compiledAssembly = compiledAssembly; - _references = compiledAssembly.References; + _referenceToPathMap = new Dictionary>(); + foreach (var reference in compiledAssembly.References) + { + var assemblyName = Path.GetFileNameWithoutExtension(reference); + if (!_referenceToPathMap.TryGetValue(assemblyName, out var fileList)) + { + fileList = new HashSet(); + _referenceToPathMap.Add(assemblyName, fileList); + } + fileList.Add(reference); + } + + _referenceDirectories = _referenceToPathMap.Values.SelectMany(pathSet => pathSet.Select(Path.GetDirectoryName)).Distinct().ToArray(); } public void Dispose() @@ -168,7 +227,9 @@ public AssemblyDefinition Resolve(AssemblyNameReference name) public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters parameters) { +#if !UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME lock (_cache) +#endif { if (name.Name == _compiledAssembly.Name) return _selfAssembly; @@ -177,9 +238,11 @@ public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters p if (fileName == null) return null; + var cacheKey = fileName; +#if !UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME var lastWriteTime = File.GetLastWriteTime(fileName); - - var cacheKey = fileName + lastWriteTime.ToString(); + cacheKey += lastWriteTime.ToString(); +#endif if (_cache.TryGetValue(cacheKey, out var result)) return result; @@ -200,27 +263,43 @@ public AssemblyDefinition Resolve(AssemblyNameReference name, ReaderParameters p private string FindFile(AssemblyNameReference name) { - var fileName = _references.FirstOrDefault(r => Path.GetFileName(r) == name.Name + ".dll"); - if (fileName != null) - return fileName; - - // perhaps the type comes from an exe instead - fileName = _references.FirstOrDefault(r => Path.GetFileName(r) == name.Name + ".exe"); - if (fileName != null) - return fileName; - - //Unfortunately the current ICompiledAssembly API only provides direct references. - //It is very much possible that a postprocessor ends up investigating a type in a directly - //referenced assembly, that contains a field that is not in a directly referenced assembly. - //if we don't do anything special for that situation, it will fail to resolve. We should fix this - //in the ILPostProcessing api. As a workaround, we rely on the fact here that the indirect references - //are always located next to direct references, so we search in all directories of direct references we - //got passed, and if we find the file in there, we resolve to it. - foreach (var parentDir in _references.Select(Path.GetDirectoryName).Distinct()) + if (_referenceToPathMap.TryGetValue(name.Name, out var paths)) + { + if(paths.Count == 1) + return paths.First(); + + // If we have more than one assembly with the same name loaded we now need to figure out which one + // is being requested based on the AssemblyNameReference + foreach (var path in paths) + { + var onDiskAssemblyName = AssemblyName.GetAssemblyName(path); + if (onDiskAssemblyName.FullName == name.FullName) + return path; + } + throw new ArgumentException($"Tried to resolve a reference in assembly '{name.FullName}' however the assembly could not be found. Known references which did not match: \n{string.Join("\n",paths)}"); + } + + // Unfortunately the current ICompiledAssembly API only provides direct references. + // It is very much possible that a postprocessor ends up investigating a type in a directly + // referenced assembly, that contains a field that is not in a directly referenced assembly. + // if we don't do anything special for that situation, it will fail to resolve. We should fix this + // in the ILPostProcessing api. As a workaround, we rely on the fact here that the indirect references + // are always located next to direct references, so we search in all directories of direct references we + // got passed, and if we find the file in there, we resolve to it. + foreach (var parentDir in _referenceDirectories) { var candidate = Path.Combine(parentDir, name.Name + ".dll"); if (File.Exists(candidate)) + { + if (!_referenceToPathMap.TryGetValue(candidate, out var referencePaths)) + { + referencePaths = new HashSet(); + _referenceToPathMap.Add(candidate, referencePaths); + } + referencePaths.Add(candidate); + return candidate; + } } return null; @@ -318,10 +397,18 @@ public override AssemblyNameReference ImportReference(AssemblyName reference) abstract class EntitiesILPostProcessor : IComparable { + public virtual int SortWeight => 0; + public string[] Defines { get; private set; } + public bool ReferencesEntities { get; private set; } + public bool ReferencesJobs { get; private set; } protected AssemblyDefinition AssemblyDefinition; - public string[] Defines { get; set; } - public virtual int SortWeight => 0; + internal void Initialize(string[] compilationDefines, bool referencesEntities, bool referencesJobs) + { + Defines = compilationDefines; + ReferencesEntities = referencesEntities; + ReferencesJobs = referencesJobs; + } protected List _diagnosticMessages = new List(); @@ -341,6 +428,11 @@ public IEnumerable PostProcess(AssemblyDefinition assemblyDef return _diagnosticMessages; } + public virtual bool WillProcess() + { + return ReferencesEntities; + } + protected abstract bool PostProcessImpl(TypeDefinition[] componentSystemTypes); protected abstract bool PostProcessUnmanagedImpl(TypeDefinition[] unmanagedComponentSystemTypes); diff --git a/Unity.Entities.CodeGen/ISystemBasePostProcessor.cs b/Unity.Entities.CodeGen/ISystemBasePostProcessor.cs index fda128b4..2b6be64f 100644 --- a/Unity.Entities.CodeGen/ISystemBasePostProcessor.cs +++ b/Unity.Entities.CodeGen/ISystemBasePostProcessor.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Reflection; using System.Runtime.InteropServices; using Mono.Cecil; using Mono.Cecil.Cil; @@ -109,8 +110,15 @@ private TypeMemo AddStaticForwarders(TypeDefinition systemType) // so we add that here until that is supported var monoPInvokeCallbackAttributeConstructor = typeof(Jobs.MonoPInvokeCallbackAttribute).GetConstructor(Type.EmptyTypes); methodDef.CustomAttributes.Add(new CustomAttribute(mod.ImportReference(monoPInvokeCallbackAttributeConstructor))); +#else + // Adding MonoPInvokeCallbackAttribute needed for IL2CPP to work when burst is disabled + var monoPInvokeCallbackAttributeConstructors = typeof(MonoPInvokeCallbackAttribute).GetConstructors(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + var monoPInvokeCallbackAttribute = new CustomAttribute(mod.ImportReference(monoPInvokeCallbackAttributeConstructors[0])); + monoPInvokeCallbackAttribute.ConstructorArguments.Add(new CustomAttributeArgument(mod.ImportReference(typeof(Type)), mod.ImportReference(typeof(SystemBaseDelegates.Function)))); + methodDef.CustomAttributes.Add(monoPInvokeCallbackAttribute); #endif + var processor = methodDef.Body.GetILProcessor(); processor.Emit(OpCodes.Ldarga, 0); @@ -142,9 +150,14 @@ private void AddRegistrationCode(List memos) #if !UNITY_DOTSRUNTIME if (!Defines.Contains("UNITY_EDITOR")) { - // Needs to run automatically in the player. - var attributeCtor = AssemblyDefinition.MainModule.ImportReference(typeof(UnityEngine.RuntimeInitializeOnLoadMethodAttribute).GetConstructor(Type.EmptyTypes)); - funcDef.CustomAttributes.Add(new CustomAttribute(attributeCtor)); + // Needs to run automatically in the player, but we need to + // exclude this attribute when building for the editor, or + // it will re-run the registration for every enter play mode. + var loadTypeEnumType = mod.ImportReference(typeof(UnityEngine.RuntimeInitializeLoadType)); + var attributeCtor = mod.ImportReference(typeof(UnityEngine.RuntimeInitializeOnLoadMethodAttribute).GetConstructor(new[] { typeof(UnityEngine.RuntimeInitializeLoadType) })); + var attribute = new CustomAttribute(attributeCtor); + attribute.ConstructorArguments.Add(new CustomAttributeArgument(loadTypeEnumType, UnityEngine.RuntimeInitializeLoadType.AfterAssembliesLoaded)); + funcDef.CustomAttributes.Add(attribute); } if (Defines.Contains("UNITY_EDITOR")) diff --git a/Unity.Entities.CodeGen/JobReflectionDataPostProcessor.cs b/Unity.Entities.CodeGen/JobReflectionDataPostProcessor.cs index 663a7392..79677d50 100644 --- a/Unity.Entities.CodeGen/JobReflectionDataPostProcessor.cs +++ b/Unity.Entities.CodeGen/JobReflectionDataPostProcessor.cs @@ -22,6 +22,11 @@ class JobReflectionDataPostProcessor : EntitiesILPostProcessor // This must happen very late, after all jobs have been set up public override int SortWeight => 0xff00; + public override bool WillProcess() + { + return ReferencesJobs || ReferencesEntities; + } + protected override bool PostProcessUnmanagedImpl(TypeDefinition[] unmanagedComponentSystemTypes) { return false; @@ -32,14 +37,43 @@ public static MethodReference AttributeConstructorReferenceFor(Type attributeTyp return module.ImportReference(attributeType.GetConstructors().Single(c => !c.GetParameters().Any())); } - private static TypeReference LaunderTypeRef(TypeReference r, ModuleDefinition mod) + + private TypeReference LaunderTypeRef(TypeReference r_) { - TypeReference laundered = new TypeReference(r.Namespace, r.Name, mod, r.Scope, r.Resolve().IsValueType); - if (r.DeclaringType != null) + ModuleDefinition mod = AssemblyDefinition.MainModule; + + TypeDefinition def = r_.Resolve(); + + TypeReference result; + + if (r_ is GenericInstanceType git) + { + var gt = new GenericInstanceType(LaunderTypeRef(def)); + + foreach (var gp in git.GenericParameters) + { + gt.GenericParameters.Add(gp); + } + + foreach (var ga in git.GenericArguments) + { + gt.GenericArguments.Add(LaunderTypeRef(ga)); + } + + result = gt; + + } + else { - laundered.DeclaringType = LaunderTypeRef(r.DeclaringType, mod); + result = new TypeReference(def.Namespace, def.Name, def.Module, def.Scope, def.IsValueType); + + if (def.DeclaringType != null) + { + result.DeclaringType = LaunderTypeRef(def.DeclaringType); + } } - return mod.ImportReference(laundered); + + return mod.ImportReference(result); } protected override bool PostProcessImpl(TypeDefinition[] componentSystemTypes) @@ -66,48 +100,37 @@ protected override bool PostProcessImpl(TypeDefinition[] componentSystemTypes) bool anythingChanged = false; - var declaredGenerics = new HashSet(); var genericJobs = new List(); + var visited = new HashSet(); foreach (var attr in assemblyDefinition.CustomAttributes) { if (attr.AttributeType.FullName != RegisterGenericJobTypeAttributeName) continue; - var openTypeRef = (TypeReference)attr.ConstructorArguments[0].Value; - var openType = assemblyDefinition.MainModule.ImportReference(openTypeRef).Resolve(); + var typeRef = (TypeReference)attr.ConstructorArguments[0].Value; + var openType = typeRef.Resolve(); - if (!openTypeRef.IsGenericInstance || !openType.IsValueType) + if (!typeRef.IsGenericInstance || !openType.IsValueType) { AddDiagnostic(UserError.DC3001(openType)); continue; } - TypeReference result = new GenericInstanceType(assemblyDefinition.MainModule.ImportReference(new TypeReference(openType.Namespace, openType.Name, assemblyDefinition.MainModule, openTypeRef.Scope, true))); - - foreach (var ga in ((GenericInstanceType)openTypeRef).GenericArguments) - { - ((GenericInstanceType)result).GenericArguments.Add(LaunderTypeRef(ga, assemblyDefinition.MainModule)); - } - - genericJobs.Add(result); - - - var fn = openType.FullName; - if (!declaredGenerics.Contains(fn)) - { - declaredGenerics.Add(fn); - } + genericJobs.Add(typeRef); + visited.Add(typeRef.FullName); } + CollectGenericTypeInstances(AssemblyDefinition, genericJobs, visited); + foreach (var t in assemblyDefinition.MainModule.Types) { - anythingChanged |= VisitJobStructs(t, processor, body, declaredGenerics); + anythingChanged |= VisitJobStructs(t, processor, body); } foreach (var t in genericJobs) { - anythingChanged |= VisitJobStructs(t, processor, body, declaredGenerics); + anythingChanged |= VisitJobStructs(t, processor, body); } processor.Emit(OpCodes.Ret); @@ -160,8 +183,14 @@ protected override bool PostProcessImpl(TypeDefinition[] componentSystemTypes) return anythingChanged; } - private bool VisitJobStructs(TypeReference t, ILProcessor processor, MethodBody body, HashSet declaredGenerics) + private bool VisitJobStructs(TypeReference t, ILProcessor processor, MethodBody body) { + if (t.GenericParameters.Count > 0) + { + // Generic jobs need to be either reference in fully closed form, or registered explicitly with an attribute. + return false; + } + var rt = t.CheckedResolve(); bool didAnything = false; @@ -181,20 +210,21 @@ private bool VisitJobStructs(TypeReference t, ILProcessor processor, MethodBody continue; var producerRef = (TypeReference)attr.ConstructorArguments[0].Value; - didAnything |= GenerateCalls(producerRef, t, body, processor, declaredGenerics); + var launderedType = LaunderTypeRef(t); + didAnything |= GenerateCalls(producerRef, launderedType, body, processor); } } } foreach (var nestedType in rt.NestedTypes) { - didAnything |= VisitJobStructs(nestedType, processor, body, declaredGenerics); + didAnything |= VisitJobStructs(nestedType, processor, body); } return didAnything; } - private bool GenerateCalls(TypeReference producerRef, TypeReference jobStructType, MethodBody body, ILProcessor processor, HashSet declaredGenerics) + private bool GenerateCalls(TypeReference producerRef, TypeReference jobStructType, MethodBody body, ILProcessor processor) { try { @@ -214,14 +244,6 @@ private bool GenerateCalls(TypeReference producerRef, TypeReference jobStructTyp if (methodToCall == null) return false; - // We need a separate solution for generic jobs - if (jobStructType.HasGenericParameters) - { - if (!declaredGenerics.Contains(jobStructType.FullName)) - AddDiagnostic(UserError.DC3002(jobStructType)); - return false; - } - var asm = AssemblyDefinition.MainModule; var errorHandler = asm.ImportReference((asm.ImportReference(typeof(EarlyInitHelpers)).Resolve().Methods.First(x => x.Name == nameof(EarlyInitHelpers.JobReflectionDataCreationFailed)))); @@ -264,6 +286,92 @@ private bool GenerateCalls(TypeReference producerRef, TypeReference jobStructTyp return false; } + + private static void CollectGenericTypeInstances(AssemblyDefinition assembly, List types, HashSet visited) + { + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + // WARNING: THIS CODE HAS TO BE MAINTAINED IN SYNC WITH BurstReflection.cs in Unity.Burst package + // !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + + // From: https://gist.github.com/xoofx/710aaf86e0e8c81649d1261b1ef9590e + if (assembly == null) throw new ArgumentNullException(nameof(assembly)); + const int mdMaxCount = 1 << 24; + foreach (var module in assembly.Modules) + { + for (int i = 1; i < mdMaxCount; i++) + { + // Token base id for TypeSpec + const int mdTypeSpec = 0x1B000000; + var token = module.LookupToken(mdTypeSpec | i); + if (token is GenericInstanceType type) + { + if (type.IsGenericInstance && !type.ContainsGenericParameter) + { + CollectGenericTypeInstances(type, types, visited); + } + } else if (token == null) break; + } + + for (int i = 1; i < mdMaxCount; i++) + { + // Token base id for MethodSpec + const int mdMethodSpec = 0x2B000000; + var token = module.LookupToken(mdMethodSpec | i); + if (token is GenericInstanceMethod method) + { + foreach (var argType in method.GenericArguments) + { + if (argType.IsGenericInstance && !argType.ContainsGenericParameter) + { + CollectGenericTypeInstances(argType, types, visited); + } + } + } + else if (token == null) break; + } + + for (int i = 1; i < mdMaxCount; i++) + { + // Token base id for Field + const int mdField = 0x04000000; + var token = module.LookupToken(mdField | i); + if (token is FieldReference field) + { + var fieldType = field.FieldType; + if (fieldType.IsGenericInstance && !fieldType.ContainsGenericParameter) + { + CollectGenericTypeInstances(fieldType, types, visited); + } + } + else if (token == null) break; + } + } + } + + private static void CollectGenericTypeInstances(TypeReference type, List types, HashSet visited) + { + if (type.IsPrimitive) return; + if (!visited.Add(type.FullName)) return; + + // Add only concrete types + if (type.IsGenericInstance && !type.ContainsGenericParameter) + { + types.Add(type); + } + + // Collect recursively generic type arguments + var genericInstanceType = type as GenericInstanceType; + if (genericInstanceType != null) + { + foreach (var genericTypeArgument in genericInstanceType.GenericArguments) + { + if (!genericTypeArgument.IsPrimitive) + { + CollectGenericTypeInstances(genericTypeArgument, types, visited); + } + } + } + } } #endif } diff --git a/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs b/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs index 5f23ae08..b6b92d35 100644 --- a/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs +++ b/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachAttributes.cs @@ -33,10 +33,6 @@ public AttributeData(string methodName, Type attributeType, CheckAttributeApplic public static readonly List Attributes = new List { new AttributeData(nameof(LambdaJobDescriptionConstructionMethods.WithReadOnly), typeof(ReadOnlyAttribute), CheckReadOnly), - - // DeallocateOnJobCompletionAttribute is now applied in JobStructForLambdaJob.InsertMethodAndAttributesToDisposeContainerFields - //new AttributeData(nameof(LambdaJobDescriptionConstructionMethods.WithDeallocateOnJobCompletion), typeof(DeallocateOnJobCompletionAttribute), CheckDeallocateOnJobCompletion), - new AttributeData(nameof(LambdaJobDescriptionConstructionMethods.WithNativeDisableContainerSafetyRestriction), typeof(NativeDisableContainerSafetyRestrictionAttribute), CheckNativeDisableContainerSafetyRestriction), new AttributeData(nameof(LambdaJobDescriptionConstructionMethods.WithNativeDisableUnsafePtrRestriction), typeof(NativeDisableUnsafePtrRestrictionAttribute)), new AttributeData(nameof(LambdaJobDescriptionConstructionMethods.WithNativeDisableParallelForRestriction), typeof(NativeDisableParallelForRestrictionAttribute), CheckNativeDisableParallelForRestriction), diff --git a/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs b/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs index 243c0b1d..b6dab79b 100644 --- a/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs +++ b/Unity.Entities.CodeGen/LambdaJobs/EntitiesForEachJobCreator.cs @@ -163,7 +163,7 @@ public static JobStructForLambdaJob CreateNewJobStruct(LambdaJobDescriptionConst } // Create a DisposeOnJobCompletion method if needed. The is needed for fields where both of following are true: - // 1. It is included in an invocation to WithDeallocateOnJobCompletion or WithDisposeOnCompletion + // 1. It is included in an invocation to WithDisposeOnCompletion // 2. It is NOT marked with NativeContainerSupportsDeallocateOnJobCompletionAttribute and we are executing as a job. In this case we just // mark the field with DeallocateOnJobCompletionAttribute in ApplyFieldAttributes and let the native job system handle it's cleanup (which is faster). void MakeDisposeOnCompletionMethod() @@ -193,10 +193,6 @@ void UpdateFieldsToDisposeOrMarkAsDeallocate(List fieldDefiniti typeof(DeallocateOnJobCompletionAttribute).GetConstructor(Array.Empty())))); continue; } -#pragma warning disable 0618 - else if (constructionMethod.MethodName == nameof(LambdaJobDescriptionConstructionMethods.WithDeallocateOnJobCompletion)) -#pragma warning restore 0618 - UserError.DC0035(LambdaJobDescriptionConstruction.ContainingMethod, field.Name, field.FieldType, constructionMethod.InstructionInvokingMethod).Throw(); } fieldDefinitions.Add(field); @@ -210,12 +206,8 @@ void UpdateFieldsToDisposeOrMarkAsDeallocate(List fieldDefiniti var fieldsToDispose = new List(); var fieldToInstructionInvokingConstructionMethod = new Dictionary(); - // Check fields invoked with WithDeallocateOnJobCompletion or WithDisposeOnCompletion and either add + // Check fields invoked with WithDisposeOnCompletion and either add // them as fields to handle in Dispose method or just mark them with [DeallocateOnJobCompletion] when possible -#pragma warning disable 0618 - UpdateFieldsToDisposeOrMarkAsDeallocate(fieldsToDispose, fieldToInstructionInvokingConstructionMethod, - nameof(LambdaJobDescriptionConstructionMethods.WithDeallocateOnJobCompletion)); -#pragma warning restore 0618 UpdateFieldsToDisposeOrMarkAsDeallocate(fieldsToDispose, fieldToInstructionInvokingConstructionMethod, nameof(LambdaJobDescriptionConstructionMethods.WithDisposeOnCompletion)); diff --git a/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs b/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs index 2b6b395b..4416fb6e 100644 --- a/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs +++ b/Unity.Entities.CodeGen/LambdaJobs/LambdaJobsPostProcessor.cs @@ -178,6 +178,12 @@ protected override bool PostProcessImpl(TypeDefinition[] componentSystemTypes) foreach (var m in componentSystemTypes.SelectMany(m => m.Methods).ToList()) { +#if ROSLYN_SOURCEGEN_ENABLED + // Early out for source generated partial classes + if (m.DeclaringType.CustomAttributes.Any(c => c.AttributeType.Name == nameof(CompilerGeneratedAttribute))) + continue; +#endif + LambdaJobDescriptionConstruction[] lambdaJobDescriptionConstructions; try { @@ -236,11 +242,11 @@ public static (JobStructForLambdaJob, List) Rewrite(MethodDef // Sometimes roslyn emits the lambda as an instance method in the same type of the method that contains the lambda expression. // it does this only in the situation where the lambda captures a field _and_ does not capture any locals. In this case // there's no displayclass being created. We should figure out exactly what instruction caused this behaviour, and tell the user - // she can't read a field like that. + // she can't read or write a field like that. // Here is an example: https://sharplab.io/#v2:D4AQTAjAsAUCDMACciDCiDetE8QMwBsB7AQwBd8BLAUwIBNEBeReAOgAY8BubXXnBMgAsiACoALSgGcA4tQB21AE7lqUgLLUAtgCNlIAKxlKReVIAUASiwwAkLYD0DsZKmICJXXRKIA7pQICRABzBWVVRB8tbT0lfABXeQBjY1NENLJxamQwNFYXbKVqEik06QAuWHsnHABaAvdPHW90+QIAT0QkkgAHMniitx88Gnp8gEkzMmKGIjwu3v6lSnlgxEzpRGoADx6CSiTKMg6AGirHZ1xfbO75ELCVacjEaMyiWbv0MiJEPS3t6hJeLTBgrKTTEh0fi4HAAESIIAgYHMViYAD4bDCsThUKZSgRqKwAOrLabmEa0OiWLiIaEwgC+1LpfBg2JwNQkmw8Xh8/kC90Uj2yURiygSyVSdwyWRyeQaRRKZSklVZbJqiHqEmy3OaPlMHUQRQAjvFKINEAByDZSC2ReQMHolKRqRBHdY/YaJFImeSsZlwhFIlGWdGYtm4eGc1YWa1M1XYxk8eOIelVaGCEAiTmyB6qKQAQVQHikFhDNmqzi1zvWvh+Ou8biyRQF4SePnA+S1huKpTumxK+CIgSIvmV53V9Uy2WdSVMDHrPm6fQGLp8xG6QRI9vW4nIg6USRdU66RC0PQCYu+Wy0R3Hlxw7dyV5IKXiJECnXEQ4Yx/BETmO7akQG53nUgFUEo4KNDyrQGkuSyrlQlJ2j+MqzmeF5xLW8T0Ig8RSG+H6IAAVvhZCgbg2huiKuhingXqSpEbgrOBIyQRQ3TOicvzAogUgrIegHNu+Cp0J00gUQ+sp4EQcQLkM8jtL4JDtNxbp8kE/FngaRT4dkmR7qYhLnPCiLIqijAYucti4mYQ6EiSRzUOSoxUjS/opnG4YeSsFDbEwiDsEm4amUGFlWXY9i2fiDmks5FL0NStKRTZeL2cScXmNsXlsom0Kpsm6YiKFyJmZEKRlgVMLphAABswiIJGkjRuY6BJJVsD0kAA= - var illegalFieldRead = methodLambdaWasEmittedAs.Body.Instructions.FirstOrDefault(IsIllegalFieldRead); - if (illegalFieldRead != null) - UserError.DC0001(methodContainingLambdaJob, illegalFieldRead, (FieldReference)illegalFieldRead.Operand).Throw(); + var illegalFieldReadOrWrite = methodLambdaWasEmittedAs.Body.Instructions.FirstOrDefault(IsIllegalFieldReadOrWrite); + if (illegalFieldReadOrWrite != null) + UserError.DC0001(methodContainingLambdaJob, illegalFieldReadOrWrite, (FieldReference)illegalFieldReadOrWrite.Operand).Throw(); // Similarly, we could end up here because the lambda captured neither a field nor a local but simply // uses the this-reference. This could be the case if the user calls a function that takes this as a @@ -267,13 +273,12 @@ public static (JobStructForLambdaJob, List) Rewrite(MethodDef if (!lambdaJobDescriptionConstruction.HasAllowedMethodInvokedWithThis) InternalCompilerError.DCICE001(methodContainingLambdaJob).Throw(); - bool IsIllegalFieldRead(Instruction i) + bool IsIllegalFieldReadOrWrite(Instruction i) { - if (i.Previous == null) + if (!i.IsLoadField() && !i.IsStoreField()) return false; - if (i.OpCode != OpCodes.Ldfld && i.OpCode != OpCodes.Ldflda) - return false; - return i.Previous.OpCode == OpCodes.Ldarg_0; + + return i.Operand is FieldReference fieldReference && !fieldReference.DeclaringType.IsValueType; } bool IsIllegalInvocation(Instruction i) diff --git a/Unity.Entities.CodeGen/LambdaJobs/UserError.cs b/Unity.Entities.CodeGen/LambdaJobs/UserError.cs index 0e284c30..bea8b6ad 100644 --- a/Unity.Entities.CodeGen/LambdaJobs/UserError.cs +++ b/Unity.Entities.CodeGen/LambdaJobs/UserError.cs @@ -1,4 +1,5 @@ using System; +using System.Linq; #if !UNITY_DOTSRUNTIME using System.IO; #endif @@ -71,7 +72,7 @@ static class UserError { public static DiagnosticMessage DC0001(MethodDefinition method, Instruction instruction, FieldReference fr) { - return MakeError(nameof(DC0001), $"Entities.ForEach Lambda expression uses field '{fr.Name}'. Either assign the field to a local outside of the lambda expression and use that instead, or use .WithoutBurst() and .Run()", method, instruction); + return MakeError(nameof(DC0001), $"Entities.ForEach Lambda expression uses field '{fr.Name} in a reference type'. Either assign the field to a local outside of the lambda expression and use that instead, or use .WithoutBurst() and .Run()", method, instruction); } public static DiagnosticMessage DC0002(MethodDefinition method, Instruction instruction, MethodReference mr, TypeReference argument) @@ -101,12 +102,12 @@ public static DiagnosticMessage DC0006(MethodDefinition method, Instruction inst public static DiagnosticMessage DC0017(MethodDefinition method, Instruction instruction) { - return MakeError(nameof(DC0006), $"Scheduling an Lambda job requires a .{nameof(LambdaSingleJobDescriptionConstructionMethods.WithCode)} invocation", method, instruction); + return MakeError(nameof(DC0017), $"Scheduling an Lambda job requires a .{nameof(LambdaSingleJobDescriptionConstructionMethods.WithCode)} invocation", method, instruction); } public static DiagnosticMessage DC0018(MethodDefinition method, Instruction instruction) { - return MakeError(nameof(DC0006), $"Scheduling an Chunk job requires a .{nameof(LambdaJobChunkDescriptionConstructionMethods.ForEach)} invocation", method, instruction); + return MakeError(nameof(DC0018), $"Scheduling an Chunk job requires a .{nameof(LambdaJobChunkDescriptionConstructionMethods.ForEach)} invocation", method, instruction); } public static DiagnosticMessage DC0007(MethodDefinition method, Instruction instruction) @@ -254,11 +255,6 @@ public static DiagnosticMessage DC0034(MethodDefinition containingMethod, string return MakeError(nameof(DC0034), $"Entities.{nameof(LambdaJobDescriptionConstructionMethods.WithReadOnly)} is called with an argument {argumentName} of unsupported type {unsupportedType}. It can only be called with an argument that is marked with [{nameof(NativeContainerAttribute)}] or a type that has a field marked with [{nameof(NativeContainerAttribute)}].", containingMethod, instruction); } - public static DiagnosticMessage DC0035(MethodDefinition containingMethod, string argumentName, TypeReference unsupportedType, Instruction instruction) - { - return MakeError(nameof(DC0035), $"Entities.{nameof(LambdaJobDescriptionConstructionMethods.WithDeallocateOnJobCompletion)} is called with an invalid argument {argumentName} of unsupported type {unsupportedType}. It can only be called with an argument that is marked with [{nameof(NativeContainerSupportsDeallocateOnJobCompletionAttribute)}] or a type that has a field marked with [{nameof(NativeContainerSupportsDeallocateOnJobCompletionAttribute)}].", containingMethod, instruction); - } - public static DiagnosticMessage DC0036(MethodDefinition containingMethod, string argumentName, TypeReference unsupportedType, Instruction instruction) { return MakeError(nameof(DC0036), $"Entities.{nameof(LambdaJobDescriptionConstructionMethods.WithNativeDisableContainerSafetyRestriction)} is called with an invalid argument {argumentName} of unsupported type {unsupportedType}. It can only be called with an argument that is marked with [{nameof(NativeContainerAttribute)}] or a type that has a field marked with [{nameof(NativeContainerAttribute)}].", containingMethod, instruction); @@ -400,6 +396,14 @@ public static DiagnosticMessage DC3002(TypeReference jobStructType) return MakeError(nameof(DC3002), $"{jobStructType.FullName}: generic jobs cannot have their reflection data auto-registered - you must use the assembly-level RegisterGenericJobType attribute to specify which instantiations you need", method: null, instruction: null); } + public static DiagnosticMessage DC3003(TypeDefinition typeWithGenerateAuthoringComponentAttribute) + { + var typeMethod = typeWithGenerateAuthoringComponentAttribute.Methods.FirstOrDefault(); + var instruction = typeMethod?.Body.Instructions.FirstOrDefault(); + + return MakeError(nameof(DC3003), $"{typeWithGenerateAuthoringComponentAttribute.FullName} has the [GenerateAuthoringComponent] attribute, and must therefore implement either the IComponentData interface or the IBufferElementData interface.", typeMethod, instruction); + } + static DiagnosticMessage MakeInternal(DiagnosticType type, string errorCode, string messageData, MethodDefinition method, Instruction instruction) { var result = new DiagnosticMessage {Column = 0, Line = 0, DiagnosticType = type, File = ""}; diff --git a/Unity.Entities.CodeGen/SingletonAccess/SingletonAccessPostProcessor.cs b/Unity.Entities.CodeGen/SingletonAccess/SingletonAccessPostProcessor.cs index b64649f2..9a2a31fd 100644 --- a/Unity.Entities.CodeGen/SingletonAccess/SingletonAccessPostProcessor.cs +++ b/Unity.Entities.CodeGen/SingletonAccess/SingletonAccessPostProcessor.cs @@ -13,7 +13,13 @@ namespace Unity.Entities.CodeGen { class SingletonAccessPostProcessor : EntitiesILPostProcessor { + // LambdaJobs generator also needs to write OnCreateForCompiler so this should be disabled if source generators are enabled. + // (this ILPP will need to be rewritten as part of the generator that writes that method) +#if ROSLYN_SOURCEGEN_ENABLED + static readonly bool _enable = false; +#else static readonly bool _enable = true; +#endif static readonly Dictionary SingletonAccessMethodDescriptions = new Dictionary() @@ -92,14 +98,19 @@ internal static bool Rewrite(MethodDefinition containingMethod, { // Ensure a good match with the singleton method we want to patch // and that the generic argument is not a generic parameter itself (in which case it is difficult to predetermine query type) + // and also that the type doesn't have any generic arguments (in which case we can't know it during ILPP time) if (SingletonAccessMethodDescriptions.TryGetValue(methodReference.Name, out var methodDescription) && methodReference.Parameters.Count() == methodDescription.parameterCount && - methodReference is GenericInstanceMethod genericInstanceMethod && genericInstanceMethod.GenericArguments.Count() == 1 && - !genericInstanceMethod.GenericArguments.First().IsGenericParameter) + methodReference is GenericInstanceMethod genericInstanceMethod && genericInstanceMethod.GenericArguments.Count() == 1) { + var singletonType = genericInstanceMethod.GenericArguments.First(); + if (singletonType.IsGenericParameter || + (singletonType is GenericInstanceType singletonGenericInstanceType && singletonGenericInstanceType.HasGenericArguments)) + continue; + if (!madeChange) containingMethod.Body.SimplifyMacros(); - PatchSingletonMethod(containingMethod, methodReference, instruction, entityQueryFields, methodDescription); + PatchSingletonMethod(containingMethod, singletonType, instruction, entityQueryFields, methodDescription); madeChange = true; } } @@ -111,12 +122,10 @@ internal static bool Rewrite(MethodDefinition containingMethod, // Perform IL patching // https://sharplab.io/#v2:EYLgxg9gTgpgtADwGwBYA0AXEBLANmgExAGoAfAAQCYBGAWACgHyBmAAmwDsMYoAzAQzAxWASQDCEALYAHCBxhcAIvwz9WAbwC+TNgGcMUAK5gMrAMqcA5rhgY5y1axCiJMuQowO1WnayqsAUS5sDABPAEVDHlCGdQZWBL82ABVWAHFbCw5rWzkAHmSAPgAKAEp4xMqAdwALHmFU530jEzQXKVl5JRV+CoS4+krK8gB2VgIYAUNcDABuPtZtQcSWPxRzTKsbOw4CktSAN35cKPLlodZa+tZG1mbjDDbxDvdu1QWByqWl1f8xVliCyCGBCESiUFCrAA+gBHcGhebnAFI1apDIYLI5HZ7MoLap1WA3Jx3AwPJ6uToeLwfPErMYTKYzRFfBa/dZmTbZbb5IrFQ7HU60hJXQm3e6tdpuLqeHo0pFLSqstjkdYAWTKyMqnwu0Lh0VYAF5WPIqoFgmFItEysydULWEcoHctrkOIb0pysflMdyOF4SqUbRcHU6uS7KG7YfCAHTo70uvJxnZ+612u0cjHO7GJ+w9Eq6TNyAN2yPRKPp7O7CvJ/OhnaUIvyhiaIA= - static void PatchSingletonMethod(MethodDefinition containingMethod, MethodReference methodReference, Instruction instruction, + static void PatchSingletonMethod(MethodDefinition containingMethod, TypeReference singletonType, Instruction instruction, Dictionary<(TypeReference declaringType, string name, bool asReadOnly), (FieldDefinition field, TypeReference type)> entityQueryFields, (string methodName, int parameterCount, bool needsReadOnlyQuery, bool patchedIsGeneric) methodDescription) { - var invokedGenericMethod = (GenericInstanceMethod)methodReference; - var singletonType = invokedGenericMethod.GenericArguments.First(); var singletonQueryField = GetOrCreateEntityQueryField(containingMethod.DeclaringType, singletonType, entityQueryFields, methodDescription); var ilProcessor = containingMethod.Body.GetILProcessor(); diff --git a/Unity.Entities.CodeGen/StaticTypeRegistry/MonoExtensions.cs b/Unity.Entities.CodeGen/StaticTypeRegistry/MonoExtensions.cs index 812df7a5..06e93a03 100644 --- a/Unity.Entities.CodeGen/StaticTypeRegistry/MonoExtensions.cs +++ b/Unity.Entities.CodeGen/StaticTypeRegistry/MonoExtensions.cs @@ -49,17 +49,43 @@ public static TypeDefinition FixedSpecialType(this TypeReference typeRef) public static bool IsEntityType(this TypeReference typeRef) { - return (typeRef.FullName == "Unity.Entities.Entity"); + return typeRef.Name == "Entity" && typeRef.Namespace == "Unity.Entities"; } - public static bool IsManagedType(this TypeReference typeRef) + public static bool IsBlobAssetReferenceType(this TypeReference typeRef) { - // We must check this before calling Resolve() as cecil loses this property otherwise + return typeRef.Name == "BlobAssetReferenceData" && typeRef.Namespace == "Unity.Entities"; + } + + public static bool IsManagedType(this TypeReference typeRef, ref bool hasEntityRefs, ref bool hasBlobRefs) + { + var seenTypes = new HashSet(new Cecil.Awesome.Comparers.TypeReferenceEqualityComparer()); + return IsManagedTypeInternal(typeRef, ref hasEntityRefs, ref hasBlobRefs, seenTypes); + } + + static bool IsManagedTypeInternal(TypeReference typeRef, ref bool hasEntityRefs, ref bool hasBlobRefs, HashSet seenTypes) + { + seenTypes.Add(typeRef); if (typeRef.IsPointer) return false; - if (typeRef.IsArray || typeRef.IsGenericParameter) + if (typeRef.IsArray) + { + var elementType = typeRef.GetElementType(); + if (elementType.IsEntityType()) + hasEntityRefs = true; + else if (elementType.IsBlobAssetReferenceType()) + hasBlobRefs = true; + return true; + } + + if(typeRef.IsGenericParameter) + { + var gp = (GenericParameter)typeRef; + bool _ = false, __ = false; + return gp.Constraints.FirstOrDefault(c => c.IsManagedType(ref _, ref __)) != null; + } var type = typeRef.Resolve(); @@ -77,24 +103,36 @@ public static bool IsManagedType(this TypeReference typeRef) if (type.IsEnum) return false; - if (type.IsValueType) + // if none of the above check the type's fields + bool isManaged = !type.IsValueType; + var typeResolver = TypeResolver.For(typeRef); + foreach (var field in type.Fields) { - // if none of the above check the type's fields - var typeResolver = TypeResolver.For(typeRef); - foreach (var field in type.Fields) - { - if (field.IsStatic) - continue; + if (field.IsStatic) + continue; + + var fieldType = typeResolver.Resolve(field.FieldType); + if(seenTypes.Contains(fieldType)) + continue; - var fieldType = typeResolver.Resolve(field.FieldType); - if (fieldType.IsManagedType()) - return true; + var fieldTypeDef = fieldType.Resolve(); + + if (fieldType.IsEntityType()) + hasEntityRefs = true; + else if (fieldType.IsBlobAssetReferenceType()) + hasBlobRefs = true; + + if (!fieldTypeDef.IsSealed) + { + hasEntityRefs = true; + hasBlobRefs = true; } - return false; + if (IsManagedTypeInternal(fieldType, ref hasEntityRefs, ref hasBlobRefs, seenTypes)) + isManaged = true; } - return true; + return isManaged; } public static bool IsComplex(this TypeReference typeRef) diff --git a/Unity.Entities.CodeGen/StaticTypeRegistry/StaticTypeRegistryPostProcessor.cs b/Unity.Entities.CodeGen/StaticTypeRegistry/StaticTypeRegistryPostProcessor.cs index 4276b6d6..85f07771 100644 --- a/Unity.Entities.CodeGen/StaticTypeRegistry/StaticTypeRegistryPostProcessor.cs +++ b/Unity.Entities.CodeGen/StaticTypeRegistry/StaticTypeRegistryPostProcessor.cs @@ -143,7 +143,7 @@ void InitializeReferences() { typeof(int), typeof(TypeCategory), typeof(int), typeof(int), typeof(ulong), typeof(ulong), typeof(int), typeof(int), typeof(int), - typeof(int), typeof(int), typeof(int), typeof(int), + typeof(int), typeof(int), typeof(int), typeof(int), typeof(bool), typeof(int), typeof(int), typeof(int), typeof(int) })); @@ -335,25 +335,20 @@ unsafe FieldReference InjectAssemblyTypeRegistry(TypeGenInfoList typeGenInfoList // Store TypeRegistry.TypeInfos[] il.Emit(OpCodes.Ldloc_0); var typeInfoCount = typeGenInfoList.Count; - if (IsMono) + var typeInfosFieldDef = AssemblyDefinition.MainModule.ImportReference(typeof(TypeRegistry).GetField("TypeInfosPtr", BindingFlags.Public | BindingFlags.Instance)); + var typeInfoBlob = GenerateTypeInfoBlobArray(typeGenInfoList); + if (typeInfoBlob.Length > 0) { - var typeInfosFieldDef = AssemblyDefinition.MainModule.ImportReference(typeof(TypeRegistry).GetField("TypeInfos", BindingFlags.Public | BindingFlags.Instance)); - GenerateTypeInfoArray(il, typeGenInfoList, typeInfosFieldDef, false); + var constantTypeInfoFieldDef = GenerateConstantData(GeneratedRegistryDef, typeInfoBlob); + il.Emit(OpCodes.Ldsflda, constantTypeInfoFieldDef); + Assert.AreEqual(typeInfoCount, typeInfoBlob.Length / sizeof(TypeManager.TypeInfo)); } else { - var typeInfosFieldDef = AssemblyDefinition.MainModule.ImportReference(typeof(TypeRegistry).GetField("TypeInfosPtr", BindingFlags.Public | BindingFlags.Instance)); - var typeInfoBlob = GenerateTypeInfoBlobArray(typeGenInfoList); - if (typeInfoBlob.Length > 0) - { - var constantTypeInfoFieldDef = GenerateConstantData(GeneratedRegistryDef, typeInfoBlob); - il.Emit(OpCodes.Ldsflda, constantTypeInfoFieldDef); - Assert.AreEqual(typeInfoCount, typeInfoBlob.Length / sizeof(TypeManager.TypeInfo)); - } - else - il.Emit(OpCodes.Ldnull); - il.Emit(OpCodes.Stfld, typeInfosFieldDef); + il.Emit(OpCodes.Ldc_I4_0); + il.Emit(OpCodes.Conv_U); } + il.Emit(OpCodes.Stfld, typeInfosFieldDef); // Store TypeRegistry.TypeInfosCount il.Emit(OpCodes.Ldloc_0); @@ -375,25 +370,21 @@ unsafe FieldReference InjectAssemblyTypeRegistry(TypeGenInfoList typeGenInfoList // Store TypeRegistry.EntityOffsets il.Emit(OpCodes.Ldloc_0); int entityOffsetCount = typeGenInfoList.Sum(ti => ti.EntityOffsets.Count); - if (IsMono) + var entityOffsetsFieldDef = AssemblyDefinition.MainModule.ImportReference(typeof(TypeRegistry).GetField("EntityOffsetsPtr", BindingFlags.Public | BindingFlags.Instance)); + var entityOffsetDataBlob = typeGenInfoList.SelectMany(tgi => tgi.EntityOffsets).SelectMany(offset => BitConverter.GetBytes(offset)).ToArray(); + if (entityOffsetDataBlob.Length > 0) { - var entityOffsetsFieldDef = AssemblyDefinition.MainModule.ImportReference(typeof(TypeRegistry).GetField("EntityOffsets", BindingFlags.Public | BindingFlags.Instance)); - GenerateEntityOffsetInfoArray(il, typeGenInfoList, entityOffsetsFieldDef, false); + Assert.AreEqual(entityOffsetCount, entityOffsetDataBlob.Length / sizeof(int)); + + var constantEntityOffsetsFieldDef = GenerateConstantData(GeneratedRegistryDef, entityOffsetDataBlob); + il.Emit(OpCodes.Ldsflda, constantEntityOffsetsFieldDef); } else { - var entityOffsetsFieldDef = AssemblyDefinition.MainModule.ImportReference(typeof(TypeRegistry).GetField("EntityOffsetsPtr", BindingFlags.Public | BindingFlags.Instance)); - var entityOffsetDataBlob = typeGenInfoList.SelectMany(tgi => tgi.EntityOffsets).SelectMany(offset => BitConverter.GetBytes(offset)).ToArray(); - if (entityOffsetDataBlob.Length > 0) - { - var constantEntityOffsetsFieldDef = GenerateConstantData(GeneratedRegistryDef, entityOffsetDataBlob); - il.Emit(OpCodes.Ldsflda, constantEntityOffsetsFieldDef); - Assert.AreEqual(entityOffsetCount, entityOffsetDataBlob.Length / sizeof(int)); - } - else - il.Emit(OpCodes.Ldnull); - il.Emit(OpCodes.Stfld, entityOffsetsFieldDef); + il.Emit(OpCodes.Ldc_I4_0); + il.Emit(OpCodes.Conv_U); } + il.Emit(OpCodes.Stfld, entityOffsetsFieldDef); // Store TypeRegistry.EntityOffsetsCount il.Emit(OpCodes.Ldloc_0); @@ -404,25 +395,21 @@ unsafe FieldReference InjectAssemblyTypeRegistry(TypeGenInfoList typeGenInfoList // Store TypeRegistry.BlobAssetReferenceOffsets il.Emit(OpCodes.Ldloc_0); int blobAssetReferenceOffsetsCount = typeGenInfoList.Sum(ti => ti.BlobAssetRefOffsets.Count); - if (IsMono) + var blobOffsetsFieldDef = AssemblyDefinition.MainModule.ImportReference(typeof(TypeRegistry).GetField("BlobAssetReferenceOffsetsPtr", BindingFlags.Public | BindingFlags.Instance)); + var blobOffsetsDataBlob = typeGenInfoList.SelectMany(tgi => tgi.BlobAssetRefOffsets).SelectMany(offset => BitConverter.GetBytes(offset)).ToArray(); + if (blobOffsetsDataBlob.Length > 0) { - var blobOffsetsFieldDef = AssemblyDefinition.MainModule.ImportReference(typeof(TypeRegistry).GetField("BlobAssetReferenceOffsets", BindingFlags.Public | BindingFlags.Instance)); - GenerateBlobAssetReferenceArray(il, typeGenInfoList, blobOffsetsFieldDef, false); + Assert.AreEqual(blobAssetReferenceOffsetsCount, blobOffsetsDataBlob.Length / sizeof(int)); + + var constantblobOffsetsFieldDef = GenerateConstantData(GeneratedRegistryDef, blobOffsetsDataBlob); + il.Emit(OpCodes.Ldsflda, constantblobOffsetsFieldDef); } else { - var blobOffsetsFieldDef = AssemblyDefinition.MainModule.ImportReference(typeof(TypeRegistry).GetField("BlobAssetReferenceOffsetsPtr", BindingFlags.Public | BindingFlags.Instance)); - var blobOffsetsDataBlob = typeGenInfoList.SelectMany(tgi => tgi.BlobAssetRefOffsets).SelectMany(offset => BitConverter.GetBytes(offset)).ToArray(); - if (blobOffsetsDataBlob.Length > 0) - { - var constantblobOffsetsFieldDef = GenerateConstantData(GeneratedRegistryDef, blobOffsetsDataBlob); - il.Emit(OpCodes.Ldsflda, constantblobOffsetsFieldDef); - Assert.AreEqual(entityOffsetCount, blobOffsetsDataBlob.Length / sizeof(int)); - } - else - il.Emit(OpCodes.Ldnull); - il.Emit(OpCodes.Stfld, blobOffsetsFieldDef); + il.Emit(OpCodes.Ldc_I4_0); + il.Emit(OpCodes.Conv_U); } + il.Emit(OpCodes.Stfld, blobOffsetsFieldDef); // Store TypeRegistry.BlobAssetReferenceOffsetsCount il.Emit(OpCodes.Ldloc_0); diff --git a/Unity.Entities.CodeGen/StaticTypeRegistry/SystemInfoGeneration.cs b/Unity.Entities.CodeGen/StaticTypeRegistry/SystemInfoGeneration.cs index c6f66c3a..6c77fbe8 100644 --- a/Unity.Entities.CodeGen/StaticTypeRegistry/SystemInfoGeneration.cs +++ b/Unity.Entities.CodeGen/StaticTypeRegistry/SystemInfoGeneration.cs @@ -24,18 +24,20 @@ public List GetSystemIsGroupList(List systems) int GetFilterFlag(TypeDefinition typeDef) { // If no flags are given we assume the default world - int flags = (int) WorldSystemFilterFlags.Default; - if (typeDef.HasCustomAttributes) + var flags = WorldSystemFilterFlags.Default; + var filterFlagsAttribute = typeDef.CustomAttributes.FirstOrDefault(ca => ca.AttributeType.Name == nameof(WorldSystemFilterAttribute) && ca.ConstructorArguments.Count == 1); + if(filterFlagsAttribute != null) { - var filterFlagsAttribute = typeDef.CustomAttributes.FirstOrDefault(ca => ca.AttributeType.Name == nameof(WorldSystemFilterAttribute) && ca.ConstructorArguments.Count == 1); - if(filterFlagsAttribute != null) - { - // override the default value if flags are provided - flags = (int)((WorldSystemFilterFlags) filterFlagsAttribute.ConstructorArguments[0].Value); - } + // override the default value if flags are provided + flags = (WorldSystemFilterFlags) filterFlagsAttribute.ConstructorArguments[0].Value; } + else if (typeDef.BaseType != null) // Traverse the hierarchy to fetch a flags from an ancestor if we can't find one on this type + flags = (WorldSystemFilterFlags) GetFilterFlag(typeDef.BaseType.Resolve()); - return flags; + if(typeDef.HasAttribute("UnityEngine.ExecuteAlways")) + flags |= WorldSystemFilterFlags.Editor; + + return (int) flags; } public List GetSystemFilterFlagList(List systems) @@ -79,8 +81,10 @@ public MethodDefinition InjectGetSystemAttributes(List systems) var attrList = sysDef.CustomAttributes; + // If ther whole assembly is disabled then add the disableautocreation attribute + // if the type isn't already tagged for being disabled (we don't want to add it twice) var disableAutoCreationAttr = sysRef.Module.Assembly.CustomAttributes.FirstOrDefault(ca => ca.AttributeType.Name == nameof(DisableAutoCreationAttribute)); - if (disableAutoCreationAttr != null) + if (disableAutoCreationAttr != null && attrList.FirstOrDefault(a=>a.AttributeType.Name == nameof(DisableAutoCreationAttribute)) == null) attrList.Add(disableAutoCreationAttr); int arrayLen = attrList.Count; @@ -227,7 +231,7 @@ void InjectLoadFromCustomArgument(Mono.Collections.Generic.Collection 0 || typeGenInfo.MightHaveBlobAssetReferences, typeGenInfo.BlobAssetRefOffsets.Count, typeGenInfo.BlobAssetRefOffsetIndex, 0, // FastEqualityIndex - should be 0 until we can remove field altogether @@ -861,12 +864,14 @@ internal unsafe TypeGenInfo CreateTypeGenInfo(TypeReference typeRef, TypeCategor TypeUtils.AlignAndSize alignAndSize = new TypeUtils.AlignAndSize(); List entityOffsets = new List(); List blobAssetRefOffsets = new List(); - bool isManaged = typeDef != null && typeRef.IsManagedType(); + bool mightHaveEntityRefs = false; + bool mightHaveBlobRefs = false; + bool isManaged = typeDef != null && typeRef.IsManagedType(ref mightHaveEntityRefs, ref mightHaveBlobRefs); if (!isManaged) { entityOffsets = TypeUtils.GetEntityFieldOffsets(typeRef, ArchBits); - blobAssetRefOffsets = TypeUtils.GetFieldOffsetsOf("Unity.Entities.BlobAssetReference`1", typeRef, ArchBits); + blobAssetRefOffsets = TypeUtils.GetFieldOffsetsOf("Unity.Entities.BlobAssetReferenceData", typeRef, ArchBits); alignAndSize = TypeUtils.AlignAndSizeOfType(typeRef, ArchBits); } else if (isManaged && IsNetDots @@ -898,7 +903,7 @@ internal unsafe TypeGenInfo CreateTypeGenInfo(TypeReference typeRef, TypeCategor if (typeCategory == TypeCategory.BufferData) typeIndex |= BufferComponentTypeFlag; - if (entityOffsets.Count == 0) + if (entityOffsets.Count == 0 && !mightHaveEntityRefs) typeIndex |= HasNoEntityReferencesFlag; if (isManaged) @@ -991,7 +996,9 @@ internal unsafe TypeGenInfo CreateTypeGenInfo(TypeReference typeRef, TypeCategor StableHash = stableHash, MemoryOrdering = memoryOrdering, FieldInfoCount = fieldInfoLookUp.Count, - FieldInfoIndex = fieldInfoLookUp.Index + FieldInfoIndex = fieldInfoLookUp.Index, + MightHaveEntityReferences = mightHaveEntityRefs, + MightHaveBlobAssetReferences = mightHaveBlobRefs }; m_TotalEntityOffsetCount += entityOffsets.Count; diff --git a/Unity.Entities.CodeGen/StaticTypeRegistry/TypeUtils.cs b/Unity.Entities.CodeGen/StaticTypeRegistry/TypeUtils.cs index 3d5ff659..c697dc92 100644 --- a/Unity.Entities.CodeGen/StaticTypeRegistry/TypeUtils.cs +++ b/Unity.Entities.CodeGen/StaticTypeRegistry/TypeUtils.cs @@ -175,8 +175,12 @@ public static AlignAndSize AlignAndSizeOfType(TypeReference typeRef, int bits) return AlignAndSizeOfType(MetadataType.IntPtr, bits); } - ValueTypeAlignment[bits].Add(typeRef, AlignAndSize.Sentinel); - PreprocessTypeFields(typeRef, bits); + if (!ValueTypeAlignment[bits].ContainsKey(typeRef)) + { + ValueTypeAlignment[bits].Add(typeRef, AlignAndSize.Sentinel); + PreprocessTypeFields(typeRef, bits); + } + return ValueTypeAlignment[bits][typeRef]; } diff --git a/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef b/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef index f1e0abdc..3758adb9 100644 --- a/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef +++ b/Unity.Entities.CodeGen/Unity.Entities.CodeGen.asmdef @@ -1,9 +1,10 @@ { "name": "Unity.Entities.CodeGen", "references": [ - "Unity.Entities", "Unity.Burst", "Unity.Collections", + "Unity.Entities", + "Unity.Jobs", "Unity.Properties" ], "includePlatforms": [ @@ -20,5 +21,11 @@ "Unity.IL2CPP.Common" ], "autoReferenced": false, - "versionDefines": [] -} \ No newline at end of file + "versionDefines": [ + { + "name": "com.unity.roslyn", + "expression": "0.0.0-preview.2", + "define": "ROSLYN_SOURCEGEN_ENABLED" + } + ] +} diff --git a/Unity.Entities.Editor.Tests/EntityContainerTest.cs b/Unity.Entities.Editor.Tests/EntityContainerTest.cs index 6417a200..bd3ca475 100644 --- a/Unity.Entities.Editor.Tests/EntityContainerTest.cs +++ b/Unity.Entities.Editor.Tests/EntityContainerTest.cs @@ -280,6 +280,14 @@ public VisitStatus Visit(Property propert } } + class InvalidEntityVisitor : PropertyVisitor + { + protected override void VisitProperty(Property property, ref TContainer container, ref TValue value) + { + throw new InvalidOperationException(); + } + } + GameObject _gameObject; public override void Setup() @@ -378,5 +386,29 @@ public void EntityContainer_WhenVisited_CanReadAndWriteData() PropertyContainer.Visit(new EntityContainer(m_Manager, entity, false), new TestDataWriteBackVisitor(false, 25, Category.BufferData)); PropertyContainer.Visit(new EntityContainer(m_Manager, entity, false), new TestDataWriteBackVisitor(true, 25, Category.BufferData)); } + + [Test] + public void EntityContainer_WhenVisitingAnInvalidEntity_DoesNotThrow() + { + Assert.DoesNotThrow(() => PropertyContainer.Visit(new EntityContainer(m_Manager, Entity.Null, false), new InvalidEntityVisitor())); + + var entity = m_Manager.CreateEntity(typeof(StructComponentData), typeof(BufferElement)); + var container = new EntityContainer(m_Manager, entity, false); + + // Validate that we are actually visiting something. + Assert.Throws(() => PropertyContainer.Visit(container, new InvalidEntityVisitor())); + + // We can find the correct path and this will not throw. + Assert.That(PropertyContainer.IsPathValid(ref container, new PropertyPath($"{nameof(EntityContainerTest)}_{nameof(StructComponentData)}")), Is.True); + Assert.That(PropertyContainer.IsPathValid(ref container, new PropertyPath($"{nameof(EntityContainerTest)}_{nameof(BufferElement)}")), Is.True); + + m_Manager.DestroyEntity(entity); + + Assert.DoesNotThrow(() => PropertyContainer.Visit(container, new InvalidEntityVisitor())); + + // We cannot find the correct path anymore and this will not throw. + Assert.That(PropertyContainer.IsPathValid(ref container, new PropertyPath($"{nameof(EntityContainerTest)}_{nameof(StructComponentData)}")), Is.False); + Assert.That(PropertyContainer.IsPathValid(ref container, new PropertyPath($"{nameof(EntityContainerTest)}_{nameof(BufferElement)}")), Is.False); + } } } diff --git a/Unity.Entities.Editor.Tests/LiveLink/StartLiveLinkWindowTests.cs b/Unity.Entities.Editor.Tests/LiveLink/StartLiveLinkWindowTests.cs index f4a067a9..a233133f 100644 --- a/Unity.Entities.Editor.Tests/LiveLink/StartLiveLinkWindowTests.cs +++ b/Unity.Entities.Editor.Tests/LiveLink/StartLiveLinkWindowTests.cs @@ -1,4 +1,3 @@ -using Bee.Core; using NUnit.Framework; using System; using System.IO; @@ -6,6 +5,7 @@ using Unity.Build.Classic; using Unity.Build.Classic.Private; using Unity.Build.Common; +using Unity.Build.Tests; using Unity.Scenes.Editor.Build; using UnityEditor; using UnityEditor.UIElements; @@ -164,26 +164,12 @@ class MockClassicBuildProfile : IBuildPipelineComponent public int SortingIndex { get; } } - [HideInInspector] - class MockPlatform : Platform - { - public override bool HasPosix { get; } - } - // This class is not directly referenced, but it is instanciated nonetheless. // It's used when running tests, to compensate for missing platform packages. class MockClassicNonIncrementalPipeline : ClassicNonIncrementalPipelineBase { - readonly Platform m_Platform; - protected override RunResult OnRun(RunContext context) => throw new NotImplementedException(); - protected override BuildTarget BuildTarget { get; } = BuildTarget.NoTarget; - public override Platform Platform => m_Platform; - - public MockClassicNonIncrementalPipeline() - { - m_Platform = new MockPlatform(); - } + public override Platform Platform { get; } = new TestPlatform(); } } } diff --git a/Unity.Entities.Editor.Tests/Unity.Entities.Editor.Tests.asmdef b/Unity.Entities.Editor.Tests/Unity.Entities.Editor.Tests.asmdef index 7ad05e8d..c77cfbb2 100644 --- a/Unity.Entities.Editor.Tests/Unity.Entities.Editor.Tests.asmdef +++ b/Unity.Entities.Editor.Tests/Unity.Entities.Editor.Tests.asmdef @@ -18,9 +18,7 @@ "includePlatforms": [ "Editor" ], - "precompiledReferences": [ - "bee.dll" - ], + "precompiledReferences": [], "excludePlatforms": [], "allowUnsafeCode": true } diff --git a/Unity.Entities.Editor/Decompiler.cs b/Unity.Entities.Editor/Decompiler.cs index dde1edb3..02fb9b44 100644 --- a/Unity.Entities.Editor/Decompiler.cs +++ b/Unity.Entities.Editor/Decompiler.cs @@ -3,6 +3,7 @@ using System.Diagnostics; using System.IO; using System.Linq; +using System.Reflection; using System.Runtime.CompilerServices; using System.Text; using Mono.Cecil; @@ -21,41 +22,57 @@ internal enum DecompiledLanguage internal static class Decompiler { - public static (Process DecompileIntoCSharpProcess, Process DecompileIntoILProcess) - StartDecompilationProcesses(TypeReference typeReference, DecompiledLanguage decompiledLanguage) + public static Process DecompileIntoCSharp(string fullyQualifiedTypeName, string fullDllPath) { - var assemblyDefinition = typeReference.Module.Assembly; + StringBuilder referencePaths = GetAllReferencePaths(); - var tempFolder = Path.GetTempPath(); - var fileName = $@"{tempFolder}TestAssembly.dll"; - var fileNamePdb = $@"{tempFolder}TestAssembly.pdb"; - var peStream = new FileStream(fileName, FileMode.Create); - var symbolStream = new FileStream(fileNamePdb, FileMode.Create); + bool isWindows = Environment.OSVersion.Platform == PlatformID.Win32Windows || Environment.OSVersion.Platform == PlatformID.Win32NT; + string ilspycmdFullPath = Path.GetFullPath("Packages/com.unity.entities/Unity.Entities.Editor/PostprocessedILInspector/.ilspyfolder/ilspycmd.exe"); - assemblyDefinition.Write( - peStream, - new WriterParameters + if (isWindows) + { + ilspycmdFullPath = ilspycmdFullPath.Replace("/", "\\"); + } + + string ilSpyArgument = $"{(isWindows ? "" : ilspycmdFullPath)} \"{fullDllPath}\" -t \"{fullyQualifiedTypeName}\" {referencePaths}"; + + Process outputCSharpProcess = + new Process { - SymbolStream = symbolStream, - SymbolWriterProvider = new PortablePdbWriterProvider(), - WriteSymbols = true - }); - peStream.Close(); - symbolStream.Close(); + StartInfo = new ProcessStartInfo + { + UseShellExecute = false, + CreateNoWindow = true, + FileName = isWindows + ? ilspycmdFullPath + : $"{EditorApplication.applicationPath}/Contents/MonoBleedingEdge/bin/mono", + Arguments = ilSpyArgument, + RedirectStandardOutput = true + } + }; + + outputCSharpProcess.Start(); + return outputCSharpProcess; + } - var sb = new StringBuilder(); + private static StringBuilder GetAllReferencePaths() + { + var referencePaths = new StringBuilder(); var processed = new HashSet(); - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies().Where(a => !a.IsDynamic && !string.IsNullOrEmpty(a.Location))) + foreach (Assembly assembly in + AppDomain.CurrentDomain.GetAssemblies().Where(assembly => !assembly.IsDynamic && !string.IsNullOrEmpty(assembly.Location))) { string path; + try { path = Path.GetDirectoryName(assembly.Location); } + catch (ArgumentException) { - Debug.Log("Unexpected path: " + assembly.Location); + Debug.Log($"Unexpected path: {assembly.Location}"); continue; } @@ -64,15 +81,43 @@ public static (Process DecompileIntoCSharpProcess, Process DecompileIntoILProces continue; } processed.Add(path); - sb.Append($"--referencepath \"{path}\" "); + referencePaths.Append($"--referencepath \"{path}\" "); } + return referencePaths; + } + + public static (Process DecompileIntoCSharpProcess, Process DecompileIntoILProcess) + StartDecompilationProcesses(TypeReference typeReference, DecompiledLanguage decompiledLanguage) + { + var assemblyDefinition = typeReference.Module.Assembly; + + var tempFolder = Path.GetTempPath(); + var fileName = $@"{tempFolder}TestAssembly.dll"; + var fileNamePdb = $@"{tempFolder}TestAssembly.pdb"; + var peStream = new FileStream(fileName, FileMode.Create); + var symbolStream = new FileStream(fileNamePdb, FileMode.Create); + + assemblyDefinition.Write( + peStream, + new WriterParameters + { + SymbolStream = symbolStream, + SymbolWriterProvider = new PortablePdbWriterProvider(), + WriteSymbols = true + }); + + peStream.Close(); + symbolStream.Close(); + + StringBuilder referencePaths = GetAllReferencePaths(); + var isWin = Environment.OSVersion.Platform == PlatformID.Win32Windows || Environment.OSVersion.Platform == PlatformID.Win32NT; var ilspycmd = Path.GetFullPath("Packages/com.unity.entities/Unity.Entities.Editor/PostprocessedILInspector/.ilspyfolder/ilspycmd.exe"); if (isWin) ilspycmd = ilspycmd.Replace("/", "\\"); - string ilSpyArgument = $"{(isWin ? "" : ilspycmd)} \"{fileName}\" -t \"{typeReference.FullName.Replace("/","+")}\" {sb}"; + string ilSpyArgument = $"{(isWin ? "" : ilspycmd)} \"{fileName}\" -t \"{typeReference.FullName.Replace("/","+")}\" {referencePaths}"; var outputCSharpProcess = decompiledLanguage == DecompiledLanguage.CSharpOnly || decompiledLanguage == DecompiledLanguage.CSharpAndIL diff --git a/Unity.Entities.Editor/Editors/ComponentDataProxyBaseEditor.cs b/Unity.Entities.Editor/Editors/ComponentDataProxyBaseEditor.cs deleted file mode 100644 index 4f0c8ef8..00000000 --- a/Unity.Entities.Editor/Editors/ComponentDataProxyBaseEditor.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System; -using System.Collections; -using System.Linq; -using System.Reflection; -using Unity.Entities.Serialization; -using Unity.Scenes; -using UnityEditor; -using UnityEngine; - -namespace Unity.Entities.Editor -{ - [CustomEditor(typeof(ComponentDataProxyBase), true), CanEditMultipleObjects] - [Obsolete("ComponentDataProxyBaseEditor has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] - public class ComponentDataProxyBaseEditor : UnityEditor.Editor - { - string m_SerializableError; - string m_MultipleComponentsWarning; - string m_DisallowMultipleWarning; - - protected SerializedProperty SerializedData { get; private set; } - - protected Type ComponentDataType { get; private set; } - - protected virtual void OnEnable() - { - SerializedData = serializedObject.FindProperty("m_SerializedData"); - - var type = target.GetType(); - var multipleInstances = targets - .Select(t => (t as ComponentDataProxyBase).GetComponents(type)) - .Where(c => c.Length > 1) - .ToArray(); - if (multipleInstances.Length > 0) - m_MultipleComponentsWarning = string.Format( - L10n.Tr("{0} has multiple instances of {1}, but Entity may only have a single instance of any component type."), - multipleInstances[0][0].gameObject.name, type - ); - var disallowMultipleType = Attribute.IsDefined(type, typeof(DisallowMultipleComponent), true) ? type : null; - - FieldInfo field = null; - while (type.BaseType != typeof(ComponentDataProxyBase)) - { - type = type.BaseType; - if (disallowMultipleType == null && Attribute.IsDefined(type, typeof(DisallowMultipleComponent), true)) - disallowMultipleType = type; - if (field == null) - field = type.GetField("m_SerializedData", BindingFlags.Instance | BindingFlags.NonPublic); - } - - if (field == null) - return; - - ComponentDataType = field.FieldType; - var fieldIsList = typeof(IList).IsAssignableFrom(field.FieldType); - if (fieldIsList) - { - ComponentDataType = ComponentDataType.IsArray - ? ComponentDataType.GetElementType() - : ComponentDataType.GetGenericArguments().Single(); - } - - if (disallowMultipleType != null && field.FieldType.GetInterfaces().Contains(typeof(ISharedComponentData))) - m_DisallowMultipleWarning = string.Format( - L10n.Tr("Proxy type {0} is marked with {1}, which is not currently compatible with {2}."), - disallowMultipleType, typeof(DisallowMultipleComponent), typeof(SerializeUtilityHybrid) - ); - - if (SerializedData != null) - return; - - if ( - !Attribute.IsDefined(ComponentDataType, typeof(SerializableAttribute)) - && ComponentDataType.GetFields(BindingFlags.Public | BindingFlags.Instance).Length > 0 - ) - { - m_SerializableError = string.Format( - L10n.Tr("Component type {0} is not marked with {1}."), field.FieldType, typeof(SerializableAttribute) - ); - } - } - - public override void OnInspectorGUI() - { - serializedObject.Update(); - EditorGUI.BeginChangeCheck(); - if (SerializedData != null) - DisplaySerializedDataPropertyField(); - if (EditorGUI.EndChangeCheck()) - serializedObject.ApplyModifiedProperties(); - - DisplayStatusMessages(); - } - - protected virtual void DisplaySerializedDataPropertyField() - { - EditorGUILayout.PropertyField(SerializedData); - } - - protected virtual void DisplayStatusMessages() - { - if (!string.IsNullOrEmpty(m_SerializableError)) - EditorGUILayout.HelpBox(m_SerializableError, MessageType.Error); - if (!string.IsNullOrEmpty(m_MultipleComponentsWarning)) - EditorGUILayout.HelpBox(m_MultipleComponentsWarning, MessageType.Warning); - if (!string.IsNullOrEmpty(m_DisallowMultipleWarning)) - EditorGUILayout.HelpBox(m_DisallowMultipleWarning, MessageType.Warning); - } - } -} diff --git a/Unity.Entities.Editor/Editors/DynamicBufferProxyBaseEditor.cs b/Unity.Entities.Editor/Editors/DynamicBufferProxyBaseEditor.cs deleted file mode 100644 index 1e8f0600..00000000 --- a/Unity.Entities.Editor/Editors/DynamicBufferProxyBaseEditor.cs +++ /dev/null @@ -1,130 +0,0 @@ -using System; -using UnityEditor; -using UnityEditorInternal; -using UnityEngine; - -namespace Unity.Entities.Editor -{ - [CustomEditor(typeof(DynamicBufferProxy<>), true), CanEditMultipleObjects] - [Obsolete("DynamicBufferProxyBaseEditor has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] - public class DynamicBufferProxyBaseEditor : ComponentDataProxyBaseEditor - { - static class Styles - { - public const float LowCapacityPercent = 0.5f; - public static readonly string CapacityStatusFormatString = - L10n.Tr("{0} has a specified internal buffer capacity of {1}."); - public static readonly string DefaultCapacityStatusFormatString = - L10n.Tr($"{{0}} is not marked with {typeof(InternalBufferCapacityAttribute).Name} and has a default capacity of {{1}}."); - public static readonly string OverAllocatedFormatString = - L10n.Tr("{0} has an internal capacity of {1}, but you have allocated {2} elements, which will result in cache misses. Consider increasing the buffer capacity or allocating fewer elements."); - public static readonly string UnderUtilizedFormatString = - L10n.Tr("{0} has an internal capacity of {1}, but you have only allocated {2} elements. If you are frequently under-utilizing the available internal buffer capacity, consider decreasing it to avoid wasting memory."); - } - - ReorderableList m_SerializedDataList; - - string m_BufferStatusString; - MessageType m_BufferStatus; - - int Capacity - { - get { return TypeManager.GetTypeInfo(TypeManager.GetTypeIndex(ComponentDataType)).BufferCapacity; } - } - - // rebuild lazily when accessed from OnGUI() to avoid accessing TypeManager (via Capacity) in OnEnable() - public string CapacityStatusString - { - get - { - if (string.IsNullOrEmpty(m_CapacityStatusString)) - { - var formatString = Attribute.IsDefined(ComponentDataType, typeof(InternalBufferCapacityAttribute)) - ? Styles.CapacityStatusFormatString - : Styles.DefaultCapacityStatusFormatString; - m_CapacityStatusString = string.Format(formatString, ComponentDataType.Name, Capacity); - RebuildBufferStatusString(); - } - return m_CapacityStatusString; - } - } - string m_CapacityStatusString; - - protected override void OnEnable() - { - base.OnEnable(); - m_SerializedDataList = new ReorderableList(serializedObject, SerializedData); - var label = EditorGUIUtility.TrTextContent(m_SerializedDataList.serializedProperty.displayName); - m_SerializedDataList.drawHeaderCallback = rect => EditorGUI.LabelField(rect, label); - var tempLabel = new GUIContent(); - if (ComponentDataType?.GetFields().Length == 1) - { - m_SerializedDataList.elementHeight = - EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; - m_SerializedDataList.drawElementCallback = (rect, index, active, focused) => - { - var element = m_SerializedDataList.serializedProperty.GetArrayElementAtIndex(index); - tempLabel.text = element.displayName; - rect = new Rect(rect) { height = rect.height - EditorGUIUtility.standardVerticalSpacing }; - element.Next(true); - EditorGUI.PropertyField(rect, element, tempLabel); - }; - } - else - { - m_SerializedDataList.elementHeightCallback = index => - EditorGUI.GetPropertyHeight(m_SerializedDataList.serializedProperty.GetArrayElementAtIndex(index)) - + EditorGUIUtility.standardVerticalSpacing; - m_SerializedDataList.drawElementCallback = (rect, index, active, focused) => - { - var hierarchyMode = EditorGUIUtility.hierarchyMode; - EditorGUIUtility.hierarchyMode = false; - var element = m_SerializedDataList.serializedProperty.GetArrayElementAtIndex(index); - tempLabel.text = element.displayName; - rect = new Rect(rect) { height = rect.height - EditorGUIUtility.standardVerticalSpacing }; - EditorGUI.PropertyField(rect, element, tempLabel, true); - EditorGUIUtility.hierarchyMode = hierarchyMode; - }; - } - } - - protected override void DisplaySerializedDataPropertyField() - { - EditorGUILayout.HelpBox(CapacityStatusString, MessageType.None); - EditorGUI.BeginChangeCheck(); - EditorGUILayout.PropertyField(m_SerializedDataList.serializedProperty.FindPropertyRelative("Array.size")); - // align control fields with those outside the reorderable list control - var labelWidth = EditorGUIUtility.labelWidth; - EditorGUIUtility.labelWidth -= 19f; - m_SerializedDataList?.DoLayoutList(); - EditorGUIUtility.labelWidth = labelWidth; - if (EditorGUI.EndChangeCheck()) - RebuildBufferStatusString(); - } - - void RebuildBufferStatusString() - { - m_BufferStatus = MessageType.None; - var count = m_SerializedDataList.count; - if (count > Capacity) - { - m_BufferStatusString = - string.Format(Styles.OverAllocatedFormatString, ComponentDataType.Name, Capacity, count); - m_BufferStatus = MessageType.Warning; - } - else if (count < Capacity * Styles.LowCapacityPercent) - { - m_BufferStatusString = - string.Format(Styles.UnderUtilizedFormatString, ComponentDataType.Name, Capacity, count); - m_BufferStatus = MessageType.Warning; - } - } - - protected override void DisplayStatusMessages() - { - base.DisplayStatusMessages(); - if (m_BufferStatus != MessageType.None) - EditorGUILayout.HelpBox(m_BufferStatusString, m_BufferStatus); - } - } -} diff --git a/Unity.Entities.Editor/EntityDebugger/EntityDebugger.cs b/Unity.Entities.Editor/EntityDebugger/EntityDebugger.cs index 247cb743..1be76c00 100644 --- a/Unity.Entities.Editor/EntityDebugger/EntityDebugger.cs +++ b/Unity.Entities.Editor/EntityDebugger/EntityDebugger.cs @@ -1,20 +1,14 @@ using System; using System.Collections.Generic; -using System.Linq; using UnityEditor; -using UnityEngine; using UnityEditor.IMGUI.Controls; +using UnityEngine; using UnityEngine.Serialization; -using Unity.Collections.LowLevel.Unsafe; namespace Unity.Entities.Editor { internal class EntityDebugger : EditorWindow { - public delegate void SelectionChangeCallback(EntitySelectionProxy proxy); - - public event SelectionChangeCallback OnEntitySelectionChanged; - internal static ComponentSystemBase[] extraSystems; internal static void SetExtraSystems(ComponentSystemBase[] systems) @@ -158,7 +152,16 @@ public void SetEntityListSelection(EntityListQuery newSelection, bool updateList entityListView.TouchSelection(); } - public Entity EntitySelection => selectionProxy.Entity; + public Entity EntitySelection + { + get + { + if (WorldSelection == null || entityListView == null) + return Entity.Null; + + return entityListView.GetSelectedEntity(); + } + } internal void SetEntitySelection(Entity newSelection, bool updateList) { @@ -168,14 +171,16 @@ internal void SetEntitySelection(Entity newSelection, bool updateList) var world = WorldSelection ?? SystemSelection.World; if (world != null && newSelection != Entity.Null) { - selectionProxy.SetEntity(world, newSelection); - Selection.activeObject = selectionProxy; - OnEntitySelectionChanged?.Invoke(selectionProxy); + // No need to re-select the same entity twice + var selectedProxy = Selection.activeObject as EntitySelectionProxy; + if (selectedProxy == null || selectedProxy.World != world || selectedProxy.Entity != newSelection) + { + EntitySelectionProxy.SelectEntity(world, newSelection); + } } - else if (Selection.activeObject == selectionProxy) + else if (Selection.activeObject is EntitySelectionProxy) { Selection.activeObject = null; - OnEntitySelectionChanged?.Invoke(null); } } @@ -193,8 +198,6 @@ internal static void SetAllSelections(World world, ComponentSystemBase system, E private static EntityDebugger Instance { get; set; } - private EntitySelectionProxy selectionProxy; - [FormerlySerializedAs("componentGroupListStates")] [SerializeField] private List entityQueryListStates = new List(); [FormerlySerializedAs("componentGroupListStateNames")] @@ -311,7 +314,6 @@ private void OnEnable() Instance = this; filterUI = new ComponentTypeFilterUI(SetAllEntitiesFilter, () => WorldSelection); - CreateEntitySelectionProxy(); CreateWorldPopup(); CreateSystemListView(); CreateEntityQueryListView(); @@ -323,17 +325,6 @@ private void OnEnable() EditorApplication.playModeStateChanged += OnPlayModeStateChange; } - private void CreateEntitySelectionProxy() - { - selectionProxy = ScriptableObject.CreateInstance(); - selectionProxy.hideFlags = HideFlags.HideAndDontSave; - - selectionProxy.EntityControlSelectButton += (world, entity) => - { - SetAllSelections(world, null, null, entity); - }; - } - private void OnDestroy() { entityListView?.Dispose(); @@ -345,8 +336,6 @@ private void OnDisable() chunkInfoListView?.Dispose(); if (Instance == this) Instance = null; - if (selectionProxy) - DestroyImmediate(selectionProxy); ShowingChunkInfoViewPersistent = showingChunkInfoView; EditorApplication.playModeStateChanged -= OnPlayModeStateChange; @@ -356,7 +345,7 @@ private void OnPlayModeStateChange(PlayModeStateChange change) { if (change == PlayModeStateChange.ExitingPlayMode) SetAllEntitiesFilter(null); - if (change == PlayModeStateChange.ExitingPlayMode && Selection.activeObject == selectionProxy) + if (change == PlayModeStateChange.ExitingPlayMode && Selection.activeObject is EntitySelectionProxy) Selection.activeObject = null; } @@ -572,10 +561,18 @@ private void ChunkInfoView() private void OnSelectionChange() { - if (Selection.activeObject != selectionProxy) + if (Selection.activeObject is EntitySelectionProxy selectionProxy && selectionProxy.Exists) + { + SetWorldSelection(selectionProxy.World, false); + entityListView.SetEntitySelection(selectionProxy.Entity, TreeViewSelectionOptions.RevealAndFrame); + } + else { entityListView.SelectNothing(); } + + // Ensures we keep the window in sync with selection changes + Repaint(); } private void OnGUI() @@ -589,13 +586,10 @@ private void OnGUI() entityListView.ReloadIfNecessary(); } - if (Selection.activeObject == selectionProxy) + if (Selection.activeObject is EntitySelectionProxy selectionProxy && !selectionProxy.Exists) { - if (!selectionProxy.Exists) - { - Selection.activeObject = null; - entityListView.SelectNothing(); - } + Selection.activeObject = null; + entityListView.SelectNothing(); } { diff --git a/Unity.Entities.Editor/EntityDebugger/EntityListView.cs b/Unity.Entities.Editor/EntityDebugger/EntityListView.cs index 82e7d261..9bfa5379 100644 --- a/Unity.Entities.Editor/EntityDebugger/EntityListView.cs +++ b/Unity.Entities.Editor/EntityDebugger/EntityListView.cs @@ -205,10 +205,10 @@ public void SelectNothing() SetSelection(new List()); } - public void SetEntitySelection(Entity entitySelection) + public void SetEntitySelection(Entity entitySelection, TreeViewSelectionOptions options = TreeViewSelectionOptions.None) { if (entitySelection != Entity.Null && getWorldSelection().EntityManager.Exists(entitySelection)) - SetSelection(new List {entitySelection.Index}); + SetSelection(new List {entitySelection.Index}, options); } public void TouchSelection() @@ -218,6 +218,18 @@ public void TouchSelection() , TreeViewSelectionOptions.RevealAndFrame); } + public Entity GetSelectedEntity() + { + if (HasSelection()) + { + if (rows.GetById(GetSelection()[0], out Entity selectedEntity)) + return selectedEntity; + } + + return Entity.Null; + } + + public void FrameSelection() { var selection = GetSelection(); diff --git a/Unity.Entities.Editor/EntityDebugger/SystemListView.cs b/Unity.Entities.Editor/EntityDebugger/SystemListView.cs index 3c57c4a3..fd228e3a 100644 --- a/Unity.Entities.Editor/EntityDebugger/SystemListView.cs +++ b/Unity.Entities.Editor/EntityDebugger/SystemListView.cs @@ -41,7 +41,7 @@ public SystemState* StatePointer if (Managed != null) return Managed.m_StatePtr; else if (Unmanaged.World != null) - return Unmanaged.World.ResolveSystemState(Unmanaged.Handle); + return Unmanaged.World.Unmanaged.ResolveSystemState(Unmanaged.Handle); return null; } } diff --git a/Unity.Entities.Editor/EntityInspector/Adapters/IMGUIAdapter.EntityGuid.cs b/Unity.Entities.Editor/EntityInspector/Adapters/IMGUIAdapter.EntityGuid.cs index 0bb27174..1113ee6e 100644 --- a/Unity.Entities.Editor/EntityInspector/Adapters/IMGUIAdapter.EntityGuid.cs +++ b/Unity.Entities.Editor/EntityInspector/Adapters/IMGUIAdapter.EntityGuid.cs @@ -15,7 +15,7 @@ public VisitStatus Visit(Property property, GUI.enabled = enabled; EditorGUI.indentLevel++; EditorGUILayout.TextField("Originating Id", value.OriginatingId.ToString()); - EditorGUILayout.TextField("Namespace Id", value.NamespaceId.ToString()); + EditorGUILayout.TextField("Namespace Id", value.FullNamespaceId.ToString()); EditorGUILayout.TextField("Serial", value.Serial.ToString()); EditorGUI.indentLevel--; return VisitStatus.Stop; diff --git a/Unity.Entities.Editor/EntityInspector/DynamicBufferContainer.cs b/Unity.Entities.Editor/EntityInspector/DynamicBufferContainer.cs index 095cb75e..6bd9e6a5 100644 --- a/Unity.Entities.Editor/EntityInspector/DynamicBufferContainer.cs +++ b/Unity.Entities.Editor/EntityInspector/DynamicBufferContainer.cs @@ -22,10 +22,21 @@ static DynamicBufferContainer() EntityManager EntityManager { get; } Entity Entity { get; } - BufferHeader* Header => (BufferHeader*) EntityManager.GetComponentDataRawRO(Entity, TypeIndex); + bool Exists() => EntityContainer.Exists(); + + BufferHeader* Header + { + get + { + if (Exists()) + return (BufferHeader*) EntityManager.GetComponentDataRawRO(Entity, TypeIndex); + return null; + } + } + void* ReadOnlyBuffer => EntityManager.GetBufferRawRO(Entity, TypeIndex); void* ReadWriteBuffer => EntityManager.GetBufferRawRW(Entity, TypeIndex); - public int Count => Header->Length; + public int Count => null != Header ? Header->Length : 0; public DynamicBufferContainer(EntityContainer entityContainer, int typeIndex, bool readOnly = true) { diff --git a/Unity.Entities.Editor/EntityInspector/EntityContainer.cs b/Unity.Entities.Editor/EntityInspector/EntityContainer.cs index 8d055052..dab8a073 100644 --- a/Unity.Entities.Editor/EntityInspector/EntityContainer.cs +++ b/Unity.Entities.Editor/EntityInspector/EntityContainer.cs @@ -36,7 +36,10 @@ static EntityContainer() public readonly Entity Entity; public readonly bool IsReadOnly; - public int GetComponentCount() => EntityManager.GetComponentCount(Entity); + public int GetComponentCount() + { + return Exists() ? EntityManager.GetComponentCount(Entity) : 0; + } public EntityContainer(EntityManager entityManager, Entity entity, bool readOnly = true) { @@ -44,6 +47,13 @@ public EntityContainer(EntityManager entityManager, Entity entity, bool readOnly Entity = entity; IsReadOnly = readOnly; } + + internal bool Exists() + { + var entityManager = EntityManager; + return Entity.Index >= 0 && (uint) Entity.Index < (uint) entityManager.EntityCapacity + && entityManager.Exists(Entity); + } } class EntityContainerPropertyBag : PropertyBag, IPropertyNameable, IPropertyIndexable @@ -117,6 +127,8 @@ public override void SetValue(ref EntityContainer container, TComponent value) DoSetValue(ref container, value); } + + protected abstract TComponent DoGetValue(ref EntityContainer container); protected abstract void DoSetValue(ref EntityContainer container, TComponent value); protected abstract bool IsZeroSize { get; } @@ -296,8 +308,11 @@ internal override IEnumerable> GetProperties(ref Enti IEnumerable> EnumerateProperties(EntityContainer container) { - var count = container.GetComponentCount(); + if (!container.Exists()) + yield break; + var entityManager = container.EntityManager; + var count = container.GetComponentCount(); for (var i = 0; i < count; i++) { var typeIndex = entityManager.GetComponentTypeIndex(container.Entity, i); @@ -308,6 +323,12 @@ IEnumerable> EnumerateProperties(EntityContainer cont bool IPropertyNameable.TryGetProperty(ref EntityContainer container, string name, out IProperty property) { + if (!container.Exists()) + { + property = null; + return false; + } + foreach (var p in EnumerateProperties(container)) { if (p.Name != name) continue; @@ -321,6 +342,12 @@ bool IPropertyNameable.TryGetProperty(ref EntityContainer conta bool IPropertyIndexable.TryGetProperty(ref EntityContainer container, int index, out IProperty property) { + if (!container.Exists()) + { + property = null; + return false; + } + var entityManager = container.EntityManager; property = GetOrCreatePropertyForType(entityManager.GetComponentTypeIndex(container.Entity, index), container.IsReadOnly); return true; diff --git a/Unity.Entities.Editor/EntityInspector/EntitySelectionProxy.cs b/Unity.Entities.Editor/EntityInspector/EntitySelectionProxy.cs index 54ffb2e4..22ada935 100644 --- a/Unity.Entities.Editor/EntityInspector/EntitySelectionProxy.cs +++ b/Unity.Entities.Editor/EntityInspector/EntitySelectionProxy.cs @@ -1,46 +1,183 @@ +using System; +using System.ComponentModel; using UnityEditor; using UnityEngine; namespace Unity.Entities.Editor { - public class EntitySelectionProxy : ScriptableObject + /// + /// Proxy object for an so it can be selected and shown in the inspector. + /// + public class EntitySelectionProxy : ScriptableObject, ISerializationCallbackReceiver { - internal static event EntityDebugger.SelectionChangeCallback OnEntitySelectionChanged; + /// + /// Creates and configures an instance of EntitySelectionProxy wrapping the specified . + /// + /// The in which the Entity exists. + /// The entity to be wrapped by this instance of EntitySelectionProxy. + /// A fully configured EntitySelectionProxy, wrapping the specified entity. + /// Thrown when is null or world. is false. + public static EntitySelectionProxy CreateInstance(World world, Entity entity) + { + if (world == null || !world.IsCreated) + throw new ArgumentNullException(nameof(world)); - public delegate void EntityControlSelectButtonHandler(World world, Entity entity); + if (!EntityExistsAndIsValid(world, entity)) + entity = Entity.Null; - public event EntityControlSelectButtonHandler EntityControlSelectButton; + var proxy = CreateInstance(); + proxy.hideFlags = HideFlags.HideAndDontSave; + proxy.Initialize(world, entity); - public EntityContainer Container { get; private set; } - public Entity Entity + Undo.RegisterCreatedObjectUndo(proxy, "Create EntitySelectionProxy"); + + return proxy; + } + + /// + /// Creates and selects an instance of EntitySelectionProxy wrapping the specified . + /// + /// + /// + /// This operation does not return the created instance of EntitySelectionProxy. If you want to hold onto the created instance, please use instead. + /// + /// + /// This operation may produce no results if is null, if world. is false, if the specified + /// does not exist in the specified world, or if the current selection already points to the specified entity. + /// + /// + /// The in which the Entity exists. + /// The entity to be wrapped by this instance of EntitySelectionProxy. + public static void SelectEntity(World world, Entity entity) { - get { return new Entity() {Index = entityIndex, Version = entityVersion}; } - private set - { - entityIndex = value.Index; - entityVersion = value.Version; - } + if (!EntityExistsAndIsValid(world, entity)) + return; + + Undo.IncrementCurrentGroup(); + Undo.SetCurrentGroupName("Select Entity"); + CreateInstance(world, entity).Select(); } + + // Workaround because EntityManager.Exists can potentially throw when used in the editor + static bool EntityExistsAndIsValid(World world, Entity entity) + { + return world != null + && world.IsCreated + && entity.Index >= 0 && (uint)entity.Index < (uint)world.EntityManager.EntityCapacity + && world.EntityManager.Exists(entity); + } + [SerializeField] int entityIndex; [SerializeField] int entityVersion; - public EntityManager EntityManager { get; private set; } + + // Try to remember the world when performing Undo/Redo + [SerializeField] string worldName; + + /// + /// The in which the wrapped exists. + /// public World World { get; private set; } - public bool Exists => World.IsCreated && EntityManager.Exists(Entity); + /// + /// The wrapped by this instance of EntitySelectionProxy. + /// + public Entity Entity => new Entity { Index = entityIndex, Version = entityVersion }; - public void OnEntityControlSelectButton(World world, Entity entity) + /// + /// Whether the wrapped currently exists and is valid. + /// + public bool Exists => World != null && World.IsCreated && World.EntityManager.Exists(Entity); + + /// + /// + /// The allowing the data to be visited. + /// + /// + /// + public EntityContainer Container { get; private set; } + + /// + /// Sets this instance of EntitySelectionProxy as the active selection. + /// + /// + /// This operation produces no result if the current selection is the same instance or if the current selection is another instance + /// of EntitySelectionProxy wrapping the same . + /// + public void Select() { - EntityControlSelectButton(world, entity); + // Don't reselect yourself + if (Selection.activeObject == this) + return; + + // Don't reselect the same entity + if (Selection.activeObject is EntitySelectionProxy selectionProxy && selectionProxy.World == World && selectionProxy.Entity == Entity) + return; + + Selection.activeObject = this; } - public void SetEntity(World world, Entity entity) + void Initialize(World world, Entity entity) { + entityIndex = entity.Index; + entityVersion = entity.Version; + CreateContext(world); + } + + void CreateContext(World world) + { + if (world == null) + return; + World = world; - Entity = entity; - EntityManager = world.EntityManager; - Container = new EntityContainer(EntityManager, Entity); - EditorUtility.SetDirty(this); - OnEntitySelectionChanged?.Invoke(this); + Container = new EntityContainer(world.EntityManager, Entity); + } + + void ISerializationCallbackReceiver.OnBeforeSerialize() => worldName = World?.Name; + + void ISerializationCallbackReceiver.OnAfterDeserialize() => CreateContext(FindWorldByName(worldName)); + + static World FindWorldByName(string worldName) + { + if (string.IsNullOrEmpty(worldName)) + return null; + + foreach (var world in World.All) + { + if (world.Name == worldName) + return world; + } + + return null; } + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("The delegate: EntityControlSelectButtonHandler is no longer used and can be safely removed from your code. (RemovedAfter 2021-01-13).", false)] + public delegate void EntityControlSelectButtonHandler(World world, Entity entity); + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("The event: EntityControlSelectButton is no longer invoked. Please react to the global selection change instead. (RemovedAfter 2021-01-13).", false)] +#pragma warning disable 67, 618 + public event EntityControlSelectButtonHandler EntityControlSelectButton; +#pragma warning restore 67, 618 + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("EntityManager is Obsolete. Please use World.EntityManager instead. (RemovedAfter 2021-01-13).", false)] + public EntityManager EntityManager => World?.EntityManager ?? default; + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("OnEntityControlSelectButton is no longer required. Simply create a new EntitySelectionProxy and select it instead. (RemovedAfter 2021-01-13).", false)] + // ReSharper disable once UnusedMember.Global + // ReSharper disable UnusedParameter.Global + // ReSharper disable once MemberCanBeMadeStatic.Global + public void OnEntityControlSelectButton(World world, Entity entity) { /* NOOP */} + // ReSharper restore UnusedParameter.Global + + [EditorBrowsable(EditorBrowsableState.Never)] + [Obsolete("SetEntity has been deprecated with no replacement. If you need to select a different Entity, create a new EntitySelectionProxy. (RemovedAfter 2021-01-13).", false)] + // ReSharper disable once UnusedMember.Global + // ReSharper disable UnusedParameter.Global + // ReSharper disable once MemberCanBeMadeStatic.Global + public void SetEntity(World world, Entity entity) { /* NOOP */} + // ReSharper restore UnusedParameter.Global } } diff --git a/Unity.Entities.Editor/EntityInspector/EntitySelectionProxyEditor.cs b/Unity.Entities.Editor/EntityInspector/EntitySelectionProxyEditor.cs index 6bac2dff..af5ebe18 100644 --- a/Unity.Entities.Editor/EntityInspector/EntitySelectionProxyEditor.cs +++ b/Unity.Entities.Editor/EntityInspector/EntitySelectionProxyEditor.cs @@ -32,7 +32,8 @@ void OnEnable() var targetProxy = (EntitySelectionProxy)target; if (!targetProxy.Exists) return; - targetProxy.OnEntityControlSelectButton(targetProxy.World, entity); + + EntitySelectionProxy.SelectEntity(targetProxy.World, entity); }, entity => currentEntityManager.GetName(entity)); @@ -67,11 +68,11 @@ protected override void OnHeaderGUI() GUI.enabled = true; var entity = targetProxy.Entity; - var entityName = targetProxy.EntityManager.GetName(entity); + var entityName = targetProxy.World.EntityManager.GetName(entity); var newName = EditorGUILayout.DelayedTextField(entityName); if (newName != entityName) { - targetProxy.EntityManager.SetName(entity, newName); + targetProxy.World.EntityManager.SetName(entity, newName); EditorWindow.GetWindow().Repaint(); } GUI.enabled = false; @@ -98,7 +99,7 @@ public override void OnInspectorGUI() var container = targetProxy.Container; - currentEntityManager = targetProxy.EntityManager; + currentEntityManager = targetProxy.World.EntityManager; PropertyContainer.Visit(ref container, visitor); GUI.enabled = true; diff --git a/Unity.Entities.Editor/LiveLink/EditorCompanionGameObjectUpdateSystem.cs b/Unity.Entities.Editor/LiveLink/EditorCompanionGameObjectUpdateSystem.cs index 629e1d67..3442f37e 100644 --- a/Unity.Entities.Editor/LiveLink/EditorCompanionGameObjectUpdateSystem.cs +++ b/Unity.Entities.Editor/LiveLink/EditorCompanionGameObjectUpdateSystem.cs @@ -1,12 +1,14 @@ #if !UNITY_DISABLE_MANAGED_COMPONENTS && !DOTS_HYBRID_COMPONENTS_DEBUG using Unity.Collections; using Unity.Entities; +using Unity.Scenes.Editor; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.SceneManagement; [ExecuteAlways] -[UpdateInGroup(typeof(InitializationSystemGroup))] +[UpdateInGroup(typeof(LiveLinkEditorSystemGroup))] +[UpdateAfter(typeof(EditorSubSceneLiveLinkSystem))] class EditorCompanionGameObjectUpdateSystem : ComponentSystem { EntityQuery m_WithoutHideFlagsSet; diff --git a/Unity.Entities.Editor/LiveLink/LiveLinkCommands.cs b/Unity.Entities.Editor/LiveLink/LiveLinkCommands.cs deleted file mode 100644 index 2fd642bf..00000000 --- a/Unity.Entities.Editor/LiveLink/LiveLinkCommands.cs +++ /dev/null @@ -1,51 +0,0 @@ -using Unity.Scenes; -using Unity.Scenes.Editor; -using UnityEditor; -using UnityEditor.Networking.PlayerConnection; - -namespace Unity.Entities.Editor -{ - static class LiveLinkCommands - { - const string k_LiveLinkEditorMenu = "DOTS/Live Link Mode/"; - - const string kEnableInEditMode = k_LiveLinkEditorMenu + "Live Conversion in Edit Mode"; - const string kAuthoring = k_LiveLinkEditorMenu + "SceneView: Editing State"; - const string kGameState = k_LiveLinkEditorMenu + "SceneView: Live Game State"; - - - [MenuItem(kEnableInEditMode, false, 0)] - static void ToggleInEditMode() - { - SubSceneInspectorUtility.LiveLinkEnabledInEditMode = !SubSceneInspectorUtility.LiveLinkEnabledInEditMode; - } - - [MenuItem(kEnableInEditMode, true)] - static bool ValidateToggleInEditMode() - { - Menu.SetChecked(kEnableInEditMode, SubSceneInspectorUtility.LiveLinkEnabledInEditMode); - return true; - } - - [MenuItem(kAuthoring, false, 11)] - static void LiveAuthoring() - => SubSceneInspectorUtility.LiveLinkShowGameStateInSceneView = false; - - [MenuItem(kAuthoring, true)] - static bool ValidateLiveConvertAuthoring() - { - Menu.SetChecked(kAuthoring, !SubSceneInspectorUtility.LiveLinkShowGameStateInSceneView); - return true; - } - - [MenuItem(kGameState, false, 11)] - static void LiveConvertGameState() => SubSceneInspectorUtility.LiveLinkShowGameStateInSceneView = true; - - [MenuItem(kGameState, true)] - static bool ValidateLiveConvertGameState() - { - Menu.SetChecked(kGameState, SubSceneInspectorUtility.LiveLinkShowGameStateInSceneView); - return true; - } - } -} diff --git a/Unity.Entities.Editor/LiveLink/LiveLinkMenu.cs b/Unity.Entities.Editor/LiveLink/LiveLinkMenu.cs new file mode 100644 index 00000000..3def681e --- /dev/null +++ b/Unity.Entities.Editor/LiveLink/LiveLinkMenu.cs @@ -0,0 +1,121 @@ +// For debugging purposes we can also allow selecting the legacy allow clean conversion mode. +//#define ALLOW_CLEAN_CONVERSION_MODE_FOR_DEBUG +using Unity.Entities.Conversion; +using Unity.Scenes.Editor; +using UnityEditor; + +namespace Unity.Entities.Editor +{ + static class LiveLinkMenu + { + const string k_LiveLinkEditorMenu = "DOTS/Live Link Mode/"; + + const string kEnableInEditMode = k_LiveLinkEditorMenu + "Live Conversion in Edit Mode"; + const string kAuthoring = k_LiveLinkEditorMenu + "SceneView: Editing State"; + const string kGameState = k_LiveLinkEditorMenu + "SceneView: Live Game State"; + + + [MenuItem(kEnableInEditMode, false, 0)] + static void ToggleInEditMode() + { + SubSceneInspectorUtility.LiveLinkEnabledInEditMode = !SubSceneInspectorUtility.LiveLinkEnabledInEditMode; + } + + [MenuItem(kEnableInEditMode, true)] + static bool ValidateToggleInEditMode() + { + Menu.SetChecked(kEnableInEditMode, SubSceneInspectorUtility.LiveLinkEnabledInEditMode); + return true; + } + + [MenuItem(kAuthoring, false, 11)] + static void LiveAuthoring() + => SubSceneInspectorUtility.LiveLinkShowGameStateInSceneView = false; + + [MenuItem(kAuthoring, true)] + static bool ValidateLiveConvertAuthoring() + { + Menu.SetChecked(kAuthoring, !SubSceneInspectorUtility.LiveLinkShowGameStateInSceneView); + return true; + } + + [MenuItem(kGameState, false, 11)] + static void LiveConvertGameState() => SubSceneInspectorUtility.LiveLinkShowGameStateInSceneView = true; + + [MenuItem(kGameState, true)] + static bool ValidateLiveConvertGameState() + { + Menu.SetChecked(kGameState, SubSceneInspectorUtility.LiveLinkShowGameStateInSceneView); + return true; + } + + +#if UNITY_2020_2_OR_NEWER +#if !ALLOW_CLEAN_CONVERSION_MODE_FOR_DEBUG + const string k_ConversionIncrementalConversionWithDebug = k_LiveLinkEditorMenu + "Debug Incremental Conversion"; + + [MenuItem(k_ConversionIncrementalConversionWithDebug, true)] + static bool ValidateIncrementalConversionWithDebug() + { + Menu.SetChecked(k_ConversionIncrementalConversionWithDebug, + LiveConversionSettings.Mode == LiveConversionSettings.ConversionMode.IncrementalConversionWithDebug); + return true; + } + + [MenuItem(k_ConversionIncrementalConversionWithDebug, false)] + static void ConversionIncrementalConversionWithDebug() + { + var isEnabled = LiveConversionSettings.Mode == LiveConversionSettings.ConversionMode.IncrementalConversionWithDebug; + LiveConversionSettings.Mode = isEnabled ? LiveConversionSettings.ConversionMode.IncrementalConversion : LiveConversionSettings.ConversionMode.IncrementalConversionWithDebug; + } + +#else + const string k_ConversionAlwaysCleanConvert = k_LiveLinkEditorMenu + "Always Convert Entire Scene"; + const string k_ConversionIncrementalConversion = k_LiveLinkEditorMenu + "Incremental Conversion"; + const string k_ConversionIncrementalConversionWithDebug = k_LiveLinkEditorMenu + "Debug Incremental Conversion"; + + [MenuItem(k_ConversionAlwaysCleanConvert, true)] + static bool ValidateAlwaysCleanConvert() + { + Menu.SetChecked(k_ConversionAlwaysCleanConvert, + LiveConversionSettings.Mode == LiveConversionSettings.ConversionMode.AlwaysCleanConvert); + return true; + } + + [MenuItem(k_ConversionAlwaysCleanConvert, false)] + static void ConversionAlwaysCleanConvert() + { + LiveConversionSettings.Mode = LiveConversionSettings.ConversionMode.AlwaysCleanConvert; + } + + [MenuItem(k_ConversionIncrementalConversion, true)] + static bool ValidateConversionIncrementalConversion() + { + Menu.SetChecked(k_ConversionIncrementalConversion, + LiveConversionSettings.Mode == LiveConversionSettings.ConversionMode.IncrementalConversion); + return true; + } + + [MenuItem(k_ConversionIncrementalConversion, false)] + static void ConversionIncrementalConversion() + { + LiveConversionSettings.Mode = LiveConversionSettings.ConversionMode.IncrementalConversion; + } + + [MenuItem(k_ConversionIncrementalConversionWithDebug, true)] + static bool ValidateIncrementalConversionWithDebug() + { + Menu.SetChecked(k_ConversionIncrementalConversionWithDebug, + LiveConversionSettings.Mode == LiveConversionSettings.ConversionMode.IncrementalConversionWithDebug); + return true; + } + + [MenuItem(k_ConversionIncrementalConversionWithDebug, false)] + static void ConversionIncrementalConversionWithDebug() + { + LiveConversionSettings.Mode = LiveConversionSettings.ConversionMode.IncrementalConversionWithDebug; + } +#endif +#endif + } +} diff --git a/Unity.Entities.Editor/LiveLink/LiveLinkCommands.cs.meta b/Unity.Entities.Editor/LiveLink/LiveLinkMenu.cs.meta similarity index 100% rename from Unity.Entities.Editor/LiveLink/LiveLinkCommands.cs.meta rename to Unity.Entities.Editor/LiveLink/LiveLinkMenu.cs.meta diff --git a/Unity.Entities.Editor/LiveLink/LiveLinkToolbar.cs b/Unity.Entities.Editor/LiveLink/LiveLinkToolbar.cs index 5b779f3b..bd610622 100644 --- a/Unity.Entities.Editor/LiveLink/LiveLinkToolbar.cs +++ b/Unity.Entities.Editor/LiveLink/LiveLinkToolbar.cs @@ -41,48 +41,51 @@ internal static Action BuildRepaintToolbarDelegate() [CommandHandler("DOTS/GUI/LiveLinkToolbar", CommandHint.UI)] static void DrawPlaybar(CommandExecuteContext ctx) { - // Enter / Exit Playmode - var isOrWillEnterPlaymode = EditorApplication.isPlayingOrWillChangePlaymode; - var isPlaying = EditorApplication.isPlaying; - GUI.changed = false; - - var buttonOffset = isPlaying ? 4 : 0; - - var c = GUI.color + new Color(.01f, .01f, .01f, .01f); - GUI.contentColor = new Color(1.0f / c.r, 1.0f / c.g, 1.0f / c.g, 1.0f / c.a); - GUI.SetNextControlName("ToolbarPlayModePlayButton"); - GUILayout.Toggle(isOrWillEnterPlaymode, s_PlayIcons[buttonOffset], isPlaying ? LiveLinkStyles.CommandLeftOn : LiveLinkStyles.CommandLeft); - GUI.backgroundColor = Color.white; - if (GUI.changed) + using (new EditorGUILayout.HorizontalScope()) { - TogglePlaying(); - GUIUtility.ExitGUI(); - } + // Enter / Exit Playmode + var isOrWillEnterPlaymode = EditorApplication.isPlayingOrWillChangePlaymode; + var isPlaying = EditorApplication.isPlaying; + GUI.changed = false; - // Pause game - GUI.changed = false; + var buttonOffset = isPlaying ? 4 : 0; - buttonOffset = EditorApplication.isPaused ? 4 : 0; - GUI.SetNextControlName("ToolbarPlayModePauseButton"); - var isPaused = GUILayout.Toggle(EditorApplication.isPaused, s_PlayIcons[buttonOffset + 1], LiveLinkStyles.CommandMid); - if (GUI.changed) - { - EditorApplication.isPaused = isPaused; - GUIUtility.ExitGUI(); - } + var c = GUI.color + new Color(.01f, .01f, .01f, .01f); + GUI.contentColor = new Color(1.0f / c.r, 1.0f / c.g, 1.0f / c.g, 1.0f / c.a); + GUI.SetNextControlName("ToolbarPlayModePlayButton"); + GUILayout.Toggle(isOrWillEnterPlaymode, s_PlayIcons[buttonOffset], isPlaying ? LiveLinkStyles.CommandLeftOn : LiveLinkStyles.CommandLeft); + GUI.backgroundColor = Color.white; + if (GUI.changed) + { + TogglePlaying(); + GUIUtility.ExitGUI(); + } - using (new EditorGUI.DisabledScope(!isPlaying)) - { - // Step playmode - GUI.SetNextControlName("ToolbarPlayModeStepButton"); - if (GUILayout.Button(s_PlayIcons[2], LiveLinkStyles.CommandRight)) + // Pause game + GUI.changed = false; + + buttonOffset = EditorApplication.isPaused ? 4 : 0; + GUI.SetNextControlName("ToolbarPlayModePauseButton"); + var isPaused = GUILayout.Toggle(EditorApplication.isPaused, s_PlayIcons[buttonOffset + 1], LiveLinkStyles.CommandMid); + if (GUI.changed) { - EditorApplication.Step(); + EditorApplication.isPaused = isPaused; GUIUtility.ExitGUI(); } - } - s_LinkConnectionsDropdown.DrawDropdown(); + using (new EditorGUI.DisabledScope(!isPlaying)) + { + // Step playmode + GUI.SetNextControlName("ToolbarPlayModeStepButton"); + if (GUILayout.Button(s_PlayIcons[2], LiveLinkStyles.CommandRight)) + { + EditorApplication.Step(); + GUIUtility.ExitGUI(); + } + } + + s_LinkConnectionsDropdown.DrawDropdown(); + } } static void TogglePlaying() diff --git a/Unity.Entities.Editor/LiveLink/StartLiveLinkWindow.cs b/Unity.Entities.Editor/LiveLink/StartLiveLinkWindow.cs index 4b1ba2b2..9aef3443 100644 --- a/Unity.Entities.Editor/LiveLink/StartLiveLinkWindow.cs +++ b/Unity.Entities.Editor/LiveLink/StartLiveLinkWindow.cs @@ -1,4 +1,3 @@ -using Bee.Core; using System; using System.Collections.Generic; using System.IO; @@ -177,14 +176,8 @@ public void Initialize(VisualElement rootVisualElement) m_ConfigurationsListView.itemsSource = m_FilteredBuildConfigurationViewModels; m_ConfigurationsListView.selectionType = SelectionType.Single; - -#if UNITY_2020_1_OR_NEWER m_ConfigurationsListView.onSelectionChange += OnConfigurationListViewSelectionChange; m_ConfigurationsListView.onItemsChosen += chosenConfigurations => EditBuildConfiguration((BuildConfigurationViewModel)chosenConfigurations.First()); -#else - m_ConfigurationsListView.onSelectionChanged += OnConfigurationListViewSelectionChanged; - m_ConfigurationsListView.onItemChosen += chosenConfiguration => EditBuildConfiguration((BuildConfigurationViewModel)chosenConfiguration); -#endif m_BuildMessage = m_Root.Q(kNamePrefix + "build-message"); m_BuildMessage.Hide(); @@ -271,11 +264,7 @@ internal void FilterConfigurations() UpdateActionButtonsState(); } -#if UNITY_2020_1_OR_NEWER void OnConfigurationListViewSelectionChange(IEnumerable obj) -#else - void OnConfigurationListViewSelectionChanged(List obj) -#endif { if (m_DiscardSelectionChanged) return; @@ -369,35 +358,33 @@ void BindBuildConfigurationItem(VisualElement visualElement, int index) static string GetUssClass(Platform platform) { - switch (platform) + switch (platform?.Name) { - case null: - return "start-live-link__item-template__icon-noTarget"; - case WindowsPlatform _: - case UniversalWindowsPlatform _: + case KnownPlatforms.Windows.Name: + case KnownPlatforms.UniversalWindowsPlatform.Name: return "start-live-link__item-template__icon-windows"; - case LinuxPlatform _: - case MacOSXPlatform _: + case KnownPlatforms.Linux.Name: + case KnownPlatforms.macOS.Name: return "start-live-link__item-template__icon-standalone"; - case XboxOnePlatform _: + case KnownPlatforms.XboxOne.Name: return "start-live-link__item-template__icon-xboxOne"; - case IosPlatform _: + case KnownPlatforms.iOS.Name: return "start-live-link__item-template__icon-iOS"; - case AndroidPlatform _: + case KnownPlatforms.Android.Name: return "start-live-link__item-template__icon-android"; - case WebGLPlatform _: + case KnownPlatforms.WebGL.Name: return "start-live-link__item-template__icon-webGL"; - case PS4Platform _: + case KnownPlatforms.PlayStation4.Name: return "start-live-link__item-template__icon-ps4"; - case TvosPlatform _: + case KnownPlatforms.tvOS.Name: return "start-live-link__item-template__icon-tvOS"; - case SwitchPlatform _: + case KnownPlatforms.Switch.Name: return "start-live-link__item-template__icon-switch"; - case LuminPlatform _: + case KnownPlatforms.Lumin.Name: return "start-live-link__item-template__icon-lumin"; + default: + return "start-live-link__item-template__icon-noTarget"; } - - return null; } static string StripAnyHtmlTag(string input) => Regex.Replace(input, "<.*?>", string.Empty); diff --git a/Unity.Entities.Editor/PostprocessedILInspector/PostprocessedILWindow.cs b/Unity.Entities.Editor/PostprocessedILInspector/PostprocessedILWindow.cs index 28a44be5..6c855ee1 100644 --- a/Unity.Entities.Editor/PostprocessedILInspector/PostprocessedILWindow.cs +++ b/Unity.Entities.Editor/PostprocessedILInspector/PostprocessedILWindow.cs @@ -102,11 +102,7 @@ private void RegisterCallbacks() var generatedTypesListView = rootVisualElement.Q("Scripts ListView"); SetupListView(generatedTypesListView, FilteredTypes, 15, MakeScriptLabel, BindScriptLabel); generatedTypesListView.selectionType = SelectionType.Single; -#if UNITY_2020_1_OR_NEWER generatedTypesListView.onSelectionChange += OnScriptSelected; -#else - generatedTypesListView.onSelectionChanged += OnScriptSelected; -#endif var searchField = rootVisualElement.Q("Script Search Field"); searchField.RegisterCallback, ListView>(OnFilter, generatedTypesListView); diff --git a/Unity.Entities.Editor/PropertyDrawers/WrappedComponentDataDrawer.cs b/Unity.Entities.Editor/PropertyDrawers/WrappedComponentDataDrawer.cs deleted file mode 100644 index 99af9967..00000000 --- a/Unity.Entities.Editor/PropertyDrawers/WrappedComponentDataDrawer.cs +++ /dev/null @@ -1,31 +0,0 @@ -using UnityEditor; -using UnityEngine; - -namespace Unity.Entities.Editor -{ - [CustomPropertyDrawer(typeof(WrappedComponentDataAttribute))] - sealed class WrappedComponentDataDrawer : PropertyDrawer - { - public override float GetPropertyHeight(SerializedProperty property, GUIContent label) - { - property.isExpanded = true; - return EditorGUI.GetPropertyHeight(property) - - EditorGUIUtility.standardVerticalSpacing - - EditorGUIUtility.singleLineHeight; - } - - public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) - { - var endProperty = property.GetEndProperty(); - var childProperty = property.Copy(); - childProperty.NextVisible(true); - while (!SerializedProperty.EqualContents(childProperty, endProperty)) - { - position.height = EditorGUI.GetPropertyHeight(childProperty); - EditorGUI.PropertyField(position, childProperty, true); - position.y += position.height + EditorGUIUtility.standardVerticalSpacing; - childProperty.NextVisible(false); - } - } - } -} diff --git a/Unity.Entities.Editor/Unity.Entities.Editor.asmdef b/Unity.Entities.Editor/Unity.Entities.Editor.asmdef index 6f32299e..21fdc538 100644 --- a/Unity.Entities.Editor/Unity.Entities.Editor.asmdef +++ b/Unity.Entities.Editor/Unity.Entities.Editor.asmdef @@ -24,8 +24,7 @@ "overrideReferences": true, "precompiledReferences": [ "Mono.Cecil.dll", - "System.Runtime.CompilerServices.Unsafe.dll", - "bee.dll" + "System.Runtime.CompilerServices.Unsafe.dll" ], "autoReferenced": true, "defineConstraints": [], diff --git a/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/AuthoringComponentIntegrationTest.cs b/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/AuthoringComponentIntegrationTest.cs index e954f388..39bccdc9 100644 --- a/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/AuthoringComponentIntegrationTest.cs +++ b/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/AuthoringComponentIntegrationTest.cs @@ -1,7 +1,7 @@ using System; using Mono.Cecil; -using NUnit.Framework; using Unity.Entities.CodeGen.Tests; +using static Unity.Entities.Hybrid.CodeGen.AuthoringComponentPostProcessor; namespace Unity.Entities.Hybrid.CodeGen.Tests { @@ -10,20 +10,14 @@ public abstract class AuthoringComponentIntegrationTest : IntegrationTest protected override string ExpectedPath => "Packages/com.unity.entities/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/IntegrationTests"; - protected void RunAuthoringComponentDataTest(Type type) + protected void RunAuthoringComponentDataPostprocessingTest(Type type) { - TypeDefinition authoringType = - AuthoringComponentPostProcessor.CreateComponentDataAuthoringType(TypeDefinitionFor(type)); - - RunTest(authoringType); + RunPostprocessingTest(CreateComponentDataAuthoringType(TypeDefinitionFor(type))); } - protected void RunAuthoringBufferElementDataTest(Type type) + protected void RunAuthoringBufferElementDataPostprocessingTest(Type type) { - TypeDefinition authoringType = - AuthoringComponentPostProcessor.CreateBufferElementDataAuthoringType(TypeDefinitionFor(type)); - - RunTest(authoringType); + RunPostprocessingTest(CreateBufferElementDataAuthoringType(TypeDefinitionFor(type))); } } } diff --git a/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/IBufferElementDataRuntimeTests.cs b/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/IBufferElementDataRuntimeTests.cs index e86593c5..03f35b46 100644 --- a/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/IBufferElementDataRuntimeTests.cs +++ b/Unity.Entities.Hybrid.CodeGen.Tests/AuthoringComponent/IBufferElementDataRuntimeTests.cs @@ -1,3 +1,4 @@ +#if !ROSLYN_SOURCEGEN_ENABLED using System.Linq; using System.Reflection; using NUnit.Framework; @@ -141,3 +142,4 @@ private DynamicBuffer GetDynamicBufferFromConvertedEntity() where T : stru } } } +#endif diff --git a/Unity.Entities.Hybrid.CodeGen.Tests/Unity.Entities.Hybrid.CodeGen.Tests.asmdef b/Unity.Entities.Hybrid.CodeGen.Tests/Unity.Entities.Hybrid.CodeGen.Tests.asmdef index 94f28ded..621a58ad 100644 --- a/Unity.Entities.Hybrid.CodeGen.Tests/Unity.Entities.Hybrid.CodeGen.Tests.asmdef +++ b/Unity.Entities.Hybrid.CodeGen.Tests/Unity.Entities.Hybrid.CodeGen.Tests.asmdef @@ -30,6 +30,12 @@ "UNITY_INCLUDE_TESTS", "!NET_DOTS" ], - "versionDefines": [], + "versionDefines": [ + { + "name": "com.unity.roslyn", + "expression": "0.0.0-preview.3", + "define": "ROSLYN_SOURCEGEN_ENABLED" + } + ], "noEngineReferences": false -} \ No newline at end of file +} diff --git a/Unity.Entities.Hybrid.CodeGen/AuthoringComponent/AuthoringComponentPostProcessor_Shared.cs b/Unity.Entities.Hybrid.CodeGen/AuthoringComponent/AuthoringComponentPostProcessor_Shared.cs index 224ecdd5..f5cff2fb 100644 --- a/Unity.Entities.Hybrid.CodeGen/AuthoringComponent/AuthoringComponentPostProcessor_Shared.cs +++ b/Unity.Entities.Hybrid.CodeGen/AuthoringComponent/AuthoringComponentPostProcessor_Shared.cs @@ -1,3 +1,5 @@ +using System; +using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using Mono.Cecil; @@ -9,23 +11,31 @@ namespace Unity.Entities.Hybrid.CodeGen { internal partial class AuthoringComponentPostProcessor : EntitiesILPostProcessor { - private bool HasGenerateAuthoringComponentAttribute(TypeDefinition typeDefinition) - { - return typeDefinition.HasCustomAttributes - && typeDefinition.CustomAttributes.Any( - c => c.AttributeType.Name == nameof(GenerateAuthoringComponentAttribute)); - } +#if !ROSLYN_SOURCEGEN_ENABLED + private bool _isRunningTests; + private TypeDefinition _typeToTest; +#endif - private bool ShouldGenerateAuthoringComponentForBufferElementData(TypeDefinition typeDefinition) + private enum Interface { - return typeDefinition.Interfaces.Any(i => i.InterfaceType.Name == nameof(IBufferElementData)) && - HasGenerateAuthoringComponentAttribute(typeDefinition); + IComponentData, + IBufferElementData, + None } - private bool ShouldGenerateComponentDataAuthoringComponent(TypeDefinition typeDefinition) + private static Interface GetAuthoringComponentTypeInterface(TypeDefinition typeDefinition) { - return typeDefinition.Interfaces.Any(i => i.InterfaceType.Name == nameof(IComponentData)) && - HasGenerateAuthoringComponentAttribute(typeDefinition); + if (typeDefinition.Interfaces.Any(i => i.InterfaceType.Name == nameof(IBufferElementData))) + { + return Interface.IBufferElementData; + } + + if (typeDefinition.Interfaces.Any(i => i.InterfaceType.Name == nameof(IComponentData))) + { + return Interface.IComponentData; + } + + return Interface.None; } static TypeDefinition CreateAuthoringType(TypeDefinition componentType) @@ -45,31 +55,63 @@ static TypeDefinition CreateAuthoringType(TypeDefinition componentType) return authoringType; } - protected override bool PostProcessImpl(TypeDefinition[] componentSystemTypes) +#if !ROSLYN_SOURCEGEN_ENABLED + private static AuthoringComponentPostProcessor TestPostProcessor(TypeDefinition typeDefinition) + { + return new AuthoringComponentPostProcessor + { + _isRunningTests = true, + _typeToTest = typeDefinition + }; + } + + internal static bool RunTest(TypeDefinition typeDefinitionToTest) { - var mainModule = AssemblyDefinition.MainModule; + return TestPostProcessor(typeDefinitionToTest).PostProcessImpl(new TypeDefinition[0]); + } +#endif - TypeDefinition[] componentDataTypesRequiringAuthoringComponent = - mainModule.Types.Where(ShouldGenerateComponentDataAuthoringComponent).ToArray(); - TypeDefinition[] bufferElementTypesRequiringAuthoringComponent = - mainModule.Types.Where(ShouldGenerateAuthoringComponentForBufferElementData).ToArray(); + protected override bool PostProcessImpl(TypeDefinition[] _) + { +#if ROSLYN_SOURCEGEN_ENABLED + return false; +#else + TypeDefinition[] typesWithGenerateAuthoringComponentAttribute = + _isRunningTests + ? new []{_typeToTest} + : AssemblyDefinition.MainModule.Types.Where(HasGenerateAuthoringComponentAttribute).ToArray(); - if (componentDataTypesRequiringAuthoringComponent.Length == 0 - && bufferElementTypesRequiringAuthoringComponent.Length == 0) + if (typesWithGenerateAuthoringComponentAttribute.Length == 0) { return false; } - foreach (var componentDataType in componentDataTypesRequiringAuthoringComponent) + foreach (TypeDefinition typeDefinition in typesWithGenerateAuthoringComponentAttribute) { - CreateComponentDataAuthoringType(componentDataType); + Interface @interface = GetAuthoringComponentTypeInterface(typeDefinition); + switch (@interface) + { + case Interface.IComponentData: + CreateComponentDataAuthoringType(typeDefinition); + break; + case Interface.IBufferElementData: + CreateBufferElementDataAuthoringType(typeDefinition); + break; + default: + UserError.DC3003(typeDefinition).Throw(); + break; + } } + return true; - foreach (var bufferElementType in bufferElementTypesRequiringAuthoringComponent) + + bool HasGenerateAuthoringComponentAttribute(TypeDefinition typeDefinition) { - CreateBufferElementDataAuthoringType(bufferElementType); + return typeDefinition.HasCustomAttributes + && typeDefinition.CustomAttributes.Any(c => + c.AttributeType.Name == nameof(GenerateAuthoringComponentAttribute)); } - return true; +#endif } static MethodDefinition CreateEmptyConvertMethod(ModuleDefinition componentDataModule, TypeDefinition authoringType) diff --git a/Unity.Entities.Hybrid.CodeGen/Unity.Entities.Hybrid.CodeGen.asmdef b/Unity.Entities.Hybrid.CodeGen/Unity.Entities.Hybrid.CodeGen.asmdef index b5ded6e3..4d5e8f78 100644 --- a/Unity.Entities.Hybrid.CodeGen/Unity.Entities.Hybrid.CodeGen.asmdef +++ b/Unity.Entities.Hybrid.CodeGen/Unity.Entities.Hybrid.CodeGen.asmdef @@ -22,6 +22,12 @@ "defineConstraints": [ "!NET_DOTS" ], - "versionDefines": [], + "versionDefines": [ + { + "name": "com.unity.roslyn", + "expression": "0.0.0-preview.2", + "define": "ROSLYN_SOURCEGEN_ENABLED" + } + ], "noEngineReferences": false } \ No newline at end of file diff --git a/Unity.Entities.Hybrid.EndToEnd.Tests/TestUtilities.cs b/Unity.Entities.Hybrid.EndToEnd.Tests/TestUtilities.cs index 6cdefc16..8a03462b 100644 --- a/Unity.Entities.Hybrid.EndToEnd.Tests/TestUtilities.cs +++ b/Unity.Entities.Hybrid.EndToEnd.Tests/TestUtilities.cs @@ -27,6 +27,7 @@ public static void RegisterSystems(World world, SystemCategories categories) typeof(SceneSystemGroup), typeof(SceneSystem), typeof(ResolveSceneReferenceSystem), + typeof(GameObjectSceneSystem), typeof(SceneSectionStreamingSystem) }); } @@ -42,6 +43,11 @@ public static void RegisterSystems(World world, SystemCategories categories) }); } #endif + + systems.AddRange(new[] + { + typeof(RetainBlobAssetSystem), + }); DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups(world, systems); } diff --git a/Unity.Entities.Hybrid.PerformanceTests/IncrementalConversionPerformanceTests.cs b/Unity.Entities.Hybrid.PerformanceTests/IncrementalConversionPerformanceTests.cs new file mode 100644 index 00000000..9052ee0b --- /dev/null +++ b/Unity.Entities.Hybrid.PerformanceTests/IncrementalConversionPerformanceTests.cs @@ -0,0 +1,137 @@ +#if UNITY_2020_2_OR_NEWER +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using Unity.Collections; +using Unity.Entities.Tests; +using Unity.Entities.Tests.Conversion; +using Unity.PerformanceTesting; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace Unity.Entities.Hybrid.PerformanceTests +{ + [TestFixture] + public class IncrementalConversionPerformanceTests + { + private TestWithObjects _Objects; + private World DestinationWorld; + private World ConversionWorld; + + [SetUp] + public void SetUp() + { + _Objects.SetUp(); + DestinationWorld = new World("Test World"); + } + + [TearDown] + public void TearDown() + { + ConversionWorld?.Dispose(); + DestinationWorld.Dispose(); + _Objects.TearDown(); + } + + [OneTimeSetUp] + public void SetUpOnce() + { + var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene); + SceneManager.SetActiveScene(scene); + } + + [OneTimeTearDown] + public void TearDownOnce() + { + EditorSceneManager.NewScene(NewSceneSetup.EmptyScene); + } + + void InitializeIncrementalConversion() + { + var settings = new GameObjectConversionSettings(DestinationWorld, ConversionFlags) + { + Systems = TestWorldSetup.GetDefaultInitSystemsFromEntitiesPackage(WorldSystemFilterFlags.GameObjectConversion).ToList() + }; + ConversionWorld = GameObjectConversionUtility.InitializeIncrementalConversion(SceneManager.GetActiveScene(), settings); + } + + private const GameObjectConversionUtility.ConversionFlags ConversionFlags = + GameObjectConversionUtility.ConversionFlags.GameViewLiveLink | + GameObjectConversionUtility.ConversionFlags.AddEntityGUID; + + static void SwapDeleteAndReconvert(ref IncrementalConversionBatch batch) + { + var tmp = batch.DeletedInstanceIds; + batch.DeletedInstanceIds = batch.ReconvertHierarchyInstanceIds; + batch.ReconvertHierarchyInstanceIds = tmp; + } + + [Test, Performance] + public void IncrementalConversionPerformance_CreateGameObjects([Values(1000)]int n) + { + InitializeIncrementalConversion(); + var reconvert = new NativeArray(n, Allocator.TempJob); + var args = new IncrementalConversionBatch + { + ReconvertHierarchyInstanceIds = reconvert, + }; + args.EnsureFullyInitialized(); + var objs = new List(); + + Measure.Method(() => + { + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + }).SetUp(() => + { + foreach (var go in objs) + Object.DestroyImmediate(go); + SwapDeleteAndReconvert(ref args); + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + for (int i = 0; i < n; i++) + { + var obj = _Objects.CreateGameObject(); + objs.Add(obj); + reconvert[i] = obj.GetInstanceID(); + } + + SwapDeleteAndReconvert(ref args); + }).MeasurementCount(30).Run(); + args.Dispose(); + } + + [Test, Performance] + public void IncrementalConversionPerformance_RemoveGameObjects([Values(1000)]int n) + { + InitializeIncrementalConversion(); + + var instanceIds = new NativeArray(n, Allocator.TempJob); + var objs = new List(); + var args = new IncrementalConversionBatch + { + DeletedInstanceIds = instanceIds, + }; + args.EnsureFullyInitialized(); + + Measure.Method(() => + { + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + }).SetUp(() => + { + for (int i = 0; i < n; i++) + { + var obj = _Objects.CreateGameObject(); + objs.Add(obj); + instanceIds[i] = obj.GetInstanceID(); + } + SwapDeleteAndReconvert(ref args); + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + SwapDeleteAndReconvert(ref args); + foreach (var go in objs) + Object.DestroyImmediate(go); + }).MeasurementCount(30).Run(); + args.Dispose(); + } + } +} +#endif diff --git a/Unity.Entities.Hybrid.PerformanceTests/IncrementalConversionPerformanceTests.cs.meta b/Unity.Entities.Hybrid.PerformanceTests/IncrementalConversionPerformanceTests.cs.meta new file mode 100644 index 00000000..690d583c --- /dev/null +++ b/Unity.Entities.Hybrid.PerformanceTests/IncrementalConversionPerformanceTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9fafcafefa1d43eb892f97faea71bf62 +timeCreated: 1601563116 \ No newline at end of file diff --git a/Unity.Entities.Hybrid.Tests/AssemblyInfo.cs b/Unity.Entities.Hybrid.Tests/AssemblyInfo.cs index d9d0db9f..70998214 100644 --- a/Unity.Entities.Hybrid.Tests/AssemblyInfo.cs +++ b/Unity.Entities.Hybrid.Tests/AssemblyInfo.cs @@ -4,6 +4,7 @@ [assembly: DisableAutoCreation] [assembly: InternalsVisibleTo("Unity.Entities.Editor.Tests")] [assembly: InternalsVisibleTo("Unity.Entities.Hybrid.CodeGen.Tests")] +[assembly: InternalsVisibleTo("Unity.Entities.Hybrid.PerformanceTests")] [assembly: InternalsVisibleTo("Unity.Scenes.Editor.Tests")] [assembly: InternalsVisibleTo("Unity.Entities.Runtime.Build.Tests")] [assembly: InternalsVisibleTo("Unity.Transforms.Hybrid.Tests")] diff --git a/Unity.Entities.Hybrid.Tests/ComponentDataProxy_EntityManager_IntegrationTests.cs b/Unity.Entities.Hybrid.Tests/ComponentDataProxy_EntityManager_IntegrationTests.cs deleted file mode 100644 index 2a7086c0..00000000 --- a/Unity.Entities.Hybrid.Tests/ComponentDataProxy_EntityManager_IntegrationTests.cs +++ /dev/null @@ -1,170 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using NUnit.Framework; -using NUnit.Framework.Constraints; -using UnityEditor; -using UnityEngine; - -namespace Unity.Entities.Tests -{ -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - class ComponentDataProxy_EntityManager_IntegrationTests - { - GameObjectEntity m_GameObjectEntity; - Entity Entity { get { return m_GameObjectEntity.Entity; } } - EntityManager Manager { get { return m_GameObjectEntity.EntityManager; } } - - [SetUp] - public void SetUp() - { - m_GameObjectEntity = - new GameObject(TestContext.CurrentContext.Test.Name, typeof(GameObjectEntity)).GetComponent(); - } - - [TearDown] - public void TearDown() - { - if (m_GameObjectEntity.gameObject != null) - GameObject.DestroyImmediate(m_GameObjectEntity.gameObject); - } - - public delegate object MockGetter(ComponentDataProxyBase proxy); - - static object GetMockData(ComponentDataProxyBase proxy) => - (proxy as MockDataProxy).Value; - - static object GetMockSharedData(ComponentDataProxyBase proxy) => - (proxy as MockSharedDataProxy).Value; - - static object GetMockDynamicBufferData(ComponentDataProxyBase proxy) => - (proxy as MockDynamicBufferDataProxy).Value; - - public delegate void MockSetter(ComponentDataProxyBase proxy, object value); - - static void SetMockData(ComponentDataProxyBase proxy, object value) => - (proxy as MockDataProxy).Value = (MockData)value; - - static void SetMockSharedData(ComponentDataProxyBase proxy, object value) => - (proxy as MockSharedDataProxy).Value = (MockSharedData)value; - - static void SetMockDynamicBufferData(ComponentDataProxyBase proxy, object value) => - (proxy as MockDynamicBufferDataProxy).SetValue((IReadOnlyList)value); - - static readonly TestCaseData[] k_SetValueSyncTestCases = - { - new TestCaseData( - typeof(MockDataProxy), - Is.EqualTo(default(MockData)), - new MockData { Value = 1 }, - (MockSetter)SetMockData, (MockGetter)GetMockData - ).SetName("Sync ComponentDataProxy"), - new TestCaseData( - typeof(MockSharedDataProxy), - Is.EqualTo(default(MockSharedData)), - new MockSharedData { Value = 1 }, - (MockSetter)SetMockSharedData, (MockGetter)GetMockSharedData - ).SetName("Sync SharedComponentDataProxy"), - new TestCaseData( - typeof(MockDynamicBufferDataProxy), - Is.Empty, - Enumerable.Range(1, 3).Select(i => new MockDynamicBufferData { Value = i }).ToArray(), - (MockSetter)SetMockDynamicBufferData, (MockGetter)GetMockDynamicBufferData - ).SetName("Sync DynamicBufferProxy") - }; - - [TestCaseSource(nameof(k_SetValueSyncTestCases))] - public void ComponentDataProxy_SetValue_SynchronizesWithEntityManager( - Type proxyType, Constraint isDefaultValue, object expectedValue, MockSetter setValue, MockGetter getValue - ) - { - var proxy = m_GameObjectEntity.gameObject.AddComponent(proxyType) as ComponentDataProxyBase; - EntityManager entityManager; - Entity entity; - Assume.That( - proxy.CanSynchronizeWithEntityManager(out entityManager, out entity), Is.True, - "EntityManager is not in correct state in arrangement for synchronization to occur" - ); - var defaultValue = getValue(proxy); - Assume.That( - defaultValue, isDefaultValue, - $"{proxy.GetType()} did not initialize with default value in arrangement" - ); - - setValue(proxy, expectedValue); - new SerializedObject(proxy); - - var actual = getValue(proxy); - Assert.That(actual, Is.EqualTo(expectedValue), $"Value was reset after deserializing {proxyType}"); - } - - static readonly TestCaseData[] k_InvalidManagerSyncTestCases = - { - new TestCaseData( - typeof(MockDataProxy), - new MockData { Value = 1 }, - (MockSetter)SetMockData, (MockGetter)GetMockData - ).SetName("Sync ComponentDataProxy (Invalid Manager)"), - new TestCaseData( - typeof(MockSharedDataProxy), - new MockSharedData { Value = 1 }, - (MockSetter)SetMockSharedData, (MockGetter)GetMockSharedData - ).SetName("Sync SharedComponentDataProxy (Invalid Manager)"), - new TestCaseData( - typeof(MockDynamicBufferDataProxy), - Enumerable.Range(1, 3).Select(i => new MockDynamicBufferData { Value = i }).ToArray(), - (MockSetter)SetMockDynamicBufferData, (MockGetter)GetMockDynamicBufferData - ).SetName("Sync DynamicBufferProxy (InvalidManager)") - }; - - [Test] - public void AddComponentDataProxy_WhenGameObjectEntityAlreadyActive_EntityManagerHasComponent() - { - Assume.That(Manager.Exists(Entity)); - - m_GameObjectEntity.gameObject.AddComponent(); - - Assert.That(Manager.HasComponent(Entity, typeof(MockData)), Is.True, "No data after adding proxy."); - } - - [Test] - public void DestroyComponentDataProxy_WhenGameObjectEntityAlreadyActive_EntityManagerDoesNotHaveComponent() - { - Assume.That(Manager.Exists(Entity)); - var c = m_GameObjectEntity.gameObject.AddComponent(); - Assume.That(Manager.HasComponent(Entity, typeof(MockData)), Is.True, "No data after adding proxy."); - - Component.DestroyImmediate(c); - - Assert.That(Manager.HasComponent(Entity, typeof(MockData)), Is.False, "Data after destroying proxy."); - } - - [Test] - public void DisableComponentDataProxy_WhenGameObjectEntityAlreadyActive_EntityManagerDoesNotHaveComponent() - { - Assume.That(Manager.Exists(Entity)); - var c = m_GameObjectEntity.gameObject.AddComponent(); - Assume.That(Manager.HasComponent(Entity, typeof(MockData)), Is.True, "No data after adding proxy."); - - c.enabled = false; - - Assert.That(Manager.HasComponent(Entity, typeof(MockData)), Is.False, "Data exists after disabling proxy."); - } - - [Test] - public void ReEnableComponentDataProxy_WhenGameObjectEntityAlreadyActive_EntityManagerHasComponent() - { - Assume.That(Manager.Exists(Entity)); - var c = m_GameObjectEntity.gameObject.AddComponent(); - Assume.That(Manager.HasComponent(Entity, typeof(MockData)), Is.True, "No data after adding proxy."); - c.enabled = false; - Assume.That(Manager.HasComponent(Entity, typeof(MockData)), Is.False, "Data exists after disabling proxy."); - - c.enabled = true; - - Assert.That(Manager.HasComponent(Entity, typeof(MockData)), Is.True, "No data after re-enabling proxy."); - } - } -#pragma warning restore 618 -} diff --git a/Unity.Entities.Hybrid.Tests/ComponentDataProxy_UnitTests.cs b/Unity.Entities.Hybrid.Tests/ComponentDataProxy_UnitTests.cs deleted file mode 100644 index e7510fdb..00000000 --- a/Unity.Entities.Hybrid.Tests/ComponentDataProxy_UnitTests.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using NUnit.Framework; -using UnityEngine; - -namespace Unity.Entities.Tests -{ -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - class ComponentDataProxy_UnitTests - { - static bool IsSubclassOfOpenGenericType(Type type, Type genericType) - { - if (type.IsSubclassOf(genericType)) - return true; - while (type != null && type != typeof(object)) - { - var cur = type.IsGenericType ? type.GetGenericTypeDefinition() : type; - if (genericType == cur) - return true; - type = type.BaseType; - } - return false; - } - - static IEnumerable GetAllSubTypes(Type genericType) - { - var result = new List(); - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) - { - try - { - result.AddRange( - assembly.GetTypes() - .Where(t => - !t.IsAbstract - && !t.IsGenericType - && IsSubclassOfOpenGenericType(t, genericType) - ) - ); - } - // ignore if error loading some type from a dll - catch (ReflectionTypeLoadException) {} - } - return result; - } - - static readonly IEnumerable k_AllComponentDataProxyTypes = - GetAllSubTypes(typeof(ComponentDataProxy<>)).Select(t => new TestCaseData(t).SetName(t.FullName)); - - [TestCaseSource(nameof(k_AllComponentDataProxyTypes))] - public void AllComponentDataProxies_DisallowMultipleComponent(Type type) - { - Assert.That(Attribute.IsDefined(type, typeof(DisallowMultipleComponent)), Is.True); - } - - static readonly IEnumerable k_AllSharedComponentDataProxyTypes = - GetAllSubTypes(typeof(SharedComponentDataProxy<>)) - .Where(t => t != typeof(MockSharedDisallowMultipleProxy)) // ignore mock for other test - .Select(t => new TestCaseData(t).SetName(t.FullName)); - - // currently enforced due to implementation of SerializeUtilityHybrid - // ideally all types should ultimately have DisallowMultipleComponent - [TestCaseSource(nameof(k_AllSharedComponentDataProxyTypes))] - public void NoSharedComponentDataProxies_DisallowMultipleComponent(Type type) - { - Assert.That(Attribute.IsDefined(type, typeof(DisallowMultipleComponent)), Is.False); - } - - static readonly IEnumerable k_AllDynamicBufferProxyTypes = - GetAllSubTypes(typeof(DynamicBufferProxy<>)).Select(t => new TestCaseData(t).SetName(t.FullName)); - - [TestCaseSource(nameof(k_AllDynamicBufferProxyTypes))] - public void AllDynamicBufferProxies_DisallowMultipleComponent(Type type) - { - Assert.That(Attribute.IsDefined(type, typeof(DisallowMultipleComponent)), Is.True); - } - } -#pragma warning restore 618 -} diff --git a/Unity.Entities.Hybrid.Tests/ComponentDataProxy_UnitTests.cs.meta b/Unity.Entities.Hybrid.Tests/ComponentDataProxy_UnitTests.cs.meta deleted file mode 100644 index 547266a5..00000000 --- a/Unity.Entities.Hybrid.Tests/ComponentDataProxy_UnitTests.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7b0a3dbaf10734fef8c3c5153f217e7e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.Hybrid.Tests/ComponentGroupTransformAccessArrayTests.cs b/Unity.Entities.Hybrid.Tests/ComponentGroupTransformAccessArrayTests.cs deleted file mode 100644 index 714f6c89..00000000 --- a/Unity.Entities.Hybrid.Tests/ComponentGroupTransformAccessArrayTests.cs +++ /dev/null @@ -1,116 +0,0 @@ -using NUnit.Framework; -using UnityEngine; -using UnityEngine.Jobs; -#pragma warning disable 649 - -namespace Unity.Entities.Tests -{ - class ComponentGroupTransformAccessArrayTests : ECSTestsFixture - { - public struct TransformAccessArrayTestTag : IComponentData - { - } - -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - [DisallowMultipleComponent] - [AddComponentMenu("")] - public class TransformAccessArrayTestTagProxy : ComponentDataProxy {} -#pragma warning restore 618 // remove once ComponentDataProxyBase is removed - - [Test] - public void EmptyTransformAccessArrayWorks() - { - var group = EmptySystem.GetEntityQuery(typeof(Transform), typeof(TransformAccessArrayTestTag)); - var ta = group.GetTransformAccessArray(); - Assert.AreEqual(0, ta.length); - } - - [Test] - public void SingleItemTransformAccessArrayWorks() - { - var go = new GameObject(); - go.AddComponent(); - var group = EmptySystem.GetEntityQuery(typeof(Transform), typeof(TransformAccessArrayTestTag)); - var ta = group.GetTransformAccessArray(); - Assert.AreEqual(1, ta.length); - - Object.DestroyImmediate(go); - } - - [Test] - public void AddAndGetNewTransformAccessArrayUpdatesContent() - { - var go = new GameObject(); - go.AddComponent(); - var group = EmptySystem.GetEntityQuery(typeof(Transform), typeof(TransformAccessArrayTestTag)); - var ta = group.GetTransformAccessArray(); - Assert.AreEqual(1, ta.length); - - var go2 = new GameObject(); - go2.AddComponent(); - ta = group.GetTransformAccessArray(); - Assert.AreEqual(2, ta.length); - - Object.DestroyImmediate(go); - Object.DestroyImmediate(go2); - } - - [Test] - // The atomic safety handle of TransformAccessArrays are not invalidated when injection changes, the array represents the transforms when you got it - public void AddAndUseOldTransformAccessArrayDoesNotUpdateContent() - { - var go = new GameObject(); - go.AddComponent(); - var group = EmptySystem.GetEntityQuery(typeof(Transform), typeof(TransformAccessArrayTestTag)); - var ta = group.GetTransformAccessArray(); - Assert.AreEqual(1, ta.length); - - var go2 = new GameObject(); - go2.AddComponent(); - Assert.AreEqual(1, ta.length); - - Object.DestroyImmediate(go); - Object.DestroyImmediate(go2); - } - - [Test] - public void DestroyAndGetNewTransformAccessArrayUpdatesContent() - { - var go = new GameObject(); - go.AddComponent(); - var go2 = new GameObject(); - go2.AddComponent(); - - var group = EmptySystem.GetEntityQuery(typeof(Transform), typeof(TransformAccessArrayTestTag)); - var ta = group.GetTransformAccessArray(); - Assert.AreEqual(2, ta.length); - - Object.DestroyImmediate(go); - - ta = group.GetTransformAccessArray(); - Assert.AreEqual(1, ta.length); - - Object.DestroyImmediate(go2); - } - - [Test] - // The atomic safety handle of TransformAccessArrays are not invalidated when injection changes, the array represents the transforms when you got it - public void DestroyAndUseOldTransformAccessArrayDoesNotUpdateContent() - { - var go = new GameObject(); - go.AddComponent(); - var go2 = new GameObject(); - go2.AddComponent(); - - var group = EmptySystem.GetEntityQuery(typeof(Transform), typeof(TransformAccessArrayTestTag)); - var ta = group.GetTransformAccessArray(); - Assert.AreEqual(2, ta.length); - - Object.DestroyImmediate(go); - - Assert.AreEqual(2, ta.length); - - Object.DestroyImmediate(go2); - } - } -} diff --git a/Unity.Entities.Hybrid.Tests/ComponentGroupTransformAccessArrayTests.cs.meta b/Unity.Entities.Hybrid.Tests/ComponentGroupTransformAccessArrayTests.cs.meta deleted file mode 100644 index 719dbb5b..00000000 --- a/Unity.Entities.Hybrid.Tests/ComponentGroupTransformAccessArrayTests.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 920744fb267a2406b90d6a988379cc79 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.Hybrid.Tests/Conversion/AuthoringObjectForEntityTests.cs b/Unity.Entities.Hybrid.Tests/Conversion/AuthoringObjectForEntityTests.cs new file mode 100644 index 00000000..1df52a8a --- /dev/null +++ b/Unity.Entities.Hybrid.Tests/Conversion/AuthoringObjectForEntityTests.cs @@ -0,0 +1,98 @@ +using NUnit.Framework; +using Unity.Collections; +using UnityEngine; + +namespace Unity.Entities.Tests.Conversion +{ + class AuthoringObjectForEntityTests : ConversionTestFixtureBase + { + GameObjectConversionSettings MakeWithEntityGUID() + { + var settings = MakeDefaultSettings(); + settings.ConversionFlags |= GameObjectConversionUtility.ConversionFlags.AddEntityGUID; + return settings; + } + + class CreatePrimaryEntitySystem : GameObjectConversionSystem + { + protected override void OnUpdate() + { + Entities.ForEach((Transform t) => + { + var e = GetPrimaryEntity(t); + DstEntityManager.AddComponent(e); + }); + } + } + + class CreateAdditionalEntitySystem : GameObjectConversionSystem + { + protected override void OnUpdate() + { + Entities.ForEach((Transform t) => + { + var e = CreateAdditionalEntity(t); + DstEntityManager.AddComponent(e); + }); + } + } + + [Test] + public void GetAuthoringObjectForEntityWorks() + { + var go = CreateGameObject(); + var child = CreateGameObject(); + child.transform.parent = go.transform; + + var entity = GameObjectConversionUtility.ConvertGameObjectHierarchy(go, MakeWithEntityGUID().WithExtraSystem()); + Assert.AreEqual(2, m_Manager.GetBuffer(entity).Length); + var childEntity = m_Manager.GetBuffer(entity)[1].Value; + + Assert.AreEqual(go, m_Manager.Debug.GetAuthoringObjectForEntity(entity)); + Assert.AreEqual(child, m_Manager.Debug.GetAuthoringObjectForEntity(childEntity)); + + using (var entities = new NativeList(Allocator.TempJob)) + { + m_Manager.Debug.GetEntitiesForAuthoringObject(go, entities); + Assert.AreEqual(new []{entity}, entities.ToArray()); + + m_Manager.Debug.GetEntitiesForAuthoringObject(child, entities); + Assert.AreEqual(new []{childEntity}, entities.ToArray()); + } + } + + [Test] + public void GetAuthoringObjectForMultipleEntityWorks() + { + var go = CreateGameObject(); + + var rootEntity = GameObjectConversionUtility.ConvertGameObjectHierarchy(go, MakeWithEntityGUID().WithExtraSystems()); + Assert.AreEqual(2, m_Manager.GetBuffer(rootEntity).Length); + var linkedEntities = m_Manager.GetBuffer(rootEntity).Reinterpret().AsNativeArray().ToArray(); + + foreach (var e in linkedEntities) + Assert.AreEqual(go, m_Manager.Debug.GetAuthoringObjectForEntity(e)); + + using (var entities = new NativeList(Allocator.TempJob)) + { + m_Manager.Debug.GetEntitiesForAuthoringObject(go, entities); + Assert.AreEqual(linkedEntities, entities.ToArray()); + } + } + + [Test] + public void GetAuthoringObjectForUnknownEntityWorks() + { + var go = CreateGameObject(); + var entity = m_Manager.CreateEntity(); + + using (var entities = new NativeList(Allocator.TempJob)) + { + m_Manager.Debug.GetEntitiesForAuthoringObject(go, entities); + + Assert.AreEqual(0, entities.Length); + Assert.AreEqual(null, m_Manager.Debug.GetAuthoringObjectForEntity(entity)); + } + } + } +} diff --git a/Unity.Entities.Hybrid.Tests/Conversion/AuthoringObjectForEntityTests.cs.meta b/Unity.Entities.Hybrid.Tests/Conversion/AuthoringObjectForEntityTests.cs.meta new file mode 100644 index 00000000..71a2e9a4 --- /dev/null +++ b/Unity.Entities.Hybrid.Tests/Conversion/AuthoringObjectForEntityTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 893e9d37c09c41c0ab09cbdec74c5910 +timeCreated: 1604313835 \ No newline at end of file diff --git a/Unity.Entities.Hybrid.Tests/Conversion/BlobAssetStoreTests.cs b/Unity.Entities.Hybrid.Tests/Conversion/BlobAssetStoreTests.cs index 7b361187..2e434d4a 100644 --- a/Unity.Entities.Hybrid.Tests/Conversion/BlobAssetStoreTests.cs +++ b/Unity.Entities.Hybrid.Tests/Conversion/BlobAssetStoreTests.cs @@ -124,6 +124,25 @@ public unsafe void TestCacheClearWithoutDispose() Assert.DoesNotThrow(() => a1.GetUnsafePtr()); } + [Test] + public void AddUniqueBlobAsset() + { + var a0 = BlobAssetReference.Create(0); + var a0Duplicate = BlobAssetReference.Create(0); + var a1 = BlobAssetReference.Create(1); + var a0Float = BlobAssetReference.Create(0); + + Assert.IsTrue(m_Store.AddUniqueBlobAsset(ref a0)); + Assert.IsFalse(m_Store.AddUniqueBlobAsset(ref a0Duplicate)); + Assert.IsTrue(m_Store.AddUniqueBlobAsset(ref a1)); + Assert.IsTrue(m_Store.AddUniqueBlobAsset(ref a0Float)); + + Assert.AreEqual(0, a0.Value); + Assert.AreEqual(0, a0Duplicate.Value); + Assert.AreEqual(1, a1.Value); + Assert.AreEqual(0.0F, a0Float.Value); + } + [Test] public void BlobPerOwnerTest() { diff --git a/Unity.Entities.Hybrid.Tests/Conversion/ConversionDependencyTests.cs b/Unity.Entities.Hybrid.Tests/Conversion/ConversionDependencyTests.cs index 9595e46a..d4300021 100644 --- a/Unity.Entities.Hybrid.Tests/Conversion/ConversionDependencyTests.cs +++ b/Unity.Entities.Hybrid.Tests/Conversion/ConversionDependencyTests.cs @@ -1,7 +1,6 @@ using System; using NUnit.Framework; using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; using Unity.Entities.Conversion; using UnityEngine; @@ -22,35 +21,34 @@ class ConversionDependencyTests : ConversionTestFixtureBase m_Dependencies.Dispose(); } - void AssertDependencyExists(UnsafeMultiHashMap map, T key, GameObject dependent) where T : unmanaged, IEquatable - => AssertDependencyExists(m_Dependencies, map, key, dependent); - - static void AssertDependencyExists(ConversionDependencies dependencies, UnsafeMultiHashMap map, T key, GameObject dependent) where T : unmanaged, IEquatable + static void AssertDependencyExists(DependencyTracker tracker, int key, GameObject dependent) { - if (!dependencies.GameObjectIndexByInstanceId.TryGetValue(dependent.GetInstanceID(), out int idx)) - Assert.Fail($"The conversion system didn't store the dependent game object {dependent.name}."); - Assert.AreEqual(dependent, dependencies.DependentGameObjects[idx]); - if (!map.TryGetFirstValue(key, out var value, out _)) - Assert.Fail("The dependent wasn't registered to the key of the dependency."); - Assert.AreEqual(idx, value); + var dependents = tracker.GetAllDependents(key); + int id = dependent.GetInstanceID(); + while (dependents.MoveNext()) + { + if (id == dependents.Current) + { + return; + } + } + Assert.Fail("The dependent wasn't registered to the key of the dependency."); } [Test] - public void GameObjectDependencies_AreCollected_WhenLiveLinked([Values] bool isLiveLink) + public void GameObjectDependencies_AreCollected_WhenLiveLinked() { var goA = CreateGameObject("A"); var goB = CreateGameObject("B"); - using (var dep = new ConversionDependencies(isLiveLink)) + var dep = new ConversionDependencies(true); + try { dep.DependOnGameObject(goA, goB); - - if (isLiveLink) - AssertDependencyExists(dep, dep.GameObjectDependentsByInstanceId, goB.GetInstanceID(), goA); - else - { - CollectionAssert.IsEmpty(dep.DependentGameObjects); - Assert.IsFalse(dep.GameObjectDependentsByInstanceId.IsCreated); - } + AssertDependencyExists(dep.GameObjectDependencyTracker, goB.GetInstanceID(), goA); + } + finally + { + dep.Dispose(); } } @@ -58,9 +56,13 @@ public void GameObjectDependencies_AreCollected_WhenLiveLinked([Values] bool isL public void GameObjectDependencies_WithInvalidDependent_Throws() => Assert.Throws(() => m_Dependencies.DependOnGameObject(null, CreateGameObject("Test"))); - [Test] - public void GameObjectDependencies_WithInvalidDependency_Throws() - => Assert.Throws(() => m_Dependencies.DependOnGameObject(CreateGameObject("Test"), null)); + private void CalculateDependents(int instanceId, NativeHashSet outDependents) + { + using (var arr = new NativeArray(1, Allocator.Persistent) {[0] = instanceId}) + { + m_Dependencies.CalculateDependents(arr, outDependents); + } + } [Test] public void GameObjectDependencies_CalculateDependents_TransitiveDependentsAreIncluded() @@ -71,28 +73,176 @@ public void GameObjectDependencies_CalculateDependents_TransitiveDependentsAreIn m_Dependencies.DependOnGameObject(goA, goB); m_Dependencies.DependOnGameObject(goB, goC); - var dependents = m_Dependencies.CalculateDependents(new[] { goC }); - Assert.AreEqual(3, dependents.Count); - Assert.IsTrue(dependents.Contains(goA), "Failed to include transitive dependency"); - Assert.IsTrue(dependents.Contains(goB), "Failed to include direct dependency"); - Assert.IsTrue(dependents.Contains(goC), "Failed to include self among dependents"); + int instanceId = goC.GetInstanceID(); + var dependents = new NativeHashSet(0, Allocator.Temp); + CalculateDependents(instanceId, dependents); + Assert.IsTrue(dependents.Contains(goA.GetInstanceID()), "Failed to include transitive dependency"); + Assert.IsTrue(dependents.Contains(goB.GetInstanceID()), "Failed to include direct dependency"); + Assert.IsTrue(dependents.Contains(goC.GetInstanceID()), "Failed to include self among dependents"); + Assert.AreEqual(3, dependents.Count()); } [Test] - public void AssetDependencies_AreCollected() + public void GameObjectDependencies_DependOnComponent_RegistersGameObjectDependency() + { + var goA = CreateGameObject("A"); + var goB = CreateGameObject("B"); + + m_Dependencies.DependOnComponent(goA, goB.transform); + int instanceId = goB.GetInstanceID(); + var dependents = new NativeHashSet(0, Allocator.Temp); + CalculateDependents(instanceId, dependents); + Assert.IsTrue(dependents.Contains(goA.GetInstanceID()), "Failed to include direct dependency"); + Assert.IsTrue(dependents.Contains(goB.GetInstanceID()), "Failed to include self among dependents"); + Assert.AreEqual(2, dependents.Count()); + } + + [Test] + public void GameObjectDependencies_ClearDependencies_RemovesDependencies() + { + var goA = CreateGameObject("A"); + var goB = CreateGameObject("B"); + var goC = CreateGameObject("C"); + + m_Dependencies.DependOnGameObject(goA, goB); + m_Dependencies.DependOnGameObject(goB, goC); + var instances = new NativeArray(1, Allocator.Temp) {[0] = goA.GetInstanceID()}; + m_Dependencies.ClearDependencies(instances); + + int instanceId = goC.GetInstanceID(); + var dependents = new NativeHashSet(0, Allocator.Temp); + CalculateDependents(instanceId, dependents); + Assert.IsFalse(dependents.Contains(goA.GetInstanceID()), "Failed to remove dependency"); + Assert.IsTrue(dependents.Contains(goB.GetInstanceID()), "Failed to include direct dependency"); + Assert.IsTrue(dependents.Contains(goC.GetInstanceID()), "Failed to include self among dependents"); + Assert.AreEqual(2, dependents.Count()); + } + + [Test] + public void GameObjectDependencies_CanRegisterDependencyOnTrueNull() + { + var goA = CreateGameObject("A"); + Assert.DoesNotThrow(() => m_Dependencies.DependOnGameObject(goA, null)); + Assert.DoesNotThrow(() => m_Dependencies.DependOnComponent(goA, null)); + } + + [Test] + public void GameObjectDependencies_CanRegisterDependencyOnFakeNullGameObject() + { + var goA = CreateGameObject("A"); + var goB = new GameObject("B"); + UnityEngine.Object.DestroyImmediate(goB); + Assert.IsTrue(goB == null); + + Assert.DoesNotThrow(() => m_Dependencies.DependOnGameObject(goA, goB)); + + var instanceId = goB.GetInstanceID(); + var dependents = new NativeHashSet(0, Allocator.Temp); + CalculateDependents(instanceId, dependents); + Assert.IsTrue(dependents.Contains(goA.GetInstanceID()), "Failed to include direct dependency"); + Assert.IsTrue(dependents.Contains(goB.GetInstanceID()), "Failed to include self among dependents"); + Assert.AreEqual(2, dependents.Count()); + } + + [Test] + public void GameObjectDependencies_CanRegisterDependencyOnFakeNullComponent() + { + var goA = CreateGameObject("A"); + var goB = CreateGameObject("B"); + var c = goB.AddComponent(); + UnityEngine.Object.DestroyImmediate(c); + Assert.IsTrue(c == null); + + Assert.DoesNotThrow(() => m_Dependencies.DependOnComponent(goA, c)); + } + + [Test] + public void GameObjectDependencies_RegisterComponentDependencyTracking_EnablesComponentTracker() + { + Assert.IsFalse(m_Dependencies.TryGetComponentDependencyTracker(out _)); + m_Dependencies.RegisterComponentTypeForDependencyTracking(); + Assert.True(m_Dependencies.TryGetComponentDependencyTracker(out _)); + } + + [Test] + public void GameObjectDependencies_RegisterComponentDependencyTracking_CanBeCalledMultipleTimes() + { + Assert.IsFalse(m_Dependencies.TryGetComponentDependencyTracker(out _)); + m_Dependencies.RegisterComponentTypeForDependencyTracking(); + m_Dependencies.RegisterComponentTypeForDependencyTracking(); + Assert.True(m_Dependencies.TryGetComponentDependencyTracker(out _)); + } + + [Test] + public void GameObjectDependencies_DependOnComponent_WithComponentDependencyTracking_RegistersGameObjectDependency() + { + var goA = CreateGameObject("A"); + var goB = CreateGameObject("B"); + + m_Dependencies.RegisterComponentTypeForDependencyTracking(); + + m_Dependencies.DependOnComponent(goA, goB.transform); + int instanceId = goB.GetInstanceID(); + var dependents = new NativeHashSet(0, Allocator.Temp); + CalculateDependents(instanceId, dependents); + Assert.IsTrue(dependents.Contains(goA.GetInstanceID()), "Failed to include direct dependency"); + Assert.IsTrue(dependents.Contains(goB.GetInstanceID()), "Failed to include self among dependents"); + Assert.AreEqual(2, dependents.Count()); + dependents.Clear(); + + Assert.IsTrue(m_Dependencies.TryGetComponentDependencyTracker(out var tracker)); + + Assert.IsTrue(tracker.HasDependents(goB.GetInstanceID())); + Assert.IsFalse(tracker.HasDependents(goB.transform.GetInstanceID())); + + var instances = new NativeArray(1, Allocator.Temp) {[0] = instanceId}; + tracker.CalculateDirectDependents(instances, dependents); + Assert.IsTrue(dependents.Contains(goA.GetInstanceID()), "Failed to include direct dependency"); + Assert.AreEqual(1, dependents.Count()); + } + + private void RegisterAssetDependencyTest(UnityEngine.Object asset) { var go = CreateGameObject("A"); + Assert.DoesNotThrow(() => m_Dependencies.DependOnAsset(go, asset)); + AssertDependencyExists(m_Dependencies.AssetDependencyTracker, asset.GetInstanceID(), go); + + var assets = new NativeArray(1, Allocator.Temp) {[0] = asset.GetInstanceID()}; + var results = new NativeHashSet(1, Allocator.Temp); + m_Dependencies.CalculateAssetDependents(assets, results); + var r = results.ToNativeArray(Allocator.Temp); + Assert.AreEqual(1, r.Length); + Assert.AreEqual(go.GetInstanceID(), r[0]); + } + + [Test] + public void AssetDependencies_AreCollected() + { var prefab = LoadPrefab("Prefab"); - m_Dependencies.DependOnAsset(go, prefab); - AssertDependencyExists(m_Dependencies.AssetDependentsByInstanceId, prefab.GetInstanceID(), go); + RegisterAssetDependencyTest(prefab); } [Test] - public void AssetDependencies_InvalidAssetThrows() + public void AssetDependencies_CanRegisterDependencyOnTrueNull() { var goA = CreateGameObject("A"); - var goB = CreateGameObject("B"); - Assert.Throws(() => m_Dependencies.DependOnAsset(goA, goB), "not an asset"); + Assert.DoesNotThrow(() => m_Dependencies.DependOnAsset(goA, null)); + } + + [Test] + public void AssetDependencies_CanRegisterDependencyOnFakeNullAsset() + { + var texture = new Texture2D(1, 1); + UnityEngine.Object.DestroyImmediate(texture); + RegisterAssetDependencyTest(texture); + } + + [Test] + public void AssetDependencies_CanRegisterDependencyOnSceneAsset() + { + var texture = new Texture2D(1, 1); + RegisterAssetDependencyTest(texture); + UnityEngine.Object.DestroyImmediate(texture); } } } diff --git a/Unity.Entities.Hybrid.Tests/Conversion/ConversionTestFixtureBase.cs b/Unity.Entities.Hybrid.Tests/Conversion/ConversionTestFixtureBase.cs index d2239a39..f65c4176 100644 --- a/Unity.Entities.Hybrid.Tests/Conversion/ConversionTestFixtureBase.cs +++ b/Unity.Entities.Hybrid.Tests/Conversion/ConversionTestFixtureBase.cs @@ -35,7 +35,9 @@ struct ObjectAndName }; protected static readonly IEnumerable k_CommonComponents = new[] { typeof(Translation), typeof(Rotation), typeof(LocalToWorld) }; + protected static readonly IEnumerable k_StaticComponents = new[] {typeof(LocalToWorld), typeof(Static)}; protected static readonly IEnumerable k_RootComponents = k_CommonComponents.Append(typeof(LinkedEntityGroup)); + protected static readonly IEnumerable k_StaticRootComponents = k_StaticComponents.Append(typeof(LinkedEntityGroup)); protected static readonly IEnumerable k_ChildComponents = k_CommonComponents.Concat(new[] { typeof(Parent), typeof(LocalToParent) }); [TearDown] diff --git a/Unity.Entities.Hybrid.Tests/Conversion/ConversionTests.cs b/Unity.Entities.Hybrid.Tests/Conversion/ConversionTests.cs index 2bd3a574..b3f014ba 100644 --- a/Unity.Entities.Hybrid.Tests/Conversion/ConversionTests.cs +++ b/Unity.Entities.Hybrid.Tests/Conversion/ConversionTests.cs @@ -57,19 +57,11 @@ public void ConversionOfInactiveStaticGameObject() } [Test] - public void ConversionOfComponentDataProxy() + public void ConversionIsBuildingForEditor() { - var gameObject = CreateGameObject(); - gameObject.AddComponent().Value = new EcsTestData(5); - - var entity = ConvertGameObjectHierarchy(gameObject, MakeDefaultSettings()); - - EntitiesAssert.ContainsOnly(m_Manager, - // this is the converted gameobject we created above - EntityMatch.Exact(entity, new EcsTestData(5), k_RootComponents), - // ComponentDataProxyBase requires GameObjectEntity which creates this redundant Entity into the destination world from its OnEnable - // TODO: is this ^^ behavior right? - EntityMatch.Exact()); + var gameObject = CreateGameObject("", typeof(TestComponentAuthoringIsBuildingForEditor)); + ConvertGameObjectHierarchy(gameObject, MakeDefaultSettings()); + EntitiesAssert.ContainsOnly(m_Manager, EntityMatch.Partial(new IntTestData(1))); } [Test] @@ -254,21 +246,12 @@ public void InactiveConversion() public void DisabledBehaviourStripping() { var gameObject = new GameObject(); -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - gameObject.AddComponent().enabled = false; -#pragma warning restore 618 + gameObject.AddComponent().enabled = false; gameObject.AddComponent().enabled = false; var strippedEntity = ConvertGameObjectHierarchy(gameObject, MakeDefaultSettings()); - EntitiesAssert.ContainsOnly(m_Manager, - EntityMatch.Exact(strippedEntity, k_RootComponents), - EntityMatch.Exact()); - - UnityObject.DestroyImmediate(gameObject); - - EntitiesAssert.ContainsOnly(m_Manager, - EntityMatch.Exact(strippedEntity, k_RootComponents)); + EntitiesAssert.ContainsOnly(m_Manager, EntityMatch.Exact(strippedEntity, k_RootComponents)); } [Test] @@ -387,5 +370,15 @@ public void CreateAdditionalEntity_WithMultiple_CreatesAdditionalEntity() EntityMatch.Exact(new TestEntityData(2)) ); } + + [Test] + public void PrefabHierarchy_WithStaticOptimizeEntity_ActuallyIsStatic() + { + var entity = ConvertGameObjectHierarchy(LoadPrefab("Prefab_Hierarchy_With_StaticOptimizeEntity"), MakeDefaultSettings()); + + EntitiesAssert.ContainsOnly(m_Manager, + EntityMatch.Exact(entity, k_StaticRootComponents), + EntityMatch.Exact(k_StaticComponents)); + } } } diff --git a/Unity.Entities.Hybrid.Tests/Conversion/GameObjectConversionSettingsTests.cs b/Unity.Entities.Hybrid.Tests/Conversion/GameObjectConversionSettingsTests.cs index 7a0cb7e7..630ef368 100644 --- a/Unity.Entities.Hybrid.Tests/Conversion/GameObjectConversionSettingsTests.cs +++ b/Unity.Entities.Hybrid.Tests/Conversion/GameObjectConversionSettingsTests.cs @@ -9,6 +9,7 @@ namespace Unity.Entities.Tests.Conversion class GameObjectConversionSettingsTests { [Test] + [Obsolete("This functionality is no longer supported. (RemovedAfter 2021-01-09).")] public void Fork_WithZeroNamespaceID_Throws() { var settings = new GameObjectConversionSettings(); @@ -19,6 +20,7 @@ public void Fork_WithZeroNamespaceID_Throws() } [Test] + [Obsolete("This functionality is no longer supported. (RemovedAfter 2021-01-09).")] public void Fork_CopiesOnlyForkedFields() { using (var world = new World("test world")) @@ -94,7 +96,9 @@ public void Systems_OnlySystemsFromListAndGameObjectConversionSystemAreAdded() BuildConfiguration = BuildConfiguration.CreateInstance(), #endif Systems = new List {typeof(TestConversionSystem)}, +#pragma warning disable 0618 NamespaceID = 123, +#pragma warning restore 0618 ConversionWorldCreated = _ => {}, ConversionWorldPreDispose = _ => {}, }; diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Incremental.meta b/Unity.Entities.Hybrid.Tests/Conversion/Incremental.meta new file mode 100644 index 00000000..3e686a82 --- /dev/null +++ b/Unity.Entities.Hybrid.Tests/Conversion/Incremental.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c501c884e5bc4c8e830529695c1efa09 +timeCreated: 1588172760 \ No newline at end of file diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalHierarchyTests.cs b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalHierarchyTests.cs new file mode 100644 index 00000000..e0269310 --- /dev/null +++ b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalHierarchyTests.cs @@ -0,0 +1,468 @@ +using System.Collections.Generic; +using NUnit.Framework; +using Unity.Collections; +using Unity.Entities.Conversion; +using UnityEditor; +using UnityEngine; +using Object = UnityEngine.Object; +using Random = UnityEngine.Random; + +namespace Unity.Entities.Tests.Conversion +{ + public class IncrementalHierarchyTests + { + private IncrementalHierarchy m_Hierarchy; + private TestWithObjects m_Objects; + + [SetUp] + public void SetUp() + { + m_Objects.SetUp(); + } + + [TearDown] + public void TearDown() + { + m_Hierarchy.Dispose(); + m_Objects.TearDown(); + } + + void AssertSize(int n) + { + Assert.AreEqual(n, m_Hierarchy.InstanceId.Length, $"{nameof(m_Hierarchy.InstanceId)} doesn't have the expected size {n}"); + Assert.AreEqual(n, m_Hierarchy.ParentIndex.Length, $"{nameof(m_Hierarchy.ParentIndex)} doesn't have the expected size {n}"); + Assert.AreEqual(n, m_Hierarchy.TransformArray.length, $"{nameof(m_Hierarchy.TransformArray)} doesn't have the expected size {n}"); + Assert.GreaterOrEqual(n, m_Hierarchy.ChildIndicesByIndex.Count(), $"{nameof(m_Hierarchy.ChildIndicesByIndex)} doesn't have the expected maximum size {n}"); + Assert.AreEqual(n, m_Hierarchy.IndexByInstanceId.Count(), $"{nameof(m_Hierarchy.IndexByInstanceId)} doesn't have the expected size {n}"); + } + + void AssertIndexInBounds(int idx, int n, string name) => Assert.IsTrue(0 <= idx && idx < n, $"Index {idx} is out of bounds of {name}, length {n}"); + + void AssertConsistency(GameObject go) + { + bool success = m_Hierarchy.IndexByInstanceId.TryGetValue(go.GetInstanceID(), out int index); + Assert.IsTrue(success, $"{nameof(m_Hierarchy.IndexByInstanceId)} does not contain {go.GetInstanceID()}"); + AssertIndexInBounds(index, m_Hierarchy.InstanceId.Length, nameof(m_Hierarchy.InstanceId)); + Assert.AreEqual(m_Hierarchy.InstanceId[index], go.GetInstanceID()); + Assert.AreSame(m_Hierarchy.TransformArray[index], go.transform); + if (go.transform.childCount > 0) + { + bool hasChildren = m_Hierarchy.ChildIndicesByIndex.ContainsKey(index); + Assert.IsTrue(hasChildren, $"{go} has children but not in the hierarchy"); + int childCount = go.transform.childCount; + var iter = m_Hierarchy.ChildIndicesByIndex.GetValuesForKey(index); + + var childFound = new List(); + for (int c = 0; c < childCount; c++) + { + Assert.IsTrue(iter.MoveNext(), $"{go} only has {c} children in the hierarchy, but {childCount} in reality."); + int childIndex = iter.Current; + AssertIndexInBounds(childIndex, m_Hierarchy.InstanceId.Length, nameof(m_Hierarchy.InstanceId)); + int childId = m_Hierarchy.InstanceId[childIndex]; + childFound.Add(childId); + } + + for (int c = 0; c < childCount; c++) + { + var child = go.transform.GetChild(c).gameObject; + Assert.IsTrue(childFound.Contains(child.GetInstanceID()), $"Child {child} of {go} is not registered in the hierarchy"); + AssertConsistency(child); + } + } + + if (go.transform.parent != null) + { + var parentTransform = go.transform.parent; + var parent = parentTransform != null ? parentTransform.gameObject : null; + int parentId = parent != null ? parent.GetInstanceID() : 0; + int parentIndex = -1; + if (parentId != 0) + { + bool parentFound = m_Hierarchy.IndexByInstanceId.TryGetValue(parentId, out parentIndex); + Assert.IsTrue(parentFound); + } + + var storedIndex = m_Hierarchy.ParentIndex[index]; + if (storedIndex == -1) + Assert.AreEqual(parentIndex, storedIndex, $"Parent of {go} is incorrect: (null), should be {parent}"); + else + { + AssertIndexInBounds(storedIndex, m_Hierarchy.InstanceId.Length, nameof(m_Hierarchy.InstanceId)); + var obj = EditorUtility.InstanceIDToObject(m_Hierarchy.InstanceId[storedIndex]); + Assert.AreEqual(parentIndex, storedIndex, $"Parent of {go} is incorrect: {obj?.ToString() ?? "null"}, should be {parent}"); + } + } + } + + [Test] + public void Hierarchy_WithSingleGameObject_IsEmptyAfterDelete() + { + var go = m_Objects.CreateGameObject("root"); + IncrementalHierarchyFunctions.Build(new [] {go}, out m_Hierarchy, Allocator.Temp); + AssertSize(1); + AssertConsistency(go); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{go.GetInstanceID()}, Allocator.Temp)); + AssertSize(0); + } + + [Test] + public void Hierarchy_WithHierarchy_BuildIsConsistent() + { + var go = m_Objects.CreateGameObject("root"); + var c1 = m_Objects.CreateGameObject("c1"); + c1.transform.SetParent(go.transform); + var c2 = m_Objects.CreateGameObject("c2"); + c2.transform.SetParent(go.transform); + var c3 = m_Objects.CreateGameObject("c3"); + c3.transform.SetParent(go.transform); + IncrementalHierarchyFunctions.Build(new [] {go}, out m_Hierarchy, Allocator.Temp); + AssertSize(4); + AssertConsistency(go); + } + + [Test] + public void Hierarchy_WithHierarchy_Remove1By1_MaintainsConsistency() + { + var go = m_Objects.CreateGameObject("root"); + var c1 = m_Objects.CreateGameObject("c1"); + c1.transform.SetParent(go.transform); + var c2 = m_Objects.CreateGameObject("c2"); + c2.transform.SetParent(go.transform); + var c3 = m_Objects.CreateGameObject("c3"); + c3.transform.SetParent(go.transform); + IncrementalHierarchyFunctions.Build(new [] {go}, out m_Hierarchy, Allocator.Temp); + AssertSize(4); + AssertConsistency(go); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{ c2.GetInstanceID() }, Allocator.Temp)); + Object.DestroyImmediate(c2); + AssertSize(3); + AssertConsistency(go); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{ c1.GetInstanceID() }, Allocator.Temp)); + Object.DestroyImmediate(c1); + AssertSize(2); + AssertConsistency(go); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{ c3.GetInstanceID() }, Allocator.Temp)); + Object.DestroyImmediate(c3); + AssertSize(1); + AssertConsistency(go); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{ go.GetInstanceID() }, Allocator.Temp)); + Object.DestroyImmediate(go); + AssertSize(0); + } + + [Test] + public void Hierarchy_WithHierarchy_DeleteRemovesFullHierarchy() + { + var go = m_Objects.CreateGameObject("root"); + m_Objects.CreateGameObject("c1").transform.SetParent(go.transform); + m_Objects.CreateGameObject("c2").transform.SetParent(go.transform); + m_Objects.CreateGameObject("c3").transform.SetParent(go.transform); + IncrementalHierarchyFunctions.Build(new [] {go}, out m_Hierarchy, Allocator.Temp); + AssertSize(4); + AssertConsistency(go); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{ go.GetInstanceID() }, Allocator.Temp)); + AssertSize(0); + } + + [Test] + public void Hierarchy_WithHierarchy_DeleteRemovesSubHierarchy() + { + var go = m_Objects.CreateGameObject("root"); + m_Objects.CreateGameObject("c1").transform.SetParent(go.transform); + var c2 = m_Objects.CreateGameObject("c2"); + c2.transform.SetParent(go.transform); + m_Objects.CreateGameObject("c3").transform.SetParent(go.transform); + + m_Objects.CreateGameObject("c21").transform.SetParent(c2.transform); + m_Objects.CreateGameObject("c22").transform.SetParent(c2.transform); + IncrementalHierarchyFunctions.Build(new [] {go}, out m_Hierarchy, Allocator.Temp); + AssertSize(6); + AssertConsistency(go); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{ c2.GetInstanceID() }, Allocator.Temp)); + Object.DestroyImmediate(c2); + AssertSize(3); + AssertConsistency(go); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{ go.GetInstanceID() }, Allocator.Temp)); + AssertSize(0); + } + + [Test] + public void Hierarchy_WithHierarchy_DeleteSeparateHierarchy_MaintainsConsistency() + { + var root1 = m_Objects.CreateGameObject("root1"); + m_Objects.CreateGameObject("c1").transform.SetParent(root1.transform); + var root2 = m_Objects.CreateGameObject("root2"); + m_Objects.CreateGameObject("c2").transform.SetParent(root2.transform); + IncrementalHierarchyFunctions.Build(new [] {root1, root2}, out m_Hierarchy, Allocator.Temp); + AssertSize(4); + AssertConsistency(root1); + AssertConsistency(root2); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{ root1.GetInstanceID() }, Allocator.Temp)); + Object.DestroyImmediate(root1); + AssertSize(2); + AssertConsistency(root2); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{ root2.GetInstanceID() }, Allocator.Temp)); + AssertSize(0); + } + + [Test] + public void Hierarchy_WithHierarchy_DeleteOutOfOrder_MaintainsConsistency() + { + var root1 = m_Objects.CreateGameObject("root1"); + var c1 = m_Objects.CreateGameObject("c1"); + c1.transform.SetParent(root1.transform); + var c2 = m_Objects.CreateGameObject("c2"); + c2.transform.SetParent(c1.transform); + IncrementalHierarchyFunctions.Build(new [] {root1}, out m_Hierarchy, Allocator.Temp); + AssertSize(3); + AssertConsistency(root1); + IncrementalHierarchyFunctions.Remove(m_Hierarchy, new NativeArray(new []{ c2.GetInstanceID(), c1.GetInstanceID() }, Allocator.Temp)); + Object.DestroyImmediate(c1); + AssertSize(1); + AssertConsistency(root1); + } + + [Test] + public void Hierarchy_WithHierarchy_AddingIncrementally_MaintainsConsistency() + { + var go = m_Objects.CreateGameObject("root"); + IncrementalHierarchyFunctions.Build(new [] {go}, out m_Hierarchy, Allocator.Temp); + AssertSize(1); + AssertConsistency(go); + var c1 = m_Objects.CreateGameObject("c1"); + c1.transform.SetParent(go.transform); + IncrementalHierarchyFunctions.TryAddSingle(m_Hierarchy, c1); + AssertSize(2); + AssertConsistency(go); + var c2 = m_Objects.CreateGameObject("c2"); + c2.transform.SetParent(go.transform); + IncrementalHierarchyFunctions.TryAddSingle(m_Hierarchy, c2); + AssertSize(3); + AssertConsistency(go); + var c3 = m_Objects.CreateGameObject("c3"); + c3.transform.SetParent(go.transform); + IncrementalHierarchyFunctions.TryAddSingle(m_Hierarchy, c3); + AssertSize(4); + AssertConsistency(go); + } + + [Test] + public void Hierarchy_WithHierarchy_AddingSubHierarchy_MaintainsConsistency() + { + var go = m_Objects.CreateGameObject("root"); + IncrementalHierarchyFunctions.Build(new [] {go}, out m_Hierarchy, Allocator.Temp); + AssertSize(1); + AssertConsistency(go); + var c1 = m_Objects.CreateGameObject("c1"); + c1.transform.SetParent(go.transform); + var c2 = m_Objects.CreateGameObject("c2"); + c2.transform.SetParent(c1.transform); + var c3 = m_Objects.CreateGameObject("c3"); + c3.transform.SetParent(c2.transform); + IncrementalHierarchyFunctions.AddRecurse(m_Hierarchy, c1); + AssertSize(4); + AssertConsistency(go); + } + + [Test] + public void Hierarchy_WithHierarchy_ChangingParents_MaintainsConsistency() + { + var go = m_Objects.CreateGameObject("root"); + var c1 = m_Objects.CreateGameObject("c1"); + c1.transform.SetParent(go.transform); + var c2 = m_Objects.CreateGameObject("c2"); + c2.transform.SetParent(go.transform); + var c3 = m_Objects.CreateGameObject("c3"); + c3.transform.SetParent(go.transform); + IncrementalHierarchyFunctions.Build(new [] {go}, out m_Hierarchy, Allocator.Temp); + AssertSize(4); + AssertConsistency(go); + + var parentChanges = new NativeHashMap(0, Allocator.Temp); + c3.transform.SetParent(c2.transform); + parentChanges.Add(c3.GetInstanceID(), c2.GetInstanceID()); + var success = new NativeList(Allocator.Temp); + IncrementalHierarchyFunctions.ChangeParents(m_Hierarchy, parentChanges.GetKeyValueArrays(Allocator.Temp), default, success); + AssertSize(4); + AssertConsistency(go); + parentChanges.Clear(); + + c2.transform.SetParent(c1.transform); + parentChanges.Add(c2.GetInstanceID(), c1.GetInstanceID()); + success.Clear(); + IncrementalHierarchyFunctions.ChangeParents(m_Hierarchy, parentChanges.GetKeyValueArrays(Allocator.Temp), default, success); + AssertSize(4); + AssertConsistency(go); + parentChanges.Clear(); + } + + GameObject CreateRandomHierarchy(string prefix, float chance = .6f, int depth=1) + { + var root = new GameObject(prefix); + if (depth >= 10) + return root; + while (Random.value < chance) + { + var child = CreateRandomHierarchy(prefix + root.transform.childCount, depth: depth + 1); + child.transform.parent = root.transform; + } + return root; + } + + GameObject FindRandomChild(GameObject go, float chance = .2f) + { + // heavily biased after a few steps down the hierarchy + int n = go.transform.childCount; + if (n == 0 || Random.value < chance) return go; + int idx = Random.Range(0, n); + return FindRandomChild(go.transform.GetChild(idx).gameObject); + } + + static bool IsChild(GameObject parent, GameObject child) + { + Transform c = child.transform; + while (c != null) + { + if (c == parent.transform) + return true; + c = c.transform.parent; + } + + return false; + } + + + + [Test, Explicit] + public void Hierarchy_FuzzTesting([Values(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)] int seed) + { + Random.InitState(seed); + var root = CreateRandomHierarchy("r"); + const int steps = 1000; + IncrementalHierarchyFunctions.Build(new []{ root }, out m_Hierarchy, Allocator.Temp); + AssertConsistency(root); + // This has to be TempJob because of DOTS-1357 + var instanceIds = new NativeList(0, Allocator.TempJob); + var success = new NativeList(0, Allocator.TempJob); + var reorder = new NativeHashMap(0, Allocator.Temp); + var gos = new List(); + try + { + for (int i = 0; i < steps; i++) + { + if (root == null) + { + AssertSize(0); + return; + } + + float r = Random.value; + if (r < .4f) + { + // delete + var childrenToDelete = Random.Range(0, 7); + for (int c = 0; c < childrenToDelete; c++) + { + var go = FindRandomChild(root); + gos.Add(go); + instanceIds.Add(go.GetInstanceID()); + } + + IncrementalHierarchyFunctions.Remove(m_Hierarchy, instanceIds); + foreach (var go in gos) + Object.DestroyImmediate(go); + instanceIds.Clear(); + gos.Clear(); + if (root != null) + AssertConsistency(root); + } + else if (r < .8f) + { + // add + var childrenToAdd = Random.Range(0, 3); + for (int c = 0; c < childrenToAdd; c++) + { + var randomChild = FindRandomChild(root); + var go = CreateRandomHierarchy(randomChild.name + "a"); + go.transform.parent = randomChild.transform; + IncrementalHierarchyFunctions.AddRecurse(m_Hierarchy, go); + AssertConsistency(root); + } + } + else + { + // re-order + var childrenToReorder = Random.Range(0, 10); + for (int c = 0; c < childrenToReorder; c++) + { + var c1 = FindRandomChild(root); + var c2 = FindRandomChild(root); + if (c1 == c2 || c1 == root || IsChild(c1, c2)) + continue; + c1.transform.parent = c2.transform; + reorder.Remove(c1.GetInstanceID()); + reorder.Add(c1.GetInstanceID(), c2.GetInstanceID()); + } + + IncrementalHierarchyFunctions.ChangeParents(m_Hierarchy, reorder.GetKeyValueArrays(Allocator.Temp), default, success); + reorder.Clear(); + success.Clear(); + AssertConsistency(root); + } + } + } + finally + { + instanceIds.Dispose(); + success.Dispose(); + } + } + + static IEnumerable GetInstanceIds(GameObject go) + { + var open = new Stack(); + open.Push(go.transform); + while (open.Count > 0) + { + var top = open.Pop(); + yield return top.gameObject.GetInstanceID(); + int n = top.childCount; + for (int i = 0; i < n; i++) + open.Push(top.GetChild(i)); + } + } + + [Test] + public void Hierarchy_CollectChildInstanceIds_WithHierarchy() + { + var go = m_Objects.CreateGameObject("root"); + m_Objects.CreateGameObject("c1").transform.SetParent(go.transform); + var c2 = m_Objects.CreateGameObject("c2"); + c2.transform.SetParent(go.transform); + m_Objects.CreateGameObject("c3").transform.SetParent(go.transform); + m_Objects.CreateGameObject("c21").transform.SetParent(c2.transform); + m_Objects.CreateGameObject("c22").transform.SetParent(c2.transform); + IncrementalHierarchyFunctions.Build(new [] {go}, out m_Hierarchy, Allocator.TempJob); + AssertConsistency(go); + + var changedIds = new NativeList(1, Allocator.TempJob); + changedIds.Add(go.GetInstanceID()); + + var visitedInstances = new NativeHashSet(6, Allocator.TempJob); + m_Hierarchy.AsReadOnly().CollectHierarchyInstanceIds(changedIds, visitedInstances); + + try + { + Assert.AreEqual(1, changedIds.Length); + Assert.AreEqual(6, visitedInstances.Count()); + foreach (var id in GetInstanceIds(go)) + visitedInstances.Contains(id); + } + finally + { + changedIds.Dispose(); + visitedInstances.Dispose(); + } + } + } +} diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalHierarchyTests.cs.meta b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalHierarchyTests.cs.meta new file mode 100644 index 00000000..79132149 --- /dev/null +++ b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalHierarchyTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: c36f82ad15734a4e8e4fafdb98f7b521 +timeCreated: 1588172806 \ No newline at end of file diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalSceneConversionTests.cs b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalSceneConversionTests.cs new file mode 100644 index 00000000..2da98735 --- /dev/null +++ b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalSceneConversionTests.cs @@ -0,0 +1,246 @@ +#if UNITY_2020_2_OR_NEWER +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using Unity.Collections; +using Unity.Entities.Tests; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace Unity.Entities.Tests.Conversion +{ + class IncrementalSceneConversionTests + { + private TestWithObjects _Objects; + private World DestinationWorld; + private World ConversionWorld; + + [SetUp] + public void SetUp() + { + _Objects.SetUp(); + DestinationWorld = new World("Test World"); + } + + [TearDown] + public void TearDown() + { + ConversionWorld?.Dispose(); + DestinationWorld.Dispose(); + _Objects.TearDown(); + } + + [OneTimeSetUp] + public void SetUpOnce() + { + var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene); + SceneManager.SetActiveScene(scene); + } + + [OneTimeTearDown] + public void TearDownOnce() + { + EditorSceneManager.NewScene(NewSceneSetup.EmptyScene); + } + + void InitializeIncrementalConversion() + { + // TODO - if missing these conversion flags, it will cause an exception in ConvertIncrementalInitialize + // Need better exception + var settings = new GameObjectConversionSettings(DestinationWorld, ConversionFlags) + { + Systems = TestWorldSetup.GetDefaultInitSystemsFromEntitiesPackage(WorldSystemFilterFlags.GameObjectConversion).ToList() + }; + settings.Systems.Add(typeof(InterceptConvertedGameObjects)); + ConversionWorld = GameObjectConversionUtility.InitializeIncrementalConversion(SceneManager.GetActiveScene(), settings); + } + + private class InterceptConvertedGameObjects : GameObjectConversionSystem + { + public static readonly List GameObjectsConverted = new List(); + protected override void OnUpdate() + { + GameObjectsConverted.Clear(); + Entities.ForEach((Transform t) => GameObjectsConverted.Add(t.gameObject)); + } + } + + private const GameObjectConversionUtility.ConversionFlags ConversionFlags = + GameObjectConversionUtility.ConversionFlags.GameViewLiveLink | + GameObjectConversionUtility.ConversionFlags.AddEntityGUID; + + static void CheckAgainstFullConversion(World destinationWorld) + { + var dstEntityManager = destinationWorld.EntityManager; + using (var fullConversionWorld = new World("FullConversion")) + { + using (var blobAssetStore = new BlobAssetStore()) + { + var conversionSettings = GameObjectConversionSettings.FromWorld(fullConversionWorld, blobAssetStore); + conversionSettings.ConversionFlags = ConversionFlags; + + GameObjectConversionUtility.ConvertScene(SceneManager.GetActiveScene(), conversionSettings); + + const EntityManagerDifferOptions options = + EntityManagerDifferOptions.IncludeForwardChangeSet | + EntityManagerDifferOptions.ValidateUniqueEntityGuid; + + using (var blobAssetCache = new BlobAssetCache(Allocator.TempJob)) + { + EntityDiffer.PrecomputeBlobAssetCache(fullConversionWorld.EntityManager, EntityManagerDiffer.EntityGuidQueryDesc, blobAssetCache); + using (var changes = EntityDiffer.GetChanges( + dstEntityManager, + fullConversionWorld.EntityManager, + options, + EntityManagerDiffer.EntityGuidQueryDesc, + blobAssetCache, + Allocator.TempJob + )) + { + Assert.IsFalse(changes.AnyChanges, "Full conversion and incremental conversion do not match!"); + } + } + } + } + } + + + [Test] + public void IncrementalConversion_WhenAddingNewGameObjectToSubScene_MatchesFullConversion() + { + InitializeIncrementalConversion(); + var go = _Objects.CreateGameObject("Hello"); + var args = new IncrementalConversionBatch + { + ReconvertHierarchyInstanceIds = new NativeArray(new[] {go.GetInstanceID()}, Allocator.TempJob), + ChangedComponents = new List {go.transform} + }; + args.EnsureFullyInitialized(); + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + args.Dispose(); + CheckAgainstFullConversion(DestinationWorld); + } + + [Test] + public void IncrementalConversion_WhenChangingTransformWithoutDependency_DoesNotCauseReconversion() + { + var root = _Objects.CreateGameObject("Root"); + var child = _Objects.CreateGameObject("Child"); + var a = child.AddComponent(); + a.Dependency = root.transform; + a.SkipDependency = true; + root.transform.position = new Vector3(0, 0, 0); + child.transform.SetParent(root.transform); + InitializeIncrementalConversion(); + + // change the parent's position + root.transform.position = new Vector3(0, 1, 2); + var args = new IncrementalConversionBatch + { + ChangedComponents = new List { root.transform } + }; + args.EnsureFullyInitialized(); + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + args.Dispose(); + + // because there is no dependency on the transform of the child, we do not reconvert it and have invalid + // data + var t = DestinationWorld.EntityManager.CreateEntityQuery(typeof(DependsOnTransformTestAuthoring.Component)) + .GetSingleton(); + Assert.AreNotEqual(t.LocalToWorld, child.transform.localToWorldMatrix); + } + + [Test] + public void IncrementalConversion_NoChanges_DoesNotCauseReconversion() + { + for (int i = 0; i < 10; i++) + _Objects.CreateGameObject("Hello" + i); + InitializeIncrementalConversion(); + + var args = new IncrementalConversionBatch(); + args.EnsureFullyInitialized(); + + // this is necessary: if nothing is updated, the interception system never updates and we never clear the + // list. + InterceptConvertedGameObjects.GameObjectsConverted.Clear(); + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + args.Dispose(); + + Assert.IsEmpty(InterceptConvertedGameObjects.GameObjectsConverted); + } + + [Test] + public void IncrementalConversion_ChangeOneObject_OnlyChangesThatObject() + { + var root = _Objects.CreateGameObject("Root"); + var child = _Objects.CreateGameObject("Child"); + child.transform.SetParent(root.transform); + + InitializeIncrementalConversion(); + + { + var args = new IncrementalConversionBatch + { + ChangedInstanceIds = new NativeArray(new[] {root.GetInstanceID()}, Allocator.TempJob), + }; + args.EnsureFullyInitialized(); + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + args.Dispose(); + } + CollectionAssert.AreEquivalent(InterceptConvertedGameObjects.GameObjectsConverted, new [] { root }); + + { + var args = new IncrementalConversionBatch + { + ChangedInstanceIds = new NativeArray(new[] {child.GetInstanceID()}, Allocator.TempJob) + }; + args.EnsureFullyInitialized(); + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + args.Dispose(); + } + CollectionAssert.AreEquivalent(InterceptConvertedGameObjects.GameObjectsConverted, new [] { child }); + } + + [Test] + public void IncrementalConversion_ReconvertHierarchy_ReconvertsChildren() + { + var root = _Objects.CreateGameObject("Root"); + var child = _Objects.CreateGameObject("Child"); + child.transform.SetParent(root.transform); + + InitializeIncrementalConversion(); + + { + var args = new IncrementalConversionBatch + { + ReconvertHierarchyInstanceIds = new NativeArray(new[] {root.GetInstanceID()}, Allocator.TempJob), + }; + args.EnsureFullyInitialized(); + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + args.Dispose(); + } + CollectionAssert.AreEquivalent(InterceptConvertedGameObjects.GameObjectsConverted, new [] { root, child }); + } + + [Test] + public void IncrementalConversion_ConvertedEntitiesAccessor_ReturnsAllEntities() + { + var root = _Objects.CreateGameObject("Root"); + + InitializeIncrementalConversion(); + + { + var args = new IncrementalConversionBatch + { + ChangedInstanceIds = new NativeArray(new[] {root.GetInstanceID()}, Allocator.TempJob), + }; + args.EnsureFullyInitialized(); + GameObjectConversionUtility.ConvertIncremental(ConversionWorld, ConversionFlags, ref args); + args.Dispose(); + } + CollectionAssert.AreEquivalent(InterceptConvertedGameObjects.GameObjectsConverted, new [] { root }); + } + } +} +#endif diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalSceneConversionTests.cs.meta b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalSceneConversionTests.cs.meta new file mode 100644 index 00000000..c1958b24 --- /dev/null +++ b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/IncrementalSceneConversionTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8df7af79ce204077a8d0662f53b51fb6 +timeCreated: 1593876535 \ No newline at end of file diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Incremental/TestWithObjects.cs b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/TestWithObjects.cs new file mode 100644 index 00000000..f4b250c2 --- /dev/null +++ b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/TestWithObjects.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections.Generic; +using UnityEngine; +using Object = UnityEngine.Object; + +namespace Unity.Entities.Tests.Conversion +{ + struct TestWithObjects + { + private List m_ObjectsToDestroy; + + public GameObject CreateGameObject(string name, Type component) + { + var go = new GameObject(name, component); + m_ObjectsToDestroy.Add(go); + return go; + } + + public GameObject CreateGameObject(string name) { + var go = new GameObject(name); + m_ObjectsToDestroy.Add(go); + return go; + } + + public GameObject CreateGameObject() { + var go = new GameObject(); + m_ObjectsToDestroy.Add(go); + return go; + } + + public void RegisterForDestruction(Object obj) => m_ObjectsToDestroy.Add(obj); + + public void SetUp() + { + if (m_ObjectsToDestroy != null) + m_ObjectsToDestroy.Clear(); + else + m_ObjectsToDestroy = new List(); + } + + public void TearDown() + { + foreach (var go in m_ObjectsToDestroy) + { + if (go != null) + Object.DestroyImmediate(go); + } + m_ObjectsToDestroy.Clear(); + } + } +} diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Incremental/TestWithObjects.cs.meta b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/TestWithObjects.cs.meta new file mode 100644 index 00000000..cbbf188d --- /dev/null +++ b/Unity.Entities.Hybrid.Tests/Conversion/Incremental/TestWithObjects.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f6caa9f9e9444b01bedcec41d91a493c +timeCreated: 1593876618 \ No newline at end of file diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Prefab.prefab b/Unity.Entities.Hybrid.Tests/Conversion/Prefab.prefab index 86884dee..072243c2 100644 --- a/Unity.Entities.Hybrid.Tests/Conversion/Prefab.prefab +++ b/Unity.Entities.Hybrid.Tests/Conversion/Prefab.prefab @@ -56,5 +56,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5d85176e9153349648a01d1578e91620, type: 3} m_Name: m_EditorClassIdentifier: - m_SerializedData: - Value: 0 + Value: 0 diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Hierarchy.prefab b/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Hierarchy.prefab index e5c3442f..294bdac9 100644 --- a/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Hierarchy.prefab +++ b/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Hierarchy.prefab @@ -57,8 +57,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5d85176e9153349648a01d1578e91620, type: 3} m_Name: m_EditorClassIdentifier: - m_SerializedData: - Value: 100 + Value: 100 --- !u!1 &6373645895660958117 GameObject: m_ObjectHideFlags: 0 @@ -115,5 +114,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5d85176e9153349648a01d1578e91620, type: 3} m_Name: m_EditorClassIdentifier: - m_SerializedData: - Value: 101 + Value: 101 diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Hierarchy_With_StaticOptimizeEntity.prefab b/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Hierarchy_With_StaticOptimizeEntity.prefab new file mode 100644 index 00000000..e67bbbe6 --- /dev/null +++ b/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Hierarchy_With_StaticOptimizeEntity.prefab @@ -0,0 +1,76 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2931377328982524470 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7400921186423372218} + - component: {fileID: 1553160539379871872} + m_Layer: 0 + m_Name: Prefab_Hierarchy_With_StaticOptimizeEntity + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!4 &7400921186423372218 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2931377328982524470} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 673615223001836757} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &1553160539379871872 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2931377328982524470} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: af892e4287c1f436baf5a5063049521a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &6373645895660958117 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 673615223001836757} + m_Layer: 0 + m_Name: Child + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &673615223001836757 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6373645895660958117} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7400921186423372218} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Reference_Prefab.prefab b/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Reference_Prefab.prefab index f8d29a7a..6650182f 100644 --- a/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Reference_Prefab.prefab +++ b/Unity.Entities.Hybrid.Tests/Conversion/Prefab_Reference_Prefab.prefab @@ -46,6 +46,8 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: Value: {fileID: 2931377328982524470, guid: a2963d3875aa64f57a25391305f4bc29, type: 3} + AdditionalEntityCount: 0 + DeclareLinkedEntityGroup: 0 --- !u!114 &-5807820220115599494 MonoBehaviour: m_ObjectHideFlags: 0 @@ -70,5 +72,4 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5d85176e9153349648a01d1578e91620, type: 3} m_Name: m_EditorClassIdentifier: - m_SerializedData: - Value: 1 + Value: 1 diff --git a/Unity.Entities.Hybrid.Tests/Conversion/SceneConversionTests.cs b/Unity.Entities.Hybrid.Tests/Conversion/SceneConversionTests.cs index 4c6485b0..9630edfd 100644 --- a/Unity.Entities.Hybrid.Tests/Conversion/SceneConversionTests.cs +++ b/Unity.Entities.Hybrid.Tests/Conversion/SceneConversionTests.cs @@ -75,7 +75,7 @@ public void IncrementalConversionLinkedGroup() { Systems = TestWorldSetup.GetDefaultInitSystemsFromEntitiesPackage(WorldSystemFilterFlags.GameObjectConversion).ToList() }; - using (var conversionWorld = GameObjectConversionUtility.ConvertIncrementalInitialize(SceneManager.GetActiveScene(), settings)) + using (var conversionWorld = GameObjectConversionUtility.InitializeIncrementalConversion(SceneManager.GetActiveScene(), settings)) { Entities.ForEach((ref EntityRefTestData data) => StringAssert.StartsWith("parent", m_Manager.GetName(data.Value))); @@ -88,7 +88,9 @@ public void IncrementalConversionLinkedGroup() child.Value = child.gameObject; child.AdditionalEntityCount = 1; parent.Value = child.gameObject; +#pragma warning disable 618 GameObjectConversionUtility.ConvertIncremental(conversionWorld, new[] { child.gameObject }, conversionFlags); +#pragma warning restore 618 EntitiesAssert.ContainsOnly(m_Manager, EntityMatch.Exact(entity, k_CommonComponents, diff --git a/Unity.Entities.Hybrid.Tests/GameObjectEntity_EntityManager_IntegrationTests.cs b/Unity.Entities.Hybrid.Tests/GameObjectEntity_EntityManager_IntegrationTests.cs index 0c236659..04200a52 100644 --- a/Unity.Entities.Hybrid.Tests/GameObjectEntity_EntityManager_IntegrationTests.cs +++ b/Unity.Entities.Hybrid.Tests/GameObjectEntity_EntityManager_IntegrationTests.cs @@ -18,10 +18,7 @@ public void SetUp() { var parent = new GameObject($"{TestContext.CurrentContext.Test.Name}-PARENT"); m_TestObjects[ActivateTestObject.Parent] = parent; -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - m_GameObjectEntity = - new GameObject(TestContext.CurrentContext.Test.Name, typeof(GameObjectEntity), typeof(MockDataProxy)).GetComponent(); -#pragma warning restore 618 // remove once ComponentDataProxyBase is removed + m_GameObjectEntity = new GameObject(TestContext.CurrentContext.Test.Name, typeof(GameObjectEntity)).GetComponent(); m_GameObjectEntity.gameObject.transform.SetParent(parent.transform); m_TestObjects[ActivateTestObject.Child] = m_GameObjectEntity.gameObject; } @@ -56,8 +53,6 @@ public void ReactivateGameObjectEntity_EntityManagerHasComponent([Values] Activa m_TestObjects[testObject].SetActive(true); Assume.That(manager.Exists(Entity), Is.True, $"Entity does not exist after reactivating {testObject}"); - - Assert.That(manager.HasComponent(Entity, typeof(MockData)), Is.True, $"MockData not exist after reactivating {testObject}."); } } } diff --git a/Unity.Entities.Hybrid.Tests/Runtime/EntityManagerTests.cs b/Unity.Entities.Hybrid.Tests/Runtime/EntityManagerTests.cs index c137b554..2291decd 100644 --- a/Unity.Entities.Hybrid.Tests/Runtime/EntityManagerTests.cs +++ b/Unity.Entities.Hybrid.Tests/Runtime/EntityManagerTests.cs @@ -1,44 +1,9 @@ using NUnit.Framework; -using UnityEngine; namespace Unity.Entities.Tests { -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - [DisallowMultipleComponent] - [AddComponentMenu("")] - public class EcsFooTestProxy : ComponentDataProxy {} - - [DisallowMultipleComponent] - [AddComponentMenu("")] - public class EcsTestProxy : ComponentDataProxy {} -#pragma warning restore 618 - class EntityManagerTests : HybridRuntimeTestFixture { - [Test] - public void GetComponentObjectReturnsTheCorrectType() - { - var go = new GameObject(); - MarkForAutoDestructionAfterTest(go); - go.AddComponent(); - - var component = m_Manager.GetComponentObject(go.GetComponent().Entity); - - Assert.NotNull(component, "EntityManager.GetComponentObject returned a null object"); - Assert.AreEqual(typeof(Transform), component.GetType(), "EntityManager.GetComponentObject returned the wrong component type."); - Assert.AreEqual(go.transform, component, "EntityManager.GetComponentObject returned a different copy of the component."); - } - - [Test] - public void GetComponentObjectThrowsIfComponentDoesNotExist() - { - var go = new GameObject(); - MarkForAutoDestructionAfterTest(go); - go.AddComponent(); - - Assert.Throws(() => m_Manager.GetComponentObject(go.GetComponent().Entity)); - } - [Test] public unsafe void ArchetypeIsManaged() { diff --git a/Unity.Entities.Hybrid.Tests/Runtime/HybridComponentTests.cs b/Unity.Entities.Hybrid.Tests/Runtime/HybridComponentTests.cs index 24133f72..8c9a3e3f 100644 --- a/Unity.Entities.Hybrid.Tests/Runtime/HybridComponentTests.cs +++ b/Unity.Entities.Hybrid.Tests/Runtime/HybridComponentTests.cs @@ -66,6 +66,23 @@ public void HybridComponent_TransformSync_OutOfOrder() entities.Dispose(); } + + [Test] + public void HybridComponent_OnDisabledGameObject_IsConvertedAndDisabled() + { + var gameObject = CreateGameObject(); + gameObject.AddComponent().SomeValue = 123; + gameObject.SetActive(false); + var entity = GameObjectConversionUtility.ConvertGameObjectHierarchy(gameObject, MakeDefaultSettings().WithExtraSystem()); + var hybridComponent = m_World.EntityManager.GetComponentObject(entity); + Assert.AreEqual(123, hybridComponent.SomeValue); + + // give the hybrid component system a chance to activate this object, and check it did not in fact do it. + m_World.Update(); + + var companion = m_World.EntityManager.GetComponentObject(entity); + Assert.IsFalse(companion.Companion.activeSelf); + } } } #endif diff --git a/Unity.Entities.Hybrid.Tests/TestWithCustomDefaultGameObjectInjectionWorld.cs b/Unity.Entities.Hybrid.Tests/TestWithCustomDefaultGameObjectInjectionWorld.cs index 32ca9504..b73765e5 100644 --- a/Unity.Entities.Hybrid.Tests/TestWithCustomDefaultGameObjectInjectionWorld.cs +++ b/Unity.Entities.Hybrid.Tests/TestWithCustomDefaultGameObjectInjectionWorld.cs @@ -8,11 +8,20 @@ namespace Unity.Entities.Hybrid.Tests public struct TestWithCustomDefaultGameObjectInjectionWorld { public World PreviousGameObjectInjectionWorld; - private PlayerLoopSystem m_PrevPlayerLoop; + private bool _wasInPlayerLoop; public void Setup() { PreviousGameObjectInjectionWorld = World.DefaultGameObjectInjectionWorld; + if (PreviousGameObjectInjectionWorld != null) + { + _wasInPlayerLoop = ScriptBehaviourUpdateOrder.IsWorldInCurrentPlayerLoop(PreviousGameObjectInjectionWorld); + if (_wasInPlayerLoop) + ScriptBehaviourUpdateOrder.RemoveWorldFromCurrentPlayerLoop(PreviousGameObjectInjectionWorld); + } + else + _wasInPlayerLoop = false; + World.DefaultGameObjectInjectionWorld = null; } @@ -23,6 +32,11 @@ public void TearDown() if (PreviousGameObjectInjectionWorld != null && !PreviousGameObjectInjectionWorld.IsCreated) PreviousGameObjectInjectionWorld = null; World.DefaultGameObjectInjectionWorld = PreviousGameObjectInjectionWorld; + if (_wasInPlayerLoop) + { + ScriptBehaviourUpdateOrder.AddWorldToCurrentPlayerLoop(PreviousGameObjectInjectionWorld); + _wasInPlayerLoop = false; + } } } } diff --git a/Unity.Entities.Hybrid.Tests/TypeUtility_UnitTests.cs b/Unity.Entities.Hybrid.Tests/TypeUtility_UnitTests.cs deleted file mode 100644 index f3d1c3cb..00000000 --- a/Unity.Entities.Hybrid.Tests/TypeUtility_UnitTests.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using NUnit.Framework; -using UnityEngine; - -namespace Unity.Entities.Tests -{ - public class TypeUtility_UnitTests - { - struct Data : IComponentData {} -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - [DisallowMultipleComponent] - [AddComponentMenu("")] - class DataProxy : ComponentDataProxy {} - - struct SharedData : ISharedComponentData {} - - [AddComponentMenu("")] - class SharedDataProxy : SharedComponentDataProxy {} - - struct BufferElement : IBufferElementData {} - [DisallowMultipleComponent] - class BufferProxy : DynamicBufferProxy {} -#pragma warning restore 618 // remove once ComponentDataProxyBase is removed - - [TestCase(typeof(Data), ExpectedResult = typeof(DataProxy), TestName = nameof(IComponentData))] - [TestCase(typeof(SharedData), ExpectedResult = typeof(SharedDataProxy), TestName = nameof(ISharedComponentData))] - [TestCase(typeof(BufferElement), ExpectedResult = typeof(BufferProxy), TestName = nameof(IBufferElementData))] - [TestCase(typeof(float), ExpectedResult = null, TestName = "Invalid data type")] - public Type GetProxyForType_WhenArgumentIsSpecifiedDataType_ReturnsExpectedValue(Type dataType) - { - return TypeUtility.GetProxyForDataType(dataType); - } - } -} diff --git a/Unity.Entities.Hybrid.Tests/TypeUtility_UnitTests.cs.meta b/Unity.Entities.Hybrid.Tests/TypeUtility_UnitTests.cs.meta deleted file mode 100644 index 31253e41..00000000 --- a/Unity.Entities.Hybrid.Tests/TypeUtility_UnitTests.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3e7c0ee49a2894a0e95241db7f4c2ad1 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.Hybrid/AssemblyInfo.cs b/Unity.Entities.Hybrid/AssemblyInfo.cs index 2c4662cb..cd67f379 100644 --- a/Unity.Entities.Hybrid/AssemblyInfo.cs +++ b/Unity.Entities.Hybrid/AssemblyInfo.cs @@ -6,6 +6,7 @@ [assembly: InternalsVisibleTo("Unity.Entities.TestComponents")] [assembly: InternalsVisibleTo("Unity.Scenes.Editor")] [assembly: InternalsVisibleTo("Unity.Scenes")] +[assembly: InternalsVisibleTo("Unity.Scenes.Editor.Tests")] [assembly: InternalsVisibleTo("Unity.Scenes.Hybrid.Tests")] [assembly: InternalsVisibleTo("Unity.DOTS.Editor")] [assembly: InternalsVisibleTo("Unity.DOTS.Editor.Tests")] @@ -19,3 +20,4 @@ [assembly: InternalsVisibleTo("Unity.Entities.Hybrid.CodeGen.Tests")] [assembly: InternalsVisibleTo("Unity.Tiny.Rendering.Authoring")] [assembly: InternalsVisibleTo("Unity.Entities.Runtime.Build")] +[assembly: InternalsVisibleTo("Unity.Transforms.Hybrid.Tests")] diff --git a/Unity.Entities.Hybrid/Components/ComponentDataProxy.cs b/Unity.Entities.Hybrid/Components/ComponentDataProxy.cs deleted file mode 100644 index dabc8195..00000000 --- a/Unity.Entities.Hybrid/Components/ComponentDataProxy.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System; -using UnityEngine; - -namespace Unity.Entities -{ - [Obsolete("ComponentDataProxy has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] - public abstract class ComponentDataProxy : ComponentDataProxyBase where T : struct, IComponentData - { - internal override void ValidateSerializedData() - { - ValidateSerializedData(ref m_SerializedData); - } - - protected virtual void ValidateSerializedData(ref T serializedData) {} - - [SerializeField, WrappedComponentData] - T m_SerializedData; - - public T Value - { - get - { - return m_SerializedData; - } - set - { - ValidateSerializedData(ref value); - m_SerializedData = value; - - EntityManager entityManager; - Entity entity; - - if (CanSynchronizeWithEntityManager(out entityManager, out entity)) - UpdateComponentData(entityManager, entity); - } - } - - internal override ComponentType GetComponentType() - { - return ComponentType.ReadWrite(); - } - - internal override void UpdateComponentData(EntityManager manager, Entity entity) - { - if (!ComponentType.ReadWrite().IsZeroSized) - manager.SetComponentData(entity, m_SerializedData); - } - - internal override void UpdateSerializedData(EntityManager manager, Entity entity) - { - if (!ComponentType.ReadWrite().IsZeroSized) - m_SerializedData = manager.GetComponentData(entity); - } - - internal override int InsertSharedComponent(EntityManager manager) - { - throw new InvalidOperationException(); - } - - internal override void UpdateSerializedData(EntityManager manager, int sharedComponentIndex) - { - throw new InvalidOperationException(); - } - } -} diff --git a/Unity.Entities.Hybrid/Components/ComponentDataProxy.cs.meta b/Unity.Entities.Hybrid/Components/ComponentDataProxy.cs.meta deleted file mode 100644 index 8922bf0e..00000000 --- a/Unity.Entities.Hybrid/Components/ComponentDataProxy.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 9154056a27dac415084b3c0dd522facd -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.Hybrid/Components/ComponentDataProxyBase.cs b/Unity.Entities.Hybrid/Components/ComponentDataProxyBase.cs deleted file mode 100644 index 2fd98296..00000000 --- a/Unity.Entities.Hybrid/Components/ComponentDataProxyBase.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System; -using System.Runtime.CompilerServices; -using UnityEngine; - -// Temporarily needed to upgrade RenderMesh so it adds local to world -[assembly: InternalsVisibleTo("Unity.Rendering.Hybrid")] - -namespace Unity.Entities -{ - sealed class WrappedComponentDataAttribute : PropertyAttribute - { - } - - - [ExecuteAlways] - [RequireComponent(typeof(GameObjectEntity))] - [Obsolete("ComponentDataProxyBase has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] - public abstract class ComponentDataProxyBase : MonoBehaviour, ISerializationCallbackReceiver - { - internal abstract ComponentType GetComponentType(); - internal abstract void UpdateComponentData(EntityManager manager, Entity entity); - internal abstract void UpdateSerializedData(EntityManager manager, Entity entity); - - internal abstract int InsertSharedComponent(EntityManager manager); - internal abstract void UpdateSerializedData(EntityManager manager, int sharedComponentIndex); - - internal abstract void ValidateSerializedData(); - - protected virtual void OnEnable() - { - EntityManager entityManager; - Entity entity; - if ( - World.DefaultGameObjectInjectionWorld != null - && TryGetEntityAndManager(out entityManager, out entity) - && !entityManager.HasComponent(entity, GetComponentType()) // in case GameObjectEntity already added - ) - entityManager.AddComponent(entity, GetComponentType()); - } - - protected virtual void OnDisable() - { - if (!gameObject.activeInHierarchy) // GameObjectEntity will handle removal when Entity is destroyed - return; - EntityManager entityManager; - Entity entity; - if (CanSynchronizeWithEntityManager(out entityManager, out entity)) - entityManager.RemoveComponent(entity, GetComponentType()); - } - - internal bool TryGetEntityAndManager(out EntityManager entityManager, out Entity entity) - { - entityManager = default; - entity = Entity.Null; - // gameObject is not initialized yet in native when OnBeforeSerialized() is called via SmartReset() - if (gameObject == null) - return false; - var gameObjectEntity = GetComponent(); - if (gameObjectEntity == null) - return false; - var world = gameObjectEntity.World; - if (world == null || !world.IsCreated) - return false; - - var em = world.EntityManager; - if (!em.Exists(gameObjectEntity.Entity)) - return false; - entityManager = em; - entity = gameObjectEntity.Entity; - return true; - } - - internal bool CanSynchronizeWithEntityManager(out EntityManager entityManager, out Entity entity) - { - return TryGetEntityAndManager(out entityManager, out entity) - && entityManager.HasComponent(entity, GetComponentType()); - } - - void OnValidate() - { - ValidateSerializedData(); - EntityManager entityManager; - Entity entity; - if (CanSynchronizeWithEntityManager(out entityManager, out entity)) - UpdateComponentData(entityManager, entity); - } - - void Reset() - { - OnValidate(); - } - - void ISerializationCallbackReceiver.OnBeforeSerialize() - { - EntityManager entityManager; - Entity entity; - if (CanSynchronizeWithEntityManager(out entityManager, out entity)) - UpdateSerializedData(entityManager, entity); - } - - void ISerializationCallbackReceiver.OnAfterDeserialize() {} - } -} diff --git a/Unity.Entities.Hybrid/Components/ComponentDataProxyBase.cs.meta b/Unity.Entities.Hybrid/Components/ComponentDataProxyBase.cs.meta deleted file mode 100644 index 6216e58e..00000000 --- a/Unity.Entities.Hybrid/Components/ComponentDataProxyBase.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4d2d403b758c841beb7def20644cc748 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.Hybrid/Components/DynamicBufferProxy.cs b/Unity.Entities.Hybrid/Components/DynamicBufferProxy.cs deleted file mode 100644 index 6b92da2a..00000000 --- a/Unity.Entities.Hybrid/Components/DynamicBufferProxy.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -namespace Unity.Entities -{ - [Obsolete("DynamicBufferProxy has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] - public abstract class DynamicBufferProxy : ComponentDataProxyBase where T : struct, IBufferElementData - { - internal override void ValidateSerializedData() - { - ValidateSerializedData(m_SerializedData); - } - - protected virtual void ValidateSerializedData(List serializedData) {} - - [SerializeField] - List m_SerializedData = new List(); - - public IEnumerable Value { get { return m_SerializedData; } } - - public void SetValue(IReadOnlyList value) - { - m_SerializedData.Clear(); - if (value == null) - return; - if (m_SerializedData.Capacity < value.Count) - m_SerializedData.Capacity = value.Count; - for (int i = 0, count = value.Count; i < count; ++i) - m_SerializedData.Add(value[i]); - ValidateSerializedData(m_SerializedData); - - EntityManager entityManager; - Entity entity; - - if (CanSynchronizeWithEntityManager(out entityManager, out entity)) - UpdateComponentData(entityManager, entity); - } - - internal override ComponentType GetComponentType() - { - return ComponentType.ReadWrite(); - } - - internal override void UpdateComponentData(EntityManager manager, Entity entity) - { - var buffer = manager.GetBuffer(entity); - buffer.Clear(); - foreach (var element in m_SerializedData) - buffer.Add(element); - } - - internal override void UpdateSerializedData(EntityManager manager, Entity entity) - { - var buffer = manager.GetBuffer(entity); - var count = buffer.Length; - m_SerializedData.Clear(); - if (m_SerializedData.Capacity < count) - m_SerializedData.Capacity = count; - for (var i = 0; i < count; ++i) - m_SerializedData.Add(buffer[i]); - } - - internal override int InsertSharedComponent(EntityManager manager) - { - throw new InvalidOperationException(); - } - - internal override void UpdateSerializedData(EntityManager manager, int sharedComponentIndex) - { - throw new InvalidOperationException(); - } - } -} diff --git a/Unity.Entities.Hybrid/Components/DynamicBufferProxy.cs.meta b/Unity.Entities.Hybrid/Components/DynamicBufferProxy.cs.meta deleted file mode 100644 index b53cf9eb..00000000 --- a/Unity.Entities.Hybrid/Components/DynamicBufferProxy.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3abf97237242f45088b7312d36444f5f -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.Hybrid/Components/GameObjectEntity.cs b/Unity.Entities.Hybrid/Components/GameObjectEntity.cs index 375ec642..26a9d8ef 100644 --- a/Unity.Entities.Hybrid/Components/GameObjectEntity.cs +++ b/Unity.Entities.Hybrid/Components/GameObjectEntity.cs @@ -70,16 +70,14 @@ public static void AddToEntity(EntityManager entityManager, GameObject gameObjec { var components = gameObject.GetComponents(); -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed for (var i = 0; i != components.Length; i++) { var component = components[i]; - if (component == null || component is ComponentDataProxyBase || component is GameObjectEntity || component.IsComponentDisabled()) + if (component == null || component is GameObjectEntity || component.IsComponentDisabled()) continue; entityManager.AddComponentObject(entity, component); } -#pragma warning restore 618 } void Initialize() @@ -110,16 +108,9 @@ protected virtual void OnDisable() m_Entity = Entity.Null; } + [Obsolete("This function is a no-op since there are no proxy components any more. (RemovedAfter 2020-11-30)")] public static void CopyAllComponentsToEntity(GameObject gameObject, EntityManager entityManager, Entity entity) { -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - foreach (var proxy in gameObject.GetComponents()) - { - var type = proxy.GetComponentType(); - entityManager.AddComponent(entity, type); - proxy.UpdateComponentData(entityManager, entity); - } -#pragma warning restore 618 } } } diff --git a/Unity.Entities.Hybrid/Components/SharedComponentDataProxy.cs b/Unity.Entities.Hybrid/Components/SharedComponentDataProxy.cs deleted file mode 100644 index 0aab8ee2..00000000 --- a/Unity.Entities.Hybrid/Components/SharedComponentDataProxy.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using UnityEngine; - -namespace Unity.Entities -{ - [Obsolete("SharedComponentDataProxy has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] - public abstract class SharedComponentDataProxy : ComponentDataProxyBase where T : struct, ISharedComponentData - { - internal override void ValidateSerializedData() - { - ValidateSerializedData(ref m_SerializedData); - } - - protected virtual void ValidateSerializedData(ref T serializedData) {} - - [SerializeField, WrappedComponentData] - T m_SerializedData; - - public T Value - { - get - { - return m_SerializedData; - } - set - { - ValidateSerializedData(ref value); - m_SerializedData = value; - - EntityManager entityManager; - Entity entity; - - if (CanSynchronizeWithEntityManager(out entityManager, out entity)) - UpdateComponentData(entityManager, entity); - } - } - - internal override ComponentType GetComponentType() - { - return ComponentType.ReadWrite(); - } - - internal override void UpdateComponentData(EntityManager manager, Entity entity) - { - manager.SetSharedComponentData(entity, m_SerializedData); - } - - internal override void UpdateSerializedData(EntityManager manager, Entity entity) - { - m_SerializedData = manager.GetSharedComponentData(entity); - } - - internal unsafe override int InsertSharedComponent(EntityManager manager) - { - return manager.GetCheckedEntityDataAccess()->ManagedComponentStore.InsertSharedComponent(m_SerializedData); - } - - internal unsafe override void UpdateSerializedData(EntityManager manager, int sharedComponentIndex) - { - m_SerializedData = manager.GetCheckedEntityDataAccess()->ManagedComponentStore.GetSharedComponentData(sharedComponentIndex); - } - } -} diff --git a/Unity.Entities.Hybrid/Components/SharedComponentDataProxy.cs.meta b/Unity.Entities.Hybrid/Components/SharedComponentDataProxy.cs.meta deleted file mode 100644 index b82538bb..00000000 --- a/Unity.Entities.Hybrid/Components/SharedComponentDataProxy.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: fc7662fd92b9b4c1eaa14f1c1a564079 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.Hybrid/ConvertToEntity.cs b/Unity.Entities.Hybrid/ConvertToEntity.cs index c343aa27..7e5ffac1 100644 --- a/Unity.Entities.Hybrid/ConvertToEntity.cs +++ b/Unity.Entities.Hybrid/ConvertToEntity.cs @@ -110,10 +110,8 @@ static void InjectOriginalComponents(GameObjectConversionMappingSystem mappingSy var entity = mappingSystem.GetPrimaryEntity(transform.gameObject); foreach (var com in transform.GetComponents()) { - #pragma warning disable 618 // remove once ComponentDataProxyBase is removed - if (com is GameObjectEntity || com is ConvertToEntity || com is ComponentDataProxyBase || com is StopConvertToEntity) + if (com is GameObjectEntity || com is ConvertToEntity || com is StopConvertToEntity) continue; - #pragma warning restore 618 mappingSystem.DstEntityManager.AddComponentObject(entity, com); } diff --git a/Unity.Entities.Hybrid/EntityManagerExtensions.cs b/Unity.Entities.Hybrid/EntityManagerExtensions.cs index e823aae8..9d1865cd 100644 --- a/Unity.Entities.Hybrid/EntityManagerExtensions.cs +++ b/Unity.Entities.Hybrid/EntityManagerExtensions.cs @@ -1,44 +1,23 @@ -using System.Collections.Generic; +using System; using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; using UnityEngine; namespace Unity.Entities { public static class EntityManagerExtensions { -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - static readonly List s_ReusableComponentList = new List(32); -#pragma warning restore 618 - - public static unsafe Entity Instantiate(this EntityManager entityManager, GameObject srcGameObject) + [Obsolete("This function is equivalent to creating an empty entity since there are no proxy components any more. (RemovedAfter 2020-11-30)")] + public static Entity Instantiate(this EntityManager entityManager, GameObject srcGameObject) { - srcGameObject.GetComponents(s_ReusableComponentList); - var count = s_ReusableComponentList.Count; - ComponentType* componentTypes = stackalloc ComponentType[count]; - - for (var t = 0; t != count; ++t) - componentTypes[t] = s_ReusableComponentList[t].GetComponentType(); - - var srcEntity = entityManager.CreateEntity(entityManager.CreateArchetype(componentTypes, count)); - for (var t = 0; t != count; ++t) - s_ReusableComponentList[t].UpdateComponentData(entityManager, srcEntity); - - s_ReusableComponentList.Clear(); - - return srcEntity; + return entityManager.CreateEntity(); } - public static unsafe void Instantiate(this EntityManager entityManager, GameObject srcGameObject, NativeArray outputEntities) + [Obsolete("This function is equivalent to creating an empty entities since there are no proxy components any more. (RemovedAfter 2020-11-30)")] + public static void Instantiate(this EntityManager entityManager, GameObject srcGameObject, NativeArray outputEntities) { if (outputEntities.Length == 0) return; - - var entity = entityManager.Instantiate(srcGameObject); - - outputEntities[0] = entity; - var entityPtr = (Entity*)outputEntities.GetUnsafePtr(); - entityManager.GetCheckedEntityDataAccess()->InstantiateInternal(entity, entityPtr + 1, outputEntities.Length - 1); + entityManager.CreateEntity(entityManager.CreateArchetype(), outputEntities); } public static unsafe T GetComponentObject(this EntityManager entityManager, Entity entity) where T : Component diff --git a/Unity.Entities.Hybrid/GameObjectConversion/BlobAssetStore.cs b/Unity.Entities.Hybrid/GameObjectConversion/BlobAssetStore.cs index 8289dc42..8cd9a854 100644 --- a/Unity.Entities.Hybrid/GameObjectConversion/BlobAssetStore.cs +++ b/Unity.Entities.Hybrid/GameObjectConversion/BlobAssetStore.cs @@ -1,5 +1,6 @@ using System; using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; using Unity.Mathematics; using UnityEngine; using UnityObject = UnityEngine.Object; @@ -57,7 +58,7 @@ public void ResetCache(bool disposeAllBlobAssetReference) /// public bool TryGet(Hash128 key, out BlobAssetReference blobAssetReference) where T : struct { - var typedHash = ComputeTypedHash(key, typeof(T)); + var typedHash = ComputeKeyAndTypeHash(key, typeof(T)); var res = m_BlobAssets.TryGetValue(typedHash, out var blobData); if (res) @@ -81,7 +82,7 @@ public bool TryGet(Hash128 key, out BlobAssetReference blobAssetReference) /// true if the Store contains the BlobAsset or false if it doesn't public bool Contains(Hash128 key) { - var typedHash = ComputeTypedHash(key, typeof(T)); + var typedHash = ComputeKeyAndTypeHash(key, typeof(T)); return m_BlobAssets.ContainsKey(typedHash); } @@ -94,7 +95,7 @@ public bool Contains(Hash128 key) /// true if the BlobAssetReference was found, false if not found public bool TryAdd(Hash128 key, BlobAssetReference result) where T : struct { - var typedHash = ComputeTypedHash(key, typeof(T)); + var typedHash = ComputeKeyAndTypeHash(key, typeof(T)); if (m_BlobAssets.ContainsKey(typedHash)) { return false; @@ -104,6 +105,31 @@ public bool TryAdd(Hash128 key, BlobAssetReference result) where T : struc return true; } + /// + /// Adds a blob asset where the key that makes it unique is based on the BlobAsset contents itself. If the contents of the generated blob asset is the same as a previously inserted blob asset, + /// then the passed blobAsset will be disposed and the reference to the blob asset will be replaced with the previously added blob asset + /// + /// The blob asset that will be inserted or replaced + /// + /// Returns true if the blob asset was added, returns false if the blob asset was disposed and replaced with the previous blob. + unsafe public bool AddUniqueBlobAsset(ref BlobAssetReference blobAsset) where T : struct + { + Hash128 key = default; + ulong hash = blobAsset.m_data.Header->Hash; + UnsafeUtility.MemCpy(&key, &blobAsset.m_data.Header->Hash, sizeof(ulong)); + key.Value.w = ComputeTypeHash(typeof(T)); + + if (m_BlobAssets.TryGetValue(key, out var previousBlob)) + { + blobAsset.Dispose(); + blobAsset = BlobAssetReference.Create(previousBlob); + return false; + } + + m_BlobAssets.Add(key, blobAsset.m_data); + return true; + } + /// /// Remove a BlobAssetReference from the store /// @@ -113,7 +139,7 @@ public bool TryAdd(Hash128 key, BlobAssetReference result) where T : struc /// True if the BLobAsset was removed from the store, false if it wasn't found public bool Remove(Hash128 key, bool releaseBlobAsset) { - var typedHash = ComputeTypedHash(key, typeof(T)); + var typedHash = ComputeKeyAndTypeHash(key, typeof(T)); if (releaseBlobAsset && m_BlobAssets.TryGetValue(typedHash, out var blobData)) { @@ -144,9 +170,15 @@ public void Dispose() m_RefCounterPerBlobHash.Dispose(); } - static Hash128 ComputeTypedHash(Hash128 key, Type type) + + static uint ComputeTypeHash(Type type) + { + return (uint)type.GetHashCode(); + } + + static Hash128 ComputeKeyAndTypeHash(Hash128 key, Type type) { - return new Hash128(math.hash(new uint4x2 { c0 = key.Value, c1 = new uint4((uint)type.GetHashCode())})); + return new Hash128(math.hash(new uint4x2 { c0 = key.Value, c1 = new uint4(ComputeTypeHash(type))})); } /// diff --git a/Unity.Entities.Hybrid/GameObjectConversion/ConversionDependencies.cs b/Unity.Entities.Hybrid/GameObjectConversion/ConversionDependencies.cs index 738af69f..390ebddf 100644 --- a/Unity.Entities.Hybrid/GameObjectConversion/ConversionDependencies.cs +++ b/Unity.Entities.Hybrid/GameObjectConversion/ConversionDependencies.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Runtime.CompilerServices; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using UnityEngine; @@ -7,97 +8,202 @@ namespace Unity.Entities.Conversion { - class ConversionDependencies : IDisposable + struct ConversionDependencies : IDisposable { - internal UnsafeHashMap GameObjectIndexByInstanceId = new UnsafeHashMap(0, Allocator.Persistent); - internal List DependentGameObjects = new List(); + [NativeDisableContainerSafetyRestriction] + internal DependencyTracker GameObjectDependencyTracker; +#if UNITY_EDITOR + internal DependencyTracker AssetDependencyTracker; +#endif - internal UnsafeMultiHashMap GameObjectDependentsByInstanceId; - internal UnsafeMultiHashMap AssetDependentsByInstanceId = new UnsafeMultiHashMap(0, Allocator.Persistent); - readonly bool m_IsLiveLink; + private NativeHashMap _componentDependenciesByTypeIndex; + private NativeHashSet _unresolvedComponentInstanceIds; + internal bool HasUnresolvedComponentInstanceIds => !_unresolvedComponentInstanceIds.IsEmpty; + readonly bool _isLiveLink; - public ConversionDependencies(bool isLiveLink) + internal ConversionDependencies(bool isLiveLink) { - m_IsLiveLink = isLiveLink; - if (m_IsLiveLink) + _isLiveLink = isLiveLink; + if (_isLiveLink) { - GameObjectDependentsByInstanceId = new UnsafeMultiHashMap(0, Allocator.Persistent); + GameObjectDependencyTracker = new DependencyTracker(Allocator.Persistent); + _componentDependenciesByTypeIndex = new NativeHashMap(0, Allocator.Persistent); + _unresolvedComponentInstanceIds = new NativeHashSet(0, Allocator.Persistent); } + else + { + GameObjectDependencyTracker = default; + _componentDependenciesByTypeIndex = default; + _unresolvedComponentInstanceIds = default; + } +#if UNITY_EDITOR + AssetDependencyTracker = new DependencyTracker(Allocator.Persistent); +#endif } - int RegisterDependentGameObject(GameObject dependent) + internal void RegisterComponentTypeForDependencyTracking() where T : Component + => RegisterComponentTypeForDependencyTracking(TypeManager.GetTypeIndex()); + + internal void RegisterComponentTypeForDependencyTracking(int typeIndex) { - int index = DependentGameObjects.Count; - var instanceId = dependent.GetInstanceID(); - if (GameObjectIndexByInstanceId.TryAdd(instanceId, index)) - DependentGameObjects.Add(dependent); - else - index = GameObjectIndexByInstanceId[instanceId]; - return index; + if (!_componentDependenciesByTypeIndex.ContainsKey(typeIndex)) + _componentDependenciesByTypeIndex.Add(typeIndex, new DependencyTracker(Allocator.Persistent)); } - public void DependOnGameObject(GameObject dependent, GameObject dependsOn) + internal void DependOnGameObject(GameObject dependent, GameObject dependsOn) { - if (!m_IsLiveLink) + if (!_isLiveLink) { // this dependency only needs to be tracked when using LiveLink, since otherwise subscenes are converted // as a whole. return; } - if (dependsOn == null) - throw new ArgumentNullException(nameof(dependsOn)); + + if (dependent == null) + throw new ArgumentNullException(nameof(dependent)); + if (ReferenceEquals(dependsOn, null)) + { + // It is essential that we early out here. Due to the way that null-ness works in Unity, we can still + // work with the data we get even if it is null to extract the instance ID. This means that we should + // *not* blame the user when they pass a null-value in here, because they will probably not use + // ReferenceEquals but stick to == null, which then means we cannot extract the instance id anymore. + return; + } + GameObjectDependencyTracker.AddDependency(dependent.GetInstanceID(), dependsOn.GetInstanceID()); + } + + internal void DependOnAsset(GameObject dependent, Object dependsOn) + { +#if UNITY_EDITOR if (dependent == null) throw new ArgumentNullException(nameof(dependent)); - int index = RegisterDependentGameObject(dependent); - GameObjectDependentsByInstanceId.Add(dependsOn.GetInstanceID(), index); + if (ReferenceEquals(dependsOn, null)) + return; + if (dependsOn != null && !dependsOn.IsAsset() && !dependsOn.IsPrefab()) + { + return; + } + + int dependentId = dependent.GetInstanceID(); + int assetId = dependsOn.GetInstanceID(); + AssetDependencyTracker.AddDependency(dependentId, assetId); +#endif } - public void DependOnAsset(GameObject dependent, Object dependsOn) + internal void DependOnComponent(GameObject dependent, Component dependsOn) { + if (!_isLiveLink) + { + // this dependency only needs to be tracked when using LiveLink, since otherwise subscenes are converted + // as a whole. + return; + } if (dependent == null) throw new ArgumentNullException(nameof(dependent)); + if (ReferenceEquals(dependsOn, null)) + { + // It is essential that we early out here. Due to the way that null-ness works in Unity, we can still + // work with the data we get even if it is null to extract the instance ID. This means that we should + // *not* blame the user when they pass a null-value in here, because they will probably not use + // ReferenceEquals but stick to == null, which then means we cannot extract the instance id anymore. + return; + } + + // Figure out what to depend on. We generally speaking prefer to depend on GameObjects instead of components + // but if a component is destroyed, we only have its instance id to go by and need to migrate it to a + // GameObject dependency later. + int dependsOnId; if (dependsOn == null) - throw new ArgumentNullException(nameof(dependsOn)); - if (!dependsOn.IsAsset() && !dependsOn.IsPrefab()) - throw new ArgumentException($"The target object {dependsOn.name} is not an asset.", nameof(dependsOn)); - int index = RegisterDependentGameObject(dependent); - AssetDependentsByInstanceId.Add(dependsOn.GetInstanceID(), index); + { + dependsOnId = dependsOn.GetInstanceID(); + _unresolvedComponentInstanceIds.Add(dependsOnId); + } + else + dependsOnId = dependsOn.gameObject.GetInstanceID(); + + int dependentId = dependent.GetInstanceID(); + GameObjectDependencyTracker.AddDependency(dependentId, dependsOnId); + var typeIndex = TypeManager.GetTypeIndex(dependsOn.GetType()); + if (_componentDependenciesByTypeIndex.TryGetValue(typeIndex, out var dependencyTracker)) + { + dependencyTracker.AddDependency(dependentId, dependsOnId); + _componentDependenciesByTypeIndex[typeIndex] = dependencyTracker; + } } - void CalculateDependents(IEnumerable gameObjects, HashSet dependents) + internal void ResolveComponentInstanceIds(int gameObjectInstanceId, List components) { - var toBeProcessed = new Stack(gameObjects); - while (toBeProcessed.Count != 0) + NativeList dependentList = new NativeList(32, Allocator.Temp); + foreach (var c in components) { - var go = toBeProcessed.Pop(); - - if (dependents.Add(go)) - { - var indices = GameObjectDependentsByInstanceId.GetValuesForKey(go.GetInstanceID()); - foreach (var index in indices) - { - var dependentGO = DependentGameObjects[index]; - if (!dependents.Contains(dependentGO)) - toBeProcessed.Push(dependentGO); - } - } + int componentInstanceId = c.GetInstanceID(); + if (!_unresolvedComponentInstanceIds.Remove(componentInstanceId)) + continue; + + GameObjectDependencyTracker.RemapInstanceId(componentInstanceId, gameObjectInstanceId); + var typeIndex = TypeManager.GetTypeIndex(c.GetType()); + if (_componentDependenciesByTypeIndex.TryGetValue(typeIndex, out var dependencyTracker)) + dependencyTracker.RemapInstanceId(componentInstanceId, gameObjectInstanceId); + dependentList.Clear(); } } - public HashSet CalculateDependents(IEnumerable gameObjects) + internal void ClearDependencies(NativeArray instanceIds) { - var dependents = new HashSet(); - CalculateDependents(gameObjects, dependents); - return dependents; + GameObjectDependencyTracker.ClearDependencies(instanceIds); +#if UNITY_EDITOR + AssetDependencyTracker.ClearDependencies(instanceIds); +#endif + + var componentTrackers = _componentDependenciesByTypeIndex.GetKeyValueArrays(Allocator.Temp); + for (int i = 0; i < componentTrackers.Keys.Length; i++) + { + var key = componentTrackers.Keys[i]; + var dependencyTracker = componentTrackers.Values[i]; + dependencyTracker.ClearDependencies(instanceIds); + _componentDependenciesByTypeIndex[key] = dependencyTracker; + } + + } + + internal void CalculateAssetDependents(NativeArray assetInstanceIds, NativeHashSet outDependents) + { +#if UNITY_EDITOR + if (assetInstanceIds.Length == 0) + return; + var toBeProcessed = new NativeList(0, Allocator.Temp); + AssetDependencyTracker.CalculateDirectDependents(assetInstanceIds, toBeProcessed); + CalculateDependents(toBeProcessed, outDependents); +#endif } + internal bool TryGetComponentDependencyTracker(out DependencyTracker tracker) + => _componentDependenciesByTypeIndex.TryGetValue(TypeManager.GetTypeIndex(), out tracker); + internal bool TryGetComponentDependencyTracker(int typeIndex, out DependencyTracker tracker) + => _componentDependenciesByTypeIndex.TryGetValue(typeIndex, out tracker); + + internal void CalculateDependents(NativeArray instanceIds, NativeHashSet outDependents) + => GameObjectDependencyTracker.CalculateDependents(instanceIds, outDependents); + + public void Dispose() { - if (GameObjectDependentsByInstanceId.IsCreated) - GameObjectDependentsByInstanceId.Dispose(); - GameObjectIndexByInstanceId.Dispose(); - AssetDependentsByInstanceId.Dispose(); + GameObjectDependencyTracker.Dispose(); + if (_unresolvedComponentInstanceIds.IsCreated) + _unresolvedComponentInstanceIds.Dispose(); + + if (_componentDependenciesByTypeIndex.IsCreated) + { + var componentTrackers = _componentDependenciesByTypeIndex.GetValueArray(Allocator.Temp); + for (int i = 0; i < componentTrackers.Length; i++) + componentTrackers[i].Dispose(); + _componentDependenciesByTypeIndex.Dispose(); + } + +#if UNITY_EDITOR + AssetDependencyTracker.Dispose(); +#endif } } } diff --git a/Unity.Entities.Hybrid/GameObjectConversion/ConversionJournalData.cs b/Unity.Entities.Hybrid/GameObjectConversion/ConversionJournalData.cs index 83f5dfa8..d4b010b2 100644 --- a/Unity.Entities.Hybrid/GameObjectConversion/ConversionJournalData.cs +++ b/Unity.Entities.Hybrid/GameObjectConversion/ConversionJournalData.cs @@ -16,6 +16,11 @@ struct LogEventData : IConversionEventData public string Stacktrace; } + /// + /// Exposes the entities that belong to a GameObject with a given instance ID. + /// + /// ATTENTION: Future public API. + /// internal struct ConvertedEntitiesAccessor { NativeHashMap m_HeadIdIndices; // object instanceId -> front index @@ -29,7 +34,13 @@ internal ConvertedEntitiesAccessor(NativeHashMap headIndices, } - internal MultiListEnumerator GetEntities(int instanceId) + /// + /// Returns an enumerator for the entities associated with a given instance ID. The first entity returned by + /// the enumerator is the primary entity associated with the instance ID. + /// + /// The instance ID of the GameObject that you want to get the entities of. + /// An enumerator for the entities associated with the instance ID. + public MultiListEnumerator GetEntities(int instanceId) { if (!m_HeadIdIndices.TryGetValue(instanceId, out var headIdIndex)) return MultiListEnumerator.Empty; @@ -47,8 +58,8 @@ partial struct ConversionJournalData : IDisposable // Only for UnityEngine component types to be stored in a companion GameObject // maps GameObject to MultiList m_HybridTypes // for 2020.2, this could be based on instance IDs instead - Dictionary m_HybridHeadIdIndices; - internal Dictionary HybridHeadIdIndices => m_HybridHeadIdIndices; + Dictionary m_NewHybridHeadIdIndices; + internal Dictionary NewHybridHeadIdIndices => m_NewHybridHeadIdIndices; public void Dispose() @@ -70,7 +81,7 @@ public void Init() { m_HeadIdIndices = new NativeHashMap(1000, Allocator.Persistent); m_FreeHeadIds = new NativeList(Allocator.Persistent); - m_HybridHeadIdIndices = new Dictionary(); + m_NewHybridHeadIdIndices = new Dictionary(); m_Entities.Init(); m_LogEvents.Init(); @@ -90,7 +101,7 @@ public void RemoveForIncremental(int instanceId, GameObject go) m_LogEvents.ReleaseList(headIdIndex); } - if (go != null && m_HybridHeadIdIndices.TryGetValue(go, out headIdIndex)) + if (go != null && m_NewHybridHeadIdIndices.TryGetValue(go, out headIdIndex)) { m_HybridTypes.ReleaseList(headIdIndex); } @@ -132,10 +143,10 @@ int GetOrAddHeadIdIndex(int objectInstanceId) int GetOrAddHybridHeadIdIndex(GameObject gameObject) { - if (!m_HybridHeadIdIndices.TryGetValue(gameObject, out var headIdIndex)) + if (!m_NewHybridHeadIdIndices.TryGetValue(gameObject, out var headIdIndex)) { - headIdIndex = m_HybridHeadIdIndices.Count; - m_HybridHeadIdIndices.Add(gameObject, headIdIndex); + headIdIndex = m_NewHybridHeadIdIndices.Count; + m_NewHybridHeadIdIndices.Add(gameObject, headIdIndex); var headIdsCapacity = headIdIndex + 1; if (MultiList.CalcExpandCapacity(m_HybridTypes.HeadIds.Length, ref headIdsCapacity)) @@ -316,6 +327,11 @@ public void AddHybridComponent(GameObject gameObject, Type type) public MultiListEnumerator> HybridTypes(int headIdIndex) => m_HybridTypes.SelectList(headIdIndex); + internal void ClearNewHybridComponents() + { + m_NewHybridHeadIdIndices.Clear(); + } + public IEnumerable<(int objectInstanceId, LogEventData eventData)> SelectLogEventsFast() => SelectJournalData(m_LogEvents); diff --git a/Unity.Entities.Hybrid/GameObjectConversion/ConversionLogUtils.cs b/Unity.Entities.Hybrid/GameObjectConversion/ConversionLogUtils.cs new file mode 100644 index 00000000..29f02d5c --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/ConversionLogUtils.cs @@ -0,0 +1,97 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using UnityEngine; + +namespace GameObjectConversion +{ + internal enum LogType + { + Exception, + Error, + Warning, + Assert, + Log, + Line + } + + internal static class ConversionLogUtils + { + public static IEnumerable<(LogType Type, string Content)> ParseConversionLog(string conversionLogPath) + { + (LogType logType, string)[] allLogTypes = + Enum.GetValues(typeof(LogType)).Cast().Select(logType => (logType, $"{logType.ToString()}:")).ToArray(); + + LogType GetLogType(string currentLine) + { + foreach (var (logType, logString) in allLogTypes) + { + if (currentLine.StartsWith(logString)) + { + return logType; + } + } + return LogType.Line; + } + + var conversionLogLines = File.ReadLines(conversionLogPath); + + var currentLog = new StringBuilder(); + LogType currentLogType = LogType.Line; + + foreach (string line in conversionLogLines) + { + LogType logType = GetLogType(line); + + if (logType == LogType.Line) + { + currentLog.AppendLine(line); + } + else + { + if (currentLog.Length > 0) + { + yield return (currentLogType, currentLog.ToString()); + currentLog.Clear(); + } + currentLogType = logType; + currentLog.AppendLine(line); + } + } + + if (currentLog.Length > 0 && currentLogType != LogType.Line) + { + yield return (currentLogType, currentLog.ToString()); + } + } + + public static (bool HasError, bool HasException) PrintConversionLogToUnityConsole(string conversionLogPath) + { + bool hasException = false; + bool hasError = false; + foreach (var (type, content) in ParseConversionLog(conversionLogPath)) + { + switch (type) + { + case LogType.Log: + Debug.Log(content); + break; + case LogType.Warning: + Debug.LogWarning(content); + break; + case LogType.Error: + Debug.LogError(content); + hasError = true; + break; + case LogType.Exception: + Debug.LogError(content); + hasException = true; + break; + } + } + return (hasError, hasException); + } + } +} diff --git a/Unity.Entities.Editor/PropertyDrawers/WrappedComponentDataDrawer.cs.meta b/Unity.Entities.Hybrid/GameObjectConversion/ConversionLogUtils.cs.meta similarity index 83% rename from Unity.Entities.Editor/PropertyDrawers/WrappedComponentDataDrawer.cs.meta rename to Unity.Entities.Hybrid/GameObjectConversion/ConversionLogUtils.cs.meta index 4de564e3..1e068eb2 100644 --- a/Unity.Entities.Editor/PropertyDrawers/WrappedComponentDataDrawer.cs.meta +++ b/Unity.Entities.Hybrid/GameObjectConversion/ConversionLogUtils.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 6811e8019edfb421c93a067485a4adf2 +guid: d90245c8ba36abd4ab55ac1c4a50920e MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Unity.Entities.Hybrid/GameObjectConversion/ConversionSystemFilterSettings.cs b/Unity.Entities.Hybrid/GameObjectConversion/ConversionSystemFilterSettings.cs index 2d2750a2..0e82a2ad 100644 --- a/Unity.Entities.Hybrid/GameObjectConversion/ConversionSystemFilterSettings.cs +++ b/Unity.Entities.Hybrid/GameObjectConversion/ConversionSystemFilterSettings.cs @@ -18,13 +18,8 @@ public sealed class ConversionSystemFilterSettings : Build.IBuildComponent bool m_IsDirty = true; [CreateProperty] -#if UNITY_2020_1_OR_NEWER public List> ExcludedConversionSystemAssemblies { get; set; } = new List>(); -#else - public List ExcludedConversionSystemAssemblies { get; set; } = - new List(); -#endif public ConversionSystemFilterSettings() {} @@ -87,11 +82,7 @@ void UpdateIfDirty() m_ExcludedDomainAssemblies = new HashSet(); var domainAssemblies = AppDomain.CurrentDomain.GetAssemblies(); -#if UNITY_2020_1_OR_NEWER foreach (var excl in ExcludedConversionSystemAssemblies.Select(lazy => lazy.asset)) -#else - foreach (var excl in ExcludedConversionSystemAssemblies) -#endif { var asm = domainAssemblies.FirstOrDefault(s => s.GetName().Name == excl.name); if (asm != null) diff --git a/Unity.Entities.Hybrid/GameObjectConversion/ConvertGameObjectToEntitySystem.cs b/Unity.Entities.Hybrid/GameObjectConversion/ConvertGameObjectToEntitySystem.cs index 9bce31f8..475d5edc 100644 --- a/Unity.Entities.Hybrid/GameObjectConversion/ConvertGameObjectToEntitySystem.cs +++ b/Unity.Entities.Hybrid/GameObjectConversion/ConvertGameObjectToEntitySystem.cs @@ -61,21 +61,4 @@ protected override void OnUpdate() Entities.ForEach((RectTransform transform) => Convert(transform, convertibles)); } } - - [UpdateInGroup(typeof(GameObjectBeforeConversionGroup))] - class ComponentDataProxyToEntitySystem : GameObjectConversionSystem - { - protected override void OnUpdate() - { - Entities.ForEach((Transform transform) => - { - GameObjectConversionMappingSystem.CopyComponentDataProxyToEntity(DstEntityManager, transform.gameObject, GetPrimaryEntity(transform)); - }); - //@TODO: Remove this again once KevinM adds support for inheritance in queries - Entities.ForEach((RectTransform transform) => - { - GameObjectConversionMappingSystem.CopyComponentDataProxyToEntity(DstEntityManager, transform.gameObject, GetPrimaryEntity(transform)); - }); - } - } } diff --git a/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionMappingSystem.cs b/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionMappingSystem.cs index b3ce1c5c..be142ce5 100644 --- a/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionMappingSystem.cs +++ b/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionMappingSystem.cs @@ -3,7 +3,6 @@ using System.Collections.Generic; using System.IO; using System.Linq; -using System.Reflection; using System.Runtime.CompilerServices; using System.Text; using Unity.Collections; @@ -13,6 +12,7 @@ using Unity.Transforms; using UnityEngine; using UnityEngine.Assertions; +using UnityEngine.Profiling; using UnityEngine.SceneManagement; using ConversionFlags = Unity.Entities.GameObjectConversionUtility.ConversionFlags; using UnityLogType = UnityEngine.LogType; @@ -41,6 +41,8 @@ class GameObjectConversionMappingSystem : ComponentSystem static List s_ComponentsCache = new List(); internal GameObjectConversionSettings Settings { get; private set; } + private IncrementalConversionContext m_LiveConversionContext; + private IncrementalConversionData m_IncrementalConversionData; readonly EntityManager m_DstManager; readonly JournalingUnityLogger m_JournalingUnityLogger; @@ -48,9 +50,7 @@ class GameObjectConversionMappingSystem : ComponentSystem int m_BeginConvertingRefCount; ConversionJournalData m_JournalData; - - ConversionDependencies m_Dependencies; - internal ConversionDependencies Dependencies => m_Dependencies; + internal ref ConversionDependencies Dependencies => ref m_LiveConversionContext.Dependencies; EntityArchetype[] m_Archetypes; @@ -78,17 +78,86 @@ class GameObjectConversionMappingSystem : ComponentSystem public EntityManager DstEntityManager => Settings.DestinationWorld.EntityManager; public ConversionState ConversionState => m_ConversionState; + struct CachedCollections + { + public List OldGameObjects; + public List NewGameObjects; + public List TmpObjects; + public Stack Transforms; + public HashSet GameObjectsWithEntities; + + public void Init() + { + if (OldGameObjects != null) + { + OldGameObjects.Clear(); + NewGameObjects.Clear(); + TmpObjects.Clear(); + Transforms.Clear(); + GameObjectsWithEntities.Clear(); + } + else + { + OldGameObjects = new List(); + NewGameObjects = new List(); + TmpObjects = new List(); + Transforms = new Stack(); + GameObjectsWithEntities = new HashSet(); + } + } + } + + private CachedCollections _cachedCollections; + public GameObjectConversionMappingSystem(GameObjectConversionSettings settings) { Settings = settings; m_DstManager = Settings.DestinationWorld.EntityManager; m_JournalingUnityLogger = new JournalingUnityLogger(this); - m_Dependencies = new ConversionDependencies(IsLiveLink); m_JournalData.Init(); + m_IncrementalConversionData = IncrementalConversionData.Create(); + _cachedCollections = default; + _cachedCollections.Init(); +#if !UNITY_2020_2_OR_NEWER + _instanceIdToGameObject = new Dictionary(); +#endif + m_LiveConversionContext = new IncrementalConversionContext(IsLiveLink); InitArchetypes(); } +#if !UNITY_2020_2_OR_NEWER + // There is no API in 2020.1 to map instance IDs to game objects, but the conversion code relies on it. This is + // working around that. + private readonly Dictionary _instanceIdToGameObject; + internal void RegisterForInstanceIdMapping(GameObject go) + { + if (go != null && !_instanceIdToGameObject.TryGetValue(go.GetInstanceID(), out _)) + _instanceIdToGameObject.Add(go.GetInstanceID(), go); + } + + void ResolveInstanceIDs(NativeHashSet instanceIDs, HashSet outGameObjects) + { + // TODO: cannot use foreach here because it is broken for NativeHashSet. + var instances = instanceIDs.ToNativeArray(Allocator.Temp); + for (int i = 0; i < instances.Length; i++) + { + if (_instanceIdToGameObject.TryGetValue(instances[i], out var obj)) + outGameObjects.Add(obj); + } + } +#endif + + public void PrepareForLiveLink(Scene scene) + { + var gameObjects = scene.GetRootGameObjects(); + using (new ProfilerMarker("Build Incremental Hierarchy").Auto()) + { + m_LiveConversionContext.InitializeHierarchy(scene, gameObjects); + } + } + + [Obsolete("This functionality is no longer supported. (RemovedAfter 2021-01-09).")] public GameObjectConversionSettings ForkSettings(byte entityGuidNamespaceID) => Settings.Fork(entityGuidNamespaceID); @@ -103,7 +172,8 @@ protected override void OnDestroy() if (m_EntityIdsChached.IsCreated) m_EntityIdsChached.Dispose(); m_JournalData.Dispose(); - m_Dependencies.Dispose(); + m_LiveConversionContext.Dispose(); + m_IncrementalConversionData.Dispose(); } void CleanupConversion() @@ -160,25 +230,39 @@ public void EndConversion() CleanupConversion(); } - #if DETAIL_MARKERS - ProfilerMarker m_CreateEntity = new ProfilerMarker("GameObjectConversion.CreateEntity"); - ProfilerMarker m_CreatePrimaryEntities = new ProfilerMarker("GameObjectConversion.CreatePrimaryEntities"); - ProfilerMarker m_CreateAdditional = new ProfilerMarker("GameObjectConversionCreateAdditionalEntity"); - #endif +#if DETAIL_MARKERS + static ProfilerMarker m_CreateEntity = new ProfilerMarker("GameObjectConversion.CreateEntity"); + static ProfilerMarker m_CreatePrimaryEntities = new ProfilerMarker("GameObjectConversion.CreatePrimaryEntities"); + static ProfilerMarker m_CreateAdditional = new ProfilerMarker("GameObjectConversionCreateAdditionalEntity"); +#if UNITY_2020_2_OR_NEWER + static readonly ProfilerMarker IncrementalClearEntities = new ProfilerMarker("IncrementalClearEntities"); + static readonly ProfilerMarker IncrementalCreateEntitiesOld = new ProfilerMarker("IncrementalCreateEntitiesOld"); + static readonly ProfilerMarker IncrementalCreateEntitiesNew = new ProfilerMarker("IncrementalCreateEntitiesNew"); + static readonly ProfilerMarker IncrementalDeleteEntities = new ProfilerMarker("IncrementalDeleteEntities"); + static readonly ProfilerMarker IncrementalCollectDependencies = new ProfilerMarker("IncrementalCollectDependencies"); +#endif +#endif - EntityArchetype GetCleanIncrementalArchetype(Entity entity) + int ComputeArchetypeFlags(UnityObject uobject) { int flags = 0; - if (m_DstManager.HasComponent(entity)) + if (AddEntityGUID) flags |= k_EntityGUIDMask; - if (m_DstManager.HasComponent(entity)) - flags |= k_StaticMask; - if (m_DstManager.HasComponent(entity)) - flags |= k_DisabledMask; - if (m_DstManager.HasComponent(entity)) - flags |= k_SceneSectionMask; - return m_Archetypes[flags]; + var go = uobject as GameObject; + if (go != null) + { + if (ForceStaticOptimization || go.GetComponentInParent(true) != null) + flags |= k_StaticMask; + if (!go.IsActiveIgnorePrefab()) + flags |= k_DisabledMask; + } + else if (uobject is UnityComponent) + throw new ArgumentException("Object must be a GameObject, Prefab, or Asset", nameof(uobject)); + + if (Settings.SceneGUID != default) + flags |= k_SceneSectionMask; + return flags; } Entity CreateDstEntity(UnityObject uobject, int serial) @@ -203,42 +287,30 @@ void CreateDstEntity(UnityObject uobject, NativeArray outEntities, int s using (m_CreateEntity.Auto()) #endif { - int flags = 0; - if (AddEntityGUID) - flags |= k_EntityGUIDMask; - - var go = uobject as GameObject; - if (go != null) - { - if (ForceStaticOptimization || go.GetComponentInParentIncludeInactive() != null) - flags |= k_StaticMask; - if (!go.IsActiveIgnorePrefab()) - flags |= k_DisabledMask; - } - else if (uobject is UnityComponent) - throw new ArgumentException("Object must be a GameObject, Prefab, or Asset", nameof(uobject)); - + int flags = ComputeArchetypeFlags(uobject); m_DstManager.CreateEntity(m_Archetypes[flags], outEntities); if ((flags & k_EntityGUIDMask) != 0) { +#pragma warning disable 0618 + uint namespaceId = Settings.NamespaceID ^ (uint)m_LiveConversionContext.Scene.handle; for (int i = 0; i < outEntities.Length; i++) - m_DstManager.SetComponentData(outEntities[i], uobject.ComputeEntityGuid(Settings.NamespaceID, serial + i)); + m_DstManager.SetComponentData(outEntities[i], uobject.ComputeEntityGuid(namespaceId, serial + i)); +#pragma warning restore 0618 } if (Settings.SceneGUID != default) { int sectionIndex = 0; + var go = uobject as GameObject; if (go != null) { - var section = go.GetComponentInParentIncludeInactive(); + var section = go.GetComponentInParent(true); if (section != null) { sectionIndex = section.SectionIndex; } } - //@TODO: add an `else` that figures out what referenced this thing, because this is a dependency. - // probably easiest to determine after everything has been converted by simply analyzing entity references. -joe for (int i = 0; i < outEntities.Length; i++) { m_DstManager.AddSharedComponentData(outEntities[i], new SceneSection { SceneGUID = Settings.SceneGUID, Section = sectionIndex }); @@ -271,6 +343,24 @@ public Entity CreatePrimaryEntity(UnityObject uobject) return entity; } + void CreatePrimaryEntitiesRecurse(GameObject go) + { + var stack = _cachedCollections.Transforms; + stack.Clear(); + stack.Push(go.transform); + while (stack.Count > 0) + { + var top = stack.Pop(); + // Check that we do not already have an entity. Might be the case when both a parent and a child are + // separately added to the conversion. + if (!m_JournalData.TryGetPrimaryEntity(top.gameObject.GetInstanceID(), out _)) + CreatePrimaryEntity(top.gameObject); + + for (int i = 0, n = top.childCount; i < n; i++) + stack.Push(top.GetChild(i)); + } + } + public void CreatePrimaryEntities() { if (ConversionState != ConversionState.Discovering) @@ -382,6 +472,19 @@ public bool BuildHasType(params Type[] componentTypes) return true; } + public bool IsBuildingForEditor + { + get + { + return (Settings.ConversionFlags & ConversionFlags.IsBuildingForPlayer) == 0; + } + } + + public UnityEditor.GUID BuildConfigurationGUID + { + get { return Settings.BuildConfigurationGUID; } + } + #endif // UNITY_EDITOR public Entity TryGetPrimaryEntity(UnityObject uobject) @@ -430,6 +533,12 @@ public Entity GetPrimaryEntity(UnityObject uobject) return entity; } + Entity GetPrimaryEntity(int instanceId) + { + m_JournalData.TryGetPrimaryEntity(instanceId, out var entity); + return entity; + } + public Entity CreateAdditionalEntity(UnityObject uobject) { #if DETAIL_MARKERS @@ -474,7 +583,8 @@ public unsafe void CreateAdditionalEntities(UnityObject uobject, NativeArray gameObjects, ConversionFlags flags) +#if !UNITY_2020_2_OR_NEWER + public void PrepareIncrementalConversion(IEnumerable gameObjects, NativeList assetChanges, ConversionFlags flags) { if (Settings.ConversionFlags != flags) throw new ArgumentException("Conversion flags don't match"); @@ -487,18 +597,24 @@ public void PrepareIncrementalConversion(IEnumerable gameObjects, Co m_DstLinkedEntityGroups.Clear(); - HashSet dependents; + HashSet dependents = new HashSet(); using (new ProfilerMarker("CalculateDependencies").Auto()) { - dependents = m_Dependencies.CalculateDependents(gameObjects); - if (dependents == null) - throw new InvalidOperationException("Missing dependencies"); + var dependentInstances = new NativeHashSet(0, Allocator.Temp); + var gosToConvert = gameObjects.ToList(); + var toConvert = new NativeArray(gosToConvert.Count, Allocator.Temp); + for (int i = 0; i < gosToConvert.Count; i++) + toConvert[i] = gosToConvert[i].GetInstanceID(); + Dependencies.CalculateDependents(toConvert, dependentInstances); + if (assetChanges.IsCreated) + Dependencies.CalculateAssetDependents(assetChanges, dependentInstances); + ResolveInstanceIDs(dependentInstances, dependents); } using (new ProfilerMarker($"ClearIncrementalConversion ({dependents.Count} GameObjects)").Auto()) { foreach (var go in dependents) - ClearIncrementalConversion(go); + ClearIncrementalConversion(go.GetInstanceID(), go); } using (new ProfilerMarker($"CreateGameObjectEntities ({dependents.Count} GameObjects)").Auto()) @@ -509,34 +625,183 @@ public void PrepareIncrementalConversion(IEnumerable gameObjects, Co //Debug.Log($"Incremental processing {EntityManager.UniversalQuery.CalculateEntityCount()}"); } +#else + public void BeginIncrementalConversionPreparation(ConversionFlags flags, ref IncrementalConversionBatch arguments) + { + if (Settings.ConversionFlags != flags) + throw new ArgumentException("Conversion flags don't match"); + + if (!IsLiveLink) + throw new InvalidOperationException( + "Incremental conversion can only be used when the conversion world was specifically created for it"); + + if (!EntityManager.UniversalQuery.IsEmptyIgnoreFilter) + throw new InvalidOperationException("Conversion world is expected to be empty"); + + m_DstLinkedEntityGroups.Clear(); + + m_IncrementalConversionData.Clear(); + m_LiveConversionContext.UpdateHierarchy(arguments, ref m_IncrementalConversionData); + + var incrementalSystem = World.GetExistingSystem(); + incrementalSystem.SceneHierarchy.Hierarchy = m_LiveConversionContext.Hierarchy.AsReadOnly(); + incrementalSystem.SceneHierarchy.TransformAccessArray = m_LiveConversionContext.Hierarchy.TransformArray; + incrementalSystem.ConvertedEntities = m_JournalData.GetConvertedEntitiesAccessor(); + incrementalSystem.IncomingChanges = m_IncrementalConversionData.ToChanges(); + } - void ClearIncrementalConversion(GameObject gameObject) + public void FinishIncrementalConversionPreparation() { - var instanceId = gameObject.GetInstanceID(); + var incrementalSystem = World.GetExistingSystem(); + incrementalSystem.ExtractRequests(m_IncrementalConversionData); - if (!m_JournalData.GetEntities(instanceId, out var entities)) - throw new ArgumentException($"GameObject {gameObject} has changed but is not known to the incremental conversion."); +#if DETAIL_MARKERS + using (IncrementalDeleteEntities.Auto()) +#endif + { + // TODO: Once hybrid components have been refactored, this whole thing can go through Burst + var toRemoveLinkedEntityGroup = new NativeList(m_IncrementalConversionData.RemovedInstanceIds.Length, Allocator.Temp); + var toDestroy = new NativeList(m_IncrementalConversionData.RemovedInstanceIds.Length, Allocator.Temp); + foreach (var instanceId in m_IncrementalConversionData.RemovedInstanceIds) + DeleteIncrementalConversion(instanceId, toRemoveLinkedEntityGroup, toDestroy); + m_DstManager.RemoveComponent(toRemoveLinkedEntityGroup); + m_DstManager.DestroyEntity(toDestroy); + } - entities.MoveNext(); - var primaryEntity = entities.Current; - if (m_DstManager.HasComponent(primaryEntity)) - throw new ArgumentException("An Entity with a Prefab tag cannot be updated during incremental conversion"); + _cachedCollections.Init(); + List oldGameObjects = _cachedCollections.OldGameObjects; + List newGameObjects = _cachedCollections.NewGameObjects; + NativeArray dependentInstances; +#if DETAIL_MARKERS + using (IncrementalCollectDependencies.Auto()) +#endif + { + using (var instancesToConvert = + m_LiveConversionContext.CollectAndClearDependencies(m_IncrementalConversionData)) + { + dependentInstances = instancesToConvert.ToNativeArray(Allocator.TempJob); + } + } + + using (dependentInstances) + { +#if DETAIL_MARKERS + using (IncrementalClearEntities.Auto()) +#endif + { + var objs = _cachedCollections.TmpObjects; + Resources.InstanceIDToObjectList(dependentInstances, objs); + var scene = m_LiveConversionContext.Scene; + for (int i = 0; i < dependentInstances.Length; i++) + { + var go = objs[i] as GameObject; + if (go == null || go.scene != scene) + { + // This case can happen e.g. when a GameObject is reparented to another object but that + // new parent is then deleted later or moved to another scene. + // Alternatively, this might happen for example when using prefabs: Deleting a child that + // has a dependency on the root of the prefab would trigger this as well. + continue; + } + if (ClearIncrementalConversion(dependentInstances[i], go)) + oldGameObjects.Add(go); + else + newGameObjects.Add(go); + } + } + } - //@TODO(scobi): implement removal of primary - m_DstManager.SetArchetype(primaryEntity, GetCleanIncrementalArchetype(primaryEntity)); + m_IncrementalConversionData.Clear(); - while (entities.MoveNext()) +#if DETAIL_MARKERS + using (IncrementalCreateEntitiesOld.Auto()) +#endif { - var entity = entities.Current; - if (m_DstManager.HasComponent(entity)) - throw new ArgumentException("An Entity with a LinkedEntityGroup cannot be destroyed during incremental conversion"); - if (m_DstManager.HasComponent(entity)) - throw new ArgumentException("An Entity with a Prefab tag cannot be updated during incremental conversion"); + foreach (var go in oldGameObjects) + { + // this check is necessary so enabling/disabling GOs works as expected + if (!go.activeSelf) + DeclareLinkedEntityGroup(go); - m_DstManager.DestroyEntity(entity); + _cachedCollections.GameObjectsWithEntities.Add(go); + CreateGameObjectEntity(EntityManager, go, s_ComponentsCache); + } + } + +#if DETAIL_MARKERS + using (IncrementalCreateEntitiesNew.Auto()) +#endif + { + foreach (var go in newGameObjects) + { + if (_cachedCollections.GameObjectsWithEntities.Contains(go)) + continue; + CreatePrimaryEntitiesRecurse(go); + CreateEntitiesForGameObjectsRecurse(go.transform, _cachedCollections.GameObjectsWithEntities); + } } + } +#endif - m_JournalData.RemoveForIncremental(gameObject.GetInstanceID(), gameObject); + static void CheckCanConvertIncrementally(EntityManager manager, Entity entity, bool isPrimary) + { + if (manager.HasComponent(entity)) + throw new ArgumentException("An Entity with a Prefab tag cannot be destroyed during incremental conversion"); +#if !UNITY_2020_2_OR_NEWER + if (!isPrimary && manager.HasComponent(entity)) + throw new ArgumentException("An Entity with a LinkedEntityGroup component cannot be destroyed during incremental conversion"); +#endif + } + + void DeleteIncrementalConversion(int instanceId, NativeList toRemoveLinkedEntityGroup, NativeList toDestroy) + { + if (m_JournalData.GetEntities(instanceId, out var entities)) + { + entities.MoveNext(); + var primaryEntity = entities.Current; + CheckCanConvertIncrementally(m_DstManager, primaryEntity, true); + + while (entities.MoveNext()) + { + var entity = entities.Current; + CheckCanConvertIncrementally(m_DstManager, entity, false); + toDestroy.Add(entity); + } + + m_JournalData.RemoveForIncremental(instanceId, null); + m_JournalData.RemovePrimaryEntity(instanceId); + // If this entity had a linked entity group, we should remove it before destroying it. It could be that + // one of the entities in the linked entity group is getting re-converted some other way, i.e. the data + // in the linked entity group is stale at this point. + toRemoveLinkedEntityGroup.Add(primaryEntity); + toDestroy.Add(primaryEntity); + } + } + + bool ClearIncrementalConversion(int instanceId, GameObject go) + { + if (m_JournalData.GetEntities(instanceId, out var entities)) + { + entities.MoveNext(); + var primaryEntity = entities.Current; + CheckCanConvertIncrementally(m_DstManager, primaryEntity, true); + + var archetype = m_Archetypes[ComputeArchetypeFlags(go)]; + m_DstManager.SetArchetype(primaryEntity, archetype); + + while (entities.MoveNext()) + { + var entity = entities.Current; + CheckCanConvertIncrementally(m_DstManager, entity, false); + m_DstManager.DestroyEntity(entity); + } + + m_JournalData.RemoveForIncremental(instanceId, go); + return true; + } + + m_JournalData.RemoveForIncremental(instanceId, go); + return false; } /// @@ -741,21 +1006,6 @@ public void AddPrefabComponentDataTag() } } - public static void CopyComponentDataProxyToEntity(EntityManager entityManager, GameObject gameObject, Entity entity) - { -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - foreach (var proxy in gameObject.GetComponents()) - { - if (!proxy.enabled) - continue; - - var type = proxy.GetComponentType(); - entityManager.AddComponent(entity, type); - proxy.UpdateComponentData(entityManager, entity); - } -#pragma warning restore 618 - } - internal static unsafe Entity CreateGameObjectEntity(EntityManager entityManager, GameObject gameObject, List componentsCache) { var componentTypes = stackalloc ComponentType[128]; @@ -769,15 +1019,7 @@ internal static unsafe Entity CreateGameObjectEntity(EntityManager entityManager for (var i = 0; i != componentsCache.Count; i++) { var com = componentsCache[i]; - -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - var componentDataProxy = com as ComponentDataProxyBase; -#pragma warning restore 618 - if (componentDataProxy != null) - { - componentDataProxy.UpdateComponentData(entityManager, entity); - } - else if (com != null) + if (com != null) { entityManager.SetComponentObject(entity, componentTypes[i], com); } @@ -788,12 +1030,15 @@ internal static unsafe Entity CreateGameObjectEntity(EntityManager entityManager void CreateEntitiesForGameObjectsRecurse(Transform transform, HashSet outDiscoveredGameObjects) { + var go = transform.gameObject; + if (outDiscoveredGameObjects != null && !outDiscoveredGameObjects.Add(go)) + return; + // If a game object is disabled, we add a linked entity group so that EntityManager.SetEnabled() on the primary entity will result in the whole hierarchy becoming enabled. - if (!transform.gameObject.activeSelf) - DeclareLinkedEntityGroup(transform.gameObject); + if (!go.activeSelf) + DeclareLinkedEntityGroup(go); - CreateGameObjectEntity(EntityManager, transform.gameObject, s_ComponentsCache); - outDiscoveredGameObjects?.Add(transform.gameObject); + CreateGameObjectEntity(EntityManager, go, s_ComponentsCache); int childCount = transform.childCount; for (int i = 0; i != childCount; i++) @@ -803,7 +1048,6 @@ void CreateEntitiesForGameObjectsRecurse(Transform transform, HashSet(); public List Systems; - public byte NamespaceID; + [Obsolete("This functionality is no longer supported. (RemovedAfter 2021-01-09).")] + public byte NamespaceID; // this must be internal public Action ConversionWorldCreated; // get a callback right after the conversion world is created and systems have been added to it (good for tests that want to inject something) public Action ConversionWorldPreDispose; // get a callback right before the conversion world gets disposed (good for tests that want to validate world contents) @@ -52,6 +52,7 @@ class ExportedAsset public GameObjectConversionSettings() {} // not a clone - only copies what makes sense for creating entities into a separate guid namespace + [Obsolete("This functionality is no longer supported. (RemovedAfter 2021-01-09).")] public GameObjectConversionSettings Fork(byte entityGuidNamespaceID) { if (entityGuidNamespaceID == 0) @@ -67,6 +68,7 @@ public GameObjectConversionSettings Fork(byte entityGuidNamespaceID) BlobAssetStore = BlobAssetStore, #if UNITY_EDITOR BuildConfiguration = BuildConfiguration, + BuildConfigurationGUID = BuildConfigurationGUID, AssetImportContext = AssetImportContext, #endif }; diff --git a/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionSystem.cs b/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionSystem.cs index d70a5573..37f56ea5 100644 --- a/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionSystem.cs +++ b/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionSystem.cs @@ -1,5 +1,4 @@ using System; -using System.ComponentModel; using System.IO; using Unity.Collections; using Unity.Entities; @@ -11,6 +10,7 @@ //@TODO //namespace Unity.Entities //{ + [DisableAutoCreation] [WorldSystemFilter(WorldSystemFilterFlags.GameObjectConversion)] public class GameObjectDeclareReferencedObjectsGroup : ComponentSystemGroup {} @@ -58,6 +58,7 @@ protected override void OnCreate() /// then we need a way to avoid duplication of EntityGuids for these multiple prefabs. So we reserve space for a /// "namespace ID" in the EntityGuid, where if nonzero it is up to the developer to manage. /// + [Obsolete("This functionality is no longer supported. (RemovedAfter 2021-01-09).")] public GameObjectConversionSettings ForkSettings(byte entityGuidNamespaceID) => m_MappingSystem.ForkSettings(entityGuidNamespaceID); @@ -108,8 +109,13 @@ public void DeclareLinkedEntityGroup(GameObject gameObject) /// /// The GameObject that has a dependency. /// The GameObject that the target depends on. - public void DeclareDependency(GameObject target, GameObject dependsOn) => + public void DeclareDependency(GameObject target, GameObject dependsOn) + { +#if !UNITY_2020_2_OR_NEWER + m_MappingSystem.RegisterForInstanceIdMapping(target); +#endif m_MappingSystem.Dependencies.DependOnGameObject(target, dependsOn); + } /// /// Declares that the conversion result of the target Component depends on another component. Any changes to the @@ -118,10 +124,7 @@ public void DeclareDependency(GameObject target, GameObject dependsOn) => /// The Component that has a dependency. /// The Component that the target depends on. public void DeclareDependency(Component target, Component dependsOn) - { - if (target != null && dependsOn != null) - m_MappingSystem.Dependencies.DependOnGameObject(target.gameObject, dependsOn.gameObject); - } + => DeclareDependency(target?.gameObject, dependsOn); /// /// Declares that the conversion result of the target GameObject depends on a source asset. Any changes to the @@ -132,6 +135,20 @@ public void DeclareDependency(Component target, Component dependsOn) public void DeclareAssetDependency(GameObject target, UnityObject dependsOn) => m_MappingSystem.Dependencies.DependOnAsset(target, dependsOn); + /// + /// Declares that the conversion result of the target GameObject depends on another component. Any changes to the + /// dependency should trigger a reconversion of the dependent component. + /// + /// The GameObject that has a dependency. + /// The Component that the target depends on. + public void DeclareDependency(GameObject target, Component dependsOn) + { +#if !UNITY_2020_2_OR_NEWER + m_MappingSystem.RegisterForInstanceIdMapping(target); +#endif + m_MappingSystem.Dependencies.DependOnComponent(target, dependsOn); + } + // ** CONVERSION ** /// Returns true if the `uobject` is included in the set of converted objects. @@ -236,6 +253,23 @@ public MultiListEnumerator GetEntities(Component component) => public BlobAssetStore BlobAssetStore => m_MappingSystem.GetBlobAssetStore(); #if UNITY_EDITOR + /// + /// Returns true if the conversion system is building data that will be loaded in the editor as opposed to in the standalone player. + /// + public bool IsBuildingForEditor + { + get + { + return m_MappingSystem.IsBuildingForEditor; + } + } + + + /// + /// Returns the GUID of the Build configuration of this conversion context. + /// + public UnityEditor.GUID BuildConfigurationGUID => m_MappingSystem.BuildConfigurationGUID; + /// /// Get an of the given type from the current build configuration. If there are /// no current build configuration, the default value is returned. Otherwise, the component must exist diff --git a/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionUtility.cs b/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionUtility.cs index 08a01811..d5dc54de 100644 --- a/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionUtility.cs +++ b/Unity.Entities.Hybrid/GameObjectConversion/GameObjectConversionUtility.cs @@ -1,10 +1,12 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.CompilerServices; using JetBrains.Annotations; using Unity.Collections; using Unity.Entities.Conversion; using Unity.Profiling; +using UnityEditor; using UnityEngine; using UnityEngine.SceneManagement; using UnityObject = UnityEngine.Object; @@ -33,19 +35,23 @@ public enum ConversionFlags : uint AssignName = 1 << 2, SceneViewLiveLink = 1 << 3, GameViewLiveLink = 1 << 4, + IsBuildingForPlayer = 1 << 5 } - internal static World CreateConversionWorld(GameObjectConversionSettings settings) + internal static World CreateConversionWorld(GameObjectConversionSettings settings, Scene scene = default) { using (s_CreateConversionWorld.Auto()) { var gameObjectWorld = new World($"GameObject -> Entity Conversion '{settings.DebugConversionName}'", WorldFlags.Live | WorldFlags.Conversion | WorldFlags.Staging); - gameObjectWorld.AddSystem(new GameObjectConversionMappingSystem(settings)); + var mappingSystem = new GameObjectConversionMappingSystem(settings); + gameObjectWorld.AddSystem(mappingSystem); + if (mappingSystem.IsLiveLink) + mappingSystem.PrepareForLiveLink(scene); var systemTypes = settings.Systems ?? DefaultWorldInitialization.GetAllSystems(settings.FilterFlags); var includeExport = settings.SupportsExporting; - AddConversionSystems(gameObjectWorld, systemTypes.Concat(settings.ExtraSystems), includeExport); + AddConversionSystems(gameObjectWorld, systemTypes.Concat(settings.ExtraSystems), includeExport, mappingSystem.IsLiveLink); settings.ConversionWorldCreated?.Invoke(gameObjectWorld); @@ -163,42 +169,80 @@ internal static void Convert(World conversionWorld) } } + [Obsolete("ConvertIncremental is no longer supported. Incremental conversion is not meant for API consumers. (RemovedAfter 2020-11-20).")] public static void ConvertIncremental(World conversionWorld, IEnumerable gameObjects, ConversionFlags flags) + => ConvertIncremental(conversionWorld, gameObjects, default, flags); + + internal static void ConvertIncremental(World conversionWorld, IEnumerable gameObjects, NativeList changedAssetInstanceIds, ConversionFlags flags) { +#if UNITY_2020_2_OR_NEWER + var args = new IncrementalConversionBatch + { + ReconvertHierarchyInstanceIds = new NativeArray(gameObjects.Select(go => go.GetInstanceID()).ToArray(), Allocator.TempJob), + ChangedComponents = new List() + }; + if (changedAssetInstanceIds.IsCreated) + args.ChangedAssets = changedAssetInstanceIds; + ConvertIncremental(conversionWorld, flags, ref args); + args.ReconvertHierarchyInstanceIds.Dispose(); +#else using (var conversion = new Conversion(conversionWorld)) { - conversion.MappingSystem.PrepareIncrementalConversion(gameObjects, flags); + conversion.MappingSystem.PrepareIncrementalConversion(gameObjects, changedAssetInstanceIds, flags); + FinishConvertIncremental(conversionWorld, conversion); + } +#endif + } - using (s_UpdateConversionSystems.Auto()) - { - conversionWorld.GetExistingSystem().Update(); - conversionWorld.GetExistingSystem().Update(); - conversionWorld.GetExistingSystem().Update(); - } +#if UNITY_2020_2_OR_NEWER + internal static void ConvertIncremental(World conversionWorld, ConversionFlags flags, ref IncrementalConversionBatch batch) + { + using (var conversion = new Conversion(conversionWorld)) + { + conversion.MappingSystem.BeginIncrementalConversionPreparation(flags, ref batch); + conversionWorld.GetExistingSystem().Update(); + conversion.MappingSystem.FinishIncrementalConversionPreparation(); - using (s_GenerateLinkedEntityGroups.Auto()) - conversion.MappingSystem.GenerateLinkedEntityGroups(); + FinishConvertIncremental(conversionWorld, conversion); + } + } +#endif + + static void FinishConvertIncremental(World conversionWorld, Conversion conversion) + { + using (s_UpdateConversionSystems.Auto()) + { + conversionWorld.GetExistingSystem().Update(); + conversionWorld.GetExistingSystem().Update(); + conversionWorld.GetExistingSystem().Update(); + } + + using (s_GenerateLinkedEntityGroups.Auto()) + conversion.MappingSystem.GenerateLinkedEntityGroups(); #if !UNITY_DISABLE_MANAGED_COMPONENTS - using (s_CreateCompanionGameObjects.Auto()) - conversion.MappingSystem.CreateCompanionGameObjects(); + using (s_CreateCompanionGameObjects.Auto()) + conversion.MappingSystem.CreateCompanionGameObjects(); #endif - conversionWorld.EntityManager.DestroyEntity(conversionWorld.EntityManager.UniversalQuery); + conversionWorld.EntityManager.DestroyEntity(conversionWorld.EntityManager.UniversalQuery); - // @TODO: Eventually we need to do incremental conversion of prefabs - // mappingSystem.AddPrefabComponentDataTag(); + // @TODO: Eventually we need to do incremental conversion of prefabs + // mappingSystem.AddPrefabComponentDataTag(); - // @TODO: Eventually we need to figure out how to handle hybrid components incrementally - // mappingSystem.AddHybridComponents(); - } + // @TODO: Eventually we need to figure out how to handle hybrid components incrementally + // mappingSystem.AddHybridComponents(); } + [Obsolete("ConvertIncrementalInitialize is no longer supported. Incremental conversion is not meant for API consumers. (RemovedAfter 2020-11-20).")] public static World ConvertIncrementalInitialize(Scene scene, GameObjectConversionSettings settings) + => InitializeIncrementalConversion(scene, settings); + + internal static World InitializeIncrementalConversion(Scene scene, GameObjectConversionSettings settings) { using (s_ConvertScene.Auto()) { - var conversionWorld = CreateConversionWorld(settings); + var conversionWorld = CreateConversionWorld(settings, scene); using (var conversion = new Conversion(conversionWorld)) { using (s_CreateEntitiesForGameObjects.Auto()) @@ -247,7 +291,7 @@ public static void ConvertScene(Scene scene, GameObjectConversionSettings settin { using (s_ConvertScene.Auto()) { - using (var conversionWorld = CreateConversionWorld(settings)) + using (var conversionWorld = CreateConversionWorld(settings, scene)) using (var conversion = new Conversion(conversionWorld)) { using (s_CreateEntitiesForGameObjects.Auto()) @@ -263,8 +307,9 @@ public static void ConvertScene(Scene scene, GameObjectConversionSettings settin } } - static void AddConversionSystems(World gameObjectWorld, IEnumerable systemTypes, bool includeExport) + static void AddConversionSystems(World gameObjectWorld, IEnumerable systemTypes, bool includeExport, bool isLiveLink) { + var incremental = isLiveLink ? gameObjectWorld.GetOrCreateSystem() : null; var declareConvert = gameObjectWorld.GetOrCreateSystem(); var earlyConvert = gameObjectWorld.GetOrCreateSystem(); var convert = gameObjectWorld.GetOrCreateSystem(); @@ -272,6 +317,9 @@ static void AddConversionSystems(World gameObjectWorld, IEnumerable system var export = includeExport ? gameObjectWorld.GetOrCreateSystem() : null; + if (isLiveLink) + AddSystemAndLogException(gameObjectWorld, incremental, typeof(IncrementalChangesSystem)); + foreach (var systemType in systemTypes) { if (!Attribute.IsDefined(systemType, typeof(UpdateInGroupAttribute), true)) @@ -306,6 +354,11 @@ static void AddConversionSystems(World gameObjectWorld, IEnumerable system if (export != null) AddSystemAndLogException(gameObjectWorld, export, systemType); } + else if (groupType == typeof(ConversionSetupGroup)) + { + if (incremental != null) + AddSystemAndLogException(gameObjectWorld, incremental, systemType); + } else { Debug.LogWarning($"{systemType} has invalid UpdateInGroup[typeof({groupType}]"); @@ -314,6 +367,7 @@ static void AddConversionSystems(World gameObjectWorld, IEnumerable system } } + incremental?.SortSystems(); declareConvert.SortSystems(); earlyConvert.SortSystems(); convert.SortSystems(); @@ -337,6 +391,7 @@ static void AddSystemAndLogException(World world, ComponentSystemGroup group, Ty } catch (Exception e) { + Debug.LogError($"Failed to add conversion system {type}, exception following"); Debug.LogException(e); } } @@ -351,7 +406,7 @@ public static void ConvertGameObjectsToEntitiesField(GameObjectConversionSystem // MIGRATE - //@TODO(scobi): publish this method from UnityEngineExtensions + [Obsolete("This functionality is no longer supported. (RemovedAfter 2021-01-09)")] public static EntityGuid GetEntityGuid(GameObject gameObject, int index) => gameObject.ComputeEntityGuid(0, index); } diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental.meta b/Unity.Entities.Hybrid/GameObjectConversion/Incremental.meta new file mode 100644 index 00000000..b172b446 --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8e03233e098645fe95f7a9d410b764b7 +timeCreated: 1588857931 \ No newline at end of file diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/DependencyTracker.cs b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/DependencyTracker.cs new file mode 100644 index 00000000..1d8d0251 --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/DependencyTracker.cs @@ -0,0 +1,166 @@ +using System; +using Unity.Burst; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; +using UnityEngine; + +namespace Unity.Entities +{ + /// + /// Allows you to query dependents for specific component types. + /// + /// ATTENTION: This is future public API. + /// + [BurstCompile] + [BurstCompatible] + internal struct DependencyTracker : IDisposable + { + UnsafeMultiHashMap _dependentsByInstanceId; + UnsafeMultiHashMap _dependenciesByInstanceId; + + internal DependencyTracker(Allocator allocator) + { + _dependentsByInstanceId = new UnsafeMultiHashMap(0, allocator); + _dependenciesByInstanceId = new UnsafeMultiHashMap(0, allocator); + } + + public void Dispose() + { + if (_dependentsByInstanceId.IsCreated) + _dependentsByInstanceId.Dispose(); + if (_dependenciesByInstanceId.IsCreated) + _dependenciesByInstanceId.Dispose(); + } + + internal void ClearDependencies(NativeArray instanceIds) + { + for (int i = 0; i < instanceIds.Length; i++) + { + int id = instanceIds[i]; + var iter = _dependenciesByInstanceId.GetValuesForKey(id); + while (iter.MoveNext()) + _dependentsByInstanceId.Remove(iter.Current, id); + _dependenciesByInstanceId.Remove(id); + } + } + + [NotBurstCompatible] + internal void AddDependency(int dependentId, int dependsOnId) + { + _dependentsByInstanceId.Add(dependsOnId, dependentId); + _dependenciesByInstanceId.Add(dependentId, dependsOnId); + } + + internal void RemapInstanceId(int previousId, int newId) + { + var dependents = new UnsafeList(0, Allocator.Temp); + foreach (var v in _dependentsByInstanceId.GetValuesForKey(previousId)) + { + dependents.Add(v); + _dependenciesByInstanceId.Remove(v, previousId); + _dependenciesByInstanceId.Add(v, newId); + } + + for (int i = 0; i < dependents.Length; i++) + _dependentsByInstanceId.Add(newId, dependents[i]); + _dependentsByInstanceId.Remove(previousId); + } + + /// + /// Returns whether a given instance has any dependents registered to it. + /// + /// The instance to query for dependents. + /// True if there are any dependents, false otherwise. + public bool HasDependents(int instanceId) => _dependentsByInstanceId.ContainsKey(instanceId); + + internal NativeArray GetAllDependencies(Allocator allocator) => _dependentsByInstanceId.GetKeyArray(allocator); + internal UnsafeMultiHashMap.Enumerator GetAllDependents(int instanceId) => _dependentsByInstanceId.GetValuesForKey(instanceId); + internal bool HasDependencies() => !_dependentsByInstanceId.IsEmpty; + internal bool HasDependencies(int instanceId) => _dependentsByInstanceId.ContainsKey(instanceId); + + internal unsafe void CalculateDependents(NativeArray instanceIds, NativeHashSet outDependents) + { + var toBeProcessed = new UnsafeList(0, Allocator.Temp); + toBeProcessed.AddRange(instanceIds.GetUnsafeReadOnlyPtr(), instanceIds.Length); + while (toBeProcessed.Length != 0) + { + var instance = toBeProcessed.Ptr[toBeProcessed.Length - 1]; + toBeProcessed.RemoveAtSwapBack(toBeProcessed.Length - 1); + if (outDependents.Add(instance)) + { + var dependentIds = _dependentsByInstanceId.GetValuesForKey(instance); + while (dependentIds.MoveNext()) + { + if (!outDependents.Contains(dependentIds.Current)) + toBeProcessed.Add(dependentIds.Current); + } + } + } + } + + /// + /// Calculate all direct dependents for a given set of instances. Transitive dependents are not returned. + /// + /// The instance ids whose dependents should be collected + /// The hash set to add the dependents to. + public void CalculateDirectDependents(NativeArray instanceIds, NativeHashSet outDependents) + { + for (int i = 0; i < instanceIds.Length; i++) + { + var dependents = _dependentsByInstanceId.GetValuesForKey(instanceIds[i]); + while (dependents.MoveNext()) + outDependents.Add(dependents.Current); + } + } + + /// + /// Calculate all direct dependents for a given set of instances. Transitive dependents are not returned. + /// + /// The instance ids whose dependents should be collected + /// The list to add the dependents to. + public void CalculateDirectDependents(NativeArray instanceIds, NativeList outDependents) + { + for (int i = 0; i < instanceIds.Length; i++) + { + var dependents = _dependentsByInstanceId.GetValuesForKey(instanceIds[i]); + while (dependents.MoveNext()) + outDependents.Add(dependents.Current); + } + } + + /// + /// Calculate all direct dependents for a given set of instances. Transitive dependents are not returned. + /// This method is asynchronous and returns a job handle that you can use to chain further jobs. + /// + /// The instance ids whose dependents should be collected. + /// The list to add the dependents to. + /// A JobHandle that will be treated as a dependency for all jobs scheduled by this function. + /// A JobHandle for the jobs scheduled by ths function. + public JobHandle CalculateDirectDependentsAsync(NativeArray instanceIds, NativeList outDependents, JobHandle dependency=default) + { + return new CollectDependencies + { + Dependencies = this, + OutputIds = outDependents, + ChangedInstanceIds = instanceIds + }.Schedule(dependency); + } + + [BurstCompile] + struct CollectDependencies : IJob + { + [ReadOnly] + public DependencyTracker Dependencies; + [WriteOnly] + public NativeList OutputIds; + [ReadOnly] + public NativeArray ChangedInstanceIds; + + public void Execute() + { + Dependencies.CalculateDirectDependents(ChangedInstanceIds, OutputIds); + } + } + } +} diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/DependencyTracker.cs.meta b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/DependencyTracker.cs.meta new file mode 100644 index 00000000..912a0fd9 --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/DependencyTracker.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 85f783dcec4e4798a327b9dbdac1ecdc +timeCreated: 1588859487 \ No newline at end of file diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalChangesSystem.cs b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalChangesSystem.cs new file mode 100644 index 00000000..c9f69501 --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalChangesSystem.cs @@ -0,0 +1,273 @@ +using System.Collections.Generic; +using Unity.Collections; +using Unity.Entities.Conversion; +using Unity.Jobs; +using UnityEngine; + +namespace Unity.Entities +{ + /// + /// This group can be used for systems that need to handle incremental conversion in a custom manner. It is updated + /// before the actual conversion takes place. + /// This allows you to query the data from the , inspect changes to the + /// scene that have happened since the last conversion, and queue up additional GameObjects for conversion. + /// + /// ATTENTION: This is future public API. + /// + [DisableAutoCreation] + [WorldSystemFilter(WorldSystemFilterFlags.GameObjectConversion)] + internal class ConversionSetupGroup : ComponentSystemGroup + { + } + + /// + /// This system contains all the information about what changed since the last conversion, allows you to reconvert + /// additional objects, and access information about the current state of objects. + /// + /// ATTENTION: This is future public API. + /// + [DisableAutoCreation] + [WorldSystemFilter(WorldSystemFilterFlags.GameObjectConversion)] + [UpdateInGroup(typeof(ConversionSetupGroup))] + internal class IncrementalChangesSystem : SystemBase + { + /// + /// Contains all changes that have happened in the scene since the last conversion. + /// + public IncrementalConversionChanges IncomingChanges; + + /// + /// Contains information about the state of the GameObject hierarchy in the scene in a way that can be easily + /// queried using Jobs and Burst. + /// + public SceneHierarchyWithTransforms SceneHierarchy; + + /// + /// Allows you to retrieve the existing converted entities for a GameObject. This can be used to patch entities + /// in place instead of reconverting GameObjects entirely. + /// + public ConvertedEntitiesAccessor ConvertedEntities; + + public EntityManager DstEntityManager => MappingSystem.DstEntityManager; + internal Hash128 SceneGUID => MappingSystem.Settings.SceneGUID; + + private NativeList _convertSingleRequests = new NativeList(Allocator.Persistent); + private NativeList _convertHierarchyRequests = new NativeList(Allocator.Persistent); + private readonly List> _singleRequests = new List>(); + private readonly List> _hierarchyRequests = new List>(); + private NativeList _requestsHandles = new NativeList(Allocator.Persistent); + + private GameObjectConversionMappingSystem _mappingSystem; + private GameObjectConversionMappingSystem MappingSystem + { + get + { + if (_mappingSystem == null) + _mappingSystem = World.GetExistingSystem(); + return _mappingSystem; + } + } + + internal void ExtractRequests(IncrementalConversionData data) + { + data.ReconvertSingleRequests.AddRange(_convertSingleRequests); + data.ReconvertHierarchyRequests.AddRange(_convertHierarchyRequests); + JobHandle.CompleteAll(_requestsHandles); + foreach (var request in _singleRequests) + { + data.ReconvertSingleRequests.AddRange(request); + request.Dispose(); + } + + foreach (var request in _hierarchyRequests) + { + data.ReconvertHierarchyRequests.AddRange(request); + request.Dispose(); + } + + _convertSingleRequests.Clear(); + _convertHierarchyRequests.Clear(); + _singleRequests.Clear(); + _hierarchyRequests.Clear(); + _requestsHandles.Clear(); + } + + protected override void OnCreate() + { + } + + protected override void OnDestroy() + { + base.OnDestroy(); + _requestsHandles.Dispose(); + _convertSingleRequests.Dispose(); + _convertHierarchyRequests.Dispose(); + } + + protected override void OnUpdate() + { + } + + /// + /// Add a request to reconvert a single game object. + /// + /// The instance id of the game object to reconvert. + public void AddConversionRequest(int instanceId) => + _convertSingleRequests.Add(instanceId); + + /// + /// Add a request to reconvert a game object and the entire hierarchy of game objects below it. + /// + /// The instance id of the game object to reconvert. + public void AddHierarchyConversionRequest(int instanceId) => + _convertHierarchyRequests.Add(instanceId); + + /// + /// Add a request to reconvert game objects. + /// + /// The instance ids of the game objects to reconvert. + public void AddConversionRequest(NativeArray instanceIds) => + _convertSingleRequests.AddRange(instanceIds); + + /// + /// Add a request to reconvert game objects and the entire hierarchy of game objects below them. + /// + /// The instance ids of the game objects to reconvert. + public void AddHierarchyConversionRequest(NativeArray instanceIds) => + _convertHierarchyRequests.AddRange(instanceIds); + + /// + /// Add a request to reconvert game objects. The instance ids will only be accessed when the associated job + /// handle is complete. + /// + /// The instance ids of the game objects to reconvert. + /// The handle of the job that needs to finish before any dependencies are added. + public void AddConversionRequest(NativeList instanceIds, JobHandle handle) + { + _singleRequests.Add(instanceIds); + _requestsHandles.Add(handle); + } + + /// + /// Add a request to reconvert game objects and the entire hierarchy of game objects below them. The instance + /// ids will only be accessed when the associated job handle is complete. + /// + /// The instance ids of the game objects to reconvert. + /// The handle of the job that needs to finish before any dependencies are added. + public void AddHierarchyConversionRequest(NativeList instanceIds, JobHandle handle) + { + _hierarchyRequests.Add(instanceIds); + _requestsHandles.Add(handle); + } + + /// + /// Registers a component type for fine-grained tracking. + /// + /// This means that when a dependency is registered on a component on this type, it is not registered against + /// the GameObject of that component but against the component itself. This allows you to query for dependencies + /// on that component type later on when you are incrementally converting changes. + /// + /// The Component type to register tracking for. + public void DeclareComponentDependencyTracking() where T : Component => + MappingSystem.Dependencies.RegisterComponentTypeForDependencyTracking(); + + /// + /// Registers a component type for fine-grained tracking. + /// + /// This means that when a dependency is registered on a component on this type, it is not registered against + /// the GameObject of that component but against the component itself. This allows you to query for dependencies + /// on that component type later on when you are incrementally converting changes. + /// + /// The type index of the component type to register tracking for. + public void DeclareComponentDependencyTracking(int typeIndex) => + MappingSystem.Dependencies.RegisterComponentTypeForDependencyTracking(typeIndex); + + /// + /// Try to get the component dependency tracker for a given component type. This call only succeeds if you + /// previously used DeclareComponentDependencyTracking for this particular component type. + /// + /// The tracker associated with the component type. + /// The component type to get the tracker for. + /// True if there is a component dependency tracker, false otherwise. + public bool TryGetComponentDependencyTracker(out DependencyTracker tracker) where T : Component => + MappingSystem.Dependencies.TryGetComponentDependencyTracker(TypeManager.GetTypeIndex(), out tracker); + + /// + /// Try to get the component dependency tracker for a given component type. This call only succeeds if you + /// previously used DeclareComponentDependencyTracking for this particular component type. + /// + /// The type index of the component type to get the tracker for. + /// The tracker associated with the component type. + /// True if there is a component dependency tracker, false otherwise. + public bool TryGetComponentDependencyTracker(int typeIndex, out DependencyTracker tracker) => + MappingSystem.Dependencies.TryGetComponentDependencyTracker(typeIndex, out tracker); + } + + /// + /// Contains a summary of all changes that happened since the last conversion. + /// ATTENTION: This is future public API. + /// + internal struct IncrementalConversionChanges + { + /// + /// Contains all GameObjects that were changed in some way since the last conversion. This includes changes + /// to the name, enabled/disabled state, addition or removal of components, and newly created GameObjects. + /// This does not include GameObjects for which only the data on a component was changed or whose place in the + /// hierarchy has changed. + /// + public IReadOnlyList ChangedGameObjects; + + /// + /// Contains the instance ID of all GameObjects in . + /// + public NativeArray.ReadOnly ChangedGameObjectsInstanceIds; + + /// + /// Contains all Components that were changed in some way since the last conversion. This does not include new + /// components by default, only components that were actually changed. + /// + public IReadOnlyList ChangedComponents; + + /// + /// Contains the instance IDs of all GameObjects whose parents have changed. + /// + public NativeArray.ReadOnly ParentChanges; + + /// + /// Describes how a game object's parenting has changed. + /// + public struct ParentChange + { + /// + /// The instance id of the game object whose parenting has changed. + /// + public int InstanceId; + /// + /// The instance if of the game object that was the previous parent. + /// + public int PreviousParentInstanceId; + /// + /// The instance if of the game object that is the new parent. + /// + public int NewParentInstanceId; + } + + public void CollectGameObjectsWithComponentChange(NativeList instanceIDs) where T : Component + { + var changes = ChangedComponents; + for (int i = 0; i < changes.Count; i++) + { + if (changes[i] is T) + { + instanceIDs.Add(changes[i].gameObject.GetInstanceID()); + } + } + } + + /// + /// Contains the instance IDs of all GameObjects that were removed since the last conversion. + /// An object might be removed because it was deleted or moved to another scene. + /// + public NativeArray.ReadOnly RemovedGameObjectInstanceIds; + } +} diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalChangesSystem.cs.meta b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalChangesSystem.cs.meta new file mode 100644 index 00000000..b97cff7b --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalChangesSystem.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 49303ff130a14d79906c613f466cc5f3 +timeCreated: 1596636325 \ No newline at end of file diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionContext.cs b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionContext.cs new file mode 100644 index 00000000..2a33ef39 --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionContext.cs @@ -0,0 +1,382 @@ +using System; +using System.Collections.Generic; +using Unity.Burst; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Entities.Conversion.IncrementalConversionJobs; +using Unity.Jobs; +using Unity.Profiling; +using UnityEngine; +using UnityEngine.Profiling; +using UnityEngine.SceneManagement; +using Object = UnityEngine.Object; + +namespace Unity.Entities.Conversion +{ + [BurstCompile] + struct IncrementalConversionContext : IDisposable + { + public ConversionDependencies Dependencies; + public IncrementalHierarchy Hierarchy; + public Scene Scene; + + public IncrementalConversionContext(bool isLiveLink) + { + Dependencies = new ConversionDependencies(isLiveLink); + Hierarchy = default; + Scene = default; + } + + public void InitializeHierarchy(Scene scene, GameObject[] sceneRoots) + { + Hierarchy.Dispose(); + Scene = scene; + IncrementalHierarchyFunctions.Build(sceneRoots, out Hierarchy, Allocator.Persistent); + } + +#if UNITY_2020_2_OR_NEWER + static ProfilerMarker _parentChangeHierarchyMarker = new ProfilerMarker("ParentChangesInHierarchy"); + static ProfilerMarker _deleteFromHierarchyMarker = new ProfilerMarker("DeleteFromHierarchy"); + static ProfilerMarker _registerNewInstancesMarker = new ProfilerMarker("RegisterNewInstances"); + static ProfilerMarker _collectNewGameObjectsMarker = new ProfilerMarker(nameof(CollectNewGameObjects)); + static ProfilerMarker _updateHierarchyMarker = new ProfilerMarker(nameof(UpdateHierarchy)); + + static readonly List ObjectCache = new List(); + static List InstanceIdToObject(NativeArray instanceIds) + { + Resources.InstanceIDToObjectList(instanceIds, ObjectCache); + return ObjectCache; + } + + static void CopyToList(NativeHashSet xs, NativeList output) + { + foreach (var x in xs) + output.Add(x); + } + + void FilterOutValidObjects(NativeList instanceIds) + { + var objs = InstanceIdToObject(instanceIds); + for (int i = instanceIds.Length - 1; i >= 0; i--) + { + if (objs[i] == null) + continue; + var go = objs[i] as GameObject; + if (go.scene != Scene) + continue; + instanceIds.RemoveAtSwapBack(i); + } + } + + // This cannot be a job, because we need to remove things from a TransformAccessArray. That's not possible in + // jobs, because it needs to happen in a non-job context. Even if it is running on the main thread, it will + // pretend it's not. + [BurstCompile] + unsafe struct RemoveFromHierarchy + { + public IncrementalHierarchy Hierarchy; + public NativeArray DeletedInstanceIds; + public NativeArray ReconvertHierarchyInstanceIds; + public NativeList RemovedInstanceIds; + + delegate void Exec(void* ptr); + + static FunctionPointer _burstFunction; + static readonly ProfilerMarker Marker = new ProfilerMarker(nameof(RemoveFromHierarchy)); + + [BurstCompile] + private static void Execute(void* ptr) + { + ref var data = ref UnsafeUtility.AsRef(ptr); + + int capacity = data.DeletedInstanceIds.Length + data.ReconvertHierarchyInstanceIds.Length; + var deletedInstances = new NativeHashSet(capacity, Allocator.TempJob); + { + data.Hierarchy.AsReadOnly().CollectHierarchyInstanceIds(data.DeletedInstanceIds, deletedInstances); + data.Hierarchy.AsReadOnly().CollectHierarchyInstanceIds(data.ReconvertHierarchyInstanceIds, deletedInstances); + var arr = deletedInstances.ToNativeArray(Allocator.Temp); + IncrementalHierarchyFunctions.Remove(data.Hierarchy, arr); + data.RemovedInstanceIds.AddRange(arr); + } + deletedInstances.Dispose(); + } + + public void RunWithBurst() + { + var data = this; + void* ptr = UnsafeUtility.AddressOf(ref data); + if (!_burstFunction.IsCreated) + _burstFunction = BurstCompiler.CompileFunctionPointer(Execute); + Marker.Begin(); + _burstFunction.Invoke(ptr); + Marker.End(); + } + } + + public void UpdateHierarchy(IncrementalConversionBatch batch, ref IncrementalConversionData outData) + { + _updateHierarchyMarker.Begin(); + outData.Clear(); + + if (batch.DeletedAssets.Length != 0) + outData.DeletedAssets.AddRange(batch.DeletedAssets); + if (batch.ChangedAssets.Length != 0) + outData.ChangedAssets.AddRange(batch.ChangedAssets); + + var requiresCleanConversion = new NativeList(Allocator.Temp); + requiresCleanConversion.AddRange(batch.ReconvertHierarchyInstanceIds); + + // Apply all parenting changes. + if (!batch.ParentChangeInstanceIds.IsEmpty) + { + _parentChangeHierarchyMarker.Begin(); + + var parentChanges = batch.ParentChangeInstanceIds.GetKeyValueArrays(Allocator.Temp); + using (var changeFailed = new NativeList(Allocator.TempJob)) + { + var changeSuccessful = outData.ParentChangeInstanceIds; + IncrementalHierarchyFunctions.ChangeParents(Hierarchy, parentChanges, changeFailed, changeSuccessful); + { + // When we failed to reparent something, we have to check: + // - Either we failed because the parent was already deleted and this child must also be deleted, + // - Or we failed because the child was never in the hierarchy to begin with, in which case we + // should track it + var objs = InstanceIdToObject(changeFailed); + for (int i = 0; i < objs.Count; i++) + { + var go = objs[i] as GameObject; + if (go == null || go.scene != Scene) + { + // This might happen when an object is made a child of another object and then deleted. + outData.RemovedInstanceIds.Add(changeFailed[i]); + } + else + { + // This might happen when an object is created, a child is moved, and then the original + // object is deleted again. + requiresCleanConversion.Add(changeFailed[i]); + } + } + + for (int i = 0; i < changeSuccessful.Length; i++) + outData.ReconvertHierarchyRequests.Add(changeSuccessful[i].InstanceId); + } + + using (var visitedInstances = new NativeHashSet(0, Allocator.TempJob)) + { + Hierarchy.AsReadOnly().CollectHierarchyInstanceIds(changeFailed, visitedInstances); + CopyToList(visitedInstances, outData.RemovedInstanceIds); + } + IncrementalHierarchyFunctions.Remove(Hierarchy, changeFailed); + } + _parentChangeHierarchyMarker.End(); + } + + // Remove all deleted instances from the hierarchy, plus their children. Do the same for all instances that + // require a clean conversion. + bool hasExplicitDeletions = batch.DeletedInstanceIds.Length != 0; + if (hasExplicitDeletions || batch.ReconvertHierarchyInstanceIds.Length != 0) + { + _deleteFromHierarchyMarker.Begin(); + new RemoveFromHierarchy + { + Hierarchy = Hierarchy, + DeletedInstanceIds = batch.DeletedInstanceIds, + ReconvertHierarchyInstanceIds = batch.ReconvertHierarchyInstanceIds, + RemovedInstanceIds = outData.RemovedInstanceIds, + }.RunWithBurst(); + + FilterOutValidObjects(outData.RemovedInstanceIds); + _deleteFromHierarchyMarker.End(); + } + + // Classify all clean conversions as either new or changed GameObjects. + if (!requiresCleanConversion.IsEmpty) + { + var gameObjectIsNew = new HashSet(); + CollectNewGameObjects(Scene, ref Hierarchy, requiresCleanConversion, gameObjectIsNew); + _registerNewInstancesMarker.Begin(); + foreach (var go in gameObjectIsNew) + { + IncrementalHierarchyFunctions.TryAddSingle(Hierarchy, go); + outData.ChangedGameObjects.Add(go); + outData.ReconvertHierarchyRequests.Add(go.GetInstanceID()); + } + _registerNewInstancesMarker.End(); + } + + // Look at all instances that have been changed. These are all instances that have changed in-place and we + // only need to reconvert the GameObject locally (plus all dependents). + if (batch.ChangedInstanceIds.Length != 0) { + var objs = InstanceIdToObject(batch.ChangedInstanceIds); + if (!hasExplicitDeletions) + { + // If nothing has been deleted, we can get away with doing fewer checks. + outData.ReconvertSingleRequests.AddRange(batch.ChangedInstanceIds); + foreach (var obj in objs) + outData.ChangedGameObjects.Add(obj as GameObject); + } + else + { + for (int i = 0; i < objs.Count; i++) + { + var obj = objs[i] as GameObject; + + // Exclude destroyed objects and objects that are not in the scene anymore. This can happen when a + // root object is created, one of its children is dirtied, and the root is deleted or moved to + // another scene in a single frame. + if (obj == null || obj.scene != Scene) + continue; + outData.ReconvertSingleRequests.Add(batch.ChangedInstanceIds[i]); + outData.ChangedGameObjects.Add(obj); + } + } + } + + // If we still have dependencies on components instead of GameObjects, then they must have been added + // before because we only had a reference to a destroyed component. There are two scenarios: Either the + // component was on a then-destroyed GameObject, or the component itself was destroyed (but its + // corresponding GameObject was alive). + // In any case, we need to scan the changed GameObjects to resolve the component instances. + if (Dependencies.HasUnresolvedComponentInstanceIds) + { + TryResolveComponentInstanceIds(outData.ChangedGameObjects); + } + + outData.ReconvertHierarchyRequests.AddRange(batch.ReconvertHierarchyInstanceIds); + + if (hasExplicitDeletions) + { + // If there have been any deletions, this might invalidate any component because it might have been + // deleted or it might have been moved to another scene. + foreach (var c in batch.ChangedComponents) + { + if (c == null || c.gameObject.scene != Scene) + continue; + + outData.ChangedComponents.Add(c); + } + } + else + { + foreach (var c in batch.ChangedComponents) + outData.ChangedComponents.Add(c); + } + +#if UNITY_EDITOR + if (LiveConversionSettings.EnableInternalDebugValidation) + { + IncrementalHierarchyFunctions.Validate(Scene, Hierarchy); + } +#endif + _updateHierarchyMarker.End(); + } + + void TryResolveComponentInstanceIds(List gameObjects) + { + List components = new List(); + var type = typeof(Component); + foreach (var go in gameObjects) + { + go.GetComponents(type, components); + Dependencies.ResolveComponentInstanceIds(go.GetInstanceID(), components); + components.Clear(); + } + } + + static void CollectNewGameObjects(Scene scene, ref IncrementalHierarchy hierarchy, NativeArray reconvertedObjects, HashSet outputObjects) + { + _collectNewGameObjectsMarker.Begin(); + var stack = new Stack(); + var objs = InstanceIdToObject(reconvertedObjects); + for (int i = 0; i < objs.Count; i++) + { + var obj = objs[i] as GameObject; + if (obj == null && objs[i] != null) + throw new ArgumentException($"InstanceId {reconvertedObjects[i]} does not correspond to a {nameof(GameObject)}, found {objs[i]} instead"); + + // Ignore objects that where destroyed. This can happen when in a single frame an object is created, + // a child is dirtied and added for reconversion, and then the parent is removed. In that case we don't + // get a notification that this game object is destroyed - we only know that for the parent and the + // easiest way to clean up the list is to ignore the destroyed objects here. + if (obj == null) + continue; + + // Ignore objects that are not in the scene anymore. This can happen when a parent object is moved out + // of the scene. + if (obj.scene != scene) + continue; + + // Ignore objects that are not root objects or have a parent that wasn't already converted. In that case + // we must have an event for the parent as well and later code assumes that we get the parent first. + if (obj.transform.parent != null && !hierarchy.IndexByInstanceId.ContainsKey(obj.transform.parent.gameObject.GetInstanceID())) + continue; + + stack.Push(obj); + } + + while (stack.Count > 0) + { + var top = stack.Pop(); + if (!outputObjects.Contains(top)) + { + outputObjects.Add(top); + int n = top.transform.childCount; + for (int c = 0; c < n; c++) + stack.Push(top.transform.GetChild(c).gameObject); + } + } + + _collectNewGameObjectsMarker.End(); + } + + public NativeHashSet CollectAndClearDependencies(IncrementalConversionData conversionData) + { + using (var conversionRequests = new NativeList(Allocator.TempJob)) + { + conversionRequests.AddRange(conversionData.ReconvertSingleRequests); + + + using (var visitedInstances = new NativeHashSet(0, Allocator.TempJob)) + { + Hierarchy.AsReadOnly() + .CollectHierarchyInstanceIdsAsync(conversionData.ReconvertHierarchyRequests, visitedInstances) + .Complete(); + CopyToList(visitedInstances, conversionRequests); + } + + { + var componentChanges = conversionData.ChangedComponents; + foreach (var c in componentChanges) + conversionRequests.Add(c.gameObject.GetInstanceID()); + } + + var dependentInstanceIds = new NativeHashSet(0, Allocator.TempJob); + new CollectDependencies + { + Dependencies = Dependencies, + Dependents = dependentInstanceIds, + ChangedAssets = conversionData.ChangedAssets, + DeletedAssets = conversionData.DeletedAssets, + ChangedInstanceIds = conversionRequests, + DeletedInstanceIds = conversionData.RemovedInstanceIds, + }.Run(); + + new ClearDependencies + { + Dependencies = Dependencies, + ChangedInstances = dependentInstanceIds, + DeletedInstances = conversionData.RemovedInstanceIds + }.Run(); + return dependentInstanceIds; + } + } +#endif + + public void Dispose() + { + Hierarchy.Dispose(); + Dependencies.Dispose(); + } + } +} diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionContext.cs.meta b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionContext.cs.meta new file mode 100644 index 00000000..ff5cbb9c --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionContext.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 82e8c6ad76934c2a8d20e43fe9cbfd3d +timeCreated: 1594742653 \ No newline at end of file diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionData.cs b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionData.cs new file mode 100644 index 00000000..3382b43f --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionData.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using Unity.Collections; +using UnityEngine; + +namespace Unity.Entities.Conversion +{ + struct IncrementalConversionData : IDisposable + { + public NativeList ChangedAssets; + public NativeList DeletedAssets; + public NativeList RemovedInstanceIds; + public List ChangedGameObjects; + public List ChangedComponents; + + public NativeList ReconvertHierarchyRequests; + public NativeList ReconvertSingleRequests; + private NativeList _changedGameObjectInstanceIds; + public NativeList ParentChangeInstanceIds; + + public static IncrementalConversionData Create() + { + return new IncrementalConversionData + { + RemovedInstanceIds = new NativeList(Allocator.Persistent), + ChangedGameObjects = new List(), + ChangedComponents = new List(), + ReconvertHierarchyRequests = new NativeList(Allocator.Persistent), + ReconvertSingleRequests = new NativeList(Allocator.Persistent), + ChangedAssets = new NativeList(Allocator.Persistent), + DeletedAssets = new NativeList(Allocator.Persistent), + _changedGameObjectInstanceIds = new NativeList(Allocator.Persistent), + ParentChangeInstanceIds = new NativeList(Allocator.Persistent) + }; + } + + public IncrementalConversionChanges ToChanges() + { + foreach (var go in ChangedGameObjects) + _changedGameObjectInstanceIds.Add(go.GetInstanceID()); + return new IncrementalConversionChanges + { + ChangedGameObjects = ChangedGameObjects, + ChangedGameObjectsInstanceIds = _changedGameObjectInstanceIds.AsParallelReader(), + RemovedGameObjectInstanceIds = RemovedInstanceIds.AsParallelReader(), + ChangedComponents = ChangedComponents, + ParentChanges = ParentChangeInstanceIds.AsParallelReader() + }; + } + + public void Clear() + { + ChangedAssets.Clear(); + DeletedAssets.Clear(); + RemovedInstanceIds.Clear(); + ChangedGameObjects.Clear(); + ChangedComponents.Clear(); + ReconvertHierarchyRequests.Clear(); + ReconvertSingleRequests.Clear(); + _changedGameObjectInstanceIds.Clear(); + ParentChangeInstanceIds.Clear(); + } + + public void Dispose() + { + if (RemovedInstanceIds.IsCreated) + RemovedInstanceIds.Dispose(); + if (ReconvertHierarchyRequests.IsCreated) + ReconvertHierarchyRequests.Dispose(); + if (ReconvertSingleRequests.IsCreated) + ReconvertSingleRequests.Dispose(); + if (ChangedAssets.IsCreated) + ChangedAssets.Dispose(); + if (DeletedAssets.IsCreated) + DeletedAssets.Dispose(); + if (_changedGameObjectInstanceIds.IsCreated) + _changedGameObjectInstanceIds.Dispose(); + if (ParentChangeInstanceIds.IsCreated) + ParentChangeInstanceIds.Dispose(); + } + } +} diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionData.cs.meta b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionData.cs.meta new file mode 100644 index 00000000..6989a9ea --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionData.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 992568e873734ed9964afe190363d739 +timeCreated: 1594721347 \ No newline at end of file diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionJobs.cs b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionJobs.cs new file mode 100644 index 00000000..2cc66a5c --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionJobs.cs @@ -0,0 +1,48 @@ +using Unity.Burst; +using Unity.Collections; +using Unity.Jobs; + +namespace Unity.Entities.Conversion.IncrementalConversionJobs +{ + [BurstCompile] + struct CollectDependencies : IJob + { + [ReadOnly] public ConversionDependencies Dependencies; + + [ReadOnly] public NativeArray DeletedAssets; + [ReadOnly] public NativeArray ChangedAssets; + [ReadOnly] public NativeList ChangedInstanceIds; + [ReadOnly] public NativeArray DeletedInstanceIds; + + public NativeHashSet Dependents; + + public void Execute() + { + Dependencies.CalculateDependents(ChangedInstanceIds, Dependents); + Dependencies.CalculateDependents(DeletedInstanceIds, Dependents); + Dependencies.CalculateAssetDependents(ChangedAssets, Dependents); + Dependencies.CalculateAssetDependents(DeletedAssets, Dependents); + + for (int i = 0; i < ChangedInstanceIds.Length; i++) + { + Dependents.Add(ChangedInstanceIds[i]); + } + } + } + + [BurstCompile] + struct ClearDependencies : IJob + { + public ConversionDependencies Dependencies; + [ReadOnly] + public NativeArray DeletedInstances; + [ReadOnly] + public NativeHashSet ChangedInstances; + + public void Execute() + { + Dependencies.ClearDependencies(DeletedInstances); + Dependencies.ClearDependencies(ChangedInstances.ToNativeArray(Allocator.Temp)); + } + } +} diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionJobs.cs.meta b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionJobs.cs.meta new file mode 100644 index 00000000..322b6826 --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalConversionJobs.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5972a87a586a4bd19d1db65fade1cee2 +timeCreated: 1594720598 \ No newline at end of file diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalHierarchy.cs b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalHierarchy.cs new file mode 100644 index 00000000..e61072f3 --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalHierarchy.cs @@ -0,0 +1,371 @@ +using System; +using System.Collections.Generic; +using Unity.Burst; +using Unity.Collections; +using Unity.Jobs; +using UnityEngine; +using UnityEngine.Jobs; +using UnityEngine.SceneManagement; + +namespace Unity.Entities.Conversion +{ + /// + /// Represents a hierarchy of GameObjects by a Burst-compatible data structure. + /// + /// The hierarchy is encoded by three parallel arrays storing the instance ID of a GameObject, its Transform, and + /// the index of the GameObject's parent. Two supporting data structures maintain a mapping from instance ID to + /// index and from index to indices of the parents of a GameObject. + /// + struct IncrementalHierarchy : IDisposable + { + /// + /// Contains the instance ID for every element in the hierarchy. This array is parallel to the parent index + /// array and the transform array. + /// + public NativeList InstanceId; + + /// + /// Contains the index of the parent in the hierarchy for every element in the hierarchy. An invalid parent is + /// denoted by index -1. This array is parallel to the instance ID array and the transform array. + /// + public NativeList ParentIndex; + + /// + /// Contains a handle for the transform data of all GameObjects in this hierarchy. This array is parallel to + /// the instance ID array and the parent index array. + /// + public TransformAccessArray TransformArray; + + /// + /// Maps the index of each element to the indices of its children. + /// + public NativeMultiHashMap ChildIndicesByIndex; + + /// + /// Maps instance IDs to indices in the hierarchy. + /// + public NativeHashMap IndexByInstanceId; + + public void Dispose() + { + if (TransformArray.isCreated) + TransformArray.Dispose(); + if (InstanceId.IsCreated) + InstanceId.Dispose(); + if (ParentIndex.IsCreated) + ParentIndex.Dispose(); + if (ChildIndicesByIndex.IsCreated) + ChildIndicesByIndex.Dispose(); + if (IndexByInstanceId.IsCreated) + IndexByInstanceId.Dispose(); + } + + public SceneHierarchy AsReadOnly() => new SceneHierarchy(this); + } + + static class IncrementalHierarchyFunctions + { + internal static bool TryAddSingle(IncrementalHierarchy hierarchy, GameObject go) + { + var t = go.transform; + var p = t.parent; + GameObject parent = null; + if (p != null) + parent = p.gameObject; + return TryAddSingle(hierarchy, go, t, parent); + } + + internal static bool TryAddSingle(IncrementalHierarchy hierarchy, GameObject go, Transform t, GameObject parent) + { + int id = go.GetInstanceID(); + int index = hierarchy.InstanceId.Length; + if (!hierarchy.IndexByInstanceId.TryAdd(id, index)) + return false; + hierarchy.InstanceId.Add(id); + hierarchy.TransformArray.Add(t); + if (parent != null) + { + var pid = parent.GetInstanceID(); + // this line assumes that parent of this GameObject has already been added. + hierarchy.IndexByInstanceId.TryGetValue(pid, out var parentIndex); + hierarchy.ParentIndex.Add(parentIndex); + hierarchy.ChildIndicesByIndex.Add(parentIndex, index); + } + else + hierarchy.ParentIndex.Add(-1); + + return true; + } + + internal static void AddRecurse(IncrementalHierarchy hierarchy, GameObject go) + { + var t = go.transform; + var p = t.parent; + AddRecurse(hierarchy, go, t, p != null ? p.gameObject : null); + } + + static void AddRecurse(IncrementalHierarchy hierarchy, GameObject go, Transform top, GameObject parent) + { + TryAddSingle(hierarchy, go, top, parent); + int n = top.transform.childCount; + for (int i = 0; i < n; i++) + { + var child = top.transform.GetChild(i); + AddRecurse(hierarchy, child.gameObject, child, go); + } + } + + static void AddRoots(IncrementalHierarchy hierarchy, IEnumerable gameObjects) + { + foreach (var go in gameObjects) + { + var t = go.transform; + AddRecurse(hierarchy, go, t, null); + } + } + + internal static void ChangeParents(IncrementalHierarchy hierarchy, NativeKeyValueArrays parentChange, NativeList outChangeFailed, NativeList outChangeSuccessful) + { + var instanceIds = parentChange.Keys; + var parentInstanceIds = parentChange.Values; + for (int i = 0; i < instanceIds.Length; i++) + { + var instanceId = instanceIds[i]; + if (!hierarchy.IndexByInstanceId.TryGetValue(instanceId, out int idx)) + { + outChangeFailed.Add(instanceId); + // this case might happen when an instance was already removed + continue; + } + + int oldParentIdx = hierarchy.ParentIndex[idx]; + int oldParentId = 0; + if (oldParentIdx != -1) + { + oldParentId = hierarchy.InstanceId[oldParentIdx]; + hierarchy.ChildIndicesByIndex.Remove(oldParentIdx, idx); + } + + int newParentId = parentInstanceIds[i]; + if (hierarchy.IndexByInstanceId.TryGetValue(newParentId, out int newParentIdx)) + { + hierarchy.ChildIndicesByIndex.Add(newParentIdx, idx); + hierarchy.ParentIndex[idx] = newParentIdx; + outChangeSuccessful.Add(new IncrementalConversionChanges.ParentChange + { + InstanceId = instanceId, + NewParentInstanceId = newParentId, + PreviousParentInstanceId = oldParentId + }); + } + else + { + if (newParentId != 0) + outChangeFailed.Add(instanceId); + else + { + outChangeSuccessful.Add(new IncrementalConversionChanges.ParentChange + { + InstanceId = instanceId, + NewParentInstanceId = newParentId, + PreviousParentInstanceId = oldParentId + }); + } + + hierarchy.ParentIndex[idx] = -1; + } + } + } + + internal static void Remove(IncrementalHierarchy hierarchy, NativeArray instances) + { + var openInstanceIds = new NativeList(instances.Length, Allocator.Temp); + openInstanceIds.AddRange(instances); + + var tmpChildren = new NativeList(16, Allocator.Temp); + + // This code currently doesn't make use of the fact that we are always deleting entire subhierarchies + while (openInstanceIds.Length > 0) + { + int id = openInstanceIds[openInstanceIds.Length - 1]; + openInstanceIds.Length -= 1; + if (!hierarchy.IndexByInstanceId.TryGetValue(id, out int idx)) + continue; + + { + // push children and remove children array entry + var iter = hierarchy.ChildIndicesByIndex.GetValuesForKey(idx); + while (iter.MoveNext()) + openInstanceIds.Add(hierarchy.InstanceId[iter.Current]); + hierarchy.ChildIndicesByIndex.Remove(idx); + } + + // Remove-and-swap on the arrays + hierarchy.InstanceId.RemoveAtSwapBack(idx); + int oldParentIdx = hierarchy.ParentIndex[idx]; + hierarchy.ParentIndex.RemoveAtSwapBack(idx); + hierarchy.TransformArray.RemoveAtSwapBack(idx); + + // then patch up the lookup tables + hierarchy.IndexByInstanceId.Remove(id); + if (oldParentIdx != -1) + hierarchy.ChildIndicesByIndex.Remove(oldParentIdx, idx); + int swappedIdx = hierarchy.InstanceId.Length; + if (swappedIdx > 0 && swappedIdx != idx) + { + // update index to instance id lookup + int swappedId = hierarchy.InstanceId[idx]; + hierarchy.IndexByInstanceId[swappedId] = idx; + + // update index to children lookup of parent + int swappedParentIdx = hierarchy.ParentIndex[idx]; + if (swappedParentIdx != -1) + { + hierarchy.ChildIndicesByIndex.Remove(swappedParentIdx, swappedIdx); + hierarchy.ChildIndicesByIndex.Add(swappedParentIdx, idx); + } + + // update index to children lookup of swapped index + var iter = hierarchy.ChildIndicesByIndex.GetValuesForKey(swappedIdx); + while (iter.MoveNext()) + { + tmpChildren.Add(iter.Current); + hierarchy.ParentIndex[iter.Current] = idx; + } + + hierarchy.ChildIndicesByIndex.Remove(swappedIdx); + + for (int i = 0; i < tmpChildren.Length; i++) + hierarchy.ChildIndicesByIndex.Add(idx, tmpChildren[i]); + tmpChildren.Clear(); + } + } + } + +#if UNITY_EDITOR + static void ValidateThatHierarchyContainsScene(Scene scene, IncrementalHierarchy hierarchy) + { + Stack open = new Stack(); + foreach (var go in scene.GetRootGameObjects()) + open.Push(go); + var childIndexCache = new List(); + var childIdCache = new List(); + while (open.Count > 0) + { + var go = open.Pop(); + var id = go.GetInstanceID(); + if (hierarchy.IndexByInstanceId.TryGetValue(id, out var idx)) + { + if (go.transform != hierarchy.TransformArray[idx]) + { + var otherTransform = hierarchy.TransformArray[idx]; + var otherId = otherTransform?.gameObject?.GetInstanceID() ?? 0; + Debug.LogError($"Object {go} ({go.GetInstanceID()}) is stored at index {idx}, but the transform stored there is {otherTransform} ({otherId})"); + } + + var parentIdx = hierarchy.ParentIndex[idx]; + if (go.transform.parent == null && parentIdx != -1) + { + int parentId = hierarchy.InstanceId[parentIdx]; + var parentObj = UnityEditor.EditorUtility.InstanceIDToObject(parentId); + Debug.LogError( + $"Object {go} ({go.GetInstanceID()}) has no parent, but in the hierarchy parent {parentObj} ({parentId}) is stored"); + } + else if (go.transform.parent != null) + { + int parentId = hierarchy.InstanceId[parentIdx]; + var parentObjFromTransform = go.transform.parent.gameObject; + if (parentObjFromTransform.GetInstanceID() != parentId) + { + var parentObj = UnityEditor.EditorUtility.InstanceIDToObject(parentId); + Debug.LogError( + $"Object {go} ({go.GetInstanceID()}) has parent {parentObjFromTransform} ({parentObjFromTransform.GetInstanceID()}), but in the hierarchy parent {parentObj} ({parentId} is stored)"); + } + } + + // validate children + childIndexCache.Clear(); + childIdCache.Clear(); + var childIter = hierarchy.ChildIndicesByIndex.GetValuesForKey(idx); + while (childIter.MoveNext()) + { + childIndexCache.Add(childIter.Current); + childIdCache.Add(hierarchy.InstanceId[childIter.Current]); + } + + if (childIndexCache.Count != go.transform.childCount) + Debug.LogError( + $"Object {go} ({go.GetInstanceID()}) has {go.transform.childCount} children, but in the hierarchy {childIndexCache.Count} children are stored"); + + for (int i = 0; i < go.transform.childCount; i++) + { + var child = go.transform.GetChild(i).gameObject; + var childId = child.GetInstanceID(); + if (!childIdCache.Contains(childId)) + Debug.LogError( + $"Object {go} ({go.GetInstanceID()}) has child {child} ({childId}), but in the hierarchy it is missing"); + } + } + else + Debug.LogError($"Object {go} ({go.GetInstanceID()}) is not present in the hierarchy"); + + for (int i = 0; i < go.transform.childCount; i++) + open.Push(go.transform.GetChild(i).gameObject); + } + } + + static void ValidateThatSceneContainsHierarchy(Scene scene, IncrementalHierarchy hierarchy) + { + if (hierarchy.InstanceId.Length == 0) + return; + var objects = new List(); +#if UNITY_2020_2_OR_NEWER + Resources.InstanceIDToObjectList(hierarchy.InstanceId, objects); +#else + { + var instances = hierarchy.InstanceId; + for (int i = 0; i < instances.Length; i++) + objects.Add(UnityEditor.EditorUtility.InstanceIDToObject(instances[i])); + } +#endif + for (int i = 0; i < objects.Count; i++) + { + var go = objects[i] as GameObject; + if (go == null) + { + Debug.LogError( + $"Object {objects[i]} ({hierarchy.InstanceId[i]}) is in the hierarchy, but doesn't exist anymore or isn't a GameObject"); + continue; + } + if (go.scene != scene) + Debug.LogError($"Object {objects[i]} ({hierarchy.InstanceId[i]}) from scene {go.scene.name} ({go.scene.handle}) is in the hierarchy, but is not part of the conversion scene {scene.name} ({scene.handle})"); + if (hierarchy.TransformArray[i] != go.transform) + { + var otherTransform = hierarchy.TransformArray[i]; + var otherId = otherTransform?.gameObject.GetInstanceID() ?? 0; + Debug.LogError($"Object {go} ({go.GetInstanceID()}) is stored at index {i}, but the transform stored there is {otherTransform} ({otherId})"); + } + } + } + + internal static void Validate(Scene scene, IncrementalHierarchy hierarchy) + { + ValidateThatHierarchyContainsScene(scene, hierarchy); + ValidateThatSceneContainsHierarchy(scene, hierarchy); + } +#endif + + internal static void Build(GameObject[] roots, out IncrementalHierarchy hierarchy, Allocator alloc) + { + hierarchy = new IncrementalHierarchy + { + TransformArray = new TransformAccessArray(roots.Length), + ChildIndicesByIndex = new NativeMultiHashMap(roots.Length, alloc), + IndexByInstanceId = new NativeHashMap(roots.Length, alloc), + InstanceId = new NativeList(roots.Length, alloc), + ParentIndex = new NativeList(roots.Length, alloc) + }; + AddRoots(hierarchy, roots); + } + } +} diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalHierarchy.cs.meta b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalHierarchy.cs.meta new file mode 100644 index 00000000..e0e88141 --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/IncrementalHierarchy.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: db6b1c2dc4174f99b97b6daa3ed5c5f9 +timeCreated: 1587396003 \ No newline at end of file diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/LiveConversionSettings.cs b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/LiveConversionSettings.cs new file mode 100644 index 00000000..86f78cc4 --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/LiveConversionSettings.cs @@ -0,0 +1,55 @@ +#if UNITY_EDITOR +using System; +using System.Collections.Generic; +using UnityEditor; + +namespace Unity.Entities.Conversion +{ + static class LiveConversionSettings + { + private const string EditorPrefsName = "com.unity.entities.conversion_mode"; + public enum ConversionMode + { + /// + /// All changes trigger a clean conversion. + /// + AlwaysCleanConvert = 0, + + /// + /// All changes are handled via incremental conversion, except when there are failures in which case we + /// trigger a clean conversion. + /// + IncrementalConversion, + + /// + /// Like pure incremental conversion, but also performs a clean conversion and diffs against that. + /// + IncrementalConversionWithDebug, + } + + /// + /// When set to true, a failure during incremental conversion is treated as an error. Otherwise a failure leads + /// to a clean conversion instead. This should only be enabled for testing purposes. + /// + public static bool TreatIncrementalConversionFailureAsError { get; set; } + + internal static bool EnableInternalDebugValidation; + internal static readonly List AdditionalConversionSystems = new List(); + +#if !UNITY_2020_2_OR_NEWER + public static bool IsFullyIncremental => false; + public static ConversionMode Mode => ConversionMode.AlwaysCleanConvert; +#else + public static bool IsFullyIncremental => Mode == ConversionMode.IncrementalConversion || + Mode == ConversionMode.IncrementalConversionWithDebug; + + public static ConversionMode Mode + { + get => (ConversionMode) SessionState.GetInt(EditorPrefsName, (int) ConversionMode.IncrementalConversion); + set => SessionState.SetInt(EditorPrefsName, (int) value); + } +#endif + + } +} +#endif diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/LiveConversionSettings.cs.meta b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/LiveConversionSettings.cs.meta new file mode 100644 index 00000000..ab29dff9 --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/LiveConversionSettings.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cce66b127faf472cb5ab6405780c155a +timeCreated: 1589378018 \ No newline at end of file diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/SceneHierarchy.cs b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/SceneHierarchy.cs new file mode 100644 index 00000000..d0842aaf --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/SceneHierarchy.cs @@ -0,0 +1,232 @@ +using System.Collections; +using System.Collections.Generic; +using Unity.Burst; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Jobs; +using Unity.Profiling; +using UnityEngine.Internal; +using UnityEngine.Jobs; + +namespace Unity.Entities.Conversion +{ + /// + /// Represents the hierarchy of game objects in a scene and their transforms in a way that can be accessed from a + /// job. + /// + /// ATTENTION: Future public API. + /// + internal struct SceneHierarchyWithTransforms + { + /// + /// The transforms that are used in the scene. Use the to map instance ids of + /// game objects to indices in this array. + /// + public TransformAccessArray TransformAccessArray; + + /// + /// A representation of the hierarchy of the scene. + /// + public SceneHierarchy Hierarchy; + } + + /// + /// Represents the hierarchy of game objects in a scene via their instance ids. Each instance id is encoded into an + /// index, and that index can then be used to query the hierarchy structure. + /// + [BurstCompatible] + internal struct SceneHierarchy + { + private NativeArray _instanceId; + private NativeArray _parentIndex; + private NativeHashMap _indexByInstanceId; + private NativeMultiHashMap _childIndicesByIndex; + + internal SceneHierarchy(IncrementalHierarchy hierarchy) + { + _instanceId = hierarchy.InstanceId; + _parentIndex = hierarchy.ParentIndex; + _indexByInstanceId = hierarchy.IndexByInstanceId; + _childIndicesByIndex = hierarchy.ChildIndicesByIndex; + } + + /// + /// Returns the instance id at the given index. + /// + /// The index to get the instance id of. + /// The instance id associated with the given index + public int GetInstanceIdForIndex(int index) => _instanceId[index]; + + /// + /// Returns the index of the parent of the object at the given index. + /// + /// The index to get the parent index of. + /// -1 if there is no parent, the index of the parent otherwise. + public int GetParentForIndex(int index) => _parentIndex[index]; + + /// + /// Returns an enumerator for the indices of the children of an element at the given index. + /// + /// The index to get the child indices of. + /// An enumerator for the indices of the children. + public Children GetChildIndicesForIndex(int index) => new Children(_childIndicesByIndex.GetValuesForKey(index)); + + /// + /// Tries to get the index for the given instance id of a game object. + /// + /// + /// + /// + public bool TryGetIndexForInstanceId(int instanceId, out int index) => + _indexByInstanceId.TryGetValue(instanceId, out index); + + [ExcludeFromDocs] + public struct Children : IEnumerator, IEnumerable + { + private NativeMultiHashMap.Enumerator _iter; + + internal Children(NativeMultiHashMap.Enumerator iter) + { + _iter = iter; + } + public bool MoveNext() => _iter.MoveNext(); + public void Reset() => _iter.Reset(); + public int Current => _iter.Current; + [NotBurstCompatible] + object IEnumerator.Current => Current; + public void Dispose() => _iter.Dispose(); + + public Children GetEnumerator() => this; + [NotBurstCompatible] + IEnumerator IEnumerable.GetEnumerator() => this; + [NotBurstCompatible] + IEnumerator IEnumerable.GetEnumerator() => (this as IEnumerable).GetEnumerator(); + } + } + + [BurstCompatible] + [BurstCompile] + internal static class SceneHierarchyExtensions + { + /// + /// Collects the instance ids of all objects in the hierarchy below a set of root objects. + /// + /// The hierarchy to operate on. + /// The instance ids of the root objects. + /// A hashset that is used to output the collected instance ids. + public static void CollectHierarchyInstanceIds(this SceneHierarchy hierarchy, NativeArray rootInstanceIds, + NativeHashSet visitedInstanceIds) + { + CollectHierarchyInstanceIdsImpl(hierarchy, rootInstanceIds, visitedInstanceIds); + } + + static void CollectHierarchyInstanceIdsImpl(SceneHierarchy hierarchy, NativeArray rootInstanceIds, NativeHashSet visitedInstanceIds) + { + var openIndices = new NativeList(0, Allocator.Temp); + for (int i = 0; i < rootInstanceIds.Length; i++) + { + if (hierarchy.TryGetIndexForInstanceId(rootInstanceIds[i], out int idx)) + openIndices.Add(idx); + } + + while (openIndices.Length > 0) + { + int idx = openIndices[openIndices.Length - 1]; + openIndices.Length--; + visitedInstanceIds.Add(hierarchy.GetInstanceIdForIndex(idx)); + var iter = hierarchy.GetChildIndicesForIndex(idx); + while (iter.MoveNext()) + openIndices.Add(iter.Current); + } + } + + /// + /// Collects the instance ids of all objects in the hierarchy below a set of root objects. + /// + [BurstCompile] + private struct CollectHierarchyInstanceIdsJob : IJob + { + [ReadOnly] + internal SceneHierarchy Hierarchy; + [ReadOnly] + internal NativeArray Roots; + [WriteOnly] + internal NativeHashSet VisitedInstances; + void IJob.Execute() + { + CollectHierarchyInstanceIds(Hierarchy, Roots, VisitedInstances); + } + } + + /// + /// Collects the instance ids of all objects in the hierarchy below a set of root objects (including the roots). + /// + /// The hierarchy to operate on. + /// The instance ids of the root objects. + /// A hashset that is used to output the collected instance ids. + /// The dependency for the job. + /// A job handle representing the job. + public static JobHandle CollectHierarchyInstanceIdsAsync(this SceneHierarchy hierarchy, NativeArray rootInstanceIds, NativeHashSet visitedInstanceIds, JobHandle dependency=default) + { + return new CollectHierarchyInstanceIdsJob + { + Hierarchy = hierarchy, + Roots = rootInstanceIds, + VisitedInstances = visitedInstanceIds + }.Schedule(dependency); + } + + /// + /// Collects the instance ids and indices of all objects in the hierarchy below a set of root objects (including + /// the roots). + /// + /// The hierarchy to operate on. + /// The instance ids of the root objects, but will also be filled with the instance + /// ids of all objects that were visited. + /// A hashmap that is used to output the visited indices. A value maps to true if + /// it was a root, false otherwise. + /// The dependency for the job. + /// A job handle representing the job. + public static JobHandle CollectHierarchyInstanceIdsAndIndicesAsync(this SceneHierarchy hierarchy, NativeList instanceIds, NativeHashMap visitedIndices, JobHandle dependency=default) + { + return new CollectHierarchyInstanceIdsAndIndicesJob + { + Hierarchy = hierarchy, + VisitedInstanceIds = instanceIds, + VisitedIndices = visitedIndices + }.Schedule(dependency); + } + + [BurstCompile] + internal struct CollectHierarchyInstanceIdsAndIndicesJob : IJob + { + [ReadOnly] internal SceneHierarchy Hierarchy; + internal NativeList VisitedInstanceIds; + [WriteOnly] internal NativeHashMap VisitedIndices; // true if part of the input, false if child + + public void Execute() + { + var openIndices = new NativeList(0, Allocator.Temp); + for (int i = 0; i < VisitedInstanceIds.Length; i++) + { + if (Hierarchy.TryGetIndexForInstanceId(VisitedInstanceIds[i], out int idx)) + { + openIndices.Add(idx); + VisitedIndices.TryAdd(idx, true); + } + } + + while (openIndices.Length > 0) + { + int idx = openIndices[openIndices.Length - 1]; + openIndices.Length--; + if (VisitedIndices.TryAdd(idx, false)) + VisitedInstanceIds.Add(Hierarchy.GetInstanceIdForIndex(idx)); + var iter = Hierarchy.GetChildIndicesForIndex(idx); + while (iter.MoveNext()) + openIndices.Add(iter.Current); + } + } + } + } +} diff --git a/Unity.Entities.Hybrid/GameObjectConversion/Incremental/SceneHierarchy.cs.meta b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/SceneHierarchy.cs.meta new file mode 100644 index 00000000..4f38b42e --- /dev/null +++ b/Unity.Entities.Hybrid/GameObjectConversion/Incremental/SceneHierarchy.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0e12ab7b125846ae90c1485821f0e851 +timeCreated: 1597911467 \ No newline at end of file diff --git a/Unity.Entities.Hybrid/GameObjectConversion/UnityEngineExtensions.cs b/Unity.Entities.Hybrid/GameObjectConversion/UnityEngineExtensions.cs index 13147c48..8f52ce7e 100644 --- a/Unity.Entities.Hybrid/GameObjectConversion/UnityEngineExtensions.cs +++ b/Unity.Entities.Hybrid/GameObjectConversion/UnityEngineExtensions.cs @@ -24,32 +24,12 @@ public static Hash128 ComputeInstanceHash(this UnityObject @this) return hash; } - public static T GetComponentInParentIncludeInactive(this GameObject go) - where T : Component - { - if (go.activeInHierarchy) - return go.GetComponentInParent(); - else - { - var transform = go.transform; - while (transform != null) - { - if (transform.TryGetComponent(out var com)) - return com; - - transform = transform.parent; - } - - return null; - } - } - /// /// Returns an EntityGuid that can be used as a guid within a (non-persistent) session to refer to an entity generated /// from a UnityEngine.Object. The primary entity will be index 0, and additional entities will have increasing /// indices. /// - public static EntityGuid ComputeEntityGuid(this UnityObject @this, byte namespaceId, int serial) + public static EntityGuid ComputeEntityGuid(this UnityObject @this, uint namespaceId, int serial) { if (@this is Component component) @this = component.gameObject; @@ -127,11 +107,7 @@ public static unsafe bool GetComponents(this GameObject @this, ComponentType* co LogWarning($"The referenced script is missing on {@this.name}", @this); else if (!component.IsComponentDisabled() && !(component is GameObjectEntity)) { -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - var componentType = - (component as ComponentDataProxyBase)?.GetComponentType() ?? component.GetType(); -#pragma warning restore 618 - + var componentType = component.GetType(); var isUniqueType = true; for (var j = 0; j < outputIndex; ++j) { diff --git a/Unity.Entities.Hybrid/Injection/AutomaticWorldBootstrap.cs b/Unity.Entities.Hybrid/Injection/AutomaticWorldBootstrap.cs index 5e408b1a..1f5c5249 100644 --- a/Unity.Entities.Hybrid/Injection/AutomaticWorldBootstrap.cs +++ b/Unity.Entities.Hybrid/Injection/AutomaticWorldBootstrap.cs @@ -2,6 +2,7 @@ #define UNITY_DISABLE_AUTOMATIC_SYSTEM_BOOTSTRAP_RUNTIME_WORLD #endif +using Unity.Scenes; using UnityEngine; namespace Unity.Entities @@ -13,6 +14,7 @@ static class AutomaticWorldBootstrap static void Initialize() { DefaultWorldInitialization.Initialize("Default World", false); + GameObjectSceneUtility.AddGameObjectSceneReferences(); } } #endif diff --git a/Unity.Entities.Hybrid/Injection/CompanionGameObject.cs b/Unity.Entities.Hybrid/Injection/CompanionGameObject.cs index 49d983e0..1e60d88f 100644 --- a/Unity.Entities.Hybrid/Injection/CompanionGameObject.cs +++ b/Unity.Entities.Hybrid/Injection/CompanionGameObject.cs @@ -96,7 +96,7 @@ static void AssignHybridComponentsToCompanionGameObjectsDelegate(EntityManager e for (int t = firstIndex; t < lastIndex; ++t) { - var type = TypeManager.GetTypeInfo(types[t].TypeIndex); + ref readonly var type = ref TypeManager.GetTypeInfo(types[t].TypeIndex); if (type.Category != TypeManager.TypeCategory.UnityEngineObject) continue; diff --git a/Unity.Entities.Hybrid/SceneSectionProxy.cs b/Unity.Entities.Hybrid/SceneSectionProxy.cs deleted file mode 100644 index 6e060413..00000000 --- a/Unity.Entities.Hybrid/SceneSectionProxy.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System; -using Unity.Entities; -using UnityEngine; - -[AddComponentMenu("")] -[Obsolete("SceneSectionProxy has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] -public class SceneSectionProxy : SharedComponentDataProxy -{ -} diff --git a/Unity.Entities.Hybrid/SceneSectionProxy.cs.meta b/Unity.Entities.Hybrid/SceneSectionProxy.cs.meta deleted file mode 100644 index 8afd8df3..00000000 --- a/Unity.Entities.Hybrid/SceneSectionProxy.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 877d1a5a381e84717a154501ecfa1940 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.Hybrid/TypeUtility.cs b/Unity.Entities.Hybrid/TypeUtility.cs deleted file mode 100644 index 2446e0bd..00000000 --- a/Unity.Entities.Hybrid/TypeUtility.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; - -namespace Unity.Entities -{ - static class TypeUtility - { - static readonly Dictionary s_ComponentToProxy = new Dictionary(); - static readonly HashSet s_VisitedAssemblies = new HashSet(); - static readonly List s_ErrorAssemblyNames = new List(8); - - public static Type GetProxyForDataType(Type componentDataType) - { - s_ErrorAssemblyNames.Clear(); - Type proxyType; - if (!s_ComponentToProxy.TryGetValue(componentDataType, out proxyType)) - { - foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) - { - if (s_VisitedAssemblies.Contains(assembly)) - continue; - - try - { - foreach (var type in assembly.GetTypes()) - { -#pragma warning disable 618 // remove once ComponentDataProxyBase is removed - if (!typeof(ComponentDataProxyBase).IsAssignableFrom(type) || type.IsAbstract) - continue; - - var t = type; - while (t.BaseType != typeof(ComponentDataProxyBase)) - t = t.BaseType; - s_ComponentToProxy[t.GetGenericArguments()[0]] = type; -#pragma warning restore 618 - } - } - catch (ReflectionTypeLoadException) - { - s_ErrorAssemblyNames.Add(assembly.GetName().Name); - } - - s_VisitedAssemblies.Add(assembly); - } - - s_ComponentToProxy.TryGetValue(componentDataType, out proxyType); - } - if (proxyType == null && s_ErrorAssemblyNames.Count > 0) - Debug.LogWarning($"Found no Proxy class for {proxyType}, but was also unable to load the following assemblies, so it may be in one of them.\n- {string.Join("\n- ", s_ErrorAssemblyNames)}"); - - return proxyType; - } - } -} diff --git a/Unity.Entities.Hybrid/TypeUtility.cs.meta b/Unity.Entities.Hybrid/TypeUtility.cs.meta deleted file mode 100644 index 861abc23..00000000 --- a/Unity.Entities.Hybrid/TypeUtility.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: f195597088c3741eba56fbe94f838811 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.Hybrid/Unity.Entities.Hybrid.asmdef b/Unity.Entities.Hybrid/Unity.Entities.Hybrid.asmdef index 1b0195e0..f8d83bda 100644 --- a/Unity.Entities.Hybrid/Unity.Entities.Hybrid.asmdef +++ b/Unity.Entities.Hybrid/Unity.Entities.Hybrid.asmdef @@ -9,7 +9,9 @@ "Unity.Mathematics.Extensions", "Unity.Build", "Unity.Build.Classic", - "Unity.Properties" + "Unity.Properties", + "Unity.Properties.Editor", + "Unity.Scenes" ], "includePlatforms": [], "excludePlatforms": [], @@ -17,7 +19,9 @@ "overrideReferences": false, "precompiledReferences": [], "autoReferenced": true, - "defineConstraints": ["!UNITY_DOTSRUNTIME"], + "defineConstraints": [ + "!UNITY_DOTSRUNTIME" + ], "versionDefines": [ { "name": "com.unity.modules.physics", diff --git a/Unity.Entities.Hybrid/UpdateWorldTimeSystem.cs b/Unity.Entities.Hybrid/UpdateWorldTimeSystem.cs index fe933f16..f16c05dd 100644 --- a/Unity.Entities.Hybrid/UpdateWorldTimeSystem.cs +++ b/Unity.Entities.Hybrid/UpdateWorldTimeSystem.cs @@ -8,17 +8,27 @@ namespace Unity.Entities [UpdateInGroup(typeof(InitializationSystemGroup))] public class UpdateWorldTimeSystem : ComponentSystem { - private bool hasTickedOnce = false; + protected override void OnStartRunning() + { + // Ensure that the final elapsedTime of the very first OnUpdate call is the + // original Time.ElapsedTime value (usually zero) without a deltaTime applied. + // Effectively, this code preemptively counteracts the first OnUpdate call. + var currentElapsedTime = Time.ElapsedTime; + var deltaTime = math.min(UnityEngine.Time.deltaTime, World.MaximumDeltaTime); + World.SetTime(new TimeData( + elapsedTime: currentElapsedTime-deltaTime, + deltaTime: deltaTime + )); + } protected override void OnUpdate() { var currentElapsedTime = Time.ElapsedTime; var deltaTime = math.min(UnityEngine.Time.deltaTime, World.MaximumDeltaTime); World.SetTime(new TimeData( - elapsedTime: hasTickedOnce ? (currentElapsedTime + deltaTime) : currentElapsedTime, + elapsedTime: currentElapsedTime + deltaTime, deltaTime: deltaTime )); - hasTickedOnce = true; } } } diff --git a/Unity.Entities.PerformanceTests/ComponentDataFromEntityPerformanceTests.cs b/Unity.Entities.PerformanceTests/ComponentDataFromEntityPerformanceTests.cs index 28c54f8b..e704d7ec 100644 --- a/Unity.Entities.PerformanceTests/ComponentDataFromEntityPerformanceTests.cs +++ b/Unity.Entities.PerformanceTests/ComponentDataFromEntityPerformanceTests.cs @@ -6,7 +6,7 @@ namespace Unity.Entities.PerformanceTests { [Category("Performance")] - class ComponentDataFromEntityPerformanceTests : EntityQueryBuilderTestFixture + partial class ComponentDataFromEntityPerformanceTests : EntityQueryBuilderTestFixture { enum ScheduleMode @@ -14,7 +14,7 @@ enum ScheduleMode Parallel, Single, Run } - class PerfTestSystem : SystemBase + partial class PerfTestSystem : SystemBase { public bool ReadOnly; public ScheduleMode Schedule; diff --git a/Unity.Entities.PerformanceTests/Diff/EntityDifferPerformanceTests.cs b/Unity.Entities.PerformanceTests/Diff/EntityDifferPerformanceTests.cs index 885a5c90..9f0eb78a 100644 --- a/Unity.Entities.PerformanceTests/Diff/EntityDifferPerformanceTests.cs +++ b/Unity.Entities.PerformanceTests/Diff/EntityDifferPerformanceTests.cs @@ -88,6 +88,7 @@ public void PerformanceTest_EntityDiffer_GetChanges_ForwardChangesOnly(int entit /// [Test, Performance] [TestCase(1000)] + [TestCase(10000)] public void PerformanceTest_EntityDiffer_GetChanges_FastForwardOnly(int entityCount) { CreateEntitiesWithMockComponentData(SrcEntityManager, entityCount, typeof(EcsTestData), typeof(EcsTestData2), typeof(EcsTestSharedComp)); diff --git a/Unity.Entities.PerformanceTests/EntityQueryIncrementalCachingPerformanceTests.cs b/Unity.Entities.PerformanceTests/EntityQueryIncrementalCachingPerformanceTests.cs index 615b7bad..c62336e8 100644 --- a/Unity.Entities.PerformanceTests/EntityQueryIncrementalCachingPerformanceTests.cs +++ b/Unity.Entities.PerformanceTests/EntityQueryIncrementalCachingPerformanceTests.cs @@ -161,33 +161,43 @@ public void CreateDestroyEntity_Scaling([Values(10, 100)] int archetypeCount, [V const int kInitialEntityCount = 5000000; const int kCreateDestroyEntityCount = 200000; - var archetypes = CreateUniqueArchetypes(archetypeCount); - var queries = CreateUniqueQueries(queryCount); - - for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) + using(var archetypes = CreateUniqueArchetypes(archetypeCount)) + using(var queries = CreateUniqueQueries(queryCount)) { - m_Manager.CreateEntity(archetypes[archetypeIndex], kInitialEntityCount / archetypeCount, Allocator.Temp); - } + for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) + { + m_Manager.CreateEntity(archetypes[archetypeIndex], kInitialEntityCount / archetypeCount); + } - var basicArchetype = m_Manager.CreateArchetype(typeof(EcsTestData)); - - var createEntities = default(NativeArray); - Measure.Method(() => { createEntities = m_Manager.CreateEntity(basicArchetype, kCreateDestroyEntityCount, Allocator.Temp); }) - .CleanUp(() => { m_Manager.DestroyEntity(createEntities); createEntities.Dispose(); }) - .WarmupCount(1) - .SampleGroup("CreateEntities") - .Run(); - - var destroyEntities = default(NativeArray); - Measure.Method(() => { m_Manager.DestroyEntity(destroyEntities); }) - .SetUp(() => { destroyEntities = m_Manager.CreateEntity(basicArchetype, kCreateDestroyEntityCount, Allocator.Temp); }) - .CleanUp(() => { destroyEntities.Dispose(); }) - .WarmupCount(1) - .SampleGroup("DestroyEntities") - .Run(); - - archetypes.Dispose(); - queries.Dispose(); + var basicArchetype = m_Manager.CreateArchetype(typeof(EcsTestData)); + + var createEntities = default(NativeArray); + Measure.Method(() => + { + createEntities = m_Manager.CreateEntity(basicArchetype, kCreateDestroyEntityCount, + Allocator.TempJob); + }) + .CleanUp(() => + { + m_Manager.DestroyEntity(createEntities); + createEntities.Dispose(); + }) + .WarmupCount(1) + .SampleGroup("CreateEntities") + .Run(); + + var destroyEntities = default(NativeArray); + Measure.Method(() => { m_Manager.DestroyEntity(destroyEntities); }) + .SetUp(() => + { + destroyEntities = m_Manager.CreateEntity(basicArchetype, kCreateDestroyEntityCount, + Allocator.TempJob); + }) + .CleanUp(() => { destroyEntities.Dispose(); }) + .WarmupCount(1) + .SampleGroup("DestroyEntities") + .Run(); + } } [BurstCompile(CompileSynchronously = true)] @@ -205,59 +215,52 @@ public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) [Test, Performance] public void IJobChunkPerformance_Scheduling([Values(100, 10000, 5000000)] int entityCount, [Values(10, 100)] int archetypeCount) { - var archetypes = CreateUniqueArchetypes(archetypeCount); - - for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) + using (var archetypes = CreateUniqueArchetypes(archetypeCount)) + using (var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp))) { - m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount, Allocator.Temp); - } - - var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp)); - - var handle = default(JobHandle); - Measure.Method(() => + for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) { - handle = new TestChunkJob + m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount); + } + var handle = default(JobHandle); + Measure.Method(() => { - EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) - }.Schedule(basicQuery, handle); - }) - .CleanUp(() => - { - handle.Complete(); - }) - .WarmupCount(1) - .Run(); - - archetypes.Dispose(); + handle = new TestChunkJob + { + EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) + }.Schedule(basicQuery, handle); + }) + .CleanUp(() => { handle.Complete(); }) + .WarmupCount(1) + .Run(); + } } [Test, Performance] public void IJobChunk_Performance_Executing([Values(100, 10000, 5000000)] int entityCount, [Values(10, 100)] int archetypeCount, [Values(true, false)] bool enableQueryFiltering) { - var archetypes = CreateUniqueArchetypes(archetypeCount); - - for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) + using (var archetypes = CreateUniqueArchetypes(archetypeCount)) + using (var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp))) { - m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount, Allocator.Temp); - } + for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) + { + m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount); + } - var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp)); - if (enableQueryFiltering) - basicQuery.SetSharedComponentFilter(default(EcsTestSharedComp)); + if (enableQueryFiltering) + basicQuery.SetSharedComponentFilter(default(EcsTestSharedComp)); - Measure.Method(() => - { - new TestChunkJob + Measure.Method(() => { - EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) - }.Run(basicQuery); - }) - .WarmupCount(1) - .Run(); - - archetypes.Dispose(); + new TestChunkJob + { + EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) + }.Run(basicQuery); + }) + .WarmupCount(1) + .Run(); + } } [BurstCompile(CompileSynchronously = true)] @@ -275,59 +278,55 @@ public void Execute(ArchetypeChunk batchInChunk, int batchIndex) [Test, Performance] public void IJobEntityBatch_Performance_Scheduling([Values(100, 10000, 5000000)] int entityCount, [Values(10, 100)] int archetypeCount) { - var archetypes = CreateUniqueArchetypes(archetypeCount); - - for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) + using (var archetypes = CreateUniqueArchetypes(archetypeCount)) + using (var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp))) { - m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount, Allocator.Temp); - } - - var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp)); - - var handle = default(JobHandle); - Measure.Method(() => + for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) { - handle = new TestEntityBatchJob - { - EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) - }.ScheduleParallel(basicQuery, 1, handle); - }) - .CleanUp(() => - { - handle.Complete(); - }) - .WarmupCount(1) - .Run(); + m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount); + } - archetypes.Dispose(); + var handle = default(JobHandle); + Measure.Method(() => + { + handle = new TestEntityBatchJob + { + EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) + }.ScheduleParallel(basicQuery, 1, handle); + }) + .CleanUp(() => { handle.Complete(); }) + .WarmupCount(1) + .Run(); + } } [Test, Performance] public void IJobEntityBatch_Performance_Executing([Values(100, 10000, 5000000)] int entityCount, [Values(10, 100)] int archetypeCount, [Values(true,false)] bool enableQueryFiltering) { - var archetypes = CreateUniqueArchetypes(archetypeCount); - - for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) + using (var archetypes = CreateUniqueArchetypes(archetypeCount)) + using (var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp))) { - m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount, Allocator.Temp); - } - - var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp)); - if (enableQueryFiltering) - basicQuery.SetSharedComponentFilter(default(EcsTestSharedComp)); - - Measure.Method(() => + for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) { - new TestEntityBatchJob - { - EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) - }.Run(basicQuery); - }) - .WarmupCount(1) - .Run(); + m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount); + } - archetypes.Dispose(); + { + if (enableQueryFiltering) + basicQuery.SetSharedComponentFilter(default(EcsTestSharedComp)); + + Measure.Method(() => + { + new TestEntityBatchJob + { + EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) + }.Run(basicQuery); + }) + .WarmupCount(1) + .Run(); + } + } } [BurstCompile(CompileSynchronously = true)] @@ -345,60 +344,51 @@ public void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirs [Test, Performance] public void IJobEntityBatchWithIndex_Performance_Scheduling([Values(100, 10000, 5000000)] int entityCount, [Values(10, 100)] int archetypeCount) { - var archetypes = CreateUniqueArchetypes(archetypeCount); - - for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) + using (var archetypes = CreateUniqueArchetypes(archetypeCount)) + using (var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp))) { - m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount, Allocator.Temp); - } - - var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp)); - - var handle = default(JobHandle); - Measure.Method(() => + for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) { - handle = new TestEntityBatchWithIndexJob + m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount); + } + var handle = default(JobHandle); + Measure.Method(() => { - EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) - }.ScheduleParallel(basicQuery, 1, handle); - }) - .CleanUp(() => - { - handle.Complete(); - }) - .WarmupCount(1) - .Run(); - - archetypes.Dispose(); + handle = new TestEntityBatchWithIndexJob + { + EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) + }.ScheduleParallel(basicQuery, 1, handle); + }) + .CleanUp(() => { handle.Complete(); }) + .WarmupCount(1) + .Run(); + } } [Test, Performance] public void IJobEntityBatchWithIndex_Performance_Executing([Values(100, 10000, 5000000)] int entityCount, [Values(10, 100)] int archetypeCount, [Values(true, false)] bool enableQueryFiltering) { - var archetypes = CreateUniqueArchetypes(archetypeCount); - - for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) + using (var archetypes = CreateUniqueArchetypes(archetypeCount)) + using (var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp))) { - m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount, Allocator.Temp); - } - - var basicQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp)); - if (enableQueryFiltering) - basicQuery.SetSharedComponentFilter(default(EcsTestSharedComp)); - - Measure.Method(() => + for (int archetypeIndex = 0; archetypeIndex < archetypeCount; ++archetypeIndex) { - new TestEntityBatchWithIndexJob - { - EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) - }.Run(basicQuery); - }) - .WarmupCount(1) - .Run(); - + m_Manager.CreateEntity(archetypes[archetypeIndex], entityCount / archetypeCount); + } + if (enableQueryFiltering) + basicQuery.SetSharedComponentFilter(default(EcsTestSharedComp)); - archetypes.Dispose(); + Measure.Method(() => + { + new TestEntityBatchWithIndexJob + { + EcsTestDataRW = m_Manager.GetComponentTypeHandle(false) + }.Run(basicQuery); + }) + .WarmupCount(1) + .Run(); + } } } } diff --git a/Unity.Entities.PerformanceTests/LambdaJobsPerformanceTests.cs b/Unity.Entities.PerformanceTests/LambdaJobsPerformanceTests.cs index ea62be6c..13cf8cad 100644 --- a/Unity.Entities.PerformanceTests/LambdaJobsPerformanceTests.cs +++ b/Unity.Entities.PerformanceTests/LambdaJobsPerformanceTests.cs @@ -8,40 +8,109 @@ namespace Unity.Entities.PerformanceTests { - public class LambdaJobsTestFixture : ECSTestsFixture + public partial class LambdaJobsTestFixture : ECSTestsFixture { - protected class TestComponentSystem : JobComponentSystem + public enum ScheduleType { - protected override JobHandle OnUpdate(JobHandle inputDeps) + Run, + Schedule, + ScheduleParallel + } + + protected partial class TestComponentSystem : SystemBase + { + protected override void OnUpdate() { - return default; } - public void OneDataLambda() + public void OneComponentLambda(ScheduleType scheduleType) { + switch (scheduleType) + { + case ScheduleType.Run: Entities.ForEach((Entity entity, ref EcsTestFloatData d1) => { d1.Value++; }).Run(); + break; + case ScheduleType.Schedule: + Entities.ForEach((Entity entity, ref EcsTestFloatData d1) => + { + d1.Value++; + }).Schedule(); + CompleteDependency(); + break; + case ScheduleType.ScheduleParallel: + Entities.ForEach((Entity entity, ref EcsTestFloatData d1) => + { + d1.Value++; + }).ScheduleParallel(); + CompleteDependency(); + break; + } } - public void TwoDataLambda() + public void TwoComponentLambda(ScheduleType scheduleType) + { + switch (scheduleType) { + case ScheduleType.Run: Entities.ForEach((Entity entity, ref EcsTestFloatData d1, ref EcsTestFloatData2 d2) => { d1.Value++; d2.Value0++; }).Run(); + break; + case ScheduleType.Schedule: + Entities.ForEach((Entity entity, ref EcsTestFloatData d1, ref EcsTestFloatData2 d2) => + { + d1.Value++; + d2.Value0++; + }).Schedule(); + CompleteDependency(); + break; + case ScheduleType.ScheduleParallel: + Entities.ForEach((Entity entity, ref EcsTestFloatData d1, ref EcsTestFloatData2 d2) => + { + d1.Value++; + d2.Value0++; + }).ScheduleParallel(); + CompleteDependency(); + break; + } } - public void ThreeDataLambda() + public void ThreeComponentLambda(ScheduleType scheduleType) { + switch (scheduleType) + { + case ScheduleType.Run: Entities.ForEach((Entity entity, ref EcsTestFloatData d1, ref EcsTestFloatData2 d2, ref EcsTestFloatData3 d3) => { d1.Value++; d2.Value0++; d3.Value0++; }).Run(); + break; + case ScheduleType.Schedule: + Entities.ForEach((Entity entity, ref EcsTestFloatData d1, ref EcsTestFloatData2 d2, ref EcsTestFloatData3 d3) => + { + d1.Value++; + d2.Value0++; + d3.Value0++; + }).Schedule(); + CompleteDependency(); + break; + case ScheduleType.ScheduleParallel: + Entities.ForEach((Entity entity, ref EcsTestFloatData d1, ref EcsTestFloatData2 d2, ref EcsTestFloatData3 d3) => + { + d1.Value++; + d2.Value0++; + d3.Value0++; + }).ScheduleParallel(); + CompleteDependency(); + break; + } } public void SimpleLambda() @@ -64,39 +133,6 @@ public unsafe void SimpleLambdaWithPointerCapture() }).Run(); } -#pragma warning disable 618 - [BurstCompile] - public struct OneDataJob : IJobForEachWithEntity - { - public void Execute(Entity entity, int index, ref EcsTestFloatData d1) - { - d1.Value++; - } - } - - [BurstCompile] - public struct TwoDataJob : IJobForEachWithEntity - { - public void Execute(Entity entity, int index, ref EcsTestFloatData d1, ref EcsTestFloatData2 d2) - { - d1.Value++; - d2.Value0++; - } - } - - [BurstCompile] - public struct ThreeDataJob : IJobForEachWithEntity - { - public int count; - public void Execute(Entity entity, int index, ref EcsTestFloatData d1, ref EcsTestFloatData2 d2, ref EcsTestFloatData3 d3) - { - d1.Value++; - d2.Value0++; - d3.Value0++; - } - } -#pragma warning restore 618 - public void StructuralChangesWithECB(EntityManager manager) { { @@ -140,84 +176,46 @@ public void StructuralChangesInLambda(EntityManager manager) } [Category("Performance")] - class LambdaJobsPerformanceTests : LambdaJobsTestFixture + partial class LambdaJobsPerformanceTests : LambdaJobsTestFixture { // Tests the performance of the LambdaJobs ForEach & ForEach on ReadOnly components // No structural change expected [Test, Performance] [Category("Performance")] - public void LambdaJobsForEach_Performance_LJ_vs_IJFE([Values(1, 1000, 100000)] int entityCount, [Range(1, 3)] int componentCount) + public void LambdaJobsForEach_Performance_OneComponent( + [Values(ScheduleType.Run, ScheduleType.Schedule, ScheduleType.ScheduleParallel)] ScheduleType scheduleType, [Values(1, 1000, 100000)] int entityCount) { - EntityArchetype archetype = new EntityArchetype(); - switch (componentCount) + var archetype = m_Manager.CreateArchetype(typeof(EcsTestFloatData)); + using (var entities = new NativeArray(entityCount, Allocator.TempJob)) { - case 1: archetype = m_Manager.CreateArchetype(typeof(EcsTestFloatData)); break; - case 2: archetype = m_Manager.CreateArchetype(typeof(EcsTestFloatData), typeof(EcsTestFloatData2)); break; - case 3: archetype = m_Manager.CreateArchetype(typeof(EcsTestFloatData), typeof(EcsTestFloatData2), typeof(EcsTestFloatData3)); break; + m_Manager.CreateEntity(archetype, entities); + Measure.Method(() => { TestSystem.OneComponentLambda(scheduleType); }).WarmupCount(5).MeasurementCount(100).Run(); } + } + + [Test, Performance] + [Category("Performance")] + public void LambdaJobsForEach_Performance_TwoComponents( + [Values(ScheduleType.Run, ScheduleType.Schedule, ScheduleType.ScheduleParallel)] ScheduleType scheduleType, [Values(1, 1000, 100000)] int entityCount) + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestFloatData), typeof(EcsTestFloatData2)); using (var entities = new NativeArray(entityCount, Allocator.TempJob)) { m_Manager.CreateEntity(archetype, entities); - switch (componentCount) + Measure.Method(() => { TestSystem.TwoComponentLambda(scheduleType); }).WarmupCount(5).MeasurementCount(100).Run(); + } + } + + [Test, Performance] + [Category("Performance")] + public void LambdaJobsForEach_Performance_ThreeComponents( + [Values(ScheduleType.Run, ScheduleType.Schedule, ScheduleType.ScheduleParallel)] ScheduleType scheduleType, [Values(1, 1000, 100000)] int entityCount) { - case 1: - Measure.Method(() => - { - TestSystem.OneDataLambda(); - }) - .WarmupCount(5) - .MeasurementCount(100) - .SampleGroup("LambdaJobForEach") - .Run(); - Measure.Method(() => - { - var job = new TestComponentSystem.OneDataJob(); - job.Run(TestSystem); - }) - .WarmupCount(5) - .MeasurementCount(100) - .SampleGroup("IJobForEachWithEntity") - .Run(); - break; - case 2: - Measure.Method(() => - { - TestSystem.TwoDataLambda(); - }) - .WarmupCount(5) - .MeasurementCount(100) - .SampleGroup("LambdaJobForEach") - .Run(); - Measure.Method(() => - { - var job = new TestComponentSystem.TwoDataJob(); - job.Run(TestSystem); - }) - .WarmupCount(5) - .MeasurementCount(100) - .SampleGroup("IJobForEachWithEntity") - .Run(); - break; - case 3: - Measure.Method(() => - { - TestSystem.ThreeDataLambda(); - }) - .WarmupCount(5) - .MeasurementCount(100) - .SampleGroup("LambdaJobForEach") - .Run(); - Measure.Method(() => + var archetype = m_Manager.CreateArchetype(typeof(EcsTestFloatData), typeof(EcsTestFloatData2), typeof(EcsTestFloatData3)); + using (var entities = new NativeArray(entityCount, Allocator.TempJob)) { - var job = new TestComponentSystem.ThreeDataJob(); - job.Run(TestSystem); - }) - .WarmupCount(5) - .MeasurementCount(100) - .SampleGroup("IJobForEachWithEntity") - .Run(); - break; - } + m_Manager.CreateEntity(archetype, entities); + Measure.Method(() => { TestSystem.ThreeComponentLambda(scheduleType); }).WarmupCount(5).MeasurementCount(100).Run(); } } diff --git a/Unity.Entities.PerformanceTests/TypeManagerPerformanceTests.cs b/Unity.Entities.PerformanceTests/TypeManagerPerformanceTests.cs new file mode 100644 index 00000000..b16f9123 --- /dev/null +++ b/Unity.Entities.PerformanceTests/TypeManagerPerformanceTests.cs @@ -0,0 +1,90 @@ +using NUnit.Framework; +using Unity.Collections; +using Unity.Mathematics; +using Unity.PerformanceTesting; + +namespace Unity.Entities.PerformanceTests +{ + [Category("Performance")] + public sealed class TypeManagerPerformanceTests : EntityPerformanceTestFixture + { + public struct CustomStruct + { + public bool m_Bool; + public Entity m_Entity; + public float4 m_Float4; + } + + public struct NotSmallComponent : IComponentData + { + public bool m_Bool; + public CustomStruct m_CustomStruct1; + public Entity m_Entity; + public CustomStruct m_CustomStruct2; + public float4 m_Float4; + } + + public struct SmallComponent : IComponentData + { + public Entity m_Entity; + } + + [Test, Performance] + public void TypeManager_Equals_Blittable_NotSmallComponent_PerformanceTest() + { + var a = default(NotSmallComponent); + var b = default(NotSmallComponent); + + Measure.Method(() => + { + TypeManager.Equals(ref a, ref b); + }) + .WarmupCount(10) + .IterationsPerMeasurement(1000) + .Run(); + } + + [Test, Performance] + public void TypeManager_Equals_Blittable_SmallComponent_PerformanceTest() + { + var a = default(SmallComponent); + var b = default(SmallComponent); + + Measure.Method(() => + { + TypeManager.Equals(ref a, ref b); + }) + .WarmupCount(10) + .IterationsPerMeasurement(1000) + .Run(); + } + + [Test, Performance] + public void TypeManager_GetHashCode_Blittable_NotSmallComponent_PerformanceTest() + { + var a = default(NotSmallComponent); + + Measure.Method(() => + { + TypeManager.GetHashCode(ref a); + }) + .WarmupCount(10) + .IterationsPerMeasurement(1000) + .Run(); + } + + [Test, Performance] + public void TypeManager_GetHashCode_Blittable_SmallComponent_PerformanceTest() + { + var a = default(SmallComponent); + + Measure.Method(() => + { + TypeManager.GetHashCode(ref a); + }) + .WarmupCount(10) + .IterationsPerMeasurement(1000) + .Run(); + } + } +} diff --git a/Unity.Entities.Editor/Editors/ComponentDataProxyBaseEditor.cs.meta b/Unity.Entities.PerformanceTests/TypeManagerPerformanceTests.cs.meta similarity index 83% rename from Unity.Entities.Editor/Editors/ComponentDataProxyBaseEditor.cs.meta rename to Unity.Entities.PerformanceTests/TypeManagerPerformanceTests.cs.meta index f0e36ef1..9e16627b 100644 --- a/Unity.Entities.Editor/Editors/ComponentDataProxyBaseEditor.cs.meta +++ b/Unity.Entities.PerformanceTests/TypeManagerPerformanceTests.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: fb42953aabc47479aa7f0ffc4e96a833 +guid: 21c399f4e635ebf4dbb0ee81fc59fefb MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Unity.Entities.TestComponents/DependencyTestAuthoring.cs b/Unity.Entities.TestComponents/DependencyTestAuthoring.cs index 57a9b982..3d32aebb 100644 --- a/Unity.Entities.TestComponents/DependencyTestAuthoring.cs +++ b/Unity.Entities.TestComponents/DependencyTestAuthoring.cs @@ -14,14 +14,10 @@ public class DependencyTestAuthoring : MonoBehaviour, IConvertGameObjectToEntity public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) { - if (Asset != null) - conversionSystem.DeclareAssetDependency(gameObject, Asset); - if (Texture != null) - conversionSystem.DeclareAssetDependency(gameObject, Texture); - if (Material != null) - conversionSystem.DeclareAssetDependency(gameObject, Material); - if (GameObject != null) - conversionSystem.DeclareDependency(gameObject, GameObject); + conversionSystem.DeclareAssetDependency(gameObject, Asset); + conversionSystem.DeclareAssetDependency(gameObject, Texture); + conversionSystem.DeclareAssetDependency(gameObject, Material); + conversionSystem.DeclareDependency(gameObject, GameObject); dstManager.AddComponentData(entity, new ConversionDependencyData { MaterialColor = Material != null ? Material.color : default, diff --git a/Unity.Entities.TestComponents/DependsOnComponentTestAuthoring.cs b/Unity.Entities.TestComponents/DependsOnComponentTestAuthoring.cs new file mode 100644 index 00000000..6dffeb75 --- /dev/null +++ b/Unity.Entities.TestComponents/DependsOnComponentTestAuthoring.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace Unity.Entities.Tests +{ + public class DependsOnComponentTestAuthoring : MonoBehaviour, IConvertGameObjectToEntity + { + public GameObject Other; + public static Dictionary Versions = new Dictionary(); + public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) + { + conversionSystem.DeclareDependency(gameObject, Other); + + if (Other == null || Other.scene != gameObject.scene) + dstManager.AddComponentData(entity, new Component {Value = -1}); + else + { + Versions.TryGetValue(Other, out var version); + dstManager.AddComponentData(entity, new Component {Value = version}); + } + } + + public struct Component : IComponentData + { + public int Value; + } + } +} diff --git a/Unity.Entities.TestComponents/DependsOnComponentTestAuthoring.cs.meta b/Unity.Entities.TestComponents/DependsOnComponentTestAuthoring.cs.meta new file mode 100644 index 00000000..54a3e937 --- /dev/null +++ b/Unity.Entities.TestComponents/DependsOnComponentTestAuthoring.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 61758fc23e634054b9c5c70e9a5f4462 +timeCreated: 1595249936 \ No newline at end of file diff --git a/Unity.Entities.TestComponents/DependsOnComponentTransitiveTestAuthoring.cs b/Unity.Entities.TestComponents/DependsOnComponentTransitiveTestAuthoring.cs new file mode 100644 index 00000000..2fe6c814 --- /dev/null +++ b/Unity.Entities.TestComponents/DependsOnComponentTransitiveTestAuthoring.cs @@ -0,0 +1,34 @@ +using UnityEngine; + +namespace Unity.Entities.Tests +{ + public class DependsOnComponentTransitiveTestAuthoring : MonoBehaviour, IConvertGameObjectToEntity + { + public int SelfValue; + public DependsOnComponentTransitiveTestAuthoring Dependency; + public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) + { + conversionSystem.DeclareDependency(gameObject, Dependency); + dstManager.AddComponentData(entity, new Component + { + Value = FindValue(this) + }); + } + + static int FindValue(DependsOnComponentTransitiveTestAuthoring a) + { + int dist = 0; + while (a.Dependency != null) + { + a = a.Dependency; + dist++; + } + return a.SelfValue + dist; + } + + public struct Component : IComponentData + { + public int Value; + } + } +} diff --git a/Unity.Entities.TestComponents/DependsOnComponentTransitiveTestAuthoring.cs.meta b/Unity.Entities.TestComponents/DependsOnComponentTransitiveTestAuthoring.cs.meta new file mode 100644 index 00000000..7104ba1c --- /dev/null +++ b/Unity.Entities.TestComponents/DependsOnComponentTransitiveTestAuthoring.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 324a927eb2374fd88e6866770196f31a +timeCreated: 1594989171 \ No newline at end of file diff --git a/Unity.Entities.TestComponents/DependsOnTransformTestAuthoring.cs b/Unity.Entities.TestComponents/DependsOnTransformTestAuthoring.cs new file mode 100644 index 00000000..35db24e0 --- /dev/null +++ b/Unity.Entities.TestComponents/DependsOnTransformTestAuthoring.cs @@ -0,0 +1,26 @@ +using UnityEngine; + +namespace Unity.Entities.Tests +{ + public class DependsOnTransformTestAuthoring : MonoBehaviour, IConvertGameObjectToEntity + { + public Transform Dependency; + public bool SkipDependency; + public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) + { + if (Dependency == null) + return; + if (!SkipDependency) + conversionSystem.DeclareDependency(gameObject, Dependency); + dstManager.AddComponentData(entity, new Component + { + LocalToWorld = Dependency.localToWorldMatrix + }); + } + + public struct Component : IComponentData + { + public Matrix4x4 LocalToWorld; + } + } +} diff --git a/Unity.Entities.TestComponents/DependsOnTransformTestAuthoring.cs.meta b/Unity.Entities.TestComponents/DependsOnTransformTestAuthoring.cs.meta new file mode 100644 index 00000000..17d36afa --- /dev/null +++ b/Unity.Entities.TestComponents/DependsOnTransformTestAuthoring.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f741d7ac0287430cb752d57715570fb8 +timeCreated: 1594989400 \ No newline at end of file diff --git a/Unity.Entities.TestComponents/HybridComponentTestAuthoring.cs b/Unity.Entities.TestComponents/HybridComponentTestAuthoring.cs new file mode 100644 index 00000000..58899f3f --- /dev/null +++ b/Unity.Entities.TestComponents/HybridComponentTestAuthoring.cs @@ -0,0 +1,14 @@ +using UnityEngine; + +namespace Unity.Entities.Tests +{ + public class HybridComponentTestAuthoring : MonoBehaviour, IConvertGameObjectToEntity + { + public int Value; + + public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) + { + conversionSystem.AddHybridComponent(this); + } + } +} diff --git a/Unity.Entities.TestComponents/HybridComponentTestAuthoring.cs.meta b/Unity.Entities.TestComponents/HybridComponentTestAuthoring.cs.meta new file mode 100644 index 00000000..62212cb3 --- /dev/null +++ b/Unity.Entities.TestComponents/HybridComponentTestAuthoring.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 2f3151771f08414292f96c411598cc8b +timeCreated: 1600266986 \ No newline at end of file diff --git a/Unity.Entities.TestComponents/IntTestData.cs b/Unity.Entities.TestComponents/IntTestData.cs new file mode 100644 index 00000000..df824482 --- /dev/null +++ b/Unity.Entities.TestComponents/IntTestData.cs @@ -0,0 +1,12 @@ +namespace Unity.Entities.Tests +{ + public struct IntTestData : IComponentData + { + public IntTestData(int val) + { + Value = val; + } + + public int Value; + } +} diff --git a/Unity.Entities.Hybrid.Tests/ComponentDataProxy_EntityManager_IntegrationTests.cs.meta b/Unity.Entities.TestComponents/IntTestData.cs.meta similarity index 83% rename from Unity.Entities.Hybrid.Tests/ComponentDataProxy_EntityManager_IntegrationTests.cs.meta rename to Unity.Entities.TestComponents/IntTestData.cs.meta index 6165c42e..61f6b252 100644 --- a/Unity.Entities.Hybrid.Tests/ComponentDataProxy_EntityManager_IntegrationTests.cs.meta +++ b/Unity.Entities.TestComponents/IntTestData.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 02904de4e3eb04bd3bbade853709896d +guid: 97874c059aef4e298f7b83712f528a1a MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Unity.Entities.TestComponents/MockDataAuthoring.cs b/Unity.Entities.TestComponents/MockDataAuthoring.cs new file mode 100644 index 00000000..e2e27cdd --- /dev/null +++ b/Unity.Entities.TestComponents/MockDataAuthoring.cs @@ -0,0 +1,28 @@ +using System; +using UnityEngine; + +namespace Unity.Entities.Tests +{ + public class MockDataAuthoring : MonoBehaviour, IConvertGameObjectToEntity + { + public int Value; + + public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) + { + dstManager.AddComponentData(entity, new MockData + { + Value = Value + }); + } + } + + [Serializable] + public struct MockData : IComponentData + { + public int Value; + + public MockData(int value) => Value = value; + + public override string ToString() => Value.ToString(); + } +} diff --git a/Unity.Entities.TestComponents/MockDataProxy.cs.meta b/Unity.Entities.TestComponents/MockDataAuthoring.cs.meta similarity index 100% rename from Unity.Entities.TestComponents/MockDataProxy.cs.meta rename to Unity.Entities.TestComponents/MockDataAuthoring.cs.meta diff --git a/Unity.Entities.TestComponents/MockDataProxy.cs b/Unity.Entities.TestComponents/MockDataProxy.cs deleted file mode 100644 index 071c4bee..00000000 --- a/Unity.Entities.TestComponents/MockDataProxy.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using UnityEngine; - -namespace Unity.Entities.Tests -{ - [Serializable] - public struct MockData : IComponentData - { - public int Value; - - public MockData(int value) => Value = value; - - public override string ToString() => Value.ToString(); - } - - [DisallowMultipleComponent] - [AddComponentMenu("")] - [Obsolete("MockDataProxy has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] - public class MockDataProxy : ComponentDataProxy - { - } -} diff --git a/Unity.Entities.TestComponents/MockDynamicBufferDataAuthoring.cs b/Unity.Entities.TestComponents/MockDynamicBufferDataAuthoring.cs new file mode 100644 index 00000000..f65772b0 --- /dev/null +++ b/Unity.Entities.TestComponents/MockDynamicBufferDataAuthoring.cs @@ -0,0 +1,19 @@ +using System; +using UnityEngine; + +namespace Unity.Entities.Tests +{ + public class MockDynamicBufferDataAuthoring : MonoBehaviour, IConvertGameObjectToEntity + { + public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) + { + dstManager.AddBuffer(entity); + } + } + + [Serializable] + public struct MockDynamicBufferData : IBufferElementData + { + public int Value; + } +} diff --git a/Unity.Entities.TestComponents/MockDynamicBufferDataProxy.cs.meta b/Unity.Entities.TestComponents/MockDynamicBufferDataAuthoring.cs.meta similarity index 100% rename from Unity.Entities.TestComponents/MockDynamicBufferDataProxy.cs.meta rename to Unity.Entities.TestComponents/MockDynamicBufferDataAuthoring.cs.meta diff --git a/Unity.Entities.TestComponents/MockDynamicBufferDataProxy.cs b/Unity.Entities.TestComponents/MockDynamicBufferDataProxy.cs deleted file mode 100644 index 0cb4e143..00000000 --- a/Unity.Entities.TestComponents/MockDynamicBufferDataProxy.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using UnityEngine; - -namespace Unity.Entities.Tests -{ - [Serializable] - public struct MockDynamicBufferData : IBufferElementData - { - public int Value; - } - - [DisallowMultipleComponent] - [AddComponentMenu("")] - [Obsolete("MockDynamicBufferDataProxy has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] - public class MockDynamicBufferDataProxy : DynamicBufferProxy - { - } -} diff --git a/Unity.Entities.TestComponents/MockSharedDataAuthoring.cs b/Unity.Entities.TestComponents/MockSharedDataAuthoring.cs new file mode 100644 index 00000000..ac32f62d --- /dev/null +++ b/Unity.Entities.TestComponents/MockSharedDataAuthoring.cs @@ -0,0 +1,24 @@ +using System; +using UnityEngine; + +namespace Unity.Entities.Tests +{ + public class MockSharedDataAuthoring : MonoBehaviour, IConvertGameObjectToEntity + { + public int Value; + + public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) + { + dstManager.AddSharedComponentData(entity, new MockSharedData + { + Value = Value + }); + } + } + + [Serializable] + public struct MockSharedData : ISharedComponentData + { + public int Value; + } +} diff --git a/Unity.Entities.TestComponents/MockSharedDataProxy.cs.meta b/Unity.Entities.TestComponents/MockSharedDataAuthoring.cs.meta similarity index 100% rename from Unity.Entities.TestComponents/MockSharedDataProxy.cs.meta rename to Unity.Entities.TestComponents/MockSharedDataAuthoring.cs.meta diff --git a/Unity.Entities.TestComponents/MockSharedDataProxy.cs b/Unity.Entities.TestComponents/MockSharedDataProxy.cs deleted file mode 100644 index c3465ead..00000000 --- a/Unity.Entities.TestComponents/MockSharedDataProxy.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; - -namespace Unity.Entities.Tests -{ - [Serializable] - public struct MockSharedData : ISharedComponentData - { - public int Value; - } - - [UnityEngine.AddComponentMenu("")] - [Obsolete("MockSharedDataProxy has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] - public class MockSharedDataProxy : SharedComponentDataProxy - { - } -} diff --git a/Unity.Entities.TestComponents/MockSharedDisallowMultiple.cs b/Unity.Entities.TestComponents/MockSharedDisallowMultiple.cs new file mode 100644 index 00000000..74d4a1cb --- /dev/null +++ b/Unity.Entities.TestComponents/MockSharedDisallowMultiple.cs @@ -0,0 +1,10 @@ +using System; + +namespace Unity.Entities.Tests +{ + [Serializable] + public struct MockSharedDisallowMultiple : ISharedComponentData + { + public int Value; + } +} diff --git a/Unity.Entities.TestComponents/MockSharedDisallowMultiple.cs.meta b/Unity.Entities.TestComponents/MockSharedDisallowMultiple.cs.meta new file mode 100644 index 00000000..f9b5f8af --- /dev/null +++ b/Unity.Entities.TestComponents/MockSharedDisallowMultiple.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 10605b79097c6dd4195c1c011298b8b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities.TestComponents/MockSharedDisallowMultipleProxy.cs b/Unity.Entities.TestComponents/MockSharedDisallowMultipleProxy.cs deleted file mode 100644 index b9caa62a..00000000 --- a/Unity.Entities.TestComponents/MockSharedDisallowMultipleProxy.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; - -namespace Unity.Entities.Tests -{ - [Serializable] - public struct MockSharedDisallowMultiple : ISharedComponentData - { - public int Value; - } - - [UnityEngine.DisallowMultipleComponent] - [UnityEngine.AddComponentMenu("")] - [Obsolete("MockSharedDisallowMultipleProxy has been deprecated. Please use the new GameObject-to-entity conversion workflows instead. (RemovedAfter 2020-07-03).")] - public class MockSharedDisallowMultipleProxy : SharedComponentDataProxy - { - } -} diff --git a/Unity.Entities.TestComponents/MockSharedDisallowMultipleProxy.cs.meta b/Unity.Entities.TestComponents/MockSharedDisallowMultipleProxy.cs.meta deleted file mode 100644 index a73715a5..00000000 --- a/Unity.Entities.TestComponents/MockSharedDisallowMultipleProxy.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: bb13af2ee576c4807abab70a93522b26 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.TestComponents/TestComponentAuthoring.cs b/Unity.Entities.TestComponents/TestComponentAuthoring.cs index 98bf276b..dc8c8841 100644 --- a/Unity.Entities.TestComponents/TestComponentAuthoring.cs +++ b/Unity.Entities.TestComponents/TestComponentAuthoring.cs @@ -1,4 +1,3 @@ -using System; using UnityEngine; namespace Unity.Entities.Tests diff --git a/Unity.Entities.TestComponents/TestComponentAuthoringIsBuildingForEditor.cs b/Unity.Entities.TestComponents/TestComponentAuthoringIsBuildingForEditor.cs new file mode 100644 index 00000000..8bacd101 --- /dev/null +++ b/Unity.Entities.TestComponents/TestComponentAuthoringIsBuildingForEditor.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +namespace Unity.Entities.Tests +{ + [ConverterVersion("christopherr", 5)] + public class TestComponentAuthoringIsBuildingForEditor : MonoBehaviour, IConvertGameObjectToEntity + { + + public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) + { +#if UNITY_EDITOR + if (conversionSystem.IsBuildingForEditor) + dstManager.AddComponentData(entity, new IntTestData(1)); + else + dstManager.AddComponentData(entity, new IntTestData(2)); +#else + dstManager.AddComponentData(entity, new IntTestData(3)); +#endif + } + } +} diff --git a/Unity.Entities.TestComponents/TestComponentAuthoringIsBuildingForEditor.cs.meta b/Unity.Entities.TestComponents/TestComponentAuthoringIsBuildingForEditor.cs.meta new file mode 100644 index 00000000..4ef74b7f --- /dev/null +++ b/Unity.Entities.TestComponents/TestComponentAuthoringIsBuildingForEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf330b210f958a7458772f40ed5e5bac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities.TestComponents/TestComponentWithBlobAssetAuthoring.cs b/Unity.Entities.TestComponents/TestComponentWithBlobAssetAuthoring.cs new file mode 100644 index 00000000..ba854ebb --- /dev/null +++ b/Unity.Entities.TestComponents/TestComponentWithBlobAssetAuthoring.cs @@ -0,0 +1,26 @@ +using System; +using Unity.Collections; +using UnityEngine; + +namespace Unity.Entities.Tests +{ + [ConverterVersion("sschoener", 1)] + public class TestComponentWithBlobAssetAuthoring : MonoBehaviour, IConvertGameObjectToEntity + { + public int Version; + public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem) + { + var builder = new BlobBuilder(Allocator.Temp); + builder.ConstructRoot() = Version; + dstManager.AddComponentData(entity, new Component + { + BlobAssetRef = builder.CreateBlobAssetReference(Allocator.Persistent) + }); + } + + public struct Component : IComponentData + { + public BlobAssetReference BlobAssetRef; + } + } +} diff --git a/Unity.Entities.TestComponents/TestComponentWithBlobAssetAuthoring.cs.meta b/Unity.Entities.TestComponents/TestComponentWithBlobAssetAuthoring.cs.meta new file mode 100644 index 00000000..4c1a6b36 --- /dev/null +++ b/Unity.Entities.TestComponents/TestComponentWithBlobAssetAuthoring.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7e98461bcb024f129c03d9b6dd3f6797 +timeCreated: 1598960929 \ No newline at end of file diff --git a/Unity.Entities.Tests/ArchetypeChunkArrayTests.cs b/Unity.Entities.Tests/ArchetypeChunkArrayTests.cs index 87e92aa1..7ea0e560 100644 --- a/Unity.Entities.Tests/ArchetypeChunkArrayTests.cs +++ b/Unity.Entities.Tests/ArchetypeChunkArrayTests.cs @@ -3,6 +3,7 @@ using Unity.Jobs; using System; using System.Collections.Generic; +using Unity.Burst; using Unity.Mathematics; using Unity.Collections.LowLevel.Unsafe; @@ -591,6 +592,252 @@ public void ACS_DynamicComponentDataArrayReinterpret() chunks.Dispose(); } + + class UntypedBufferSystemBumpVersion : ComponentSystem + { + struct UpdateChunks : IJobParallelFor + { + public NativeArray Chunks; + public DynamicComponentTypeHandle ElementHandle; + + public void Execute(int chunkIndex) + { + var chunk = Chunks[chunkIndex]; + var ecsBufferAccessor = chunk.GetUntypedBufferAccessor(ref ElementHandle); + for (int i = 0; i < ecsBufferAccessor.Length; ++i) + { + unsafe + { + var buffer = ecsBufferAccessor.GetUnsafeReadOnlyPtrAndLength(i, out var len); + for(int e=0;e()); + var chunks = group.CreateArchetypeChunkArray(Allocator.TempJob); + group.Dispose(); + + var roComponentType = m_Manager.GetDynamicComponentTypeHandle(ComponentType.ReadOnly(typeof(EcsIntElement))); + for (int i = 0; i < chunks.Length; ++i) + { + var chunk = chunks[i]; + var accessor = chunk.GetUntypedBufferAccessor(ref roComponentType); + Assert.IsTrue(accessor.Length != 0); + Assert.IsTrue(accessor.ElementSize == UnsafeUtility.SizeOf()); + for (int k = 0; k < accessor.Length; ++k) + { + unsafe + { + var bufferPtr = (byte*) accessor.GetUnsafeReadOnlyPtrAndLength(k, out var length); + Assert.IsTrue(bufferPtr != null); + //Verify all accessors return the same values + Assert.IsTrue(bufferPtr == accessor.GetUnsafeReadOnlyPtr(k)); + Assert.AreEqual(length, accessor.GetBufferLength(k)); + + //Check value contents by either case to int or EcsIntElement. Is also an example of proper api use + var bufferData = (int*) bufferPtr; + for (int n = 0; n < length; ++n) + Assert.AreEqual(n, bufferData[n], "buffer element does not have the expected value"); + + var elementSize = UnsafeUtility.SizeOf(); + for (int n = 0; n < length; ++n) + { + var ecsElement = UnsafeUtility.AsRef((void*) bufferPtr); + Assert.AreEqual(n, ecsElement.Value, "buffer element does not have the expected value"); + bufferPtr += elementSize; + } + + //This should throw, since is a readonly handle + Assert.Throws(() => + { + accessor.ResizeUninitialized(k, length + 1); + }); + } + } + + // Test resize + var rwComponentType = m_Manager.GetDynamicComponentTypeHandle(ComponentType.ReadWrite(typeof(EcsIntElement))); + accessor = chunk.GetUntypedBufferAccessor(ref rwComponentType); + for (int k = 0; k < accessor.Length; ++k) + { + unsafe + { + //Increase the buffer size. + var oldLength = accessor.GetBufferLength(k); + var newLength = oldLength + 16; + accessor.ResizeUninitialized(k, newLength); + var bufferPtr = (byte*) accessor.GetUnsafePtrAndLength(k, out var length); + + Assert.IsTrue(bufferPtr != null); + Assert.AreEqual(newLength, length); + Assert.GreaterOrEqual(accessor.GetBufferCapacity(k), newLength); + //Check content in range 0 - oldLen are the same + var bufferData = (int*) bufferPtr; + for (int n = 0; n < oldLength; ++n) + Assert.AreEqual(n, bufferData[n], "buffer element does not have the expected value"); + + //Shrink the buffer size. Check capacity is still the same + var oldCapacity = accessor.GetBufferCapacity(k); + accessor.ResizeUninitialized(k, 10); + Assert.IsTrue(accessor.GetUnsafePtr(k) != null); + Assert.AreEqual(10, accessor.GetBufferLength(k)); + Assert.AreEqual(oldCapacity, accessor.GetBufferCapacity(k)); + //Check content in range 0 - 10 are still the same + var toCheck = oldLength < 10 ? oldLength : 10; + bufferData = (int*) bufferPtr; + for (int n = 0; n < toCheck; ++n) + Assert.AreEqual(n, bufferData[n], "buffer element does not have the expected value"); + } + } + } + + chunks.Dispose(); + } + + [Test] + public void ACS_UntypedBuffersBumpVersion() + { + CreateEntities(128); + + var group = m_Manager.CreateEntityQuery(ComponentType.ReadWrite()); + var chunks = group.CreateArchetypeChunkArray(Allocator.Temp); + group.Dispose(); + + var versions = new NativeArray(chunks.Length, Allocator.Temp); + var roComponentType = m_Manager.GetDynamicComponentTypeHandle(ComponentType.ReadOnly(typeof(EcsIntElement))); + for (int i = 0; i < chunks.Length; ++i) + versions[i] = chunks[i].GetChangeVersion(roComponentType); + + var system = World.CreateSystem(); + system.Update(); + + for (int i = 0; i < chunks.Length; ++i) + { + var newVersion = chunks[i].GetChangeVersion(roComponentType); + Assert.AreNotEqual(versions[i], newVersion); + bool afterDidAddChange = chunks[i].DidChange(roComponentType, versions[i]); + Assert.IsTrue(afterDidAddChange, "DidChange() is false after modifications"); + } + } + + struct UntypedBufferResizeJob : IJobEntityBatch + { + public DynamicComponentTypeHandle typeHandle; + public int size; + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) + { + var accessor = batchInChunk.GetUntypedBufferAccessor(ref typeHandle); + for (int i = 0; i < batchInChunk.Count; ++i) + { + //Resize and invalidate the secondary version. + accessor.ResizeUninitialized(i, size); + } + } + } + + [Test,DotsRuntimeFixme] + public void ACS_UntypedBuffersInvalidationWorks() + { + var entity = m_Manager.CreateEntity(); + var bufferRW = m_Manager.AddBuffer(entity); + bufferRW.Length = 1; + + var bufferFromEntity = m_Manager.GetBufferFromEntity(true); + var bufferRO = bufferFromEntity[entity]; + //grab also an alias + var array = bufferRO.AsNativeArray(); + var query = m_Manager.CreateEntityQuery(ComponentType.ReadWrite()); + var typeHandle = m_Manager.GetDynamicComponentTypeHandle(ComponentType.ReadWrite(typeof(EcsIntElement))); + //Resize buffer with a job (on the main thread) + new UntypedBufferResizeJob { + typeHandle = typeHandle, + size = 5 + }.Run(query); + //old buffer references are still valid here. So no throw or errors + Assert.AreEqual(5, bufferRO.Length); + Assert.AreEqual(5, bufferRW.Length); + Assert.DoesNotThrow(() => + { + for (int i = 0; i < bufferRO.Length; ++i) { + var o = bufferRO[i]; + } + }); + //But arrays should be ivalidated +#if UNITY_2020_2_OR_NEWER + Assert.Throws(() => +#else + Assert.Throws(()=> +#endif + { + var el = array[0]; + }); + + //Let's now run the job using schedule and check that is not possible to invalidate the buffer from the main + //thread if they are assigned to to a job + var jobHandle = new UntypedBufferResizeJob { + typeHandle = typeHandle, + size = 10 + }.Schedule(query); + Assert.Throws(() => { bufferRW.Add(new EcsIntElement()); }); + Assert.Throws(() => { bufferRW.Length = 2; }); + jobHandle.Complete(); + } + + [Test] + public void ACS_UntypeBufferAccessorIncorrectUse() + { + CreateEntities(128); + + var group = m_Manager.CreateEntityQuery(ComponentType.ReadWrite()); + var chunks = group.CreateArchetypeChunkArray(Allocator.TempJob); + group.Dispose(); + + var bufferType = m_Manager.GetDynamicComponentTypeHandle(ComponentType.ReadOnly(typeof(EcsIntElement))); + var componentType = m_Manager.GetDynamicComponentTypeHandle(ComponentType.ReadOnly(typeof(EcsTestData))); + + for (int i = 0; i < chunks.Length; ++i) + { + var chunk = chunks[i]; + //Fail: cannot use GetDynamicComponentDataArrayReinterpret with IBufferElementData types + Assert.Throws(() => + { + chunk.GetDynamicComponentDataArrayReinterpret(bufferType, UnsafeUtility.SizeOf()); + }); + + //Fail: cannot use GetUntypedBufferAccessor with IComponentData types + Assert.Throws(() => + { + chunk.GetUntypedBufferAccessor(ref componentType); + }); + } + + chunks.Dispose(); + } + [Test] public void ACS_DynamicTypeHas() { @@ -622,7 +869,7 @@ public void ACS_DynamicComponentDataArrayReinterpretIncorrectUse() { CreateEntities2(128); - var group = m_Manager.CreateEntityQuery(ComponentType.ReadWrite()); + var group = m_Manager.CreateEntityQuery(ComponentType.ReadWrite()); var chunks = group.CreateArchetypeChunkArray(Allocator.TempJob); group.Dispose(); @@ -638,11 +885,23 @@ public void ACS_DynamicComponentDataArrayReinterpretIncorrectUse() var chunkEcsTestData = chunk.GetDynamicComponentDataArrayReinterpret(ecsTestData, UnsafeUtility.SizeOf()); }); - // Fail: not dividable by size - Assert.Throws(() => + // If (Count * sizeof(int2)) % sizeof(int3) == 0 -> the test fail because the types can be aliased in that case. + if ((chunk.Count * UnsafeUtility.SizeOf() % UnsafeUtility.SizeOf()) != 0) { - var chunkEcsTestData = chunk.GetDynamicComponentDataArrayReinterpret(ecsTestData, UnsafeUtility.SizeOf()); - }); + // Fail: not dividable by size + Assert.Throws(() => + { + var chunkEcsTestData = chunk.GetDynamicComponentDataArrayReinterpret(ecsTestData, UnsafeUtility.SizeOf()); + }); + } + else + { + Assert.DoesNotThrow(()=> + { + var chunkEcsTestData = chunk.GetDynamicComponentDataArrayReinterpret(ecsTestData, UnsafeUtility.SizeOf()); + }); + } + } chunks.Dispose(); @@ -651,7 +910,7 @@ public void ACS_DynamicComponentDataArrayReinterpretIncorrectUse() // These tests require: // - JobsDebugger support for static safety IDs (added in 2020.1) // - Asserting throws -#if UNITY_2020_1_OR_NEWER && !UNITY_DOTSRUNTIME +#if !UNITY_DOTSRUNTIME struct UseComponentTypeHandle : IJob { public Unity.Entities.ComponentTypeHandle ecsTestData; diff --git a/Unity.Entities.Tests/ArchetypeTests.cs b/Unity.Entities.Tests/ArchetypeTests.cs new file mode 100644 index 00000000..e391c28d --- /dev/null +++ b/Unity.Entities.Tests/ArchetypeTests.cs @@ -0,0 +1,89 @@ +using NUnit.Framework; + +namespace Unity.Entities.Tests +{ + class ArchetypeTests : ECSTestsFixture + { + [Test] + unsafe public void DiffArchetype_AddRemove() + { + var before = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData3), typeof(EcsTestData4)); + var after = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2), typeof(EcsTestData3), typeof(EcsTestData5)); + + var added = stackalloc int[after.TypesCount]; + var removed = stackalloc int[before.TypesCount]; + + EntityArchetype.CalculateDifference(before, after, added, out var addedTypesCount, removed, out var removedTypesCount); + + Assert.AreEqual(2, addedTypesCount); + Assert.AreEqual(TypeManager.GetTypeIndex(typeof(EcsTestData2)), added[0]); + Assert.AreEqual(TypeManager.GetTypeIndex(typeof(EcsTestData5)), added[1]); + Assert.AreEqual(1, removedTypesCount); + Assert.AreEqual(TypeManager.GetTypeIndex(typeof(EcsTestData4)), removed[0]); + } + + [Test] + unsafe public void DiffArchetype_AddEmpty() + { + var before = m_Manager.CreateArchetype(); + var after = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); + + var added = stackalloc int[after.TypesCount]; + var removed = stackalloc int[before.TypesCount]; + + EntityArchetype.CalculateDifference(before, after, added, out var addedTypesCount, removed, out var removedTypesCount); + + Assert.AreEqual(2, addedTypesCount); + Assert.AreEqual(TypeManager.GetTypeIndex(typeof(EcsTestData)), added[0]); + Assert.AreEqual(TypeManager.GetTypeIndex(typeof(EcsTestData2)), added[1]); + Assert.AreEqual(0, removedTypesCount); + } + + [Test] + unsafe public void DiffArchetype_RemoveEmpty() + { + var before = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); + var after = m_Manager.CreateArchetype(); + + var added = stackalloc int[after.TypesCount]; + var removed = stackalloc int[before.TypesCount]; + + EntityArchetype.CalculateDifference(before, after, added, out var addedTypesCount, removed, out var removedTypesCount); + + Assert.AreEqual(2, removedTypesCount); + Assert.AreEqual(TypeManager.GetTypeIndex(typeof(EcsTestData)), removed[0]); + Assert.AreEqual(TypeManager.GetTypeIndex(typeof(EcsTestData2)), removed[1]); + Assert.AreEqual(0, addedTypesCount); + } + + [Test] + unsafe public void DiffArchetype_NoChange() + { + var before = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); + var after = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); + + var added = stackalloc int[after.TypesCount]; + var removed = stackalloc int[before.TypesCount]; + + EntityArchetype.CalculateDifference(before, after, added, out var addedTypesCount, removed, out var removedTypesCount); + + Assert.AreEqual(0, removedTypesCount); + Assert.AreEqual(0, addedTypesCount); + } + + [Test] + unsafe public void DiffArchetype_EmptyEmpty() + { + var before = m_Manager.CreateArchetype(); + var after = m_Manager.CreateArchetype(); + + var added = stackalloc int[after.TypesCount]; + var removed = stackalloc int[before.TypesCount]; + + EntityArchetype.CalculateDifference(before, after, added, out var addedTypesCount, removed, out var removedTypesCount); + + Assert.AreEqual(0, removedTypesCount); + Assert.AreEqual(0, addedTypesCount); + } + } +} diff --git a/Unity.Entities.Tests/ArchetypeTests.cs.meta b/Unity.Entities.Tests/ArchetypeTests.cs.meta new file mode 100644 index 00000000..f661645a --- /dev/null +++ b/Unity.Entities.Tests/ArchetypeTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb6f4ed27f6ccf241ad644fe8f7dd314 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities.Tests/BlobificationTests.cs b/Unity.Entities.Tests/BlobificationTests.cs index 20a9ebb0..1a11813e 100644 --- a/Unity.Entities.Tests/BlobificationTests.cs +++ b/Unity.Entities.Tests/BlobificationTests.cs @@ -11,7 +11,10 @@ using Assert = NUnit.Framework.Assert; using Unity.Mathematics; using System.IO; +using Unity.Entities.Serialization; +using Unity.Entities.LowLevel.Unsafe; using Unity.IO.LowLevel.Unsafe; + #if UNITY_DOTSRUNTIME using Unity.Tiny; using Unity.Tiny.IO; @@ -520,31 +523,25 @@ NativeArray CreateUniqueBlob() return entities; } + const int kVersion = 51; + const int kIncorrectVersion = 13; + #if !UNITY_DOTSRUNTIME + [Test] public void BlobAssetReferenceTryRead() { - const int kVersion = 42; - const int kIncorrectVersion = 13; - Assert.AreNotEqual(kVersion, kIncorrectVersion); - string path = "BlobAssetReferenceIOTestData.blob"; if (File.Exists(path)) File.Delete(path); - try { - bool result = false; var blobBuilder = ConstructBlobBuilder(); BlobAssetReference.Write(blobBuilder, path, kVersion); - - result = BlobAssetReference.TryRead(path, kIncorrectVersion, out var incorrectBlobResult); - Assert.IsTrue(!result); - - result = BlobAssetReference.TryRead(path, kVersion, out var correctBlobResult); - Assert.IsTrue(result); - ValidateBlobData(ref correctBlobResult.Value); - correctBlobResult.Dispose(); + using(var reader = new StreamBinaryReader(path)) + Assert.IsFalse(BlobAssetReferenceTryReadVersion(reader, kIncorrectVersion)); + using(var reader = new StreamBinaryReader(path)) + Assert.IsTrue(BlobAssetReferenceTryReadVersion(reader, kVersion)); } finally { @@ -552,40 +549,31 @@ public void BlobAssetReferenceTryRead() File.Delete(path); } } -#else - #if !UNITY_WEBGL // https://unity3d.atlassian.net/browse/DOTSR-2030 - [Test] - public unsafe void BlobAssetReferenceTryRead() +#endif + + bool BlobAssetReferenceTryReadVersion(T reader, int version) where T : Unity.Entities.Serialization.BinaryReader { - const int kVersion = 42; - const int kIncorrectVersion = 13; - Assert.AreNotEqual(kVersion, kIncorrectVersion); + var result = BlobAssetReference.TryRead(reader, version, out var blobResult); + if(result == false) + return false; + ValidateBlobData(ref blobResult.Value); + blobResult.Dispose(); + return true; + } - string path = "BlobAssetReferenceIOTestData.blob"; - var startTime = Time.realtimeSinceStartup; - var op = IOService.RequestAsyncRead(path); - while (op.GetStatus() <= AsyncOp.Status.InProgress) + [Test] + public void BlobAssetReferenceTryReadNoFile() + { + unsafe { - if ((Time.realtimeSinceStartup - startTime) > 5.0 /*seconds*/) - break; + var writer = new MemoryBinaryWriter(); + var blobBuilder = ConstructBlobBuilder(); + BlobAssetReference.Write(writer, blobBuilder, kVersion); + Assert.IsFalse(BlobAssetReferenceTryReadVersion(new MemoryBinaryReader(writer.Data), kIncorrectVersion)); + Assert.IsTrue(BlobAssetReferenceTryReadVersion(new MemoryBinaryReader(writer.Data), kVersion)); } - Assert.IsTrue(op.GetStatus() == AsyncOp.Status.Success); - - bool result = false; - op.GetData(out var data, out var dataSize); - result = BlobAssetReference.TryRead(data, kIncorrectVersion, out var incorrectBlobResult); - Assert.IsTrue(!result); - - result = BlobAssetReference.TryRead(data, kVersion, out var correctBlobResult); - Assert.IsTrue(result); - ValidateBlobData(ref correctBlobResult.Value); - - correctBlobResult.Dispose(); - op.Dispose(); } - #endif -#endif public struct Node { @@ -671,4 +659,22 @@ public void BlobSetPointerException() builder.SetPointer(ref rootNode.parent, ref child); }); } + + [Test] + unsafe public void UnsafeUntypedBlobCasting() + { + var blobData = ConstructBlobData(); + + var untyped = UnsafeUntypedBlobAssetReference.Create(blobData); + + var reinterpreted = untyped.Reinterpret(); + + ValidateBlobData(ref reinterpreted.Value); + Assert.IsTrue(reinterpreted.GetUnsafePtr() == blobData.GetUnsafePtr()); + Assert.IsTrue(UnsafeUtility.MemCmp(UnsafeUtility.AddressOf(ref blobData), UnsafeUtility.AddressOf(ref untyped), UnsafeUtility.SizeOf()) == 0); + Assert.IsTrue(UnsafeUtility.MemCmp(UnsafeUtility.AddressOf(ref blobData), UnsafeUtility.AddressOf(ref reinterpreted), UnsafeUtility.SizeOf()) == 0); + Assert.AreEqual(UnsafeUtility.SizeOf(), UnsafeUtility.SizeOf>()); + + blobData.Dispose(); + } } diff --git a/Unity.Entities.Tests/BufferElementDataTests.cs b/Unity.Entities.Tests/BufferElementDataTests.cs index 301db004..5571ca80 100644 --- a/Unity.Entities.Tests/BufferElementDataTests.cs +++ b/Unity.Entities.Tests/BufferElementDataTests.cs @@ -208,6 +208,18 @@ public void RemoveAtSwapBack_WithFirstElement_Works() CheckBufferContents(buffer, new [] { 2, 1 }); } + [Test] + public void RemoveAtSwapBack_WithMultiByteElements_Works() + { + var entity = m_Manager.CreateEntity(typeof(EcsIntElement)); + var buffer = m_Manager.GetBuffer(entity); + buffer.Add(0); + buffer.Add(0x7FFFFFFF); + buffer.Add(0x12345678); + buffer.RemoveAtSwapBack(0); + CheckBufferContents(buffer, new [] { 0x12345678, 0x7FFFFFFF }); + } + [Test] public void RemoveAtSwapBack_WithMiddleElement_Works() { diff --git a/Unity.Entities.Tests/ChangeVersionTests.cs b/Unity.Entities.Tests/ChangeVersionTests.cs index 70229115..5b87704a 100644 --- a/Unity.Entities.Tests/ChangeVersionTests.cs +++ b/Unity.Entities.Tests/ChangeVersionTests.cs @@ -4,7 +4,7 @@ namespace Unity.Entities.Tests { - class ChangeVersionTests : ECSTestsFixture + partial class ChangeVersionTests : ECSTestsFixture { #if !UNITY_DOTSRUNTIME // IJobForEach is deprecated class BumpVersionSystemInJob : ComponentSystem @@ -147,7 +147,7 @@ public void CHG_SystemVersionZeroWhenNotRun() Assert.AreNotEqual(0, system.LastSystemVersion); } - class DidChangeTestSystem : SystemBase + partial class DidChangeTestSystem : SystemBase { protected override void OnUpdate() { @@ -164,7 +164,7 @@ protected override void OnUpdate() } } - class ChangeEntitiesWithTag : SystemBase + partial class ChangeEntitiesWithTag : SystemBase { protected override void OnUpdate() { diff --git a/Unity.Entities.Tests/ComponentSystemGroupTests.cs b/Unity.Entities.Tests/ComponentSystemGroupTests.cs index a991a67e..6897c176 100644 --- a/Unity.Entities.Tests/ComponentSystemGroupTests.cs +++ b/Unity.Entities.Tests/ComponentSystemGroupTests.cs @@ -552,8 +552,8 @@ public class GroupIsntAComponentSystem : EmptySystem public void UpdateInGroup_TargetNotASystem_Throws() { World w = new World("Test World"); -#if UNITY_DOTSRUNTIME - // In DOTSR, the IsSystemAGroup() call will throw +#if NET_DOTS + // In Tiny, the IsSystemAGroup() call will throw Assert.Throws(() => DefaultWorldInitialization.AddSystemsToRootLevelSystemGroups(w, typeof(GroupIsntAComponentSystem))); #else @@ -589,6 +589,7 @@ public class FirstAndLast : EmptySystem { } + [Test] public void UpdateInGroup_OrderFirstAndOrderLast_Throws() { World w = new World("Test World"); @@ -849,7 +850,6 @@ public void OnUpdate(ref SystemState state) } } - [DotsRuntimeFixme] // DOTSR-1591 Need ILPP support for ISystemBase in DOTS Runtime [Test] public void NewSortWorksWithBoth() { @@ -916,7 +916,6 @@ public void OnUpdate(ref SystemState state) } } - [DotsRuntimeFixme] // DOTSR-1591 Need ILPP support for ISystemBase in DOTS Runtime [Test] public void ComponentSystemGroup_RemoveThenReAddUnmanagedSystem_SystemIsInGroup() { @@ -933,7 +932,6 @@ public void ComponentSystemGroup_RemoveThenReAddUnmanagedSystem_SystemIsInGroup( Assert.IsTrue(group.m_UnmanagedSystemsToUpdate.Contains(sys.Handle.MHandle), "system not in group after re-sorting"); } - [DotsRuntimeFixme] // DOTSR-1591 Need ILPP support for ISystemBase in DOTS Runtime [Test] public void ComponentSystemGroup_RemoveUnmanagedSystemNotInGroup_Ignored() { @@ -944,7 +942,6 @@ public void ComponentSystemGroup_RemoveUnmanagedSystemNotInGroup_Ignored() Assert.AreEqual(0, group.m_UnmanagedSystemsToRemove.Length); } - [DotsRuntimeFixme] // DOTSR-1591 Need ILPP support for ISystemBase in DOTS Runtime [Test] public void ComponentSystemGroup_DuplicateRemoveUnmanaged_Ignored() { @@ -966,5 +963,149 @@ public void ComponentSystemGroup_NullFixedRateManager_DoesntThrow() group.FixedRateManager = null; Assert.DoesNotThrow(() => { group.Update(); }); } + + class ParentSystemGroup : ComponentSystemGroup + { + } + + class ChildSystemGroup : ComponentSystemGroup + { + } + + [Test] + public void ComponentSystemGroup_SortCleanParentWithDirtyChild_ChildIsSorted() + { + var parentGroup = World.CreateSystem(); + var childGroup = World.CreateSystem(); + parentGroup.AddSystemToUpdateList(childGroup); // parent group sort order is dirty + parentGroup.SortSystems(); // parent group sort order is clean + + var child1 = World.CreateSystem(); + var child2 = World.CreateSystem(); + childGroup.AddSystemToUpdateList(child1); // child group sort order is dirty + childGroup.AddSystemToUpdateList(child2); + parentGroup.SortSystems(); // parent and child group sort orders should be clean + + // If the child group's systems aren't in the correct order, it wasn't recursively sorted by the parent group. + CollectionAssert.AreEqual(new TestSystemBase[] {child2, child1}, childGroup.Systems); + } + + class NoSortGroup : ComponentSystemGroup + { + public NoSortGroup() + { + EnableSystemSorting = false; + } + } + + [Test] + public void ComponentSystemGroup_SortManuallySortedParentWithDirtyChild_ChildIsSorted() + { + var parentGroup = World.CreateSystem(); + var childGroup = World.CreateSystem(); + parentGroup.AddSystemToUpdateList(childGroup); + + var child1 = World.CreateSystem(); + var child2 = World.CreateSystem(); + childGroup.AddSystemToUpdateList(child1); // child group sort order is dirty + childGroup.AddSystemToUpdateList(child2); + parentGroup.SortSystems(); // parent and child group sort orders should be clean + + // If the child group's systems aren't in the correct order, it wasn't recursively sorted by the parent group. + CollectionAssert.AreEqual(new TestSystemBase[] {child2, child1}, childGroup.Systems); + } + + [Test] + public void ComponentSystemGroup_RemoveFromManuallySortedGroup_Throws() + { + var group = World.CreateSystem(); + var sys = World.CreateSystem(); + group.AddSystemToUpdateList(sys); + Assert.Throws(() => group.RemoveSystemFromUpdateList(sys)); + } + + [DotsRuntimeFixme] // DOTSR-1591 Need ILPP support for ISystemBase in DOTS Runtime + [Test] + public void ComponentSystemGroup_RemoveUnmanagedFromManuallySortedGroup_Throws() + { + var group = World.CreateSystem(); + var sysHandle = World.AddSystem().Handle; + group.AddUnmanagedSystemToUpdateList(sysHandle); + Assert.Throws(() => group.RemoveUnmanagedSystemFromUpdateList(sysHandle)); + } + + [DotsRuntimeFixme] // DOTSR-1591 Need ILPP support for ISystemBase in DOTS Runtime + [Test] + public void ComponentSystemGroup_DisableAutoSorting_UpdatesInInsertionOrder() + { + var noSortGroup = World.CreateSystem(); + var child1 = World.CreateSystem(); + var child2 = World.CreateSystem(); + var unmanagedChild = World.AddSystem(); + noSortGroup.AddSystemToUpdateList(child1); + noSortGroup.AddUnmanagedSystemToUpdateList(unmanagedChild.Handle); + noSortGroup.AddSystemToUpdateList(child2); + // Just adding the systems should cause them to be updated in insertion order + var expectedUpdateList = new[] + { + new UpdateIndex(0, true), + new UpdateIndex(0, false), + new UpdateIndex(1, true), + }; + CollectionAssert.AreEqual(new TestSystemBase[] {child1, child2}, noSortGroup.Systems); + Assert.AreEqual(1, noSortGroup.UnmanagedSystems.Length); + Assert.AreEqual(unmanagedChild.Handle.MHandle, noSortGroup.UnmanagedSystems[0]); + for (int i = 0; i < expectedUpdateList.Length; ++i) + { + Assert.AreEqual(expectedUpdateList[i], noSortGroup.m_MasterUpdateList[i]); + } + // Sorting the system group should have no effect on the update order + noSortGroup.SortSystems(); + CollectionAssert.AreEqual(new TestSystemBase[] {child1, child2}, noSortGroup.Systems); + Assert.AreEqual(1, noSortGroup.UnmanagedSystems.Length); + Assert.AreEqual(unmanagedChild.Handle.MHandle, noSortGroup.UnmanagedSystems[0]); + for (int i = 0; i < expectedUpdateList.Length; ++i) + { + Assert.AreEqual(expectedUpdateList[i], noSortGroup.m_MasterUpdateList[i]); + } + } + + struct UnmanagedSystemWithSyncPointAfterSchedule : ISystemBase + { + struct MyJob : IJobChunk + { + public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + { + } + } + + private EntityQuery m_Query; + + public void OnCreate(ref SystemState state) + { + state.EntityManager.CreateEntity(typeof(EcsTestData)); + m_Query = state.GetEntityQuery(typeof(EcsTestData)); + } + + public void OnDestroy(ref SystemState state) + { + } + + public void OnUpdate(ref SystemState state) + { + state.GetComponentTypeHandle(); + state.Dependency = new MyJob().ScheduleParallel(m_Query, state.Dependency); + state.EntityManager.CreateEntity(); + } + } + + [Test] + public void ISystemBase_CanHaveSyncPointAfterSchedule() + { + var group = World.CreateSystem(); + var sys = World.AddSystem(); + group.AddSystemToUpdateList(sys.Handle); + Assert.DoesNotThrow(() => group.Update()); + } } } diff --git a/Unity.Entities.Tests/ComponentSystemTests.cs b/Unity.Entities.Tests/ComponentSystemTests.cs index aa8535b9..aa158508 100644 --- a/Unity.Entities.Tests/ComponentSystemTests.cs +++ b/Unity.Entities.Tests/ComponentSystemTests.cs @@ -80,41 +80,6 @@ public void Create() Assert.IsTrue(system.Created); } - class StackedTestSystem1 : TestSystem - { - public Type FoundTypeBefore; - public Type FoundTypeAfter; - public TestSystem System2; - protected override void OnUpdate() - { - FoundTypeBefore = ExecutingSystemType; - System2.Update(); - FoundTypeAfter = ExecutingSystemType; - } - } - - class StackedTestSystem2 : TestSystem - { - public Type FoundTypeDuring; - protected override void OnUpdate() - { - FoundTypeDuring = ExecutingSystemType; - } - } - - [Test] - public void ComponentSystem_ExecutingSystemType() - { - var system1 = World.CreateSystem(); - var system2 = World.CreateSystem(); - system1.System2 = system2; - system1.Update(); - Assert.AreEqual(typeof(StackedTestSystem1), system1.FoundTypeBefore); - Assert.AreEqual(typeof(StackedTestSystem2), system2.FoundTypeDuring); - Assert.AreEqual(typeof(StackedTestSystem1), system1.FoundTypeAfter); - } - - #if !UNITY_PORTABLE_TEST_RUNNER // TODO: IL2CPP_TEST_RUNNER can't handle Assert.That Throws #if ENABLE_UNITY_COLLECTIONS_CHECKS @@ -177,10 +142,6 @@ public void InheritedSystem() public void CreateNonSystemThrows() { Assert.Throws(() => { World.CreateSystem(typeof(Entity)); }); - - #pragma warning disable 618 - Assert.Throws(() => { World.CreateSystem(typeof(Entity), 5); }); - #pragma warning restore 618 } #endif @@ -437,37 +398,6 @@ public class PreservedTestSystem : ComponentSystem public PreservedTestSystem(string inputParam) { m_Test = inputParam; } protected override void OnUpdate() {} } - - -#pragma warning disable 618 - [Test] - public void CreateSystemInvalidParameters() - { - //Non-preserved but valid parameter - Assert.That(() => - { World.CreateSystem("test"); }, - Throws.Exception.With.Message.Contains( - "failed because CreateSystem parameters did not match its constructor.")); - - //Preserved but invalid parameter - Assert.That(() => - { World.CreateSystem(10); }, - Throws.Exception.With.Message.Contains( - "failed because CreateSystem parameters did not match its constructor.")); - } - - [Test] - public void CreateSystemValidParameters() - { - Assert.DoesNotThrow(() => - { - var system = World.CreateSystem("test"); - World.DestroySystem(system); - }); - } - -#pragma warning restore 618 - #endif } } diff --git a/Unity.Entities.Tests/CreateAndDestroyTests.cs b/Unity.Entities.Tests/CreateAndDestroyTests.cs index 04ef86d3..c68486b6 100644 --- a/Unity.Entities.Tests/CreateAndDestroyTests.cs +++ b/Unity.Entities.Tests/CreateAndDestroyTests.cs @@ -277,8 +277,172 @@ public void AddRemoveComponent() Assert.AreEqual(3, m_Manager.GetComponentData(entity).value0); Assert.AreEqual(3, m_Manager.GetComponentData(entity).value1); Assert.AreEqual(3, m_Manager.GetComponentData(entity).value2); + } - m_Manager.DestroyEntity(entity); + [Test] + public void AddRemoveComponent_FailForInt() + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); + var entity = m_Manager.CreateEntity(archetype); + +#if UNITY_DOTSRUNTIME + Assert.Throws(() => m_Manager.AddComponent(entity)); + Assert.Throws(() => m_Manager.RemoveComponent(entity)); + Assert.Throws(() => m_Manager.AddComponent(entity, typeof(int))); + Assert.Throws(() => m_Manager.RemoveComponent(entity, typeof(int))); +#else + Assert.That(() => { m_Manager.AddComponent(entity); }, + Throws.ArgumentException.With.Message.Contains("All ComponentType must be known at compile time.")); + Assert.That(() => { m_Manager.RemoveComponent(entity); }, + Throws.ArgumentException.With.Message.Contains("All ComponentType must be known at compile time.")); + Assert.That(() => { m_Manager.AddComponent(entity, typeof(int)); }, + Throws.ArgumentException.With.Message.Contains("All ComponentType must be known at compile time.")); + Assert.That(() => { m_Manager.RemoveComponent(entity, typeof(int)); }, + Throws.ArgumentException.With.Message.Contains("All ComponentType must be known at compile time.")); +#endif + } + + [Test] + public void AddRemoveComponent_FailForNonIComponentData() + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); + var entity = m_Manager.CreateEntity(archetype); + +#if UNITY_DOTSRUNTIME + Assert.Throws(() => m_Manager.AddComponent(entity)); + Assert.Throws(() => m_Manager.RemoveComponent(entity)); + Assert.Throws(() => m_Manager.AddComponent(entity, typeof(EcsTestNonComponent))); + Assert.Throws(() => m_Manager.RemoveComponent(entity, typeof(EcsTestNonComponent))); +#else + Assert.That(() => { m_Manager.AddComponent(entity); }, + Throws.ArgumentException.With.Message.Contains("All ComponentType must be known at compile time.")); + Assert.That(() => { m_Manager.RemoveComponent(entity); }, + Throws.ArgumentException.With.Message.Contains("All ComponentType must be known at compile time.")); + Assert.That(() => { m_Manager.AddComponent(entity, typeof(EcsTestNonComponent)); }, + Throws.ArgumentException.With.Message.Contains("All ComponentType must be known at compile time.")); + Assert.That(() => { m_Manager.RemoveComponent(entity, typeof(EcsTestNonComponent)); }, + Throws.ArgumentException.With.Message.Contains("All ComponentType must be known at compile time.")); +#endif + } + + [Test] + public void AddRemoveSharedComponent() + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); + + var entity = m_Manager.CreateEntity(archetype); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + + m_Manager.AddComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + + Assert.AreEqual(0, m_Manager.GetSharedComponentData(entity).value); + + m_Manager.RemoveComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + + Assert.AreEqual(0, m_Manager.GetSharedComponentData(entity).value); + + m_Manager.RemoveComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + } + + [Test] + public void AddRemoveBufferComponent() + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); + + var entity = m_Manager.CreateEntity(archetype); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + + m_Manager.AddComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + + Assert.AreEqual(0, m_Manager.GetBuffer(entity).Length); + + m_Manager.RemoveComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + + Assert.AreEqual(0, m_Manager.GetBuffer(entity).Length); + + m_Manager.RemoveComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + } + + [Test] + public void AddRemoveSystemStateComponent() + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); + + var entity = m_Manager.CreateEntity(archetype); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + + m_Manager.AddComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + + Assert.AreEqual(0, m_Manager.GetComponentData(entity).Value); + + m_Manager.RemoveComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + + Assert.AreEqual(0, m_Manager.GetComponentData(entity).Value); + + m_Manager.RemoveComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + } + + [Test] + public void AddRemoveSystemStateSharedComponent() + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); + + var entity = m_Manager.CreateEntity(archetype); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + + m_Manager.AddComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + + Assert.AreEqual(0, m_Manager.GetSharedComponentData(entity).Value); + + m_Manager.RemoveComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + Assert.IsTrue(m_Manager.HasComponent(entity)); + + Assert.AreEqual(0, m_Manager.GetSharedComponentData(entity).Value); + + m_Manager.RemoveComponent(entity); + Assert.IsTrue(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); + Assert.IsFalse(m_Manager.HasComponent(entity)); } [Test] @@ -507,15 +671,21 @@ public void AddComponentBatched_InvalidEntities_ShouldThrow([Values(10, 100)] in { m_Manager.CreateEntity(); } + var entities = m_Manager.UniversalQuery.ToEntityArray(Allocator.TempJob); - Assert.AreEqual(entities.Length, entityCount); + try + { + Assert.AreEqual(entities.Length, entityCount); - entities[0] = invalidEnt; - Assert.That(() => { m_Manager.AddComponent(entities); }, - Throws.ArgumentException.With.Message.Contains("All entities passed to EntityManager must exist")); - entities.Dispose(); + entities[0] = invalidEnt; + Assert.That(() => { m_Manager.AddComponent(entities); }, + Throws.InvalidOperationException.With.Message.Contains("The entity does not exist")); + } + finally + { + entities.Dispose(); + } } - #endif [Test] diff --git a/Unity.Entities.Tests/Diff/CopyAndReplaceTests.cs b/Unity.Entities.Tests/Diff/CopyAndReplaceTests.cs index 7c94cc6a..54c163e0 100644 --- a/Unity.Entities.Tests/Diff/CopyAndReplaceTests.cs +++ b/Unity.Entities.Tests/Diff/CopyAndReplaceTests.cs @@ -83,5 +83,18 @@ public void ReplaceChangedNothing() DstEntityManager.CopyAndReplaceEntitiesFrom(SrcEntityManager); TestValues(entity, metaEntity, 5, 7); } + + [Test] + public void Replace_AfterCreatingAndDestroyingAllEntities() + { + DstEntityManager.CopyAndReplaceEntitiesFrom(SrcEntityManager); + + var emptyArchetype = DstEntityManager.CreateArchetype(); + DstEntityManager.CreateEntity(emptyArchetype, 10000); + DstEntityManager.DestroyEntity(DstEntityManager.UniversalQuery); + + DstEntityManager.CopyAndReplaceEntitiesFrom(SrcEntityManager); + Assert.AreEqual(0, DstEntityManager.UniversalQuery.CalculateChunkCount()); + } } } diff --git a/Unity.Entities.Tests/Diff/CopyEntitiesFromTests.cs b/Unity.Entities.Tests/Diff/CopyEntitiesFromTests.cs index 1dbd5807..44260f6e 100644 --- a/Unity.Entities.Tests/Diff/CopyEntitiesFromTests.cs +++ b/Unity.Entities.Tests/Diff/CopyEntitiesFromTests.cs @@ -21,7 +21,7 @@ void TestValues(Entity entity, int componentDataValue, int componentChunkValue) } #if !UNITY_DISABLE_MANAGED_COMPONENTS - [DotsRuntimeFixme] // Managed components + [DotsRuntimeFixme] [Test] public void CopyEntitiesToOtherWorld() { diff --git a/Unity.Entities.Tests/Diff/EntityDifferTests.cs b/Unity.Entities.Tests/Diff/EntityDifferTests.cs index 86fd9c91..8866bd70 100644 --- a/Unity.Entities.Tests/Diff/EntityDifferTests.cs +++ b/Unity.Entities.Tests/Diff/EntityDifferTests.cs @@ -649,6 +649,35 @@ public void EntityDiffer_AddingZeroSizeComponentToWholeChunk() } } + [Test] + public void EntityDiffer_GetChanges_LinkedEntityGroup_AdditionsAreDetected() + { + using (var differ = new EntityManagerDiffer(SrcEntityManager, Allocator.TempJob)) + { + var aGuid = CreateEntityGuid(); + var a = SrcEntityManager.CreateEntity(); + SrcEntityManager.AddComponentData(a, aGuid); + SrcEntityManager.AddBuffer(a).Add(a); + var bGuid = CreateEntityGuid(); + var b = SrcEntityManager.CreateEntity(); + SrcEntityManager.AddComponentData(b, bGuid); + SrcEntityManager.AddBuffer(b).Add(b); + + using (differ.GetChanges(EntityManagerDifferOptions.Default, Allocator.TempJob)) {} + + SrcEntityManager.GetBuffer(a).Add(b); + SrcEntityManager.GetBuffer(b).Add(a); + + using (var changes = differ.GetChanges(EntityManagerDifferOptions.Default, Allocator.Temp)) + { + Assert.IsTrue(changes.AnyChanges); + Assert.AreEqual(0, changes.ForwardChangeSet.AddComponents.Length); + Assert.AreEqual(0, changes.ForwardChangeSet.LinkedEntityGroupRemovals.Length); + Assert.AreEqual(2, changes.ForwardChangeSet.LinkedEntityGroupAdditions.Length); + } + } + } + #if !UNITY_DISABLE_MANAGED_COMPONENTS /// /// Generates a change set over the world and efficiently updates the internal shadow world. @@ -1339,9 +1368,7 @@ public unsafe void EntityDiffer_GetChanges_BlobAssets_ManagedComponents() Assert.That(forward.BlobAssetData.Length, Is.EqualTo(sizeof(int))); Assert.That(*(int*)forward.BlobAssetData.GetUnsafePtr(), Is.EqualTo(10)); } - - blobAssetReference0.Dispose(); - + var blobAssetReference1 = BlobAssetReference.Create(20); SrcEntityManager.SetComponentData(entity, new ManagedComponentWithBlobAssetRef @@ -1368,6 +1395,7 @@ public unsafe void EntityDiffer_GetChanges_BlobAssets_ManagedComponents() Assert.That(*(int*)reverse.BlobAssetData.GetUnsafePtr(), Is.EqualTo(10)); } + blobAssetReference0.Dispose(); blobAssetReference1.Dispose(); } } @@ -1436,6 +1464,111 @@ public unsafe void EntityDiffer_GetChanges_BlobAssets_SharedComponents() } #endif // !UNITY_DISABLE_MANAGED_COMPONENTS + + [Test] + public void EntityDiffer_GatherLinkedEntityGroupChanges_DetectsSimpleChanges() + { + var a = new EntityGuid(1, 0, 0); + var b = new EntityGuid(2, 0, 0); + var before = new NativeList(1, Allocator.TempJob); + var after = new NativeList(2, Allocator.TempJob); + using (var additions = new NativeList(Allocator.TempJob)) + using (var removals = new NativeList(Allocator.TempJob)) + { + before.Add(a); + after.Add(a); + after.Add(b); + + // detect an addition... + EntityDiffer.GatherLinkedEntityGroupChanges(default, before, after, additions, removals); + Assert.AreEqual(0, removals.Length); + Assert.AreEqual(1, additions.Length); + Assert.AreEqual(b, additions[0].ChildEntityGuid); + additions.Clear(); + removals.Clear(); + + // ...or a removal in reverse. + EntityDiffer.GatherLinkedEntityGroupChanges(default, after, before, additions, removals); + Assert.AreEqual(0, additions.Length); + Assert.AreEqual(1, removals.Length); + Assert.AreEqual(b, removals[0].ChildEntityGuid); + additions.Clear(); + removals.Clear(); + + // now the same with the second range swapped around + after[0] = b; + after[1] = a; + + EntityDiffer.GatherLinkedEntityGroupChanges(default, before, after, additions, removals); + Assert.AreEqual(0, removals.Length); + Assert.AreEqual(1, additions.Length); + Assert.AreEqual(b, additions[0].ChildEntityGuid); + additions.Clear(); + removals.Clear(); + + EntityDiffer.GatherLinkedEntityGroupChanges(default, after, before, additions, removals); + Assert.AreEqual(0, additions.Length); + Assert.AreEqual(1, removals.Length); + Assert.AreEqual(b, removals[0].ChildEntityGuid); + additions.Clear(); + removals.Clear(); + + // and now with an empty first range + before.Clear(); + + EntityDiffer.GatherLinkedEntityGroupChanges(default, before, after, additions, removals); + Assert.AreEqual(0, removals.Length); + Assert.AreEqual(2, additions.Length); + Assert.AreEqual(a, additions[0].ChildEntityGuid); + Assert.AreEqual(b, additions[1].ChildEntityGuid); + additions.Clear(); + removals.Clear(); + + EntityDiffer.GatherLinkedEntityGroupChanges(default, after, before, additions, removals); + Assert.AreEqual(0, additions.Length); + Assert.AreEqual(2, removals.Length); + Assert.AreEqual(a, removals[0].ChildEntityGuid); + Assert.AreEqual(b, removals[1].ChildEntityGuid); + } + + before.Dispose(); + after.Dispose(); + } + + [Test] + public void EntityDiffer_GatherLinkedEntityGroupChanges_DetectsCombinedChanges() + { + var a = new EntityGuid(1, 0, 0); + var b = new EntityGuid(2, 0, 0); + var c = new EntityGuid(3, 0, 0); + var before = new NativeList(1, Allocator.TempJob) + { + a, b + }; + var after = new NativeList(2, Allocator.TempJob) + { + b, c + }; + using (var additions = new NativeList(Allocator.TempJob)) + using (var removals = new NativeList(Allocator.TempJob)) + using (before) + using (after) + { + EntityDiffer.GatherLinkedEntityGroupChanges(default, before, after, additions, removals); + Assert.AreEqual(1, removals.Length); + Assert.AreEqual(1, additions.Length); + Assert.AreEqual(c, additions[0].ChildEntityGuid); + Assert.AreEqual(a, removals[0].ChildEntityGuid); + additions.Clear(); + removals.Clear(); + + EntityDiffer.GatherLinkedEntityGroupChanges(default, after, before, additions, removals); + Assert.AreEqual(1, additions.Length); + Assert.AreEqual(1, removals.Length); + Assert.AreEqual(a, additions[0].ChildEntityGuid); + Assert.AreEqual(c, removals[0].ChildEntityGuid); + } + } #endif // !UNITY_DOTSRUNTIME_IL2CPP } } diff --git a/Unity.Entities.Tests/Diff/EntityGuidTests.cs b/Unity.Entities.Tests/Diff/EntityGuidTests.cs index df502717..171aa87d 100644 --- a/Unity.Entities.Tests/Diff/EntityGuidTests.cs +++ b/Unity.Entities.Tests/Diff/EntityGuidTests.cs @@ -14,11 +14,11 @@ public void Ctor_StoresValuesPacked() var g1 = new EntityGuid(-1, 0xF0, 0x89ABCDEF); Assert.That(g0.OriginatingId, Is.EqualTo(1)); - Assert.That(g0.NamespaceId, Is.EqualTo(2)); + Assert.That(g0.FullNamespaceId, Is.EqualTo(2)); Assert.That(g0.Serial, Is.EqualTo((uint)3)); Assert.That(g1.OriginatingId, Is.EqualTo(-1)); - Assert.That(g1.NamespaceId, Is.EqualTo(0xF0)); + Assert.That(g1.FullNamespaceId, Is.EqualTo(0xF0)); Assert.That(g1.Serial, Is.EqualTo(0x89ABCDEF)); } @@ -28,8 +28,8 @@ public void ToString_ExtractsPackedValues() var g0 = new EntityGuid(1, 2, 3); var g1 = new EntityGuid(-1, 0xF0, 0x89ABCDEF); - Assert.That(g0.ToString(), Is.EqualTo("1:02:00000003")); - Assert.That(g1.ToString(), Is.EqualTo("-1:f0:89abcdef")); + Assert.That(g0.ToString(), Is.EqualTo("1:00000002:00000003")); + Assert.That(g1.ToString(), Is.EqualTo("-1:000000f0:89abcdef")); } #if !NET_DOTS diff --git a/Unity.Entities.Tests/Diff/EntityPatcherTests.cs b/Unity.Entities.Tests/Diff/EntityPatcherTests.cs index 3d2af41a..007f35a2 100644 --- a/Unity.Entities.Tests/Diff/EntityPatcherTests.cs +++ b/Unity.Entities.Tests/Diff/EntityPatcherTests.cs @@ -806,23 +806,67 @@ public void EntityPatcher_ApplyChanges_RemoveComponent_ManagedComponents() } } + [Test] + public void EntityPatcher_ApplyChanges_BlobAssets_CreateEntityWithBlobAssetReferenceSharedComponent() + { + using (var differ = new EntityManagerDiffer(SrcEntityManager, Allocator.TempJob)) + using (var blobAssetReference = BlobAssetReference.Create(11)) + using (var blobAssetReference2 = BlobAssetReference.Create(12)) + { + var entity = SrcEntityManager.CreateEntity(typeof(EntityGuid)); + var entityGuid = CreateEntityGuid(); + + SrcEntityManager.SetComponentData(entity, entityGuid); + SrcEntityManager.AddSharedComponentData(entity, new EcsTestDataBlobAssetRefShared { value = blobAssetReference, value2 = blobAssetReference2}); + + PushChanges(differ, DstEntityManager); + + Assert.AreEqual(1, DstEntityManager.Debug.EntityCount); + Assert.AreEqual(11, GetSharedComponentData(DstEntityManager, entityGuid).value.Value); + Assert.AreEqual(12, GetSharedComponentData(DstEntityManager, entityGuid).value2.Value); + } + } + + [Test] + public void EntityPatcher_ApplyChanges_BlobAssets_CreateEntityWithBlobAssetReferenceClassComponent() + { + using (var differ = new EntityManagerDiffer(SrcEntityManager, Allocator.TempJob)) + using (var blobAssetReference = BlobAssetReference.Create(11)) + using (var blobAssetReference2 = BlobAssetReference.Create(12)) + { + var entity = SrcEntityManager.CreateEntity(typeof(EntityGuid)); + var entityGuid = CreateEntityGuid(); + + SrcEntityManager.SetComponentData(entity, entityGuid); + SrcEntityManager.AddComponentData(entity, new EcsTestDataBlobAssetRefClass { value = blobAssetReference, value2 = blobAssetReference2}); + + PushChanges(differ, DstEntityManager); + + Assert.AreEqual(1, DstEntityManager.Debug.EntityCount); + Assert.AreEqual(11, GetManagedComponentData(DstEntityManager, entityGuid).value.Value); + Assert.AreEqual(12, GetManagedComponentData(DstEntityManager, entityGuid).value2.Value); + } + } + #endif [Test] public void EntityPatcher_ApplyChanges_BlobAssets_CreateEntityWithBlobAssetReference() { using (var differ = new EntityManagerDiffer(SrcEntityManager, Allocator.TempJob)) + using (var blobAssetReference = BlobAssetReference.Create(11)) + using (var blobAssetReference2 = BlobAssetReference.Create(12)) { - var blobAssetReference = BlobAssetReference.Create(11); - var entity = SrcEntityManager.CreateEntity(typeof(EntityGuid), typeof(EcsTestDataBlobAssetRef)); + var entity = SrcEntityManager.CreateEntity(typeof(EntityGuid)); var entityGuid = CreateEntityGuid(); SrcEntityManager.SetComponentData(entity, entityGuid); - SrcEntityManager.SetComponentData(entity, new EcsTestDataBlobAssetRef { value = blobAssetReference }); + SrcEntityManager.AddComponentData(entity, new EcsTestDataBlobAssetRef2 { value = blobAssetReference, value2 = blobAssetReference2}); PushChanges(differ, DstEntityManager); Assert.AreEqual(1, DstEntityManager.Debug.EntityCount); - Assert.AreEqual(11, GetComponentData(DstEntityManager, entityGuid).value.Value); + Assert.AreEqual(11, GetComponentData(DstEntityManager, entityGuid).value.Value); + Assert.AreEqual(12, GetComponentData(DstEntityManager, entityGuid).value2.Value); } } @@ -857,6 +901,56 @@ public void EntityPatcher_ApplyChanges_LinkedEntityGroups() } } + [Test] + public void EntityPatcher_ApplyChanges_LinkedEntityGroups_CombineTwoGroups() + { + using (var differ = new EntityManagerDiffer(SrcEntityManager, Allocator.TempJob)) + { + var rootEntityGuid = CreateEntityGuid(); + var childEntityGuid = CreateEntityGuid(); + + var srcChildEntity = SrcEntityManager.CreateEntity(typeof(EcsTestDataEntity), typeof(LinkedEntityGroup)); + var srcRootEntity = SrcEntityManager.CreateEntity(typeof(EcsTestDataEntity), typeof(LinkedEntityGroup)); + + SrcEntityManager.AddComponentData(srcRootEntity, rootEntityGuid); + SrcEntityManager.AddComponentData(srcChildEntity, childEntityGuid); + + SrcEntityManager.GetBuffer(srcRootEntity).Add(srcRootEntity); + SrcEntityManager.GetBuffer(srcChildEntity).Add(srcChildEntity); + + // verify that we have two different groups in the output + PushChanges(differ, DstEntityManager); + + var dstRootEntity = GetEntity(DstEntityManager, rootEntityGuid); + var dstChildEntity = GetEntity(DstEntityManager, childEntityGuid); + + { + var dstLinkedEntityGroup = DstEntityManager.GetBuffer(dstRootEntity); + Assert.AreEqual(dstLinkedEntityGroup.Length, 1); + Assert.AreEqual(dstLinkedEntityGroup[0].Value, dstRootEntity); + } + + { + var dstLinkedEntityGroup = DstEntityManager.GetBuffer(dstChildEntity); + Assert.AreEqual(dstLinkedEntityGroup.Length, 1); + Assert.AreEqual(dstLinkedEntityGroup[0].Value, dstChildEntity); + } + + // now combine the two groups and verify that they are the same + SrcEntityManager.RemoveComponent(srcChildEntity); + SrcEntityManager.GetBuffer(srcRootEntity).Add(srcChildEntity); + + PushChanges(differ, DstEntityManager); + + { + var dstLinkedEntityGroup = DstEntityManager.GetBuffer(dstRootEntity); + Assert.AreEqual(dstLinkedEntityGroup.Length, 2); + Assert.AreEqual(dstLinkedEntityGroup[0].Value, dstRootEntity); + Assert.AreEqual(dstLinkedEntityGroup[1].Value, dstChildEntity); + } + } + } + #endif // !UNITY_PORTABLE_TEST_RUNNER } } diff --git a/Unity.Entities.Tests/Diff/Fuzzer.meta b/Unity.Entities.Tests/Diff/Fuzzer.meta new file mode 100644 index 00000000..947f7ca5 --- /dev/null +++ b/Unity.Entities.Tests/Diff/Fuzzer.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 606f5b01132445cbba6896dfb97fdee6 +timeCreated: 1599817479 \ No newline at end of file diff --git a/Unity.Entities.Tests/Diff/Fuzzer/DifferPatcherFuzzer.cs b/Unity.Entities.Tests/Diff/Fuzzer/DifferPatcherFuzzer.cs new file mode 100644 index 00000000..54c051f2 --- /dev/null +++ b/Unity.Entities.Tests/Diff/Fuzzer/DifferPatcherFuzzer.cs @@ -0,0 +1,384 @@ +#if UNITY_EDITOR +using System; +using System.Collections.Generic; +using System.Linq; +using Unity.Collections; +using UnityEngine; +using Random = Unity.Mathematics.Random; +using CommandGenerator = Unity.Entities.Tests.Fuzzer.FuzzerCommandGenerator; +using ICommand = Unity.Entities.Tests.Fuzzer.IFuzzerCommand; + +namespace Unity.Entities.Tests.Fuzzer +{ + class DifferPatcherFuzzer : IFuzzer + { + public World SourceWorld { get; } + private World DestinationWorld { get; } + + private EntityManagerDifferOptions _differOptions = EntityManagerDifferOptions.IncludeForwardChangeSet | EntityManagerDifferOptions.ValidateUniqueEntityGuid; + private BlobAssetCache _srcBlobAssets = new BlobAssetCache(Allocator.Persistent); + private BlobAssetCache _dstBlobAssets = new BlobAssetCache(Allocator.Persistent); + internal int NextId; + + // For every entity, we record its "parent" LinkedEntityGroup. That means that with this current setup, every + // entity can only be in a single LinkedEntityGroup. + internal readonly DictionaryForKeySampling LinkedEntityParent = new DictionaryForKeySampling(); + internal readonly HashSetForSampling LinkedEntityRoots = new HashSetForSampling(); + internal readonly DictionaryForKeySampling AliveEntities = new DictionaryForKeySampling(); + private static readonly EntityQueryDesc Query = new EntityQueryDesc + { + All = new ComponentType[] { typeof(EntityGuid) }, + Options = EntityQueryOptions.IncludeDisabled | EntityQueryOptions.IncludePrefab + }; + + public DifferPatcherFuzzer() + { + SourceWorld = new World("Source"); + DestinationWorld = new World("Destination"); + } + + public void Validate() + { + var srcEm = SourceWorld.EntityManager; + var dstEm = DestinationWorld.EntityManager; + using (var changes = EntityDiffer.GetChanges(srcEm, dstEm, _differOptions, Query, _srcBlobAssets, Allocator.TempJob)) + { + EntityPatcher.ApplyChangeSet(dstEm, changes.ForwardChangeSet); + } + + using (var changes = EntityDiffer.GetChanges(dstEm, srcEm, _differOptions, Query, _dstBlobAssets, Allocator.TempJob)) + { + if (!changes.ForwardChangeSet.HasChanges) + return; + // TODO: Format the entity changeset nicely and print it out + throw new Exception("Diff is not zero!"); + } + } + + public static readonly List<(CommandGenerator Generator, int Weight)> WeightedGenerators = new List<(CommandGenerator Generator, int Weight)> + { + (DifferPatcherFuzzerCommands.CreateEntity, 10), + (DifferPatcherFuzzerCommands.DestroyEntity, 8), + (DifferPatcherFuzzerCommands.CreateLinkedEntityGroup, 10), + (DifferPatcherFuzzerCommands.RemoveLinkedEntityGroup, 8), + (DifferPatcherFuzzerCommands.AddToLinkedEntityGroup, 10), + (DifferPatcherFuzzerCommands.RemoveFromLinkedEntityGroup, 8), + (Fuzzer.ValidationCommandGenerator(), 2) + }; + + public static readonly List Generators = WeightedGenerators.Select(t => t.Item1).ToList(); + + public void Dispose() + { + _srcBlobAssets.Dispose(); + _dstBlobAssets.Dispose(); + SourceWorld?.Dispose(); + DestinationWorld?.Dispose(); + } + + internal class DictionaryForKeySampling + { + public readonly Dictionary Dictionary; + public readonly List Keys; + + public DictionaryForKeySampling() + { + Dictionary = new Dictionary(); + Keys = new List(); + } + + public V this[K key] => Dictionary[key]; + public int Count => Dictionary.Count; + + public void Add(K key, V value) + { + if (!Dictionary.ContainsKey(key)) + Keys.Add(key); + Dictionary.Add(key, value); + } + + public bool TryGetValue(K key, out V value) => Dictionary.TryGetValue(key, out value); + public bool ContainsKey(K key) => Dictionary.ContainsKey(key); + + public void Remove(K key) + { + Dictionary.Remove(key); + Keys.Remove(key); + } + + public K SampleKey(ref Random rng) => Keys[rng.NextInt(0, Keys.Count)]; + } + + internal class HashSetForSampling + { + public readonly HashSet HashSet; + public readonly List Keys; + + public HashSetForSampling() + { + HashSet = new HashSet(); + Keys = new List(); + } + + public int Count => HashSet.Count; + + public bool Contains(K key) => HashSet.Contains(key); + + public void Add(K key) + { + if (HashSet.Add(key)) + Keys.Add(key); + } + + public void Remove(K key) + { + HashSet.Remove(key); + Keys.Remove(key); + } + + public K Sample(ref Random rng) => Keys[rng.NextInt(0, Keys.Count)]; + } + } + + static class DifferPatcherFuzzerCommands + { + delegate T SampleCommand(DifferPatcherFuzzer state, ref Random rng); + static CommandGenerator MakeCommand(string commandId, SampleCommand sampler) where T : ICommand + => new CommandGenerator + { + Id = commandId, + DeserializeCommand = str => JsonUtility.FromJson(str), + SampleCommand = (DifferPatcherFuzzer state, ref Random rng, out string serializedCommand) => + { + var cmd = sampler(state, ref rng); + serializedCommand = cmd == null ? default : JsonUtility.ToJson(cmd); + return cmd; + } + }; + + static void RemoveFromLinkedEntityGroupBuffer(DynamicBuffer linkedEntityGroup, Entity e) + { + for (int i = linkedEntityGroup.Length - 1; i >= 0; i--) + { + if (linkedEntityGroup[i].Value == e) + linkedEntityGroup.RemoveAtSwapBack(i); + } + } + + /////////////////////////////////////////// + /// Create Entity + /////////////////////////////////////////// + struct CreateEntityCommand : ICommand + { + public EntityGuid Guid; + public void ApplyCommand(DifferPatcherFuzzer state) + { + var e = state.SourceWorld.EntityManager.CreateEntity(); + state.SourceWorld.EntityManager.AddComponentData(e, Guid); + state.AliveEntities.Add(Guid, e); + } + } + + public static readonly CommandGenerator CreateEntity = MakeCommand("CreateEntity", + (DifferPatcherFuzzer state, ref Random rng) => + { + int id = state.NextId++; + return new CreateEntityCommand {Guid = new EntityGuid(id, 0, 0)}; + }); + + /////////////////////////////////////////// + /// Destroy Entity + /////////////////////////////////////////// + struct DestroyEntityCommand : ICommand + { + public EntityGuid Guid; + public void ApplyCommand(DifferPatcherFuzzer state) + { + var e = state.AliveEntities[Guid]; + var em = state.SourceWorld.EntityManager; + if (state.LinkedEntityParent.TryGetValue(e, out var parent)) + RemoveFromLinkedEntityGroupBuffer(em.GetBuffer(parent), e); + + if (em.HasComponent(e)) + { + var linkedEntities = em.GetBuffer(e); + for (int i = 0; i < linkedEntities.Length; i++) + { + var otherEntity = linkedEntities[i].Value; + var otherGuid = em.GetComponentData(otherEntity); + state.AliveEntities.Remove(otherGuid); + state.LinkedEntityRoots.Remove(otherGuid); + } + } + state.SourceWorld.EntityManager.DestroyEntity(e); + state.AliveEntities.Remove(Guid); + state.LinkedEntityRoots.Remove(Guid); + } + } + + public static readonly CommandGenerator DestroyEntity = MakeCommand("DestroyEntity", + (DifferPatcherFuzzer state, ref Random rng) => + { + if (state.AliveEntities.Count == 0) + return null; + + var guid = state.AliveEntities.SampleKey(ref rng); + return new DestroyEntityCommand {Guid = guid}; + }); + + /////////////////////////////////////////// + /// Create Linked Entity Group + /////////////////////////////////////////// + struct CreateLinkedEntityGroupCommand : ICommand + { + public EntityGuid Guid; + public void ApplyCommand(DifferPatcherFuzzer state) + { + var e = state.AliveEntities[Guid]; + if (state.SourceWorld.EntityManager.HasComponent(e)) + throw new InvalidOperationException(); + var l = state.SourceWorld.EntityManager.AddBuffer(e); + l.Add(e); + state.LinkedEntityRoots.Add(Guid); + } + } + + public static readonly CommandGenerator CreateLinkedEntityGroup = MakeCommand( + "CreateLinkedEntityGroup", + (DifferPatcherFuzzer state, ref Random rng) => + { + if (state.AliveEntities.Count == 0 || state.AliveEntities.Count == state.LinkedEntityRoots.Count) + return null; + + const int maxAttempts = 10; + for (int a = 0; a < maxAttempts; a++) + { + var guid = state.AliveEntities.SampleKey(ref rng); + var e = state.AliveEntities[guid]; + if (!state.LinkedEntityRoots.Contains(guid) && !state.LinkedEntityParent.ContainsKey(e)) + { + return new CreateLinkedEntityGroupCommand {Guid = guid}; + } + } + + return null; + }); + + /////////////////////////////////////////// + /// Remove Linked Entity Group + /////////////////////////////////////////// + struct RemoveLinkedEntityGroupCommand : ICommand + { + public EntityGuid Guid; + public void ApplyCommand(DifferPatcherFuzzer state) + { + var e = state.AliveEntities[Guid]; + var linkedEntities = state.SourceWorld.EntityManager.GetBuffer(e); + for (int i = 0; i < linkedEntities.Length; i++) + state.LinkedEntityParent.Remove(linkedEntities[i].Value); + state.SourceWorld.EntityManager.RemoveComponent(e); + state.LinkedEntityRoots.Remove(Guid); + } + } + + public static readonly CommandGenerator RemoveLinkedEntityGroup = MakeCommand( + "RemoveLinkedEntityGroup", + (DifferPatcherFuzzer state, ref Random rng) => + { + if (state.LinkedEntityRoots.Count == 0) + return null; + + EntityGuid guid = state.LinkedEntityRoots.Sample(ref rng); + return new RemoveLinkedEntityGroupCommand {Guid = guid}; + }); + + /////////////////////////////////////////// + /// Add To Linked Entity Group + /////////////////////////////////////////// + struct AddToLinkedEntityGroupCommand : ICommand + { + public EntityGuid ToAdd; + public EntityGuid AddTo; + public void ApplyCommand(DifferPatcherFuzzer state) + { + var addTo = state.AliveEntities[AddTo]; + var toAdd = state.AliveEntities[ToAdd]; + var l = state.SourceWorld.EntityManager.GetBuffer(addTo); + l.Add(toAdd); + state.LinkedEntityParent.Add(toAdd, addTo); + } + } + + public static readonly CommandGenerator AddToLinkedEntityGroup = MakeCommand( + "AddToLinkedEntityGroup", + (DifferPatcherFuzzer state, ref Random rng) => + { + if (state.LinkedEntityParent.Count + state.LinkedEntityRoots.Count == state.AliveEntities.Count || + state.LinkedEntityRoots.Count == 0) + return null; + + const int maxAttempts = 10; + for (int a = 0; a < maxAttempts; a++) + { + // find something that has no linked entity group + var toAdd = state.AliveEntities.SampleKey(ref rng); + var toAddEntity = state.AliveEntities[toAdd]; + if (state.LinkedEntityParent.ContainsKey(toAddEntity) || + state.LinkedEntityRoots.Contains(toAdd)) + continue; + return new AddToLinkedEntityGroupCommand + { + AddTo = state.LinkedEntityRoots.Sample(ref rng), + ToAdd = toAdd + }; + } + + return null; + }); + + /////////////////////////////////////////// + /// Remove From Linked Entity Group + /////////////////////////////////////////// + struct RemoveFromLinkedEntityGroupCommand : ICommand + { + public EntityGuid ToRemove; + public EntityGuid RemoveFrom; + public void ApplyCommand(DifferPatcherFuzzer state) + { + var removeFrom = state.AliveEntities[RemoveFrom]; + var toRemove = state.AliveEntities[ToRemove]; + var l = state.SourceWorld.EntityManager.GetBuffer(removeFrom); + RemoveFromLinkedEntityGroupBuffer(l, toRemove); + state.LinkedEntityParent.Remove(toRemove); + } + } + + public static readonly CommandGenerator RemoveFromLinkedEntityGroup = + MakeCommand( + "RemoveFromLinkedEntityGroup", + (DifferPatcherFuzzer state, ref Random rng) => + { + if (state.LinkedEntityRoots.Count == 0) + return null; + + var em = state.SourceWorld.EntityManager; + const int maxAttempts = 10; + for (int a = 0; a < maxAttempts; a++) + { + var removeFrom = state.LinkedEntityRoots.Sample(ref rng); + var root = state.AliveEntities[removeFrom]; + var linkedEntities = em.GetBuffer(root); + if (linkedEntities.Length <= 1) + continue; + var other = linkedEntities[rng.NextInt(1, linkedEntities.Length)].Value; + return new RemoveFromLinkedEntityGroupCommand + { + RemoveFrom = removeFrom, + ToRemove = em.GetComponentData(other) + }; + } + return null; + }); + } +} +#endif diff --git a/Unity.Entities.Tests/Diff/Fuzzer/DifferPatcherFuzzer.cs.meta b/Unity.Entities.Tests/Diff/Fuzzer/DifferPatcherFuzzer.cs.meta new file mode 100644 index 00000000..63fa655d --- /dev/null +++ b/Unity.Entities.Tests/Diff/Fuzzer/DifferPatcherFuzzer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 63538420860b4dc3aaf750f27071b5a9 +timeCreated: 1599825627 \ No newline at end of file diff --git a/Unity.Entities.Tests/Diff/Fuzzer/EntityDifferPatcherFuzzTests.cs b/Unity.Entities.Tests/Diff/Fuzzer/EntityDifferPatcherFuzzTests.cs new file mode 100644 index 00000000..5bd244d7 --- /dev/null +++ b/Unity.Entities.Tests/Diff/Fuzzer/EntityDifferPatcherFuzzTests.cs @@ -0,0 +1,95 @@ +#if UNITY_EDITOR +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; + +namespace Unity.Entities.Tests.Fuzzer +{ + [TestFixture] + class EntityDifferPatcherFuzzTests + { + static IEnumerable FuzzTestingSeeds() + { + for (uint i = 0; i < 1; i++) + yield return i; + } + +#if false // set to true to add fuzz testing + [Test, Explicit] + public void EntityDifferPatcherFuzzer([ValueSource(nameof(FuzzTestingSeeds))] + uint seed) + { + using (var fuzzer = new DifferPatcherFuzzer()) + { + var commands = fuzzer.GenerateCommands(DifferPatcherFuzzer.WeightedGenerators, seed, 200, 20); + fuzzer.Run(commands, str => Console.WriteLine(str.ToCSharpString())); + } + } + + [Test, Explicit] + public void ReduceTestCase() + { + int lastIndex = TestCases.Length - 1; + var commands = Fuzzer.ParseLog(DifferPatcherFuzzer.Generators, TestCases[lastIndex].Item2.Split('\n')).ToList(); + var simplified = Fuzzer.Reduce(() => new DifferPatcherFuzzer(), commands); + + Debug.Log($"Simplified from {commands.Count} to {simplified.Count} commands:\n" + string.Join("\n", simplified.Select(c => c.ToCSharpString()))); + using (var fuzzer = new DifferPatcherFuzzer()) + { + fuzzer.Run(simplified, str => Console.WriteLine(str.ToCSharpString())); + } + } +#endif + + [Test, TestCaseSource(typeof(EntityDifferPatcherFuzzTests), nameof(FuzzTestCases))] + public void EntityDifferPatcherTests(IEnumerable> commands) + { + using (var fuzzer = new DifferPatcherFuzzer()) + { + fuzzer.Run(commands, str => Console.WriteLine(str.ToCSharpString())); + } + } + + public static IEnumerable FuzzTestCases + { + get + { + foreach (var entry in TestCases) + { + var commands = Fuzzer.ParseLog(DifferPatcherFuzzer.Generators, entry.Data.Split('\n')); + yield return new TestCaseData(commands).SetName(entry.Name); + } + } + } + + private static readonly (string Name, string Data)[] TestCases = + { + ("ShuffleLinkedEntityGroups", @" +CreateEntity_|_{""Guid"":{""a"":3,""b"":0}} +CreateLinkedEntityGroup_|_{""Guid"":{""a"":3,""b"":0}} +CreateEntity_|_{""Guid"":{""a"":7,""b"":0}} +RemoveLinkedEntityGroup_|_{""Guid"":{""a"":3,""b"":0}} +CreateLinkedEntityGroup_|_{""Guid"":{""a"":3,""b"":0}} +AddToLinkedEntityGroup_|_{""ToAdd"":{""a"":7,""b"":0},""AddTo"":{""a"":3,""b"":0}} +Validate_|_ +RemoveFromLinkedEntityGroup_|_{""ToRemove"":{""a"":7,""b"":0},""RemoveFrom"":{""a"":3,""b"":0}} +Validate_|_"), + ("AddAndRemoveFromLinkedEntityGroup_ThenDestroy", @" +CreateEntity_|_{""Guid"":{""a"":1,""b"":0}} +DestroyEntity_|_{""Guid"":{""a"":1,""b"":0}} +CreateEntity_|_{""Guid"":{""a"":27,""b"":0}} +CreateEntity_|_{""Guid"":{""a"":28,""b"":0}} +CreateEntity_|_{""Guid"":{""a"":30,""b"":0}} +CreateLinkedEntityGroup_|_{""Guid"":{""a"":30,""b"":0}} +AddToLinkedEntityGroup_|_{""ToAdd"":{""a"":27,""b"":0},""AddTo"":{""a"":30,""b"":0}} +AddToLinkedEntityGroup_|_{""ToAdd"":{""a"":28,""b"":0},""AddTo"":{""a"":30,""b"":0}} +RemoveFromLinkedEntityGroup_|_{""ToRemove"":{""a"":27,""b"":0},""RemoveFrom"":{""a"":30,""b"":0}} +RemoveLinkedEntityGroup_|_{""Guid"":{""a"":30,""b"":0}} +DestroyEntity_|_{""Guid"":{""a"":30,""b"":0}} +DestroyEntity_|_{""Guid"":{""a"":28,""b"":0}}") + }; + } +} +#endif diff --git a/Unity.Entities.Tests/Diff/Fuzzer/EntityDifferPatcherFuzzTests.cs.meta b/Unity.Entities.Tests/Diff/Fuzzer/EntityDifferPatcherFuzzTests.cs.meta new file mode 100644 index 00000000..616f562c --- /dev/null +++ b/Unity.Entities.Tests/Diff/Fuzzer/EntityDifferPatcherFuzzTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 44c4cf83a7e14773850b8272d7419537 +timeCreated: 1599832145 \ No newline at end of file diff --git a/Unity.Entities.Tests/Diff/Fuzzer/Fuzzer.cs b/Unity.Entities.Tests/Diff/Fuzzer/Fuzzer.cs new file mode 100644 index 00000000..d9f63ce8 --- /dev/null +++ b/Unity.Entities.Tests/Diff/Fuzzer/Fuzzer.cs @@ -0,0 +1,284 @@ +#if UNITY_EDITOR +using System; +using System.Collections.Generic; +using System.Linq; +using Random = Unity.Mathematics.Random; + +namespace Unity.Entities.Tests.Fuzzer +{ + interface IFuzzerCommand + { + void ApplyCommand(TFuzzer state); + } + + interface IFuzzer : IDisposable + { + void Validate(); + } + + struct FuzzerCommandGenerator + { + public string Id; + public SampleCommandDelegate SampleCommand; + public DeserializeCommandDelegate DeserializeCommand; + + public delegate IFuzzerCommand SampleCommandDelegate(TFuzzer state, ref Random rng, out string serializedCommand); + public delegate IFuzzerCommand DeserializeCommandDelegate(string serializedCommand); + } + + static class Fuzzer + { + const string SerializationSeparator = "_|_"; + const string ValidationMagicId = "Validate"; + + struct WeightedSampler + { + private readonly int _totalWeight; + private readonly int[] _runningSumWeights; + + internal WeightedSampler(IEnumerable weights) + { + _runningSumWeights = weights.ToArray(); + int s = 0; + for (int i = 0; i < _runningSumWeights.Length; i++) + { + s += _runningSumWeights[i]; + _runningSumWeights[i] = s; + } + + _totalWeight = s; + } + + internal int SampleCommandIndex(ref Random rng) + { + int w = rng.NextInt(0, _totalWeight); + for (int i = 0; i < _runningSumWeights.Length; i++) + { + if (w < _runningSumWeights[i]) + return i; + } + return _runningSumWeights.Length - 1; + } + } + + class ValidationCommandImpl : IFuzzerCommand where TFuzzer: IFuzzer + { + public void ApplyCommand(TFuzzer state) => state.Validate(); + } + + static CommandData ValidationCommandData() where TFuzzer : IFuzzer + => new CommandData + { + GeneratorId = ValidationMagicId, + Command = new ValidationCommandImpl() + }; + + public static FuzzerCommandGenerator ValidationCommandGenerator() where TFuzzer : IFuzzer + => new FuzzerCommandGenerator + { + Id = ValidationMagicId, + DeserializeCommand = _ => new ValidationCommandImpl(), + SampleCommand = (TFuzzer state, ref Random rng, out string command) => + { + command = default; + return new ValidationCommandImpl(); + } + }; + + public struct CommandData + { + public IFuzzerCommand Command; + public string SerializedCommand; + public string GeneratorId; + + public override string ToString() => GeneratorId + SerializationSeparator + SerializedCommand; + public string ToCSharpString() => ToString().Replace("\"", "\"\""); + } + + struct SubSampledList + { + public List Indices; + public List Data; + + public SubSampledList(IEnumerable data) + { + Data = data.ToList(); + Indices = new List(Data.Count); + for (int i = 0; i < Data.Count; i++) + Indices.Add(i); + } + + public IEnumerable Enumerate() + { + for (int i = 0; i < Indices.Count; i++) + { + if (Indices[i] >= 0) + yield return Data[Indices[i]]; + } + } + } + + /// + /// Reduces the input list of commands to the shortest subsequence of commands that can be obtained by removing + /// one command at a time while retaining the same stacktrace for the first failure. + /// + /// + /// + /// + /// The reduced list of commands. + public static List> Reduce(Func makeFuzzer, List> commands) where TFuzzer : IFuzzer + { + var (failureIndex, stackTrace) = CaptureStackTrace(commands); + if (stackTrace == null) + return commands; + var actualCommands = commands.Take(failureIndex + 1); + + // The approach to reducing the failure case is to simply iteratively try to remove commands without changing + // the stack trace, starting at the end. + var subsampled = new SubSampledList>(actualCommands); + bool progress; + do + { + progress = false; + + // It is probably more likely that we'll find a command to eliminate when we start at the end. + for (int j = subsampled.Indices.Count - 1; j >= 0; j--) + { + var idx = subsampled.Indices[j]; + subsampled.Indices[j] = -1; + var (_, newStackTrace) = CaptureStackTrace(subsampled.Enumerate()); + if (newStackTrace == stackTrace) + { + subsampled.Indices.RemoveAt(j); + progress = true; + break; + } + subsampled.Indices[j] = idx; + } + } while (progress); + + return subsampled.Enumerate().ToList(); + + (int failureIndex, string stacktrace) CaptureStackTrace(IEnumerable> newCommands) + { + int i = 0; + try + { + using (var fuzzer = makeFuzzer()) + { + foreach (var cmd in newCommands) + { + cmd.Command.ApplyCommand(fuzzer); + i++; + } + } + } + catch (Exception ex) + { + return (i, ex.StackTrace); + } + return (i, null); + } + } + + public static IEnumerable> ParseLog(List> generators, IEnumerable lines) where TFuzzer : IFuzzer + { + var idToIndex = new Dictionary(); + for (int i = 0; i < generators.Count; i++) + idToIndex[generators[i].Id] = i; + + foreach (var l in lines) + { + var line = l.Trim(); + if (line.Length == 0) + continue; + var split = line.IndexOf(SerializationSeparator, StringComparison.Ordinal); + if (split <= -1) + throw new Exception("Missing command ID for line:\n" + line); + var id = line.Substring(0, split); + if (id == ValidationMagicId) + yield return ValidationCommandData(); + else if (idToIndex.TryGetValue(id, out int idx)) + { + var serializedCommand = line.Substring(split + SerializationSeparator.Length); + var command = generators[idx].DeserializeCommand(serializedCommand); + if (command == null) + throw new Exception("Failed to parse command from line:\n " + line); + yield return new CommandData + { + Command = command, + SerializedCommand = serializedCommand, + GeneratorId = id + }; + } + else + throw new Exception("Unknown id \"" + id + '"'); + } + } + + public static void Run(this TFuzzer fuzzer, IEnumerable> commands, Action> logger) where TFuzzer : IFuzzer + { + foreach (var cmd in commands) + { + logger?.Invoke(cmd); + cmd.Command.ApplyCommand(fuzzer); + } + fuzzer.Validate(); + } + + public static IEnumerable> GenerateCommands(this TFuzzer fuzzer, List<(FuzzerCommandGenerator Generator, int Weight)> weightedGenerators, uint seed, int steps, int maxStepsBetweenValidation) where TFuzzer : IFuzzer + { + var rng = Random.CreateFromIndex(seed); + int stepsSinceValidation = 0; + var commands = weightedGenerators; + var sampler = new WeightedSampler(commands.Select(t => t.Weight)); + const int maxAttempts = 100; + for (int i = 0; i < steps; i++) + { + CommandData cmd; + int a = 0; + while (true) { + int commandIndex = sampler.SampleCommandIndex(ref rng); + if (TrySampleCommand(commands[commandIndex].Generator, fuzzer, ref rng, out cmd)) + break; + if (++a >= maxAttempts) + { + Debug.LogWarning("Failed to sample more commands"); + yield break; + } + } + + yield return cmd; + if (cmd.Command is ValidationCommandImpl) + stepsSinceValidation = 0; + else + { + stepsSinceValidation++; + if (stepsSinceValidation >= maxStepsBetweenValidation) + { + stepsSinceValidation = 0; + yield return ValidationCommandData(); + } + } + } + } + + private static bool TrySampleCommand(this FuzzerCommandGenerator gen, TFuzzer state, ref Random rng, out CommandData cmdData) + { + var cmd = gen.SampleCommand(state, ref rng, out var serializedCommand); + if (cmd == null) + { + cmdData = default; + return false; + } + cmdData = new CommandData + { + Command = cmd, + SerializedCommand = serializedCommand, + GeneratorId = gen.Id + }; + return true; + } + } +} +#endif diff --git a/Unity.Entities.Tests/Diff/Fuzzer/Fuzzer.cs.meta b/Unity.Entities.Tests/Diff/Fuzzer/Fuzzer.cs.meta new file mode 100644 index 00000000..9c7b548e --- /dev/null +++ b/Unity.Entities.Tests/Diff/Fuzzer/Fuzzer.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: e18554fea3ac4694bfae74dd19e41907 +timeCreated: 1599817251 \ No newline at end of file diff --git a/Unity.Entities.Tests/DotsRuntimeTestAttributes.cs b/Unity.Entities.Tests/DotsRuntimeTestAttributes.cs index fb51f1d9..10b66a06 100644 --- a/Unity.Entities.Tests/DotsRuntimeTestAttributes.cs +++ b/Unity.Entities.Tests/DotsRuntimeTestAttributes.cs @@ -6,13 +6,16 @@ namespace Unity.Entities.Tests #if UNITY_DOTSRUNTIME public class DotsRuntimeFixmeAttribute : IgnoreAttribute { - public DotsRuntimeFixmeAttribute() : base("Test should work in DOTS Runtime but currently doesn't. Ignoring until fixed...") + public DotsRuntimeFixmeAttribute(string msg = null) : base(msg == null ? "Test should work in DOTS Runtime but currently doesn't. Ignoring until fixed..." : msg) { } } #else public class DotsRuntimeFixmeAttribute : Attribute { + public DotsRuntimeFixmeAttribute(string msg = null) + { + } } #endif diff --git a/Unity.Entities.Tests/DynamicBufferTests.cs b/Unity.Entities.Tests/DynamicBufferTests.cs index 37118681..5b36427c 100644 --- a/Unity.Entities.Tests/DynamicBufferTests.cs +++ b/Unity.Entities.Tests/DynamicBufferTests.cs @@ -16,7 +16,7 @@ namespace Unity.Entities.Tests { - public class DynamicBufferTests : ECSTestsFixture + public partial class DynamicBufferTests : ECSTestsFixture { [DebuggerDisplay("Value: {Value}")] struct DynamicBufferElement : IBufferElementData @@ -182,7 +182,7 @@ public unsafe void DynamicBuffer_GetUnsafePtr_ReadOnlyAndReadWriteAreEqual() // https://unity3d.atlassian.net/browse/DOTSR-1995 Fails on Runtime WebGL target. #if !(UNITY_DOTSRUNTIME && UNITY_WEBGL) - public class DynamicBufferTestsSystem : SystemBase + public partial class DynamicBufferTestsSystem : SystemBase { private struct DynamicBufferData1 : IBufferElementData { @@ -389,7 +389,7 @@ public void WritingToReadOnlyBufferTriggersSafetySystem_BufferFromEntity() } #endif - [Test] + [Test, Ignore("DOTS-3029")] public void DynamicBufferAliasing() { World.GetOrCreateSystem().Update(); diff --git a/Unity.Entities.Tests/ECSTestsFixture.cs b/Unity.Entities.Tests/ECSTestsFixture.cs index d98e825d..c9c4e2f1 100644 --- a/Unity.Entities.Tests/ECSTestsFixture.cs +++ b/Unity.Entities.Tests/ECSTestsFixture.cs @@ -37,9 +37,9 @@ protected override void OnUpdate() return base.GetEntityQuery(componentTypes); } - public new BufferFromEntity GetBufferFromEntity(bool isReadOnly = false) where T : struct, IBufferElementData + public unsafe new BufferFromEntity GetBufferFromEntity(bool isReadOnly = false) where T : struct, IBufferElementData { - AddReaderWriter(isReadOnly ? ComponentType.ReadOnly() : ComponentType.ReadWrite()); + CheckedState()->AddReaderWriter(isReadOnly ? ComponentType.ReadOnly() : ComponentType.ReadWrite()); return EntityManager.GetBufferFromEntity(isReadOnly); } } diff --git a/Unity.Entities.Tests/EntitiesAssert/EntitiesAssertTests.cs b/Unity.Entities.Tests/EntitiesAssert/EntitiesAssertTests.cs index 3223ca1c..70ea6102 100644 --- a/Unity.Entities.Tests/EntitiesAssert/EntitiesAssertTests.cs +++ b/Unity.Entities.Tests/EntitiesAssert/EntitiesAssertTests.cs @@ -91,7 +91,7 @@ public void ContainsOnly_WithEmptyEntity() EntitiesAssert.ContainsOnly(m_Manager, EntityMatch.Partial(entity))); } - [Test] + [Test, Ignore("DOTS-2301")] public void ContainsOnly_WithNonEmptyEntity() { var entity = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2)); diff --git a/Unity.Entities.Tests/EntityCommandBufferTests.cs b/Unity.Entities.Tests/EntityCommandBufferTests.cs index 7c91c10d..7b114045 100644 --- a/Unity.Entities.Tests/EntityCommandBufferTests.cs +++ b/Unity.Entities.Tests/EntityCommandBufferTests.cs @@ -123,10 +123,9 @@ public void EntityCommandBufferSystem_DisposeAfterPlaybackError_Succeeds() // These tests require: // - JobsDebugger support for static safety IDs (added in 2020.1) -#if UNITY_2020_1_OR_NEWER && !UNITY_DOTSRUNTIME +#if !UNITY_DOTSRUNTIME [Test] - [DotsRuntimeFixme] // Static safety IDs - // https://unity3d.atlassian.net/browse/DOTSR-1432 + [DotsRuntimeFixme("Static safety IDs - DOTSR-1432")] [IgnoreInPortableTests("There are Assert.Throws which the runner doesn't find or support.")] public void EntityCommandBufferConcurrent_PlaybackDuringWrite_UsesCustomOwnerTypeName() { @@ -844,7 +843,7 @@ public void AddSharedComponent_ComponentExists_NewValueWins() } [Test] - public void AddComponentToEntityQuery() + public void AddComponentForEntityQuery_CaptureAtPlayback() { var cmds = new EntityCommandBuffer(Allocator.TempJob); @@ -868,6 +867,331 @@ public void AddComponentToEntityQuery() entities.Dispose(); } + [Test] + public void AddComponentForEntityQuery_CaptureAtRecord() + { + var entity = m_Manager.CreateEntity(); + var entity2 = m_Manager.CreateEntity(); + var data1 = new EcsTestData(); + m_Manager.AddComponentData(entity, data1); + m_Manager.AddComponentData(entity2, data1); + + // these entities don't match the query and so should remain unaffected + m_Manager.CreateEntity(); + m_Manager.CreateEntity(typeof(EcsTestData3)); + m_Manager.CreateEntity(typeof(EcsTestData4)); + + using (var cmds = new EntityCommandBuffer(Allocator.TempJob)) + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + { + cmds.AddComponentForEntityQuery(entityQuery, typeof(EcsTestData2)); + cmds.Playback(m_Manager); + } + + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData2))) + using (var entities = entityQuery.ToEntityArray(Allocator.TempJob)) + { + Assert.AreEqual(2, entities.Length, "Wrong number of entities with added component."); + + for (int i = 0; i < entities.Length; i++) + { + var e = entities[i]; + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + } + } + } + + [Test] + public void AddComponentForEntityQuery_CaptureAtRecord_SetValue() + { + var entity = m_Manager.CreateEntity(); + var entity2 = m_Manager.CreateEntity(); + var data1 = new EcsTestData(); + m_Manager.AddComponentData(entity, data1); + m_Manager.AddComponentData(entity2, data1); + m_Manager.AddComponentData(entity2, new EcsTestData2(8)); // entity that already has the component should have it set + + // these entities don't match the query and so should remain unaffected + m_Manager.CreateEntity(); + m_Manager.CreateEntity(typeof(EcsTestData3)); + m_Manager.CreateEntity(typeof(EcsTestData4)); + + var testVal = new EcsTestData2(5); + + using (var cmds = new EntityCommandBuffer(Allocator.TempJob)) + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + { + cmds.AddComponentForEntityQuery(entityQuery, testVal); + cmds.Playback(m_Manager); + } + + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData2))) + using (var entities = entityQuery.ToEntityArray(Allocator.TempJob)) + { + Assert.AreEqual(2, entities.Length, "Wrong number of entities with added component."); + + for (int i = 0; i < entities.Length; i++) + { + var e = entities[i]; + Assert.AreEqual(testVal, m_Manager.GetComponentData(e), + "A component did not have the correct value."); + + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + } + } + } + +#if !UNITY_DISABLE_MANAGED_COMPONENTS + [Test] + public void AddComponentForEntityQuery_CaptureAtRecord_ManagedComponent() + { + var entity = m_Manager.CreateEntity(); + var entity2 = m_Manager.CreateEntity(); + var data1 = new EcsTestData(); + m_Manager.AddComponentData(entity, data1); + m_Manager.AddComponentData(entity2, data1); + + // these entities don't match the query and so should remain unaffected + m_Manager.CreateEntity(); + m_Manager.CreateEntity(typeof(EcsTestData3)); + m_Manager.CreateEntity(typeof(EcsTestData4)); + + using (var cmds = new EntityCommandBuffer(Allocator.TempJob)) + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + { + cmds.AddComponentForEntityQuery(entityQuery, typeof(EcsTestManagedComponent)); + cmds.Playback(m_Manager); + } + + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestManagedComponent))) + using (var entities = entityQuery.ToEntityArray(Allocator.TempJob)) + { + Assert.AreEqual(2, entities.Length, "Wrong number of entities with added component."); + + for (int i = 0; i < entities.Length; i++) + { + var e = entities[i]; + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + } + } + } +#endif + + [Test] + public void AddComponentForEntityQuery_CaptureAtRecord_SharedComponent() + { + var entity = m_Manager.CreateEntity(); + var entity2 = m_Manager.CreateEntity(); + var data1 = new EcsTestData(); + m_Manager.AddComponentData(entity, data1); + m_Manager.AddComponentData(entity2, data1); + + // these entities don't match the query and so should remain unaffected + var entity3 = m_Manager.CreateEntity(); + var entity4 = m_Manager.CreateEntity(typeof(EcsTestData3)); + var entity5 = m_Manager.CreateEntity(typeof(EcsTestData4)); + + using (var cmds = new EntityCommandBuffer(Allocator.TempJob)) + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + { + cmds.AddComponentForEntityQuery(entityQuery, typeof(EcsTestSharedComp)); + cmds.Playback(m_Manager); + } + + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestSharedComp))) + using (var entities = entityQuery.ToEntityArray(Allocator.TempJob)) + { + Assert.AreEqual(2, entities.Length, "Wrong number of entities with added component."); + + for (int i = 0; i < entities.Length; i++) + { + var e = entities[i]; + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + } + } + } + + [Test] + public void AddComponentForEntityQuery_CaptureAtRecord_MultipleComponents() + { + var entity = m_Manager.CreateEntity(); + var entity2 = m_Manager.CreateEntity(); + var data1 = new EcsTestData(); + m_Manager.AddComponentData(entity, data1); + m_Manager.AddComponentData(entity2, data1); + + // these entities don't match the query and so should remain unaffected + m_Manager.CreateEntity(); + m_Manager.CreateEntity(typeof(EcsTestData3)); + m_Manager.CreateEntity(typeof(EcsTestData4)); + + using (var cmds = new EntityCommandBuffer(Allocator.TempJob)) + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + { + var types = new ComponentTypes(typeof(EcsTestData2), typeof(EcsTestData3)); + cmds.AddComponentForEntityQuery(entityQuery, types); + cmds.Playback(m_Manager); + } + + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData2), typeof(EcsTestData3))) + using (var entities = entityQuery.ToEntityArray(Allocator.TempJob)) + { + Assert.AreEqual(2, entities.Length, "Wrong number of entities with added components."); + + for (int i = 0; i < entities.Length; i++) + { + var e = entities[i]; + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + } + } + } + + [Test] + public void RemoveComponentForEntityQuery_CaptureAtRecord() + { + var entity = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2)); + var entity2 = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2)); + + // these entities don't match the query and so should remain unaffected + m_Manager.CreateEntity(); + m_Manager.CreateEntity(typeof(EcsTestData3)); + m_Manager.CreateEntity(typeof(EcsTestData4)); + + using (var cmds = new EntityCommandBuffer(Allocator.TempJob)) + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + { + cmds.RemoveComponentForEntityQuery(entityQuery, typeof(EcsTestData2)); + cmds.Playback(m_Manager); + } + + using (var entityQuery = m_Manager.CreateEntityQuery(new EntityQueryDesc + { + All = new ComponentType[] {typeof(EcsTestData)}, + None = new ComponentType[] {typeof(EcsTestData2)}, + })) + using (var entities = entityQuery.ToEntityArray(Allocator.TempJob)) + { + Assert.AreEqual(2, entities.Length, "Wrong number of entities with removed component."); + + for (int i = 0; i < entities.Length; i++) + { + var e = entities[i]; + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + } + } + } + + [Test] + public void RemoveComponentForEntityQuery_CaptureAtRecord_SharedComponent() + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestSharedComp)); + var entity = m_Manager.CreateEntity(archetype); + var entity2 = m_Manager.CreateEntity(archetype); + + // these entities don't match the query and so should remain unaffected + m_Manager.CreateEntity(); + m_Manager.CreateEntity(typeof(EcsTestData3)); + m_Manager.CreateEntity(typeof(EcsTestData4)); + + using (var cmds = new EntityCommandBuffer(Allocator.TempJob)) + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + { + cmds.RemoveComponentForEntityQuery(entityQuery, typeof(EcsTestSharedComp)); + cmds.Playback(m_Manager); + } + + using (var entityQuery = m_Manager.CreateEntityQuery(new EntityQueryDesc + { + All = new ComponentType[] {typeof(EcsTestData)}, + None = new ComponentType[] {typeof(EcsTestSharedComp)}, + })) + using (var entities = entityQuery.ToEntityArray(Allocator.TempJob)) + { + Assert.AreEqual(2, entities.Length, "Wrong number of entities with removed component."); + + for (int i = 0; i < entities.Length; i++) + { + var e = entities[i]; + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + } + } + } + + [Test] + public void RemoveComponentForEntityQuery_CaptureAtRecord_MultipleComponents() + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2), typeof(EcsTestData3)); + var entity = m_Manager.CreateEntity(archetype); + var entity2 = m_Manager.CreateEntity(archetype); + + // these entities don't match the query and so should remain unaffected + m_Manager.CreateEntity(); + m_Manager.CreateEntity(typeof(EcsTestData3)); + m_Manager.CreateEntity(typeof(EcsTestData4)); + + using (var cmds = new EntityCommandBuffer(Allocator.TempJob)) + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + { + var types = new ComponentTypes(typeof(EcsTestData), typeof(EcsTestData3)); + cmds.RemoveComponentForEntityQuery(entityQuery, types); + cmds.Playback(m_Manager); + } + + using (var entityQuery = m_Manager.CreateEntityQuery(new EntityQueryDesc + { + All = new ComponentType[] {typeof(EcsTestData2)}, + None = new ComponentType[] {typeof(EcsTestData), typeof(EcsTestData3)}, + })) + using (var entities = entityQuery.ToEntityArray(Allocator.TempJob)) + { + Assert.AreEqual(2, entities.Length, "Wrong number of entities with removed component."); + + for (int i = 0; i < entities.Length; i++) + { + var e = entities[i]; + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + Assert.IsTrue(e == entity || e == entity2, "Wrong entity."); + } + } + } + + [Test] + public void DestroyEntitiesForEntityQuery_CaptureAtRecord() + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestData)); + m_Manager.CreateEntity(archetype, 5); + + // these entities don't match the query and so should remain unaffected + m_Manager.CreateEntity(); + m_Manager.CreateEntity(typeof(EcsTestData3)); + m_Manager.CreateEntity(typeof(EcsTestData4)); + + using (var cmds = new EntityCommandBuffer(Allocator.TempJob)) + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + { + cmds.DestroyEntitiesForEntityQuery(entityQuery); + cmds.Playback(m_Manager); + } + + using (var entityQuery = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + using (var entities = entityQuery.ToEntityArray(Allocator.TempJob)) + { + Assert.AreEqual(0, entities.Length, "Wrong number of entities destroyed."); + } + + using (var entities = m_Manager.GetAllEntities(Allocator.TempJob)) + { + Assert.AreEqual(3, entities.Length, "Wrong number of entities remaining."); + } + } + [Test] public void AddComponentsToEntityQuery() { @@ -1532,6 +1856,22 @@ public void DestroyEntityTwiceWorks() Assert.IsFalse(m_Manager.Exists(e)); } + [Test] + public void AddSharedComponent_WhenComponentHasEntityField_DoesNotRemap() + { + var cmds = new EntityCommandBuffer(Allocator.TempJob); + + var es = m_Manager.CreateEntity(); + + cmds.AddSharedComponent(es, new EcsTestSharedCompEntity(es)); + + cmds.Playback(m_Manager); + cmds.Dispose(); + + Assert.AreEqual(es, m_Manager.GetSharedComponentData(es).value); + } + + #if UNITY_2020_2_OR_NEWER // 2020.2 no longer leaks strings when using Burst Abort [Test] @@ -2342,21 +2682,6 @@ public void EntityCommandBufferSystemPlaybackExceptionIsolation() #endif - [Test] - public void AddSharedComponent_WhenComponentHasEntityField_ThrowsArgumentException() - { - var cmds = new EntityCommandBuffer(Allocator.TempJob); - - var es = m_Manager.CreateEntity(); - - Assert.Throws(() => - { - cmds.AddSharedComponent(es, new EcsTestSharedCompEntity(es)); - }); - - cmds.Dispose(); - } - [Test] public void AddComponent_WhenDataContainsDeferredEntity_ThrowsOnMultiplePlaybacks() { @@ -2396,17 +2721,10 @@ public void AddComponent_WhenDataContainsDeferredEntity_DeferredEntityIsResolved cmds.Playback(m_Manager); cmds.Dispose(); + using (var group = m_Manager.CreateEntityQuery(typeof(EcsTestDataEntity))) { - var group = m_Manager.CreateEntityQuery(typeof(EcsTestDataEntity)); - var arr = group.ToComponentDataArray(Allocator.TempJob); - - Assert.AreEqual(1, arr.Length); - var e0real = arr[0].value1; - EcsTestDataEntity v0 = m_Manager.GetComponentData(e0real); - Assert.AreEqual(v0.value1, e0real); - - arr.Dispose(); - group.Dispose(); + var e = group.GetSingletonEntity(); + Assert.AreEqual(e, m_Manager.GetComponentData(e).value1); } } @@ -2420,17 +2738,10 @@ public void AddComponents_WhenDataContainsDeferredEntity_DeferredEntityIsResolve cmds.Playback(m_Manager); cmds.Dispose(); + using (var group = m_Manager.CreateEntityQuery(typeof(EcsTestDataEntity))) { - var group = m_Manager.CreateEntityQuery(typeof(EcsTestDataEntity)); - var arr = group.ToComponentDataArray(Allocator.TempJob); - - Assert.AreEqual(1, arr.Length); - var e0real = arr[0].value1; - EcsTestDataEntity v0 = m_Manager.GetComponentData(e0real); - Assert.AreEqual(v0.value1, e0real); - - arr.Dispose(); - group.Dispose(); + var e = group.GetSingletonEntity(); + Assert.AreEqual(e, m_Manager.GetComponentData(e).value1); } } @@ -2821,37 +3132,29 @@ public void CreateTwoComponents_ManagedComponents() cmds.Playback(m_Manager2); cmds.Dispose(); + using(var group = m_Manager.CreateEntityQuery(typeof(EcsTestManagedComponent))) { - var group = m_Manager.CreateEntityQuery(typeof(EcsTestManagedComponent)); - var arr = group.ToComponentDataArray(); - Assert.AreEqual(1, arr.Length); - Assert.AreEqual("SomeString", arr[0].value); - group.Dispose(); + var component = EntityQueryManagedComponentExtensions.GetSingleton(group); + Assert.AreEqual("SomeString", component.value); } + using(var group = m_Manager.CreateEntityQuery(typeof(EcsTestManagedComponent2))) { - var group = m_Manager.CreateEntityQuery(typeof(EcsTestManagedComponent2)); - var arr = group.ToComponentDataArray(); - Assert.AreEqual(1, arr.Length); - Assert.AreEqual("SomeString", arr[0].value); - Assert.AreEqual("SomeOtherString", arr[0].value2); - group.Dispose(); + var component = EntityQueryManagedComponentExtensions.GetSingleton(group); + Assert.AreEqual("SomeString", component.value); + Assert.AreEqual("SomeOtherString", component.value2); } + using(var group = m_Manager2.CreateEntityQuery(typeof(EcsTestManagedComponent))) { - var group = m_Manager2.CreateEntityQuery(typeof(EcsTestManagedComponent)); - var arr = group.ToComponentDataArray(); - Assert.AreEqual(1, arr.Length); - Assert.AreEqual("SomeString", arr[0].value); - group.Dispose(); + var component = EntityQueryManagedComponentExtensions.GetSingleton(group); + Assert.AreEqual("SomeString", component.value); } + using (var group = m_Manager2.CreateEntityQuery(typeof(EcsTestManagedComponent2))) { - var group = m_Manager2.CreateEntityQuery(typeof(EcsTestManagedComponent2)); - var arr = group.ToComponentDataArray(); - Assert.AreEqual(1, arr.Length); - Assert.AreEqual("SomeString", arr[0].value); - Assert.AreEqual("SomeOtherString", arr[0].value2); - group.Dispose(); + var component = EntityQueryManagedComponentExtensions.GetSingleton(group); + Assert.AreEqual("SomeString", component.value); + Assert.AreEqual("SomeOtherString", component.value2); } } @@ -3350,6 +3653,24 @@ public void PlaybackWithExclusiveEntityTransactionInJob_ManagedComponents() managedGroup.Dispose(); } + [Test] + public void AddManagedComponent_WithEntityPatch() + { + var cmds = new EntityCommandBuffer(Allocator.TempJob); + + Entity e0 = cmds.CreateEntity(); + cmds.AddComponent(e0, new EcsTestManagedDataEntity {value1 = e0}); + + cmds.Playback(m_Manager); + cmds.Dispose(); + + using(var group = m_Manager.CreateEntityQuery(typeof(EcsTestManagedDataEntity))) + { + var e = group.GetSingletonEntity(); + Assert.AreEqual(e, m_Manager.GetComponentData(e).value1); + } + } + #endif [Test] diff --git a/Unity.Entities.Tests/EntityManagerComponentGroupOperationsTests.cs b/Unity.Entities.Tests/EntityManagerComponentGroupOperationsTests.cs index 343d2f34..31a16334 100644 --- a/Unity.Entities.Tests/EntityManagerComponentGroupOperationsTests.cs +++ b/Unity.Entities.Tests/EntityManagerComponentGroupOperationsTests.cs @@ -236,10 +236,6 @@ public void AddMultipleComponentsWithQuery_SharedComponentValuesPreserved() Assert.AreEqual(archetype, m_Manager.GetChunk(entity2).Archetype); } -// We want these types registered with in DOTS Runtime by default -#if !UNITY_DOTSRUNTIME - [DisableAutoTypeRegistration] -#endif private struct EcsTestDataHuge : IComponentData { public FixedString4096 value0; @@ -257,10 +253,6 @@ public EcsTestDataHuge(FixedString4096 inValue) [Test] public void AddMultipleComponentsWithQuery_ExceedChunkCapacityThrows() { -// TypeManager.AddNewComponentTypes is not supported in DOTS Runtime currently -#if !UNITY_DOTSRUNTIME - TypeManager.AddNewComponentTypes(new[]{typeof(EcsTestDataHuge)}); -#endif var componentTypes = new ComponentTypes(typeof(EcsTestDataHuge)); // add really big component(s) Assert.AreEqual(16320, Chunk.GetChunkBufferSize()); // if chunk size changes, need to update this test diff --git a/Unity.Entities.Tests/EntityManagerTests.cs b/Unity.Entities.Tests/EntityManagerTests.cs index 483e3bce..3977ec21 100644 --- a/Unity.Entities.Tests/EntityManagerTests.cs +++ b/Unity.Entities.Tests/EntityManagerTests.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.Runtime.InteropServices; using Unity.Collections; using NUnit.Framework; using Unity.Burst; +using Unity.Collections.LowLevel.Unsafe; namespace Unity.Entities.Tests { @@ -85,48 +87,6 @@ public void AddComponentEmptyNativeArray() array.Dispose(); } - [Test] - public void TestIsCreatedProperty() - { - EntityManager testy; - using (var world = new World("Temp")) - { - testy = world.EntityManager; -#pragma warning disable 618 - Assert.IsTrue(testy.IsCreated); -#pragma warning restore 618 - } -#pragma warning disable 618 - Assert.IsFalse(testy.IsCreated); -#pragma warning restore 618 - } - - [Test] - public void TestCompareToNullLegacy() - { -#pragma warning disable CS0618 // Type or member is obsolete - EntityManager testy = default; - Assert.IsTrue(testy == null); - using (var world = new World("Temp")) - { - testy = world.EntityManager; - Assert.IsTrue(testy != null); - } -#pragma warning restore CS0618 // Type or member is obsolete - } - - [Test] - public void TestNullableCompare() - { -#pragma warning disable CS0618 // Type or member is obsolete - using (var world = new World("Temp")) - { - var testy = world?.EntityManager; - Assert.IsTrue(testy != null); - } -#pragma warning restore CS0618 // Type or member is obsolete - } - unsafe public bool IndexInChunkIsValid(Entity entity) { var entityInChunk = m_Manager.GetCheckedEntityDataAccess()->EntityComponentStore->GetEntityInChunk(entity); @@ -268,6 +228,43 @@ public void EntityArchetypeFromDifferentEntityManagerThrows() } } + // test for DOTS-3479: changing a chunk's archetype in-place temporarily leaves the new archetype's chunks-with-empty-slots + // list in an inconsistent state. + [Test] + public void ChangeArchetypeInPlace_WithSharedComponents_ChunkIsInFreeSlotList() + { + var srcArchetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestSharedComp), typeof(EcsTestTag)); + var dstArchetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestSharedComp)); + + // Create two chunks in srcArchetype with different shared component values + var ent0 = m_Manager.CreateEntity(srcArchetype); + m_Manager.SetSharedComponentData(ent0, new EcsTestSharedComp {value = 17}); + var ent1 = m_Manager.CreateEntity(srcArchetype); + m_Manager.SetSharedComponentData(ent1, new EcsTestSharedComp {value = 42}); + + // move ent1's chunk to dstArchetype + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestTag), typeof(EcsTestSharedComp))) + { + query.SetSharedComponentFilter(new EcsTestSharedComp {value = 42}); + m_Manager.RemoveComponent(query); + } + var archetypeChunk = m_Manager.GetChunk(ent1); + Assert.AreEqual(dstArchetype, archetypeChunk.Archetype); + + // entity's chunk should have plenty of empty slots available + Assert.AreEqual(1, archetypeChunk.Count); + Assert.IsFalse(archetypeChunk.Full); + + var ent2 = m_Manager.CreateEntity(dstArchetype); + // Changing ent2 to the same shared component values as ent1 should move ent2 to the same chunk as ent1. + // If these asserts fail, it means ent1's chunk wasn't correctly added to dstArchetype's + // FreeChunksBySharedComponents list (specifically, it was added under a hash of the wrong shared component + // values), and a new chunk was created for ent2 instead. + m_Manager.SetSharedComponentData(ent2, new EcsTestSharedComp {value = 42}); + Assert.AreEqual(2, archetypeChunk.Count); // ent1's chunk should contain both entities + Assert.AreEqual(archetypeChunk, m_Manager.GetChunk(ent2)); // ent1 and ent2 should have the same chunk + } + [Test] public unsafe void ComponentsWithBool() { @@ -307,10 +304,6 @@ public unsafe void ComponentsWithBool() hash.Dispose(); } -// We want these types registered with in DOTS Runtime by default -#if !UNITY_DOTSRUNTIME - [DisableAutoTypeRegistration] -#endif [TypeManager.ForcedMemoryOrderingAttribute(1)] struct BigComponentWithAlign1 : IComponentData { @@ -342,10 +335,6 @@ struct MaxCapacityTag3 : IComponentData {} [TestCase(typeof(EcsTestTag))] public unsafe void ChunkComponentRunIsAligned(Type maxCapacityTagType) { - // TypeManager.AddNewComponentTypes is not supported in DOTS Runtime currently -#if !UNITY_DOTSRUNTIME - TypeManager.AddNewComponentTypes(new []{typeof(BigComponentWithAlign1)}); -#endif // Create an entity var archetype = m_Manager.CreateArchetype(typeof(BigComponentWithAlign1), typeof(ComponentWithAlign8), maxCapacityTagType); var entity = m_Manager.CreateEntity(archetype); @@ -363,10 +352,6 @@ public unsafe void ChunkComponentRunIsAligned(Type maxCapacityTagType) #endif -// We want these types registered with in DOTS Runtime by default -#if !UNITY_DOTSRUNTIME - [DisableAutoTypeRegistration] -#endif struct WillFitWithAlign : IComponentData { // sizeof(T) is not a constant @@ -380,10 +365,6 @@ struct WillFitWithAlign : IComponentData unsafe fixed byte val[kWillFitSize]; } -// We want these types registered with in DOTS Runtime by default -#if !UNITY_DOTSRUNTIME - [DisableAutoTypeRegistration] -#endif struct WontFitWithAlign : IComponentData { // Make component one byte larger than would fit in chunk @@ -394,11 +375,6 @@ struct WontFitWithAlign : IComponentData [Test] public unsafe void CreatingArchetypeWithToLargeEntityThrows() { -// TypeManager.AddNewComponentTypes is not supported in DOTS Runtime currently -#if !UNITY_DOTSRUNTIME - TypeManager.AddNewComponentTypes(new []{typeof(WillFitWithAlign), typeof(WontFitWithAlign), typeof(BigComponentWithAlign1)}); -#endif - Assert.DoesNotThrow(() => m_Manager.CreateArchetype(typeof(BigComponentWithAlign1), typeof(WillFitWithAlign))); Assert.Throws(() => m_Manager.CreateArchetype(typeof(BigComponentWithAlign1), typeof(WontFitWithAlign))); } @@ -678,6 +654,121 @@ public void SetSharedComponentData_WithEntityQuery_ThatHasNoMatch_WillNotCorrupt m_Manager.Debug.CheckInternalConsistency(); } + [StructLayout(LayoutKind.Explicit, Size = 3)] + public struct ComponentDataByteThen2PaddingBytes : IComponentData + { + [FieldOffset(0)] + public byte mByte; + } + + [StructLayout(LayoutKind.Explicit, Size = 3)] + public struct ComponentPaddingByteThenDataByteThenPaddingByte: IComponentData + { + [FieldOffset(1)] + public byte mByte; + } + + /// + /// This test is to ensure we can rely on padding bytes being zero-initialized such that memory comparisons + /// of chunks written to using SetComponent or by storing structs via chunk pointers is fine. A user will + /// only encounter problems where default(c) != default(c) if they explicitly alter the padding bytes of the struct + /// they copy into chunk memory, to which we say, they must intend for this struct to be different than one that + /// didn't have it's padding bytes explicitly altered. + /// + /// Relevant part of the standard that ensures types are by default zero initialized: + /// ECMA-335 I.12.6.8 + /// All memory allocated for static variables (other than those assigned RVAs within a PE + /// file, see Partition II) and objects shall be zeroed before they are made visible to any user code. + /// + [Test] + public unsafe void ValidatePaddingBytesAreOverwrittenWhenReusingChunks() + { + const byte kPaddingValue = 0xFF; + const byte kMemoryInitPattern = 0xAA; + Assertions.Assert.AreNotEqual(kMemoryInitPattern, kPaddingValue); + Assertions.Assert.AreNotEqual(0, kPaddingValue); + + m_ManagerDebug.UseMemoryInitPattern = true; + m_ManagerDebug.MemoryInitPattern = kMemoryInitPattern; + + NativeHashSet seenChunkBuffers = new NativeHashSet(8, Allocator.TempJob); + var dppArchetype = m_Manager.CreateArchetype(typeof(ComponentDataByteThen2PaddingBytes)); + var pdpArchetype = m_Manager.CreateArchetype(typeof(ComponentPaddingByteThenDataByteThenPaddingByte)); + Assert.AreEqual(dppArchetype.ChunkCapacity, pdpArchetype.ChunkCapacity); + + // Allocate entities to fill multiple chunks with components with known "bad" padding bytes + var entityCount = dppArchetype.ChunkCapacity * 2; + var entities = new NativeArray(entityCount, Allocator.TempJob); + for (int i = 0; i < entityCount; ++i) + { + var entity = m_Manager.CreateEntity(dppArchetype); + entities[i] = entity; + + var component = new ComponentDataByteThen2PaddingBytes(); + var pData = (byte*) UnsafeUtility.AddressOf(ref component); + pData[0] = (byte) entity.Index; // data byte + pData[1] = kPaddingValue; // padding byte + pData[2] = kPaddingValue; // padding byte + + m_Manager.SetComponentData(entity, component); + } + + Assert.AreEqual(2, dppArchetype.ChunkCount); + for (int i = 0; i < dppArchetype.Archetype->Chunks.Count; ++i) + seenChunkBuffers.Add((ulong)dppArchetype.Archetype->Chunks[i]->Buffer); + + // Validate the components have the byte pattern we expect + foreach (var entity in entities) + { + var component = m_Manager.GetComponentData(entity); + var pData = (byte*) UnsafeUtility.AddressOf(ref component); + Assert.AreEqual((byte) entity.Index, pData[0]); + Assert.AreEqual(kPaddingValue, pData[1] ); + Assert.AreEqual(kPaddingValue, pData[2]); + } + + // Delete all entities in the second chunk, pushing the chunk back on the freelist + for (int i = dppArchetype.ChunkCapacity; i < entityCount; ++i) + m_Manager.DestroyEntity(entities[i]); + Assert.AreEqual(1, dppArchetype.ChunkCount); + + // Allocate a new archetype with the opposite stripping pattern + // and ensure the chunk retrieved is a chunk we've seen already + var newEntityCount = pdpArchetype.ChunkCapacity; + var newEntities = new NativeArray(newEntityCount, Allocator.TempJob); + for (int i = 0; i < newEntityCount; ++i) + { + var entity = m_Manager.CreateEntity(pdpArchetype); + newEntities[i] = entity; + + var component = new ComponentPaddingByteThenDataByteThenPaddingByte(); + var pData = (byte*) UnsafeUtility.AddressOf(ref component); + Assertions.Assert.AreEqual(0, pData[0]); // pData[0] -- padding byte left uninitialized + pData[1] = (byte) entity.Index; // data byte + Assertions.Assert.AreEqual(0, pData[0]); // pData[2] -- padding byte left uninitialized + + m_Manager.SetComponentData(entity, component); + } + Assert.AreEqual(1, pdpArchetype.ChunkCount); + Assert.IsTrue(seenChunkBuffers.Contains((ulong)pdpArchetype.Archetype->Chunks[0]->Buffer)); + + // Validate the components have zero initialized padding bytes and not the poisoned padding + // i.e. what you store to chunk memory is what you get. You are not affected by the + // non-zero-initialized chunk memory state + foreach (var entity in newEntities) + { + var component = m_Manager.GetComponentData(entity); + var pData = (byte*) UnsafeUtility.AddressOf(ref component); + Assert.AreEqual((byte)0, pData[0] ); + Assert.AreEqual((byte) entity.Index, pData[1]); + Assert.AreEqual((byte)0, pData[2]); + } + + newEntities.Dispose(); + entities.Dispose(); + seenChunkBuffers.Dispose(); + } + [Test] [Ignore("Fix had to be reverted, check issue #2996")] public void Fix1602() @@ -699,7 +790,7 @@ public void Fix1602() // These tests require: // - JobsDebugger support for static safety IDs (added in 2020.1) // - Asserting throws -#if UNITY_2020_1_OR_NEWER && !UNITY_DOTSRUNTIME +#if !UNITY_DOTSRUNTIME [Test,DotsRuntimeFixme] public void EntityManager_DoubleDispose_UsesCustomOwnerTypeName() { diff --git a/Unity.Entities.Tests/EntityManagerUnmanagedTests.cs b/Unity.Entities.Tests/EntityManagerUnmanagedTests.cs index fb7e296a..afaf71ba 100644 --- a/Unity.Entities.Tests/EntityManagerUnmanagedTests.cs +++ b/Unity.Entities.Tests/EntityManagerUnmanagedTests.cs @@ -83,20 +83,20 @@ public void OnUpdate(ref SystemState state) public void UnmanagedSystemLifetime() { SystemHandle sysHandle = default; - Assert.Throws(() => World.ResolveSystem(sysHandle)); + Assert.Throws(() => World.Unmanaged.ResolveSystem(sysHandle)); using (var world = new World("Temp")) { - Assert.Throws(() => World.ResolveSystem(sysHandle)); + Assert.Throws(() => World.Unmanaged.ResolveSystem(sysHandle)); var sys = world.AddSystem(); sysHandle = sys.Handle; - Assert.IsTrue(world.IsSystemValid(sysHandle)); - Assert.IsFalse(World.IsSystemValid(sysHandle)); - ref var sys2 = ref world.ResolveSystem(sysHandle); + Assert.IsTrue(world.Unmanaged.IsSystemValid(sysHandle)); + Assert.IsFalse(World.Unmanaged.IsSystemValid(sysHandle)); + ref var sys2 = ref world.Unmanaged.ResolveSystem(sysHandle); } - Assert.IsFalse(World.IsSystemValid(sysHandle)); - Assert.Throws(() => World.ResolveSystem(sysHandle)); + Assert.IsFalse(World.Unmanaged.IsSystemValid(sysHandle)); + Assert.Throws(() => World.Unmanaged.ResolveSystem(sysHandle)); } [Test] @@ -111,11 +111,11 @@ public void UnmanagedSystemLookup() // We don't know which one we'll get currently, but the point is there will be two. Assert.AreEqual(19, Math.Abs(World.GetExistingSystem().Struct.Dummy)); - World.DestroySystem(s1.Handle); + World.DestroyUnmanagedSystem(s1.Handle); Assert.AreEqual(19, Math.Abs(World.GetExistingSystem().Struct.Dummy)); - World.DestroySystem(s2.Handle); + World.DestroyUnmanagedSystem(s2.Handle); Assert.Throws(() => World.GetExistingSystem()); } @@ -135,7 +135,7 @@ public unsafe void UnmanagedSystemStartStop() group.AddSystemToUpdateList(s1.Handle); w.Update(); - w.DestroySystem(s1.Handle); + w.DestroyUnmanagedSystem(s1.Handle); w.Update(); } @@ -146,9 +146,9 @@ public unsafe void UnmanagedSystemStartStop() public unsafe void RegistryCallManagedToManaged() { var sysRef = World.AddSystem(); - var statePtr = World.ResolveSystemState(sysRef.Handle); + var statePtr = World.Unmanaged.ResolveSystemState(sysRef.Handle); SystemBaseRegistry.CallOnUpdate(statePtr); - ref var sys = ref World.ResolveSystem(sysRef.Handle); + ref var sys = ref World.Unmanaged.ResolveSystem(sysRef.Handle); Assert.AreEqual(1, sys.UpdateCount); } @@ -156,9 +156,9 @@ public unsafe void RegistryCallManagedToManaged() public unsafe void RegistryCallManagedToBurst() { var sysId = World.AddSystem(); - var statePtr = World.ResolveSystemState(sysId.Handle); + var statePtr = World.Unmanaged.ResolveSystemState(sysId.Handle); SystemBaseRegistry.CallOnUpdate(statePtr); - ref var sys = ref World.ResolveSystem(sysId.Handle); + ref var sys = ref World.Unmanaged.ResolveSystem(sysId.Handle); Assert.AreEqual(1, sys.UpdateCount); } @@ -179,9 +179,9 @@ private unsafe static void DispatchUpdate(IntPtr state) public unsafe void RegistryCallBurstToManaged() { var sysRef = World.AddSystem(); - var statePtr = (IntPtr) World.ResolveSystemState(sysRef.Handle); + var statePtr = (IntPtr) World.Unmanaged.ResolveSystemState(sysRef.Handle); BurstCompiler.CompileFunctionPointer(DispatchUpdate).Invoke(statePtr); - ref var sys = ref World.ResolveSystem(sysRef.Handle); + ref var sys = ref World.Unmanaged.ResolveSystem(sysRef.Handle); Assert.AreEqual(1, sys.UpdateCount); } @@ -189,9 +189,9 @@ public unsafe void RegistryCallBurstToManaged() public unsafe void RegistryCallBurstToBurst() { var sysRef = World.AddSystem(); - var statePtr = (IntPtr) World.ResolveSystemState(sysRef.Handle); + var statePtr = (IntPtr) World.Unmanaged.ResolveSystemState(sysRef.Handle); BurstCompiler.CompileFunctionPointer(DispatchUpdate).Invoke(statePtr); - ref var sys = ref World.ResolveSystem(sysRef.Handle); + ref var sys = ref World.Unmanaged.ResolveSystem(sysRef.Handle); Assert.AreEqual(1, sys.UpdateCount); } diff --git a/Unity.Entities.Tests/EntityQuerySyncChangeFilterTypesTests.cs b/Unity.Entities.Tests/EntityQuerySyncChangeFilterTypesTests.cs index c1d31ba5..c2290bdf 100644 --- a/Unity.Entities.Tests/EntityQuerySyncChangeFilterTypesTests.cs +++ b/Unity.Entities.Tests/EntityQuerySyncChangeFilterTypesTests.cs @@ -17,7 +17,6 @@ namespace Unity.Entities.Tests [TestFixture("CompleteJob1")] [TestFixture("CompleteJob2")] [TestFixture("CompleteNoJobs")] - [DotsRuntimeFixme] class EntityQuerySyncChangeFilterTypesTests : ECSTestsFixture { bool completeJob1; diff --git a/Unity.Entities.Tests/EntityQueryTests.cs b/Unity.Entities.Tests/EntityQueryTests.cs index 0586211b..e4426f89 100644 --- a/Unity.Entities.Tests/EntityQueryTests.cs +++ b/Unity.Entities.Tests/EntityQueryTests.cs @@ -9,12 +9,20 @@ using Unity.Collections.LowLevel.Unsafe; using Unity.Jobs; using System.Linq; +using Unity.Burst; namespace Unity.Entities.Tests { [TestFixture] class EntityQueryTests : ECSTestsFixture { + public enum EntityQueryJobMode + { + Immediate, + Async, + AsyncComplete + }; + ArchetypeChunk[] CreateEntitiesAndReturnChunks(EntityArchetype archetype, int entityCount, Action action = null) { var entities = new NativeArray(entityCount, Allocator.Temp); @@ -37,6 +45,37 @@ ArchetypeChunk[] CreateEntitiesAndReturnChunks(EntityArchetype archetype, int en return managedEntities.Select(e => m_Manager.GetChunk(e)).Distinct().ToArray(); } + private unsafe EntityTypeHandle GetEntityTypeHandle(EntityQuery query) + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + var safetyHandles = query._GetImpl()->SafetyHandles; + var entityType = new EntityTypeHandle(safetyHandles->GetSafetyHandleForEntityTypeHandle()); +#else + var entityType = new EntityTypeHandle(); +#endif + return entityType; + } + + private unsafe ComponentTypeHandle GetComponentTypeHandle(EntityQuery query) + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + var impl = query._GetImpl(); + var safetyHandles = impl->SafetyHandles; + var componentType = new ComponentTypeHandle( + safetyHandles->GetSafetyHandleForComponentTypeHandle(TypeManager.GetTypeIndex(), true), + true, impl->_Access->EntityComponentStore->GlobalSystemVersion); +#else + componentType = new ComponentTypeHandle(); +#endif + return componentType; + } + + private unsafe UnsafeMatchingArchetypePtrList GetMatchingArchetypes(EntityQuery query) + { + var impl = query._GetImpl(); + return impl->_QueryData->MatchingArchetypes; + } + [Test] public void CreateArchetypeChunkArray() { @@ -50,11 +89,11 @@ public void CreateArchetypeChunkArray() var allCreatedChunks = createdChunks1.Concat(createdChunks2).Concat(createdChunks12); - var group1 = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - var group12 = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestData2)); + var query1 = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + var query12 = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestData2)); - var queriedChunks1 = group1.CreateArchetypeChunkArray(Allocator.TempJob); - var queriedChunks12 = group12.CreateArchetypeChunkArray(Allocator.TempJob); + var queriedChunks1 = query1.CreateArchetypeChunkArray(Allocator.TempJob); + var queriedChunks12 = query12.CreateArchetypeChunkArray(Allocator.TempJob); var queriedChunksAll = m_Manager.GetAllChunks(Allocator.TempJob); CollectionAssert.AreEquivalent(createdChunks1.Concat(createdChunks12), queriedChunks1); @@ -82,20 +121,20 @@ public void CreateArchetypeChunkArray_FiltersSharedComponents() var createdChunks3 = CreateEntitiesAndReturnChunks(archetype1, 5000, e => SetShared(e, 2)); var createdChunks4 = CreateEntitiesAndReturnChunks(archetype2, 5000, e => SetShared(e, 2)); - var group = m_Manager.CreateEntityQuery(typeof(EcsTestSharedComp)); + var query = m_Manager.CreateEntityQuery(typeof(EcsTestSharedComp)); - group.SetSharedComponentFilter(new EcsTestSharedComp(1)); + query.SetSharedComponentFilter(new EcsTestSharedComp(1)); - var queriedChunks1 = group.CreateArchetypeChunkArray(Allocator.TempJob); + var queriedChunks1 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetSharedComponentFilter(new EcsTestSharedComp(2)); + query.SetSharedComponentFilter(new EcsTestSharedComp(2)); - var queriedChunks2 = group.CreateArchetypeChunkArray(Allocator.TempJob); + var queriedChunks2 = query.CreateArchetypeChunkArray(Allocator.TempJob); CollectionAssert.AreEquivalent(createdChunks1.Concat(createdChunks2), queriedChunks1); CollectionAssert.AreEquivalent(createdChunks3.Concat(createdChunks4), queriedChunks2); - group.Dispose(); + query.Dispose(); queriedChunks1.Dispose(); queriedChunks2.Dispose(); } @@ -121,19 +160,19 @@ public void CreateArchetypeChunkArray_FiltersTwoSharedComponents() var createdChunks7 = CreateEntitiesAndReturnChunks(archetype1, 5000, e => SetShared(e, 2, 8)); var createdChunks8 = CreateEntitiesAndReturnChunks(archetype2, 5000, e => SetShared(e, 2, 8)); - var group = m_Manager.CreateEntityQuery(typeof(EcsTestSharedComp), typeof(EcsTestSharedComp2)); + var query = m_Manager.CreateEntityQuery(typeof(EcsTestSharedComp), typeof(EcsTestSharedComp2)); - group.SetSharedComponentFilter(new EcsTestSharedComp(1), new EcsTestSharedComp2(7)); - var queriedChunks1 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetSharedComponentFilter(new EcsTestSharedComp(1), new EcsTestSharedComp2(7)); + var queriedChunks1 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetSharedComponentFilter(new EcsTestSharedComp(2), new EcsTestSharedComp2(7)); - var queriedChunks2 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetSharedComponentFilter(new EcsTestSharedComp(2), new EcsTestSharedComp2(7)); + var queriedChunks2 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetSharedComponentFilter(new EcsTestSharedComp(1), new EcsTestSharedComp2(8)); - var queriedChunks3 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetSharedComponentFilter(new EcsTestSharedComp(1), new EcsTestSharedComp2(8)); + var queriedChunks3 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetSharedComponentFilter(new EcsTestSharedComp(2), new EcsTestSharedComp2(8)); - var queriedChunks4 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetSharedComponentFilter(new EcsTestSharedComp(2), new EcsTestSharedComp2(8)); + var queriedChunks4 = query.CreateArchetypeChunkArray(Allocator.TempJob); CollectionAssert.AreEquivalent(createdChunks1.Concat(createdChunks2), queriedChunks1); @@ -141,7 +180,7 @@ public void CreateArchetypeChunkArray_FiltersTwoSharedComponents() CollectionAssert.AreEquivalent(createdChunks5.Concat(createdChunks6), queriedChunks3); CollectionAssert.AreEquivalent(createdChunks7.Concat(createdChunks8), queriedChunks4); - group.Dispose(); + query.Dispose(); queriedChunks1.Dispose(); queriedChunks2.Dispose(); queriedChunks3.Dispose(); @@ -167,21 +206,21 @@ public void CreateArchetypeChunkArray_FiltersChangeVersions() m_ManagerDebug.SetGlobalSystemVersion(40); var createdChunks3 = CreateEntitiesAndReturnChunks(archetype3, 5000, e => SetData(e, 3)); - var group = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - group.SetChangedVersionFilter(typeof(EcsTestData)); + query.SetChangedVersionFilter(typeof(EcsTestData)); - group.SetChangedFilterRequiredVersion(10); - var queriedChunks1 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(10); + var queriedChunks1 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetChangedFilterRequiredVersion(20); - var queriedChunks2 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(20); + var queriedChunks2 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetChangedFilterRequiredVersion(30); - var queriedChunks3 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(30); + var queriedChunks3 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetChangedFilterRequiredVersion(40); - var queriedChunks4 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(40); + var queriedChunks4 = query.CreateArchetypeChunkArray(Allocator.TempJob); CollectionAssert.AreEquivalent(createdChunks1.Concat(createdChunks2).Concat(createdChunks3), queriedChunks1); CollectionAssert.AreEquivalent(createdChunks2.Concat(createdChunks3), queriedChunks2); @@ -189,7 +228,7 @@ public void CreateArchetypeChunkArray_FiltersChangeVersions() Assert.AreEqual(0, queriedChunks4.Length); - group.Dispose(); + query.Dispose(); queriedChunks1.Dispose(); queriedChunks2.Dispose(); queriedChunks3.Dispose(); @@ -216,16 +255,16 @@ public void CreateArchetypeChunkArray_FiltersTwoChangeVersions() m_ManagerDebug.SetGlobalSystemVersion(40); var createdChunks3 = CreateEntitiesAndReturnChunks(archetype3, 5000, e => SetData(e, 3, 6)); - var group = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestData2)); + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestData2)); - group.SetChangedVersionFilter(new ComponentType[] {typeof(EcsTestData), typeof(EcsTestData2)}); + query.SetChangedVersionFilter(new ComponentType[] {typeof(EcsTestData), typeof(EcsTestData2)}); - group.SetChangedFilterRequiredVersion(30); + query.SetChangedFilterRequiredVersion(30); var testType1 = m_Manager.GetComponentTypeHandle(false); var testType2 = m_Manager.GetComponentTypeHandle(false); - var queriedChunks1 = group.CreateArchetypeChunkArray(Allocator.TempJob); + var queriedChunks1 = query.CreateArchetypeChunkArray(Allocator.TempJob); foreach (var chunk in createdChunks1) { @@ -233,7 +272,7 @@ public void CreateArchetypeChunkArray_FiltersTwoChangeVersions() array[0] = new EcsTestData(7); } - var queriedChunks2 = group.CreateArchetypeChunkArray(Allocator.TempJob); + var queriedChunks2 = query.CreateArchetypeChunkArray(Allocator.TempJob); foreach (var chunk in createdChunks2) { @@ -241,13 +280,13 @@ public void CreateArchetypeChunkArray_FiltersTwoChangeVersions() array[0] = new EcsTestData2(7); } - var queriedChunks3 = group.CreateArchetypeChunkArray(Allocator.TempJob); + var queriedChunks3 = query.CreateArchetypeChunkArray(Allocator.TempJob); CollectionAssert.AreEquivalent(createdChunks3, queriedChunks1); CollectionAssert.AreEquivalent(createdChunks1.Concat(createdChunks3), queriedChunks2); - group.Dispose(); + query.Dispose(); queriedChunks1.Dispose(); queriedChunks2.Dispose(); queriedChunks3.Dispose(); @@ -267,21 +306,21 @@ public void CreateArchetypeChunkArray_FiltersOrderVersions() m_ManagerDebug.SetGlobalSystemVersion(40); var createdChunks3 = CreateEntitiesAndReturnChunks(archetype3, 5000, e => SetData(e, 3)); - var group = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - group.SetOrderVersionFilter(); + query.SetOrderVersionFilter(); - group.SetChangedFilterRequiredVersion(10); - var queriedChunks1 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(10); + var queriedChunks1 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetChangedFilterRequiredVersion(20); - var queriedChunks2 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(20); + var queriedChunks2 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetChangedFilterRequiredVersion(30); - var queriedChunks3 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(30); + var queriedChunks3 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetChangedFilterRequiredVersion(40); - var queriedChunks4 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(40); + var queriedChunks4 = query.CreateArchetypeChunkArray(Allocator.TempJob); CollectionAssert.AreEquivalent(createdChunks1.Concat(createdChunks2).Concat(createdChunks3), queriedChunks1); CollectionAssert.AreEquivalent(createdChunks2.Concat(createdChunks3), queriedChunks2); @@ -289,7 +328,7 @@ public void CreateArchetypeChunkArray_FiltersOrderVersions() Assert.AreEqual(0, queriedChunks4.Length); - group.Dispose(); + query.Dispose(); queriedChunks1.Dispose(); queriedChunks2.Dispose(); queriedChunks3.Dispose(); @@ -310,22 +349,22 @@ public void CreateArchetypeChunkArray_FiltersOrderAndChangedVersions() m_ManagerDebug.SetGlobalSystemVersion(40); var createdChunks3 = CreateEntitiesAndReturnChunks(archetype3, 5000, e => SetData(e, 3)); - var group = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - group.SetOrderVersionFilter(); - group.SetChangedVersionFilter(typeof(EcsTestData)); + query.SetOrderVersionFilter(); + query.SetChangedVersionFilter(typeof(EcsTestData)); - group.SetChangedFilterRequiredVersion(10); - var queriedChunks1 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(10); + var queriedChunks1 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetChangedFilterRequiredVersion(20); - var queriedChunks2 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(20); + var queriedChunks2 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetChangedFilterRequiredVersion(30); - var queriedChunks3 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(30); + var queriedChunks3 = query.CreateArchetypeChunkArray(Allocator.TempJob); - group.SetChangedFilterRequiredVersion(40); - var queriedChunks4 = group.CreateArchetypeChunkArray(Allocator.TempJob); + query.SetChangedFilterRequiredVersion(40); + var queriedChunks4 = query.CreateArchetypeChunkArray(Allocator.TempJob); CollectionAssert.AreEquivalent(createdChunks1.Concat(createdChunks2).Concat(createdChunks3), queriedChunks1); CollectionAssert.AreEquivalent(createdChunks2.Concat(createdChunks3), queriedChunks2); @@ -333,7 +372,7 @@ public void CreateArchetypeChunkArray_FiltersOrderAndChangedVersions() Assert.AreEqual(0, queriedChunks4.Length); - group.Dispose(); + query.Dispose(); queriedChunks1.Dispose(); queriedChunks2.Dispose(); queriedChunks3.Dispose(); @@ -709,7 +748,7 @@ public void TestIssue1098() using ( - var group = m_Manager.CreateEntityQuery + var query = m_Manager.CreateEntityQuery ( new EntityQueryDesc { @@ -718,7 +757,7 @@ public void TestIssue1098() ) ) // NB: EcsTestData != EcsTestData2 - Assert.Throws(() => group.ToComponentDataArray(Allocator.TempJob)); + Assert.Throws(() => query.ToComponentDataArray(Allocator.TempJob)); } #if !UNITY_DOTSRUNTIME // IJobForEach is deprecated @@ -743,40 +782,40 @@ protected override JobHandle OnUpdate(JobHandle input) [Test] public unsafe void CreateArchetypeChunkArray_SyncsChangeFilterTypes() { - var group = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - group.SetChangedVersionFilter(typeof(EcsTestData)); + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + query.SetChangedVersionFilter(typeof(EcsTestData)); var ws1 = World.GetOrCreateSystem(); ws1.Update(); var safetyHandle = m_Manager.GetCheckedEntityDataAccess()->DependencyManager->Safety.GetSafetyHandle(TypeManager.GetTypeIndex(), false); Assert.Throws(() => AtomicSafetyHandle.CheckWriteAndThrow(safetyHandle)); - var chunks = group.CreateArchetypeChunkArray(Allocator.TempJob); + var chunks = query.CreateArchetypeChunkArray(Allocator.TempJob); AtomicSafetyHandle.CheckWriteAndThrow(safetyHandle); chunks.Dispose(); - group.Dispose(); + query.Dispose(); } [Test] public unsafe void CalculateEntityCount_SyncsChangeFilterTypes() { - var group = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - group.SetChangedVersionFilter(typeof(EcsTestData)); + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + query.SetChangedVersionFilter(typeof(EcsTestData)); var ws1 = World.GetOrCreateSystem(); ws1.Update(); var safetyHandle = m_Manager.GetCheckedEntityDataAccess()->DependencyManager->Safety.GetSafetyHandle(TypeManager.GetTypeIndex(), false); Assert.Throws(() => AtomicSafetyHandle.CheckWriteAndThrow(safetyHandle)); - group.CalculateEntityCount(); + query.CalculateEntityCount(); AtomicSafetyHandle.CheckWriteAndThrow(safetyHandle); - group.Dispose(); + query.Dispose(); } #endif [Test] - public void ToEntityArrayOnFilteredGroup() + public void ToEntityArrayFiltered([Values] EntityQueryJobMode jobMode) { // Note - test is setup so that each entity is in its own chunk, this checks that entity indices are correct var a = m_Manager.CreateEntity(typeof(EcsTestSharedComp), typeof(EcsTestData)); @@ -787,22 +826,330 @@ public void ToEntityArrayOnFilteredGroup() m_Manager.SetSharedComponentData(b, new EcsTestSharedComp {value = 456}); m_Manager.SetSharedComponentData(c, new EcsTestSharedComp {value = 123}); - using (var group = m_Manager.CreateEntityQuery(typeof(EcsTestSharedComp))) + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestSharedComp))) + { + query.SetSharedComponentFilter(new EcsTestSharedComp {value = 123}); + NativeArray entities; + + + switch (jobMode) + { + case EntityQueryJobMode.Async: + entities = query.ToEntityArrayAsync(Allocator.TempJob, out JobHandle jobHandle); + jobHandle.Complete(); + break; + case EntityQueryJobMode.AsyncComplete: + entities = ChunkIterationUtility.CreateEntityArrayAsyncComplete(GetMatchingArchetypes(query), + Allocator.TempJob, + GetEntityTypeHandle(query), query, query.CalculateEntityCount(),query.GetDependency()); + break; + default: //EntityQueryMethodType.Immediate + entities = ChunkIterationUtility.CreateEntityArray(GetMatchingArchetypes(query), + Allocator.TempJob, + GetEntityTypeHandle(query), query, query.CalculateEntityCount()); + break; + } + + + CollectionAssert.AreEqual(new[] {a, c}, entities); + entities.Dispose(); + + query.SetSharedComponentFilter(new EcsTestSharedComp {value = 456}); + + switch (jobMode) + { + case EntityQueryJobMode.Async: + entities = query.ToEntityArrayAsync(Allocator.TempJob, out JobHandle jobHandle); + jobHandle.Complete(); + break; + case EntityQueryJobMode.AsyncComplete: + entities = ChunkIterationUtility.CreateEntityArrayAsyncComplete(GetMatchingArchetypes(query), + Allocator.TempJob, + GetEntityTypeHandle(query), query, query.CalculateEntityCount(),query.GetDependency()); + break; + default: //EntityQueryMethodType.Immediate + entities = ChunkIterationUtility.CreateEntityArray(GetMatchingArchetypes(query), + Allocator.TempJob, + GetEntityTypeHandle(query), query, query.CalculateEntityCount()); + break; + } + + CollectionAssert.AreEqual(new[] {b}, entities); + entities.Dispose(); + } + } + + [Test] + public void ToEntityArrayUnfiltered([Values] EntityQueryJobMode jobMode) + { + int count = 1000; + for (int i = 0; i < count ; i++) + { + var entity = m_Manager.CreateEntity(typeof(EcsTestData3)); + if (i % 2 == 0) + { + m_Manager.AddComponentData(entity, new EcsTestData + { + value = i + }); + } + } + + + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData),typeof(EcsTestData3))) + { + NativeArray entities; + switch (jobMode) + { + case EntityQueryJobMode.Async: + entities = query.ToEntityArrayAsync(Allocator.TempJob, out JobHandle jobHandle); + jobHandle.Complete(); + break; + case EntityQueryJobMode.AsyncComplete: + entities = ChunkIterationUtility.CreateEntityArrayAsyncComplete(GetMatchingArchetypes(query), + Allocator.TempJob, + GetEntityTypeHandle(query), query, query.CalculateEntityCount(),query.GetDependency()); + break; + default: //EntityQueryMethodType.Immediate + entities = ChunkIterationUtility.CreateEntityArray(GetMatchingArchetypes(query), + Allocator.TempJob, + GetEntityTypeHandle(query), query, query.CalculateEntityCount()); + break; + } + Assert.AreEqual(count / 2, entities.Length); + for (int i = 0; i < count / 2 ; i++) + { + Assert.IsTrue(m_Manager.HasComponent(entities[i])); + var value = m_Manager.GetComponentData(entities[i]).value; + Assert.AreEqual(i * 2,value); + } + entities.Dispose(); + } + } + + + [Test] + public void ToComponentDataArrayFiltered([Values] EntityQueryJobMode jobMode) + { + var ecsTestData1 = new EcsTestData + { + value = 1 + }; + var ecsTestData2 = new EcsTestData + { + value = 2 + }; + var ecsTestData3 = new EcsTestData + { + value = 3 + }; + + var a = m_Manager.CreateEntity(typeof(EcsTestSharedComp), typeof(EcsTestData)); + m_Manager.SetComponentData(a,ecsTestData1); + var b = m_Manager.CreateEntity(typeof(EcsTestSharedComp), typeof(EcsTestData)); + m_Manager.SetComponentData(b,ecsTestData2); + var c = m_Manager.CreateEntity(typeof(EcsTestSharedComp), typeof(EcsTestData)); + m_Manager.SetComponentData(c,ecsTestData3); + + m_Manager.SetSharedComponentData(a, new EcsTestSharedComp {value = 123}); + m_Manager.SetSharedComponentData(b, new EcsTestSharedComp {value = 456}); + m_Manager.SetSharedComponentData(c, new EcsTestSharedComp {value = 123}); + + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestSharedComp),typeof(EcsTestData))) + { + NativeArray components; + + switch (jobMode) + { + case EntityQueryJobMode.Async: + components = query.ToComponentDataArrayAsync(Allocator.TempJob, out JobHandle jobHandle); + jobHandle.Complete(); + break; + case EntityQueryJobMode.AsyncComplete: + components = ChunkIterationUtility.CreateComponentDataArrayAsyncComplete(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), + query,query.GetDependency()); + break; + default: //EntityQueryMethodType.Immediate + components = ChunkIterationUtility.CreateComponentDataArray(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), query); + break; + } + + CollectionAssert.AreEquivalent(new[] {ecsTestData1,ecsTestData2,ecsTestData3}, components); + components.Dispose(); + + query.SetSharedComponentFilter(new EcsTestSharedComp {value = 123}); + + switch (jobMode) + { + case EntityQueryJobMode.Async: + components = query.ToComponentDataArrayAsync(Allocator.TempJob, out JobHandle jobHandle); + jobHandle.Complete(); + break; + case EntityQueryJobMode.AsyncComplete: + components = ChunkIterationUtility.CreateComponentDataArrayAsyncComplete(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), + query,query.GetDependency()); + break; + default: //EntityQueryMethodType.Immediate + components = ChunkIterationUtility.CreateComponentDataArray(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), query); + break; + } + + CollectionAssert.AreEqual(new[] {ecsTestData1,ecsTestData3}, components); + components.Dispose(); + + query.SetSharedComponentFilter(new EcsTestSharedComp {value = 456}); + + switch (jobMode) + { + case EntityQueryJobMode.Async: + components = query.ToComponentDataArrayAsync(Allocator.TempJob, out JobHandle jobHandle); + jobHandle.Complete(); + break; + case EntityQueryJobMode.AsyncComplete: + components = ChunkIterationUtility.CreateComponentDataArrayAsyncComplete(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), + query,query.GetDependency()); + break; + default: //EntityQueryMethodType.Immediate + components = ChunkIterationUtility.CreateComponentDataArray(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), query); + break; + } + + CollectionAssert.AreEqual(new[] {ecsTestData2}, components); + components.Dispose(); + } + } + + [Test] + public void ToComponentDataArrayUnfiltered([Values] EntityQueryJobMode jobMode) + { + var ecsData20 = new EcsTestData + { + value = 20 + }; + var ecsData40 = new EcsTestData + { + value = 40 + }; + var ecsData60 = new EcsTestData + { + value = 60 + }; + + var ecsData2_20_40 = new EcsTestData2 + { + value0 = 20, + value1 = 40 + }; + + var ecsData2_60_80 = new EcsTestData2 + { + value0 = 60, + value1 = 80 + }; + + var ecsData3_20_40_60 = new EcsTestData3 + { + value0 = 20, + value1 = 40, + value2 = 60, + }; + + var ecsData3_80_100_120 = new EcsTestData3 + { + value0 = 80, + value1 = 100, + value2 = 120, + }; + + var a = m_Manager.CreateEntity( typeof(EcsTestData)); + m_Manager.SetComponentData(a,ecsData20); + var b = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2)); + m_Manager.SetComponentData(b,ecsData2_20_40); + m_Manager.SetComponentData(b,ecsData40); + var c = m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData3)); + m_Manager.SetComponentData(c,ecsData3_20_40_60); + m_Manager.SetComponentData(c,ecsData60); + + var d = m_Manager.CreateEntity(typeof(EcsTestData2)); + m_Manager.SetComponentData(d,ecsData2_60_80); + var e = m_Manager.CreateEntity(typeof(EcsTestData3)); + m_Manager.SetComponentData(e,ecsData3_80_100_120); + + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + { + NativeArray components; + switch (jobMode) + { + case EntityQueryJobMode.Async: + components = query.ToComponentDataArrayAsync(Allocator.TempJob, out JobHandle jobHandle); + jobHandle.Complete(); + break; + case EntityQueryJobMode.AsyncComplete: + components = ChunkIterationUtility.CreateComponentDataArrayAsyncComplete(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), + query,query.GetDependency()); + break; + default: //EntityQueryJobMode.Immediate + components = ChunkIterationUtility.CreateComponentDataArray(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), query); + break; + } + CollectionAssert.AreEqual(new[] {ecsData20,ecsData40,ecsData60}, components); + components.Dispose(); + } + + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData2))) { - group.SetSharedComponentFilter(new EcsTestSharedComp {value = 123}); - using (var entities = group.ToEntityArray(Allocator.TempJob)) + NativeArray components2; + switch (jobMode) { - CollectionAssert.AreEquivalent(new[] {a, c}, entities); + case EntityQueryJobMode.Async: + components2 = query.ToComponentDataArrayAsync(Allocator.TempJob, out JobHandle jobHandle); + jobHandle.Complete(); + break; + case EntityQueryJobMode.AsyncComplete: + components2 = ChunkIterationUtility.CreateComponentDataArrayAsyncComplete(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), + query,query.GetDependency()); + break; + default: //EntityQueryJobMode.Immediate + components2 = ChunkIterationUtility.CreateComponentDataArray(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), query); + break; } + CollectionAssert.AreEqual(new[] {ecsData2_20_40, ecsData2_60_80}, components2); + components2.Dispose(); } - using (var group = m_Manager.CreateEntityQuery(typeof(EcsTestSharedComp))) + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData3))) { - group.SetSharedComponentFilter(new EcsTestSharedComp {value = 456}); - using (var entities = group.ToEntityArray(Allocator.TempJob)) + NativeArray components3; + switch (jobMode) { - CollectionAssert.AreEquivalent(new[] {b}, entities); + case EntityQueryJobMode.Async: + components3 = query.ToComponentDataArrayAsync(Allocator.TempJob, out JobHandle jobHandle); + jobHandle.Complete(); + break; + case EntityQueryJobMode.AsyncComplete: + components3 = ChunkIterationUtility.CreateComponentDataArrayAsyncComplete(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), + query,query.GetDependency()); + break; + default: //EntityQueryJobMode.Immediate + components3 = ChunkIterationUtility.CreateComponentDataArray(Allocator.TempJob, + GetComponentTypeHandle(query),query.CalculateEntityCount(), query); + break; } + CollectionAssert.AreEqual(new[] {ecsData3_20_40_60, ecsData3_80_100_120}, components3); + + components3.Dispose(); + } } @@ -1005,6 +1352,40 @@ public void Matches() Assert.False(queryMaskDoesntMatch.Matches(entity)); } + [Test] + public void MatchesEntity() + { + var archetypeMatches = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2), typeof(EcsTestSharedComp)); + var archetypeDoesntMatch = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData3), typeof(EcsTestSharedComp)); + + var entity = m_Manager.CreateEntity(archetypeMatches); + var entityDoesntMatch = m_Manager.CreateEntity(archetypeDoesntMatch); + + var query = EmptySystem.GetEntityQuery(typeof(EcsTestData), typeof(EcsTestData2), typeof(EcsTestSharedComp)); + + Assert.True(query.Matches(entity)); + Assert.False(query.Matches(entityDoesntMatch)); + } + + [Test] + public void MatchesEntityFiltered() + { + var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2), typeof(EcsTestSharedComp)); + + var entity = m_Manager.CreateEntity(archetype); + m_Manager.SetSharedComponentData(entity, new EcsTestSharedComp{value = 10}); + + var query = EmptySystem.GetEntityQuery(typeof(EcsTestData), typeof(EcsTestData2), typeof(EcsTestSharedComp)); + + Assert.True(query.Matches(entity)); + + query.SetSharedComponentFilter(new EcsTestSharedComp(5)); + Assert.False(query.Matches(entity)); + + query.SetSharedComponentFilter(new EcsTestSharedComp(10)); + Assert.True(query.Matches(entity)); + } + [Test] public void MatchesArchetypeAddedAfterMaskCreation() { @@ -1018,6 +1399,22 @@ public void MatchesArchetypeAddedAfterMaskCreation() Assert.True(queryMask.Matches(entity)); } + [Test] + public void ChunkListCaching_CheckCacheConsistency_FailsForInvalidCache() + { + // new archetype, no query + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); + + // new query, exisiting archetype, no entities + var queryA = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + + // new chunk of matching archetype + m_Manager.CreateEntity(archetypeA, archetypeA.ChunkCapacity); + + Assert.IsFalse(queryA.IsCacheValid); + Assert.IsFalse(queryA.CheckChunkListCacheConsistency()); + } + [Test] public void ChunkListCaching_CreateEntity() { @@ -1048,12 +1445,14 @@ public void ChunkListCaching_CreateEntity_NoNewChunk() // Update the cache queryA.UpdateCache(); Assert.IsTrue(queryA.IsCacheValid); + Assert.IsTrue(queryA.CheckChunkListCacheConsistency()); // no new chunk of matching archetype var entityB = m_Manager.CreateEntity(archetypeA); // cache should still be valid Assert.IsTrue(queryA.IsCacheValid); + Assert.IsTrue(queryA.CheckChunkListCacheConsistency()); } [Test] @@ -1066,16 +1465,17 @@ public void ChunkListCaching_DestroyEntity() var queryA = m_Manager.CreateEntityQuery(typeof(EcsTestData)); // new chunk of matching archetype - var entitiesA = m_Manager.CreateEntity(archetypeA, archetypeA.ChunkCapacity, Allocator.Temp); - var entitiesB = m_Manager.CreateEntity(archetypeA, archetypeA.ChunkCapacity, Allocator.Temp); - - queryA.UpdateCache(); - Assert.IsTrue(queryA.IsCacheValid); - - // destroy entities - m_Manager.DestroyEntity(entitiesA); + using(var entitiesA = m_Manager.CreateEntity(archetypeA, archetypeA.ChunkCapacity, Allocator.TempJob)) + using(var entitiesB = m_Manager.CreateEntity(archetypeA, archetypeA.ChunkCapacity, Allocator.TempJob)) + { + queryA.UpdateCache(); + Assert.IsTrue(queryA.IsCacheValid); + Assert.IsTrue(queryA.CheckChunkListCacheConsistency()); - Assert.IsFalse(queryA.IsCacheValid); + // destroy entities + m_Manager.DestroyEntity(entitiesA); + Assert.IsFalse(queryA.IsCacheValid); + } } [Test] @@ -1092,6 +1492,7 @@ public void ChunkListCaching_AddComponent() queryA.UpdateCache(); Assert.IsTrue(queryA.IsCacheValid); + Assert.IsTrue(queryA.CheckChunkListCacheConsistency()); for (int i = 0; i < entities.Length; ++i) { @@ -1117,6 +1518,7 @@ public void ChunkListCaching_RemoveComponent() queryA.UpdateCache(); Assert.IsTrue(queryA.IsCacheValid); + Assert.IsTrue(queryA.CheckChunkListCacheConsistency()); for (int i = 0; i < entities.Length; ++i) { @@ -1129,21 +1531,28 @@ public void ChunkListCaching_RemoveComponent() [Test] public void ChunkListCaching_MoveEntitiesFrom() { + var queryC = m_Manager.CreateEntityQuery(typeof(EcsTestData3)); + Assert.IsFalse(queryC.IsCacheValid); + queryC.UpdateCache(); + Assert.IsTrue(queryC.IsCacheValid); + Assert.IsTrue(queryC.CheckChunkListCacheConsistency()); + // move from another world using(var newWorld = new World("testworld")) { var archetype = newWorld.EntityManager.CreateArchetype(typeof(EcsTestData3)); newWorld.EntityManager.CreateEntity(archetype); + var query = newWorld.EntityManager.CreateEntityQuery(typeof(EcsTestData3)); newWorld.EntityManager.UniversalQuery.UpdateCache(); Assert.IsTrue(newWorld.EntityManager.UniversalQuery.IsCacheValid); + Assert.IsTrue(newWorld.EntityManager.UniversalQuery.CheckChunkListCacheConsistency()); m_Manager.MoveEntitiesFrom(newWorld.EntityManager); Assert.IsFalse(newWorld.EntityManager.UniversalQuery.IsCacheValid); } - var queryC = m_Manager.CreateEntityQuery(typeof(EcsTestData3)); Assert.IsFalse(queryC.IsCacheValid); } @@ -1153,6 +1562,7 @@ public void ChunkListCaching_CopyAndReplaceEntitiesFrom() var queryC = m_Manager.CreateEntityQuery(typeof(EcsTestData3)); queryC.UpdateCache(); Assert.IsTrue(queryC.IsCacheValid); + Assert.IsTrue(queryC.CheckChunkListCacheConsistency()); // move from another world using(var newWorld = new World("testworld")) @@ -1162,10 +1572,12 @@ public void ChunkListCaching_CopyAndReplaceEntitiesFrom() newWorld.EntityManager.UniversalQuery.UpdateCache(); Assert.IsTrue(newWorld.EntityManager.UniversalQuery.IsCacheValid); + Assert.IsTrue(newWorld.EntityManager.UniversalQuery.CheckChunkListCacheConsistency()); m_Manager.CopyAndReplaceEntitiesFrom(newWorld.EntityManager); Assert.IsTrue(newWorld.EntityManager.UniversalQuery.IsCacheValid); + Assert.IsTrue(newWorld.EntityManager.UniversalQuery.CheckChunkListCacheConsistency()); } Assert.IsFalse(queryC.IsCacheValid); @@ -1185,6 +1597,7 @@ public void ChunkListCaching_Instantiate() queryA.UpdateCache(); Assert.IsTrue(queryA.IsCacheValid); + Assert.IsTrue(queryA.CheckChunkListCacheConsistency()); m_Manager.Instantiate(entityA, archetypeA.ChunkCapacity, Allocator.Temp); @@ -1205,6 +1618,7 @@ public void ChunkListCaching_AddSharedComponent() queryA.UpdateCache(); Assert.IsTrue(queryA.IsCacheValid); + Assert.IsTrue(queryA.CheckChunkListCacheConsistency()); for (int i = 0; i < entities.Length; ++i) { @@ -1228,6 +1642,7 @@ public void ChunkListCaching_SetSharedComponent() queryA.UpdateCache(); Assert.IsTrue(queryA.IsCacheValid); + Assert.IsTrue(queryA.CheckChunkListCacheConsistency()); for (int i = 0; i < entities.Length; ++i) { @@ -1237,6 +1652,308 @@ public void ChunkListCaching_SetSharedComponent() Assert.IsFalse(queryA.IsCacheValid); } + [Test] + public void ChunkListCaching_DestroyEntity_Query() + { + // new archetype, no query + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); + + // new query, exisiting archetype, no entities + var queryA = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + + // new chunk of matching archetype + using(var entitiesA = m_Manager.CreateEntity(archetypeA, archetypeA.ChunkCapacity, Allocator.TempJob)) + using(var entitiesB = m_Manager.CreateEntity(archetypeA, archetypeA.ChunkCapacity, Allocator.TempJob)) + { + queryA.UpdateCache(); + Assert.IsTrue(queryA.IsCacheValid); + Assert.IsTrue(queryA.CheckChunkListCacheConsistency()); + + // destroy entities + m_Manager.DestroyEntity(queryA); + Assert.IsFalse(queryA.IsCacheValid); + } + } + + [Test] + public void CalculateEntityCountWithEntityList() + { + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); + var archetypeB = m_Manager.CreateArchetype(typeof(EcsTestData2)); + + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + using (var allEntitiesA = m_Manager.CreateEntity(archetypeA, 10, Allocator.TempJob)) + using (var allEntitiesB = m_Manager.CreateEntity(archetypeB, 10, Allocator.TempJob)) + { + var entities = new NativeArray(10, Allocator.TempJob); + for (int i = 0; i < 10; ++i) + { + if (i % 2 == 0) + entities[i] = allEntitiesA[i]; + else + entities[i] = allEntitiesB[i]; + } + + Assert.AreEqual(5, query.CalculateEntityCount(entities)); + + entities.Dispose(); + } + } + + [Test] + public void ToEntityArrayWithEntityList() + { + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); + var archetypeB = m_Manager.CreateArchetype(typeof(EcsTestData2)); + + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + using (var allEntitiesA = m_Manager.CreateEntity(archetypeA, 10, Allocator.TempJob)) + using (var allEntitiesB = m_Manager.CreateEntity(archetypeB, 10, Allocator.TempJob)) + { + var entities = new NativeArray(10, Allocator.TempJob); + for (int i = 0; i < 10; ++i) + { + if (i % 2 == 0) + entities[i] = allEntitiesA[i]; + else + entities[i] = allEntitiesB[i]; + } + + var res = query.ToEntityArray(entities, Allocator.TempJob); + Assert.AreEqual(5, res.Length); + for (int i = 0; i < res.Length; ++i) + { + Assert.AreEqual(allEntitiesA[i * 2], res[i]); + } + + entities.Dispose(); + res.Dispose(); + } + } + + [Test] + public void ToComponentDataArrayWithEntityList() + { + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); + var archetypeB = m_Manager.CreateArchetype(typeof(EcsTestData2)); + + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + using (var allEntitiesA = m_Manager.CreateEntity(archetypeA, 10, Allocator.TempJob)) + using (var allEntitiesB = m_Manager.CreateEntity(archetypeB, 10, Allocator.TempJob)) + { + var entities = new NativeArray(10, Allocator.TempJob); + for (int i = 0; i < 10; ++i) + { + if (i % 2 == 0) + { + entities[i] = allEntitiesA[i]; + m_Manager.SetComponentData(allEntitiesA[i], new EcsTestData(i)); + } + else + entities[i] = allEntitiesB[i]; + } + + var res = query.ToComponentDataArray(entities, Allocator.TempJob); + Assert.AreEqual(5, res.Length); + for (int i = 0; i < res.Length; ++i) + { + Assert.AreEqual(m_Manager.GetComponentData(allEntitiesA[i * 2]).value, res[i].value); + } + + entities.Dispose(); + res.Dispose(); + } + } + + [Test] + public void MatchesInList() + { + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); + var archetypeB = m_Manager.CreateArchetype(typeof(EcsTestData2)); + + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + using (var allEntitiesA = m_Manager.CreateEntity(archetypeA, 10, Allocator.TempJob)) + using (var allEntitiesB = m_Manager.CreateEntity(archetypeB, 10, Allocator.TempJob)) + { + var entities = new NativeArray(10, Allocator.TempJob); + for (int i = 0; i < 10; ++i) + { + entities[i] = allEntitiesA[i]; + } + + Assert.IsTrue(query.MatchesAny(entities)); + + for (int i = 0; i < 10; ++i) + { + entities[i] = allEntitiesB[i]; + } + + Assert.IsFalse(query.MatchesAny(entities)); + + entities.Dispose(); + } + } + + unsafe struct ReadOnlyArrayContainer : IDisposable + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + internal AtomicSafetyHandle m_Safety; + static readonly SharedStatic s_staticSafetyId = SharedStatic.GetOrCreate(); + + [BurstDiscard] + static void CreateStaticSafetyId() + { + s_staticSafetyId.Data = AtomicSafetyHandle.NewStaticSafetyId(); + } + + [NativeSetClassTypeToNullOnSchedule] + DisposeSentinel m_DisposeSentinel; +#endif + + [NativeDisableUnsafePtrRestriction] + private UnsafeList* m_Data; + + private readonly Allocator m_Allocator; + + public ReadOnlyArrayContainer(int initialCapacity, Allocator allocator) + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + DisposeSentinel.Create(out m_Safety, out m_DisposeSentinel, 2, allocator); + if (s_staticSafetyId.Data == 0) + { + CreateStaticSafetyId(); + } + AtomicSafetyHandle.SetStaticSafetyId(ref m_Safety, s_staticSafetyId.Data); +#endif + + m_Data = UnsafeList.Create(UnsafeUtility.SizeOf(), UnsafeUtility.AlignOf(), initialCapacity, allocator); + m_Allocator = allocator; + } + + public void AddRange(NativeArray entities) + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckWriteAndBumpSecondaryVersion(m_Safety); +#endif + m_Data->AddRange(entities.GetUnsafeReadOnlyPtr(), entities.Length); + } + + public NativeArray GetValueArray() + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckGetSecondaryDataPointerAndThrow(m_Safety); + var arraySafety = m_Safety; + AtomicSafetyHandle.UseSecondaryVersion(ref arraySafety); +#endif + + var array = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(m_Data->Ptr, m_Data->Length, Allocator.None); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.SetAllowSecondaryVersionWriting(arraySafety, false); + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref array, arraySafety); +#endif + return array; + } + + public void Dispose() + { + if (m_Data != null) + { + UnsafeList.Destroy(m_Data); + m_Data = null; + } +#if ENABLE_UNITY_COLLECTIONS_CHECKS + DisposeSentinel.Dispose(ref m_Safety, ref m_DisposeSentinel); +#endif + } + } + + [Test] + public void EntityQuery_ToEntityArray_With_ReadOnlyFilter_DoesNotThrow() + { + using (var customContainer = new ReadOnlyArrayContainer(10, Allocator.TempJob)) + using (var array = new NativeArray(10, Allocator.TempJob)) + { + var archetype = m_Manager.CreateArchetype(ComponentType.ReadWrite(), + ComponentType.ReadWrite()); + + m_Manager.CreateEntity(archetype, array); + customContainer.AddRange(array); + + var query = EmptySystem.GetEntityQuery(typeof(EcsTestData)); + + Assert.DoesNotThrow(() => + { + using (var _ = query.ToEntityArray(customContainer.GetValueArray(), Allocator.Temp)) + { } + }); + } + } + + [Test] + public void EntityQuery_ToComponentDataArray_With_ReadOnlyFilter_DoesNotThrow() + { + using (var customContainer = new ReadOnlyArrayContainer(10, Allocator.TempJob)) + using (var array = new NativeArray(10, Allocator.TempJob)) + { + var archetype = m_Manager.CreateArchetype(ComponentType.ReadWrite(), + ComponentType.ReadWrite()); + + m_Manager.CreateEntity(archetype, array); + customContainer.AddRange(array); + + var query = EmptySystem.GetEntityQuery(typeof(EcsTestData)); + + Assert.DoesNotThrow(() => + { + using (var _ = query.ToComponentDataArray(customContainer.GetValueArray(), Allocator.Temp)) + { } + }); + } + } + + [Test] + public void EntityQuery_CalculateEntityCount_With_ReadOnlyFilter_DoesNotThrow() + { + using (var customContainer = new ReadOnlyArrayContainer(10, Allocator.TempJob)) + using (var array = new NativeArray(10, Allocator.TempJob)) + { + var archetype = m_Manager.CreateArchetype(ComponentType.ReadWrite(), + ComponentType.ReadWrite()); + + m_Manager.CreateEntity(archetype, array); + customContainer.AddRange(array); + + var query = EmptySystem.GetEntityQuery(typeof(EcsTestData)); + + Assert.DoesNotThrow(() => + { + var _ = query.CalculateEntityCount(customContainer.GetValueArray()); + }); + } + } + + [Test] + public void EntityQuery_MatchesInList_With_ReadOnlyFilter_DoesNotThrow() + { + using (var customContainer = new ReadOnlyArrayContainer(10, Allocator.TempJob)) + using (var array = new NativeArray(10, Allocator.TempJob)) + { + var archetype = m_Manager.CreateArchetype(ComponentType.ReadWrite(), + ComponentType.ReadWrite()); + + m_Manager.CreateEntity(archetype, array); + customContainer.AddRange(array); + + var query = EmptySystem.GetEntityQuery(typeof(EcsTestData)); + + Assert.DoesNotThrow(() => + { + var _ = query.MatchesAny(customContainer.GetValueArray()); + }); + } + } + #if !UNITY_DOTSRUNTIME // IJobForEach is deprecated [AlwaysUpdateSystem] public class CachedSystemQueryTestSystem : JobComponentSystem @@ -1372,6 +2089,131 @@ public void QueryFromWrongWorldThrows() } } + [Test] + public void ToEntityArrayTempMemoryThrows() + { + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + + Assert.Throws(() => + { + query.ToEntityArrayAsync(Allocator.Temp, out JobHandle jobhandle); + }); + + query.Dispose(); + } + + [Test] + public void ToEntityArrayTempMemoryDoesNotThrow() + { + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + + Assert.DoesNotThrow(() => + { + query.ToEntityArray(Allocator.Temp).Dispose(); + }); + + query.Dispose(); + + //create very large Query to test AsyncComplete path + for (int i = 0; i < 100000; ++i) + { + m_Manager.CreateEntity(typeof(EcsTestData)); + } + + query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + + Assert.DoesNotThrow(() => + { + query.ToEntityArray(Allocator.Temp).Dispose(); + }); + + query.Dispose(); + + } + + [Test] + public void ToComponentDataArrayTempMemoryThrows() + { + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + + Assert.Throws(() => + { + query.ToComponentDataArrayAsync(Allocator.Temp, out JobHandle jobhandle); + }); + + query.Dispose(); + + } + + [Test] + public void ToComponentDataArrayTempMemoryDoesNotThrow() + { + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + + + Assert.DoesNotThrow(() => + { + query.ToComponentDataArray(Allocator.Temp).Dispose(); + }); + + query.Dispose(); + + //create very large Query to test AsyncComplete path + for (int i = 0; i < 100000; ++i) + { + m_Manager.CreateEntity(typeof(EcsTestData)); + } + + query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + + Assert.DoesNotThrow(() => + { + query.ToComponentDataArray(Allocator.Temp).Dispose(); + }); + + query.Dispose(); + + } + + [Test] + public void CopyFromComponentDataArrayTempMemoryThrows() + { + var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + + var components = query.ToComponentDataArray(Allocator.Temp); + + Assert.DoesNotThrow(() => + { + query.CopyFromComponentDataArray(components); + }); + Assert.Throws(() => + { + query.CopyFromComponentDataArrayAsync(components, out JobHandle jobhandle); + }); + + query.Dispose(); + components.Dispose(); + + //create very large Query to test AsyncComplete path + for (int i = 0; i < 100000; ++i) + { + m_Manager.CreateEntity(typeof(EcsTestData)); + } + + query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); + components = query.ToComponentDataArray(Allocator.Temp); + + + Assert.DoesNotThrow(() => + { + query.CopyFromComponentDataArray(components); + }); + + query.Dispose(); + components.Dispose(); + + } + [Test] public void ToComponentDataArrayWithUnrelatedQueryThrows() { @@ -1395,7 +2237,7 @@ public void ToComponentDataArrayWithUnrelatedQueryThrows() } [Test] - public void CopyFromComponentDataArray_Works() + public unsafe void CopyFromComponentDataArray_Works([Values] EntityQueryJobMode jobMode) { var archetype = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestData2)); @@ -1407,7 +2249,22 @@ public void CopyFromComponentDataArray_Works() m_Manager.CreateEntity(archetype, archetype.ChunkCapacity * 2, Allocator.Temp); var query = EmptySystem.GetEntityQuery(typeof(EcsTestData)); - query.CopyFromComponentDataArray(values); + switch (jobMode) + { + case EntityQueryJobMode.Async: + query.CopyFromComponentDataArrayAsync(values, out JobHandle jobHandle); + jobHandle.Complete(); + break; + case EntityQueryJobMode.AsyncComplete: + ChunkIterationUtility.CopyFromComponentDataArrayAsyncComplete(GetMatchingArchetypes(query), + values, GetComponentTypeHandle(query),query,ref query._GetImpl()->_Filter, + query.GetDependency()); + break; + default: //EntityQueryJobMode.Immediate + ChunkIterationUtility.CopyFromComponentDataArray(values, + GetComponentTypeHandle(query), query); + break; + } var dataArray = query.ToComponentDataArray(Allocator.TempJob); CollectionAssert.AreEquivalent(values, dataArray); @@ -1426,14 +2283,14 @@ public void CopyFromComponentDataArrayWithUnrelatedQueryThrows() { using (var array = new NativeArray(0, Allocator.Persistent)) { - query.CopyFromComponentDataArray(array); + query.CopyFromComponentDataArray(array); } }); Assert.Throws(() => { using (var array = new NativeArray(0, Allocator.Persistent)) { - query.CopyFromComponentDataArrayAsync(array, out jobHandle); + query.CopyFromComponentDataArrayAsync(array, out jobHandle); } }); } @@ -1489,7 +2346,7 @@ public unsafe void CachingWorks() Assert.AreEqual((IntPtr)q1.__impl, (IntPtr)q3.__impl); Assert.AreNotEqual((IntPtr)q2.__impl, (IntPtr)q3.__impl); - Assert.AreEqual(5, m_Manager.GetCheckedEntityDataAccess()->AliveEntityQueries.Count()); + Assert.AreEqual(EntityDataAccess.kBuiltinEntityQueryCount + 2, m_Manager.GetCheckedEntityDataAccess()->AliveEntityQueries.Count()); } [Test] @@ -1498,15 +2355,15 @@ public unsafe void LivePointerTrackingWorks() var q1 = m_Manager.CreateEntityQuery(typeof(EcsTestData)); var q2 = m_Manager.CreateEntityQuery(typeof(EcsTestData2)); - Assert.AreEqual(5, m_Manager.GetCheckedEntityDataAccess()->AliveEntityQueries.Count()); + Assert.AreEqual(EntityDataAccess.kBuiltinEntityQueryCount + 2, m_Manager.GetCheckedEntityDataAccess()->AliveEntityQueries.Count()); q1.Dispose(); - Assert.AreEqual(4, m_Manager.GetCheckedEntityDataAccess()->AliveEntityQueries.Count()); + Assert.AreEqual(EntityDataAccess.kBuiltinEntityQueryCount + 1, m_Manager.GetCheckedEntityDataAccess()->AliveEntityQueries.Count()); q2.Dispose(); - Assert.AreEqual(3, m_Manager.GetCheckedEntityDataAccess()->AliveEntityQueries.Count()); + Assert.AreEqual(EntityDataAccess.kBuiltinEntityQueryCount, m_Manager.GetCheckedEntityDataAccess()->AliveEntityQueries.Count()); } } } diff --git a/Unity.Entities.Tests/EntityRemapUtilityTests.cs b/Unity.Entities.Tests/EntityRemapUtilityTests.cs index d739108e..1e82a187 100644 --- a/Unity.Entities.Tests/EntityRemapUtilityTests.cs +++ b/Unity.Entities.Tests/EntityRemapUtilityTests.cs @@ -54,10 +54,8 @@ struct EmptyStruct : IComponentData static TypeManager.EntityOffsetInfo[] GetEntityOffsets(System.Type type) { -#if !UNITY_DOTSRUNTIME // Work needed to make CalculateEntityOffsets compatible with DOTS Runtime (comment with explanation at that code) - return EntityRemapUtility.CalculateEntityOffsets(type); -#else - unsafe { + unsafe + { var info = TypeManager.GetTypeInfo(TypeManager.GetTypeIndex(type)); if (info.EntityOffsetCount > 0) { @@ -68,7 +66,6 @@ static TypeManager.EntityOffsetInfo[] GetEntityOffsets(System.Type type) } return null; } -#endif } [Test] @@ -106,10 +103,7 @@ public void CalculateEntityOffsetsReturnsOffsetsOfEntities() Assert.AreEqual(12, offsets[1].Offset); } - struct EmbeddedEntityStruct -#if UNITY_DOTSRUNTIME - : IComponentData -#endif + struct EmbeddedEntityStruct : IComponentData { // The offsets of these fields are accessed through reflection #pragma warning disable CS0169 // field never used warning. diff --git a/Unity.Entities.Tests/FastEqualityTests.cs b/Unity.Entities.Tests/FastEqualityTests.cs index 746d3788..196a5cf4 100644 --- a/Unity.Entities.Tests/FastEqualityTests.cs +++ b/Unity.Entities.Tests/FastEqualityTests.cs @@ -6,9 +6,11 @@ using Unity.Collections.LowLevel.Unsafe; using System; using System.Collections.Generic; +using Unity.Burst; namespace Unity.Entities.Tests { + [BurstCompile] public class FastEqualityTests { [StructLayout(LayoutKind.Sequential)] @@ -98,69 +100,14 @@ struct EnumStruct public Nephew nephew; } - int PtrAligned4Count = UnsafeUtility.SizeOf() / 4; - - [Test] - public void SimpleLayout() - { - var res = FastEquality.CreateTypeInfo(typeof(Simple)).Layouts; - Assert.AreEqual(1, res.Length); - Assert.AreEqual(new FastEquality.Layout {offset = 0, count = 2, Aligned4 = true }, res[0]); - } - - [Test] - public void PtrLayout() - { - var layout = FastEquality.CreateTypeInfo(typeof(FloatPointer)).Layouts; - Assert.AreEqual(1, layout.Length); - Assert.AreEqual(new FastEquality.Layout {offset = 0, count = PtrAligned4Count, Aligned4 = true }, layout[0]); - } - [Test] public void ClassLayout() { var ti = FastEquality.CreateTypeInfo(typeof(ClassInStruct)); - Assert.AreEqual(null, ti.Layouts); Assert.IsNotNull(ti.GetHashFn); Assert.IsNotNull(ti.EqualFn); } - [Test] - public void SimpleEmbeddedLayout() - { - var layout = FastEquality.CreateTypeInfo(typeof(SimpleEmbedded)).Layouts; - Assert.AreEqual(1, layout.Length); - Assert.AreEqual(new FastEquality.Layout {offset = 0, count = 5, Aligned4 = true }, layout[0]); - } - - [Test] - public void EndPaddingLayout() - { - var layout = FastEquality.CreateTypeInfo(typeof(EndPadding)).Layouts; - Assert.AreEqual(1, layout.Length); - Assert.AreEqual(new FastEquality.Layout {offset = 0, count = 3, Aligned4 = true }, layout[0]); - } - - [Test] - public void AlignSplitLayout() - { - var layout = FastEquality.CreateTypeInfo(typeof(AlignSplit)).Layouts; - Assert.AreEqual(2, layout.Length); - - Assert.AreEqual(new FastEquality.Layout {offset = 0, count = 3, Aligned4 = true }, layout[0]); - Assert.AreEqual(new FastEquality.Layout {offset = 16, count = 2, Aligned4 = true }, layout[1]); - } - - [Test] - public void BytePaddding() - { - var layout = FastEquality.CreateTypeInfo(typeof(BytePadding)).Layouts; - Assert.AreEqual(2, layout.Length); - - Assert.AreEqual(new FastEquality.Layout {offset = 0, count = 2, Aligned4 = false }, layout[0]); - Assert.AreEqual(new FastEquality.Layout {offset = 4, count = 1, Aligned4 = true }, layout[1]); - } - [Test] public void EqualsInt4() { @@ -186,8 +133,6 @@ public void EqualsPadding() public unsafe void EqualsFixedArray() { var typeInfo = FastEquality.CreateTypeInfo(typeof(FixedArrayStruct)); - Assert.AreEqual(1, typeInfo.Layouts.Length); - Assert.AreEqual(3, typeInfo.Layouts[0].count); var a = new FixedArrayStruct(); a.array[0] = 123; @@ -215,25 +160,6 @@ public void EqualsEnum() Assert.IsFalse(FastEquality.Equals(a, b, typeInfo)); } - [Test] - public void TypeHash() - { - int[] hashes = - { - FastEquality.CreateTypeInfo(typeof(Simple)).Hash, - FastEquality.CreateTypeInfo(typeof(SimpleEmbedded)).Hash, - FastEquality.CreateTypeInfo(typeof(BytePadding)).Hash, - FastEquality.CreateTypeInfo(typeof(AlignSplit)).Hash, - FastEquality.CreateTypeInfo(typeof(EndPadding)).Hash, - FastEquality.CreateTypeInfo(typeof(FloatPointer)).Hash, - FastEquality.CreateTypeInfo(typeof(ClassInStruct)).Hash, - FastEquality.CreateTypeInfo(typeof(FixedArrayStruct)).Hash, - FastEquality.CreateTypeInfo(typeof(EnumStruct)).Hash - }; - - Assert.AreEqual(hashes.Distinct().Count(), hashes.Length); - } - [DisableAutoTypeRegistration] struct TypeWithoutHashCodeOverride : ISharedComponentData, IEquatable { @@ -283,6 +209,61 @@ public void CorrectEqualsIsUsed() Assert.IsTrue(iseq); } + private unsafe delegate bool _dlg_CallsEquals(ref Entity a, ref Entity b); + private unsafe delegate int _dlg_CallsGetHashCode(ref Entity a); + private static readonly FunctionPointer<_dlg_CallsEquals> BurstedTestFuncCallingEquals; + private static readonly FunctionPointer<_dlg_CallsGetHashCode> BurstedTestFuncCallingGetHashCode; + + static unsafe FastEqualityTests() + { + BurstedTestFuncCallingEquals = BurstCompiler.CompileFunctionPointer<_dlg_CallsEquals>(_mono_to_burst_CallEquals); + BurstedTestFuncCallingGetHashCode = BurstCompiler.CompileFunctionPointer<_dlg_CallsGetHashCode>(_mono_to_burst_CallGetHashCode); + } + + [BurstCompile(CompileSynchronously = true)] + private static unsafe bool _mono_to_burst_CallEquals(ref Entity a, ref Entity b) + { + return FastEquality.Equals(a, b); + } + + [BurstCompile(CompileSynchronously = true)] + private static unsafe int _mono_to_burst_CallGetHashCode(ref Entity a) + { + return FastEquality.GetHashCode(a); + } + + [Test] + public void FastEqualityWorksFromBurst() + { + TypeManager.Initialize(); + + Entity a1 = new Entity() {Index = 1, Version = 2}; + Entity a2 = a1; + Entity b = new Entity() {Index = 2, Version = 1}; + var monoA1EqualsA2 = FastEquality.Equals(a1, a2); + var monoA1EqualsB = FastEquality.Equals(a1, b); + var burstA1EqualsA2 = BurstedTestFuncCallingEquals.Invoke(ref a1, ref a2); + var burstA1EqualsB = BurstedTestFuncCallingEquals.Invoke(ref a1, ref b); + + Assert.IsTrue(monoA1EqualsA2); + Assert.IsTrue(burstA1EqualsA2); + Assert.IsFalse(monoA1EqualsB); + Assert.IsFalse(burstA1EqualsB); + + var monoA1GetHashCode = FastEquality.GetHashCode(a1); + var monoA2GetHashCode = FastEquality.GetHashCode(a2); + var monoBGetHashCode = FastEquality.GetHashCode(b); + var burstA1GetHashCode = BurstedTestFuncCallingGetHashCode.Invoke(ref a1); + var burstA2GetHashCode = BurstedTestFuncCallingGetHashCode.Invoke(ref a2); + var burstBGetHashCode = BurstedTestFuncCallingGetHashCode.Invoke(ref b); + + Assert.AreEqual(monoA1GetHashCode, burstA1GetHashCode); + Assert.AreEqual(monoA2GetHashCode, burstA2GetHashCode); + Assert.AreEqual(monoBGetHashCode, burstBGetHashCode); + Assert.AreEqual(monoA1GetHashCode, monoA2GetHashCode); + Assert.AreNotEqual(monoA1GetHashCode, monoBGetHashCode); + } + #if !UNITY_DISABLE_MANAGED_COMPONENTS class ComponentWithUnityObjectArray : IComponentData { diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachBufferAccessTests.cs b/Unity.Entities.Tests/ForEachCodegen/ForEachBufferAccessTests.cs index d5b29857..39cf849a 100644 --- a/Unity.Entities.Tests/ForEachCodegen/ForEachBufferAccessTests.cs +++ b/Unity.Entities.Tests/ForEachCodegen/ForEachBufferAccessTests.cs @@ -6,7 +6,7 @@ namespace Unity.Entities.Tests.ForEachCodegen { - class ForEachBufferAccessTests : ECSTestsFixture + partial class ForEachBufferAccessTests : ECSTestsFixture { SystemBase_TestSystem TestSystem; static Entity TestEntity1; @@ -40,7 +40,7 @@ internal enum ScheduleType ScheduleParallel } - public class SystemBase_TestSystem : SystemBase + public partial class SystemBase_TestSystem : SystemBase { protected override void OnUpdate() {} @@ -158,21 +158,6 @@ public void GetSameBufferInTwoEntitiesForEach_GetsValueFromBuffer() Dependency.Complete(); } - public void GetBufferOnOtherSystemInVar_GetsValueFromBuffer(Entity entity) - { - var otherSystem = new SystemBase_TestSystem(); - Entities.ForEach((ref EcsTestData td) => { td.value = otherSystem.GetBuffer(entity)[0].Value; }).Schedule(); - Dependency.Complete(); - } - - SystemBase_TestSystem otherSystemField; - public void GetBufferOnOtherSystemInField_GetsValueFromBuffer(Entity entity) - { - var systemField = otherSystemField; - Entities.ForEach((ref EcsTestData td) => { td.value = systemField.GetBuffer(entity)[0].Value; }).Schedule(); - Dependency.Complete(); - } - public void BufferAccessInEntitiesForEachWithNestedCaptures_BufferAccessWorks() { var outerCapture = 20; @@ -321,20 +306,6 @@ public void GetSameBufferInTwoEntitiesForEach_GetsValueFromBuffer() Assert.AreEqual(9, m_Manager.GetComponentData(TestEntity1).value0); } - [Test] - public void GetBufferOnOtherSystemInVar_GetsValueFromBuffer() - { - TestSystem.GetBufferOnOtherSystemInVar_GetsValueFromBuffer(TestEntity2); - Assert.AreEqual(2, m_Manager.GetComponentData(TestEntity1).value); - } - - [Test] - public void GetBufferOnOtherSystemInField_GetsValueFromBuffer() - { - TestSystem.GetBufferOnOtherSystemInField_GetsValueFromBuffer(TestEntity2); - Assert.AreEqual(2, m_Manager.GetComponentData(TestEntity1).value); - } - [Test] public void BufferAccessInEntitiesForEachWithNestedCaptures_BufferAccessWorks() { diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachTests.cs b/Unity.Entities.Tests/ForEachCodegen/ForEachCodegenTests.cs similarity index 82% rename from Unity.Entities.Tests/ForEachCodegen/ForEachTests.cs rename to Unity.Entities.Tests/ForEachCodegen/ForEachCodegenTests.cs index 4a4693d7..0b996cc9 100644 --- a/Unity.Entities.Tests/ForEachCodegen/ForEachTests.cs +++ b/Unity.Entities.Tests/ForEachCodegen/ForEachCodegenTests.cs @@ -4,9 +4,9 @@ using Unity.Collections; using Unity.Entities.CodeGeneratedJobForEach; using Unity.Jobs; -using Unity.Mathematics; using Unity.Transforms; using UnityEngine; +using Unity.Collections.LowLevel.Unsafe; #if !UNITY_PORTABLE_TEST_RUNNER using System.Linq; #endif @@ -14,7 +14,7 @@ namespace Unity.Entities.Tests.ForEachCodegen { [TestFixture] - public class ForEachCodegenTests : ECSTestsFixture + public partial class ForEachCodegenTests : ECSTestsFixture { [InternalBufferCapacity(8)] public struct TestBufferElement : IBufferElementData @@ -55,6 +55,13 @@ public void SimplestCase() Assert.AreEqual(7, m_Manager.GetComponentData(TestEntity).value); } + [Test] + public void MatchingMethodInDerivedSystem() + { + TestSystem.MatchingMethodInDerivedSystem(); + Assert.AreEqual(7, m_Manager.GetComponentData(TestEntity).value); + } + [Test] public void WithTagComponent() { @@ -171,11 +178,23 @@ public void FirstNotCapturingThenCapturingTest() Assert.AreEqual(9, m_Manager.GetComponentData(TestEntity).value); } + struct EntityInQueryValue : IComponentData { public int Value; } + [Test] - public void UseEntityIndexTest() + public void UseEntityInQueryIndex() { - TestSystem.UseEntityIndex(); - Assert.AreEqual(1234, m_Manager.GetComponentData(TestEntity).value); + var myArch = m_Manager.CreateArchetype(ComponentType.ReadWrite(), ComponentType.ReadWrite()); + using (var entities = TestSystem.EntityManager.CreateEntity(myArch, 10, Allocator.Temp)) + { + var val = 0; + foreach (var entity in entities) + { + TestSystem.EntityManager.SetComponentData(entity, new EntityInQueryValue() {Value = val}); + TestSystem.EntityManager.SetSharedComponentData(entity, new EcsTestSharedComp() {value = val}); + val++; + } + } + Assert.IsTrue(TestSystem.UseEntityInQueryIndex()); } [Test] @@ -332,6 +351,19 @@ public void UseUnityEngineComponent() #endif +#if ROSLYN_SOURCEGEN_ENABLED + [Test] + public void PreventStructuralChangeInRunWithBurst() + { + Assert.Throws(() => { TestSystem.PreventStructuralChangeInRunWithBurst(); }); + } + [Test] + public void PreventStructuralChangeInRunWithoutBurst() + { + Assert.Throws(() => { TestSystem.PreventStructuralChangeInRunWithoutBurst(); }); + } +#endif + [Test] public void JobDebuggerSafetyThrowsInRun() { @@ -385,14 +417,47 @@ public void RunWithUsingCreatingTryFinallyBlockDoesNotThrow() Assert.DoesNotThrow(TestSystem.RunWithUsingCreatingTryFinallyBlock); } - class MyTestSystem : SystemBase + [Test] + public void RunWithStructuralChangesAndTagComponentByRef() + { + TestSystem.RunWithStructuralChangesAndTagComponentByRef(); + } + + [Test] + public void RunWithUsingEntityCommandBuffer() + { + TestSystem.RunWithUsingEntityCommandBuffer(); + } + + partial class ParentTestSystem : SystemBase + { + protected override void OnUpdate() { } + + public virtual void MatchingMethodInDerivedSystem() + { + Entities.ForEach((ref EcsTestData e1, in EcsTestData2 e2) => { e1.value += 2 * e2.value0;}).Schedule(); + Dependency.Complete(); + } + } + + partial class ParentTestSystemWithoutEntitiesForEach : ParentTestSystem + { + protected override void OnUpdate() { } + } + + partial class MyTestSystem : ParentTestSystemWithoutEntitiesForEach { public EntityQuery m_StoredQuery; public EntityQuery m_ResolvedQuery; public void SimplestCase() { - //int multiplier = 1; + Entities.ForEach((ref EcsTestData e1, in EcsTestData2 e2) => { e1.value += e2.value0;}).Schedule(); + Dependency.Complete(); + } + + public override void MatchingMethodInDerivedSystem() + { Entities.ForEach((ref EcsTestData e1, in EcsTestData2 e2) => { e1.value += e2.value0;}).Schedule(); Dependency.Complete(); } @@ -555,14 +620,14 @@ public void CaptureFromMultipleScopesAndRun() { int scope3 = 3; Entities - .ForEach((ref EcsTestData e1) => + .ForEach((ref EcsTestData e1) => { var sum = scope1 + scope2 + scope3; scope1 = sum; scope2 = -sum; scope3 = 321; }) - .Run(); + .Run(); Assert.AreEqual(-6, scope2); Assert.AreEqual(6, scope1); @@ -636,12 +701,17 @@ public Func MethodWhoseLocalsLeak() return () => someOtherValue; } - public void UseEntityIndex() + public bool UseEntityInQueryIndex() { - Entities.ForEach((int entityInQueryIndex, ref EcsTestData etd) => + var success = true; + + Entities.WithoutBurst().ForEach((int entityInQueryIndex, in EntityInQueryValue eiqv) => { - etd.value = entityInQueryIndex + 1234; + if (eiqv.Value != entityInQueryIndex) + success = false; }).Run(); + + return success; } public JobHandle ScheduleEcsTestData() @@ -660,6 +730,35 @@ public void RunEcsTestData() .Run(); } +#if ROSLYN_SOURCEGEN_ENABLED + struct EMHolder + { + public EntityManager EM; + } + public void PreventStructuralChangeInRunWithBurst() + { + var holder = new EMHolder {EM = EntityManager}; + Entities + .ForEach((ref EcsTestData e1) => + { + holder.EM.CreateEntity(); + }) + .Run(); + } + + public void PreventStructuralChangeInRunWithoutBurst() + { + var em = EntityManager; + Entities + .WithoutBurst() + .ForEach((ref EcsTestData e1) => + { + em.CreateEntity(); + }) + .Run(); + } +#endif + public void RunInsideLoopCapturingLoopCondition() { int variable = 10; @@ -889,8 +988,80 @@ public void RunWithUsingCreatingTryFinallyBlock() Assert.AreEqual(10, counter); } + public void RunWithStructuralChangesAndTagComponentByRef() + { + var value = false; + Entities + .WithStructuralChanges() + .ForEach((ref EcsTestTag data) => + { + value = true; + }) + .Run(); + + Assert.IsTrue(value); + } + + public void RunWithUsingEntityCommandBuffer() + { + var startEntities = EntityManager.GetAllEntities().Length; + + using (var outerCommandBuffer = new EntityCommandBuffer(Allocator.TempJob)) + { + using (var innerCommandBuffer = new EntityCommandBuffer(Allocator.TempJob)) + { + Entities + .ForEach((Entity entity) => + { + innerCommandBuffer.CreateEntity(); + outerCommandBuffer.CreateEntity(); + }).Run(); + + innerCommandBuffer.Playback(EntityManager); + } + outerCommandBuffer.Playback(EntityManager); + } + + Assert.AreEqual(startEntities * 3, EntityManager.GetAllEntities().Length); + } + + protected override void OnUpdate() { } + } + +#if ROSLYN_SOURCEGEN_ENABLED + // Move this test over to LambdaJobPostProcessorSourceGenErrorTests as part of the source generator error handling PR + /* + [Test] + public void SystemWithMultipleUsesOfEntitiesTest() + { + AssertProducesNoError(typeof(SystemWithMultipleUsesOfEntities)); + } + */ + partial class SystemWithMultipleUsesOfEntities : SystemBase + { + new NativeArray Entities = new NativeArray(); + + struct JobWithEntityField : IJob + { + [ReadOnly] NativeArray Entities; + public JobWithEntityField(NativeArray entities) { Entities = entities; } + + public void Execute() + { + foreach (var entity in Entities) { Debug.Log(entity); } + } + } + + void Test() + { + var value = Unity.Entities.Serialization.SerializeUtility.CurrentFileFormatVersion; + Debug.Log(value); + foreach (var entity in Entities) { Debug.Log(entity); } + } + protected override void OnUpdate() { } } +#endif void AssertNothingChanged() => Assert.AreEqual(3, m_Manager.GetComponentData(TestEntity).value); } diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachCodegenTests.cs.meta b/Unity.Entities.Tests/ForEachCodegen/ForEachCodegenTests.cs.meta new file mode 100644 index 00000000..44bfebb7 --- /dev/null +++ b/Unity.Entities.Tests/ForEachCodegen/ForEachCodegenTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 6a0a012e1cb240488da3d9ec98ce2aff +timeCreated: 1604354521 \ No newline at end of file diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachComponentAccessTests.cs b/Unity.Entities.Tests/ForEachCodegen/ForEachComponentAccessTests.cs index 1fd028a4..2a1e321b 100644 --- a/Unity.Entities.Tests/ForEachCodegen/ForEachComponentAccessTests.cs +++ b/Unity.Entities.Tests/ForEachCodegen/ForEachComponentAccessTests.cs @@ -6,7 +6,7 @@ namespace Unity.Entities.Tests.ForEachCodegen { - class ForEachComponentAccessTests : ECSTestsFixture + partial class ForEachComponentAccessTests : ECSTestsFixture { SystemBase_TestSystem TestSystem; static Entity TestEntity1; @@ -36,7 +36,7 @@ internal enum ScheduleType ScheduleParallel } - public class SystemBase_TestSystem : SystemBase + public partial class SystemBase_TestSystem : SystemBase { protected override void OnUpdate() {} @@ -241,21 +241,6 @@ public void GetSameComponentInTwoEntitiesForEach_GetsValue() Dependency.Complete(); } - public void GetComponentOnOtherSystemInVar_GetsValue(Entity entity) - { - var otherSystem = new SystemBase_TestSystem(); - Entities.ForEach((ref EcsTestData td) => { td.value = otherSystem.GetComponent(entity).value0; }).Schedule(); - Dependency.Complete(); - } - - SystemBase_TestSystem otherSystemField; - public void GetComponentOnOtherSystemInField_GetsValue(Entity entity) - { - var systemField = otherSystemField; - Entities.ForEach((ref EcsTestData td) => { td.value = systemField.GetComponent(entity).value0; }).Schedule(); - Dependency.Complete(); - } - public void ComponentAccessInEntitiesForEachWithNestedCaptures_ComponentAccessWorks() { var outerCapture = 2; @@ -449,20 +434,6 @@ public void GetSameComponentInTwoEntitiesForEach_GetsValue() Assert.AreEqual(9, m_Manager.GetComponentData(TestEntity1).value0); } - [Test] - public void GetComponentOnOtherSystemInVar_GetsValue() - { - TestSystem.GetComponentOnOtherSystemInVar_GetsValue(TestEntity2); - Assert.AreEqual(2, m_Manager.GetComponentData(TestEntity1).value); - } - - [Test] - public void GetComponentOnOtherSystemInField_GetsValue() - { - TestSystem.GetComponentOnOtherSystemInField_GetsValue(TestEntity2); - Assert.AreEqual(2, m_Manager.GetComponentData(TestEntity1).value); - } - [Test] public void ComponentAccessInEntitiesForEachWithNestedCaptures_ComponentAccessWorks() { diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachTests.cs.meta b/Unity.Entities.Tests/ForEachCodegen/ForEachTests.cs.meta deleted file mode 100644 index fe5b2f58..00000000 --- a/Unity.Entities.Tests/ForEachCodegen/ForEachTests.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 0f513b2b6bf75bd48aa8401a56a40b1e -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachWithDeallocateOnJobCompletion.cs b/Unity.Entities.Tests/ForEachCodegen/ForEachWithDeallocateOnJobCompletion.cs deleted file mode 100644 index f2777ec6..00000000 --- a/Unity.Entities.Tests/ForEachCodegen/ForEachWithDeallocateOnJobCompletion.cs +++ /dev/null @@ -1,163 +0,0 @@ -using System; -using NUnit.Framework; -using Unity.Collections.LowLevel.Unsafe; - -#pragma warning disable 0618 - -namespace Unity.Entities.Tests.ForEachCodegen -{ - [TestFixture] - public class ForEachWithDeallocateOnJobCompletion : ECSTestsFixture - { - TestSystemType TestSystem; - - [SetUp] - public void SetUp() - { - TestSystem = World.GetOrCreateSystem(); - } - - struct CanContainDisposedStruct - { - public SupportsDeallocateOnJobCompletion SupportsDeallocateOnJobCompletion; - } - - class CanContainDisposedClass - { - public SupportsDeallocateOnJobCompletion SupportsDeallocateOnJobCompletion = new SupportsDeallocateOnJobCompletion(); - } - - [NativeContainerSupportsDeallocateOnJobCompletion] - struct SupportsDeallocateOnJobCompletion : IDisposable - { - AtomicSafetyHandle Handle; - - public void Dispose() - { - AtomicSafetyHandle.CheckDeallocateAndThrow(Handle); - AtomicSafetyHandle.Release(Handle); - } - - public void CheckCanRead() => AtomicSafetyHandle.CheckReadAndThrow(Handle); - - public bool HasBeenDisposed() - { - try - { - AtomicSafetyHandle.CheckDeallocateAndThrow(Handle); - } - catch - { - return true; - } - return false; - } - - public void Release() - { - if (!HasBeenDisposed()) - AtomicSafetyHandle.Release(Handle); - } - - public static SupportsDeallocateOnJobCompletion Create() => new SupportsDeallocateOnJobCompletion - { - Handle = AtomicSafetyHandle.Create() - }; - } - - [Test] - [ManagedExceptionInPortableTests] - public void DeallocateOnJobCompletion_WithRun_WithMultipleChunks_DeallocatesAtEnd() - { - m_Manager.CreateEntity(typeof(EcsTestFloatData)); - var c = SupportsDeallocateOnJobCompletion.Create(); - try - { - Assert.DoesNotThrow(() => TestSystem.DeallocateOnJobCompletion_WithRun(c)); - Assert.IsTrue(c.HasBeenDisposed(), "Dispose has not been called"); - } - finally - { - c.Release(); - } - } - - [Test] - [ManagedExceptionInPortableTests] - public void DeallocateInsideStructOnJobCompletion_WithRun_DeallocatesAtEnd() - { - m_Manager.CreateEntity(typeof(EcsTestFloatData)); - var c = new CanContainDisposedStruct {SupportsDeallocateOnJobCompletion = SupportsDeallocateOnJobCompletion.Create()}; - try - { - Assert.DoesNotThrow(() => TestSystem.DeallocateInsideStructOnJobCompletion_WithRun(c)); - Assert.IsTrue(c.SupportsDeallocateOnJobCompletion.HasBeenDisposed(), "Dispose has not been called for contained struct"); - } - finally - { - c.SupportsDeallocateOnJobCompletion.Release(); - } - } - - [Test] - [ManagedExceptionInPortableTests] - public void DeallocateInsideClassOnJobCompletion_WithRun_DeallocatesAtEnd() - { - m_Manager.CreateEntity(typeof(EcsTestFloatData)); - var c = new CanContainDisposedClass {SupportsDeallocateOnJobCompletion = SupportsDeallocateOnJobCompletion.Create()}; - try - { - Assert.DoesNotThrow(() => TestSystem.DeallocateInsideClassOnJobCompletion_WithRun(c)); - Assert.IsTrue(c.SupportsDeallocateOnJobCompletion.HasBeenDisposed(), "Dispose has not been called for contained struct"); - } - finally - { - c.SupportsDeallocateOnJobCompletion.Release(); - } - } - - [Test] - [ManagedExceptionInPortableTests] - public void DeallocateOnJobCompletion_WithStructuralChanges_Deallocates() - { - m_Manager.CreateEntity(typeof(EcsTestFloatData)); - var c = SupportsDeallocateOnJobCompletion.Create(); - try - { - Assert.DoesNotThrow(() => TestSystem.DeallocateOnJobCompletion_WithStructuralChanges(c)); - Assert.IsTrue(c.HasBeenDisposed(), "Dispose has not been called"); - } - finally - { - c.Release(); - } - } - - class TestSystemType : SystemBase - { - protected override void OnUpdate() - { - } - - public void DeallocateOnJobCompletion_WithRun(SupportsDeallocateOnJobCompletion c) - { - Entities.WithDeallocateOnJobCompletion(c).ForEach((ref EcsTestFloatData _) => { c.CheckCanRead(); }).Run(); - } - - public void DeallocateInsideStructOnJobCompletion_WithRun(CanContainDisposedStruct c) - { - Entities.WithDeallocateOnJobCompletion(c).ForEach((ref EcsTestFloatData _) => { c.SupportsDeallocateOnJobCompletion.CheckCanRead(); }).Run(); - } - - public void DeallocateInsideClassOnJobCompletion_WithRun(CanContainDisposedClass c) - { - Entities.WithoutBurst().WithDeallocateOnJobCompletion(c).ForEach((ref EcsTestFloatData _) => { c.SupportsDeallocateOnJobCompletion.CheckCanRead(); }).Run(); - } - - public void DeallocateOnJobCompletion_WithStructuralChanges(SupportsDeallocateOnJobCompletion c) - { - Entities.WithStructuralChanges().WithDeallocateOnJobCompletion(c).ForEach((ref EcsTestFloatData _) => { c.CheckCanRead(); }).Run(); - } - } - } -} diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachWithDeallocateOnJobCompletion.cs.meta b/Unity.Entities.Tests/ForEachCodegen/ForEachWithDeallocateOnJobCompletion.cs.meta deleted file mode 100644 index c712f1b4..00000000 --- a/Unity.Entities.Tests/ForEachCodegen/ForEachWithDeallocateOnJobCompletion.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: aa2af977582947e0b659a8375192803c -timeCreated: 1586096406 \ No newline at end of file diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachWithDisposeOnJobCompletion.cs b/Unity.Entities.Tests/ForEachCodegen/ForEachWithDisposeOnJobCompletion.cs index 53ddff8e..cb3ba165 100644 --- a/Unity.Entities.Tests/ForEachCodegen/ForEachWithDisposeOnJobCompletion.cs +++ b/Unity.Entities.Tests/ForEachCodegen/ForEachWithDisposeOnJobCompletion.cs @@ -7,7 +7,7 @@ namespace Unity.Entities.Tests.ForEachCodegen { [TestFixture] - public class ForEachWithDisposeOnCompletion : ECSTestsFixture + public partial class ForEachWithDisposeOnCompletion : ECSTestsFixture { TestSystemType TestSystem; @@ -179,7 +179,7 @@ public void DisposeOnCompletion_WithStructuralChanges_Disposes() } } - class TestSystemType : SystemBase + partial class TestSystemType : SystemBase { protected override void OnUpdate() { diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachWithFilterEntityArrayTests.cs b/Unity.Entities.Tests/ForEachCodegen/ForEachWithFilterEntityArrayTests.cs new file mode 100644 index 00000000..7e375eb0 --- /dev/null +++ b/Unity.Entities.Tests/ForEachCodegen/ForEachWithFilterEntityArrayTests.cs @@ -0,0 +1,179 @@ +#if ROSLYN_SOURCEGEN_ENABLED +using System; +using NUnit.Framework; +using Unity.Collections; +using Unity.Entities; +using Unity.Entities.Tests; + +partial class ForEachWithFilterEntityArrayTests : ECSTestsFixture +{ + MyTestSystem TestSystem; + + [SetUp] + public void SetUp() + { + TestSystem = World.GetOrCreateSystem(); + } + + [Test] + public void WithEntitiesRunWithoutBurst() + { + TestSystem.WithEntitiesRunWithoutBurst(); + } + + [Test] + public void WithEntitiesRun() + { + TestSystem.WithEntitiesRun(); + } + + [Test] + public void WithEntitiesSchedule() + { + TestSystem.WithEntitiesSchedule(); + } + + [Test] + public void WithEntitiesSharedFilterRun() + { + TestSystem.WithEntitiesSharedFilterRun(); + } + + [Test] + public void WithEntitiesRunStructuralChange() + { + TestSystem.WithEntitiesRunStructuralChange(); + } + + partial class MyTestSystem : SystemBase + { + NativeArray FilteredArray101() + { + var entity0 = EntityManager.CreateEntity(typeof(EcsTestData)); + EntityManager.SetComponentData(entity0, new EcsTestData(1)); + var entity1 = EntityManager.CreateEntity(typeof(EcsTestData)); + EntityManager.SetComponentData(entity1, new EcsTestData(10)); + var entity2 = EntityManager.CreateEntity(typeof(EcsTestData)); + EntityManager.SetComponentData(entity2, new EcsTestData(100)); + + return new NativeArray(new[]{entity0, entity2}, Allocator.TempJob); + } + + public void WithEntitiesRunWithoutBurst() + { + var array = FilteredArray101(); + + var em = EntityManager; + int sum = 0; + Entities + .WithFilter(array) + .WithoutBurst() + .ForEach((ref EcsTestData e1) => + { + sum += e1.value; + Check(EntityManager); + }) + .Run(); + Assert.AreEqual(101, sum); + array.Dispose(); + } + + public void WithEntitiesRun() + { + var array = FilteredArray101(); + + var em = EntityManager; + int sum = 0; + Entities + .WithFilter(array) + .ForEach((ref EcsTestData e1) => + { + sum += e1.value; + }) + .Run(); + Assert.AreEqual(101, sum); + array.Dispose(); + } + unsafe public void WithEntitiesSharedFilterRun() + { + var entity0 = EntityManager.CreateEntity(typeof(EcsTestData)); + EntityManager.SetComponentData(entity0, new EcsTestData(1)); + EntityManager.AddSharedComponentData(entity0, new SharedData1(1)); + + var entity1 = EntityManager.CreateEntity(typeof(EcsTestData)); + EntityManager.SetComponentData(entity1, new EcsTestData(10)); + EntityManager.AddSharedComponentData(entity0, new SharedData1(1)); + + var entity2 = EntityManager.CreateEntity(typeof(EcsTestData)); + EntityManager.SetComponentData(entity2, new EcsTestData(100)); + EntityManager.AddSharedComponentData(entity0, new SharedData1(2)); + + var array = new NativeArray(new[]{entity0, entity2}, Allocator.TempJob); + + var em = EntityManager; + int sum = 0; + Entities + .WithFilter(array) + .WithSharedComponentFilter(new SharedData1(1)) + .ForEach((ref EcsTestData e1) => + { + sum += e1.value; + Check(em); + }) + .Run(); + Assert.AreEqual(1, sum); + array.Dispose(); + } + public void WithEntitiesSchedule() + { + var array = FilteredArray101(); + + var em = EntityManager; + var value = new NativeReference(Allocator.TempJob); + Entities + .WithFilter(array) + .WithoutBurst() + .ForEach((ref EcsTestData e1) => + { + value.Value += e1.value; + Check(em); + }) + .Schedule(); + CompleteDependency(); + Assert.AreEqual(101, value.Value); + array.Dispose(); + value.Dispose(); + } + + public void WithEntitiesRunStructuralChange() + { + var array = FilteredArray101(); + + var em = EntityManager; + int sum = 0; + Entities + .WithFilter(array) + .WithStructuralChanges() + .ForEach((Entity entity, ref EcsTestData e1) => + { + sum += e1.value; + em.DestroyEntity(entity); + }) + .Run(); + Assert.AreEqual(101, sum); + array.Dispose(); + + Assert.AreEqual(1, EntityManager.Debug.EntityCount); + } + + public static void Check(EntityManager em) + { + Assert.Throws(() => em.CreateEntity()); + } + + protected override void OnUpdate() + { + } + } + } +#endif diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachWithFilterEntityArrayTests.cs.meta b/Unity.Entities.Tests/ForEachCodegen/ForEachWithFilterEntityArrayTests.cs.meta new file mode 100644 index 00000000..a55eb12b --- /dev/null +++ b/Unity.Entities.Tests/ForEachCodegen/ForEachWithFilterEntityArrayTests.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 3a02f37167f5411abf658010cdbb87bd +timeCreated: 1604231515 \ No newline at end of file diff --git a/Unity.Entities.Tests/ForEachCodegen/ForEachWithStructuralChangesTests.cs b/Unity.Entities.Tests/ForEachCodegen/ForEachWithStructuralChangesTests.cs index 4ccd6b9b..8cb33f1b 100644 --- a/Unity.Entities.Tests/ForEachCodegen/ForEachWithStructuralChangesTests.cs +++ b/Unity.Entities.Tests/ForEachCodegen/ForEachWithStructuralChangesTests.cs @@ -14,7 +14,7 @@ namespace Unity.Entities.Tests.ForEachWithStructuralChangesCodegen { [TestFixture] - public class ForEachWithStructuralChangesCodegenTests : ECSTestsFixture + public partial class ForEachWithStructuralChangesCodegenTests : ECSTestsFixture { MyTestSystem TestSystem; Entity TestEntity; @@ -209,6 +209,12 @@ public void DestroyEntityOnOtherEntities() TestSystem.RemoveOtherEntityFromProcessing(false); } + [Test] + public void CanAssignThisValueInside() + { + TestSystem.CanAssignThisValueInside(); + } + #if !UNITY_DISABLE_MANAGED_COMPONENTS [Test] public void Many_ManagedComponents() @@ -218,7 +224,7 @@ public void Many_ManagedComponents() #endif - class MyTestSystem : SystemBase + partial class MyTestSystem : SystemBase { protected override void OnUpdate() { } @@ -257,10 +263,10 @@ public void DestroyEntity_EMHasTheRightNumberOfEntities() }).Run(); using (var group = EntityManager.CreateEntityQuery(typeof(Entity), typeof(EcsTestData))) - using (var arr = group.ToComponentDataArray(Allocator.TempJob)) - { - Assert.AreEqual(kRepeat - kRepeat / 3, arr.Length); - } + using (var arr = group.ToComponentDataArray(Allocator.TempJob)) + { + Assert.AreEqual(kRepeat - kRepeat / 3, arr.Length); + } } public void DestroyEntity_OfAForwardEntity_CanBeIterated() @@ -289,10 +295,10 @@ public void DestroyEntity_OfAForwardEntity_CanBeIterated() }).Run(); using (var group = EntityManager.CreateEntityQuery(typeof(Entity), typeof(EcsTestData))) - using (var arr = group.ToComponentDataArray(Allocator.TempJob)) - { - Assert.AreEqual(10, arr.Length); - } + using (var arr = group.ToComponentDataArray(Allocator.TempJob)) + { + Assert.AreEqual(10, arr.Length); + } } public void RemoveComponent_OfAForwardEntity_CanBeIterated() @@ -320,10 +326,10 @@ public void RemoveComponent_OfAForwardEntity_CanBeIterated() }).Run(); using (var group = EntityManager.CreateEntityQuery(typeof(Entity), typeof(EcsTestData))) - using (var arr = group.ToComponentDataArray(Allocator.TempJob)) - { - Assert.AreEqual(10 + 1, arr.Length); - } + using (var arr = group.ToComponentDataArray(Allocator.TempJob)) + { + Assert.AreEqual(10 + 1, arr.Length); + } } public void Buffer_ModifiedEntities_VisibleFromInsideForEach() @@ -547,11 +553,11 @@ public void RemoveComponent_ModifiedEntity_VisibleFromInsideForEach() }).Run(); using (var group = EntityManager.CreateEntityQuery(typeof(EcsTestData))) - using (var arr = group.ToComponentDataArray(Allocator.TempJob)) - { - Assert.AreEqual(1, arr.Length); // (e) - Assert.AreEqual(123, arr[0].value); - } + using (var arr = group.ToComponentDataArray(Allocator.TempJob)) + { + Assert.AreEqual(1, arr.Length); // (e) + Assert.AreEqual(123, arr[0].value); + } } public void RemoveComponent_GetOrSetOfRemovedComponent_Throws() @@ -646,10 +652,10 @@ public void SetComponentData_WhenBothSetAndRefAreModified_RefWins() using (var group = new ExtractTestDataFromEntityManager(EntityManager)) { Assert.AreEqual(4, group.Values.Length); - Assert.AreEqual(0, group.Values[0].value0); // case 0 - Assert.AreEqual(100, group.Values[1].value0); // case 1 - Assert.AreEqual(1, group.Values[2].value0); // case 2 - Assert.AreEqual(-300, group.Values[3].value0); // case 3 + Assert.AreEqual(0, group.Values[0].value0); // case 0 + Assert.AreEqual(100, group.Values[1].value0); // case 1 + Assert.AreEqual(1, group.Values[2].value0); // case 2 + Assert.AreEqual(-300, group.Values[3].value0); // case 3 } } } @@ -697,10 +703,7 @@ public void TagComponent() Entities .WithStructuralChanges() - .ForEach((Entity entity, in EcsTestTag tag) => - { - EntityManager.AddComponentData(entity, new EcsTestData(1234)); - }).Run(); + .ForEach((Entity entity, in EcsTestTag tag) => { EntityManager.AddComponentData(entity, new EcsTestData(1234)); }).Run(); Assert.AreEqual(1234, EntityManager.GetComponentData(newEntity).value); } @@ -729,6 +732,19 @@ public void RemoveOtherEntityFromProcessing(bool removeComponent) Assert.AreEqual(2, count); } + public void CanAssignThisValueInside() + { + EntityManager.CreateEntity(); + + MyTestSystem thisSystem = null; + Entities.WithStructuralChanges().ForEach((Entity e) => + { + thisSystem = this; + }).Run(); + + Assert.AreEqual(this, thisSystem); + } + #if !UNITY_DISABLE_MANAGED_COMPONENTS public void Many_ManagedComponents() { @@ -754,7 +770,6 @@ public void Many_ManagedComponents() Assert.AreEqual(1, counter); } - #endif } } diff --git a/Unity.Entities.Tests/ForEachCodegen/SimpleJobTests.cs b/Unity.Entities.Tests/ForEachCodegen/SimpleJobTests.cs index 4ebe7161..6d04735a 100644 --- a/Unity.Entities.Tests/ForEachCodegen/SimpleJobTests.cs +++ b/Unity.Entities.Tests/ForEachCodegen/SimpleJobTests.cs @@ -5,7 +5,7 @@ namespace Unity.Entities.Tests.ForEachCodegen { [TestFixture] - public class SimpleJobTests : ECSTestsFixture + public partial class SimpleJobTests : ECSTestsFixture { private SimpleJobSystem TestSystem; @@ -25,7 +25,7 @@ public void SimpleJob() } } - public class SimpleJobSystem : SystemBase + public partial class SimpleJobSystem : SystemBase { protected override void OnUpdate() {} diff --git a/Unity.Entities.Tests/GenericJobScanningRepros.cs b/Unity.Entities.Tests/GenericJobScanningRepros.cs new file mode 100644 index 00000000..899047c3 --- /dev/null +++ b/Unity.Entities.Tests/GenericJobScanningRepros.cs @@ -0,0 +1,522 @@ +using NUnit.Framework; +using System; +using System.Collections.Generic; +using Unity.Burst; +using Unity.Collections; +using Unity.Jobs; +using UnityEngine; +using UnityEngine.TestTools; +using Unity.Transforms; + +#if !UNITY_DOTSRUNTIME +using System.Text.RegularExpressions; +#endif + +// This file contains two user examples of generic jobs that we are trying to keep supporting with generic job type detection. +// Please leave them here. + +namespace Unity.Entities.Tests.CustomerProvided.Forum1 +{ + public struct Foo + { + public int num; + } + + public struct Bar : IBufferElementData + { + public int num; + } + + public struct Baz : IComponentData + { + public int num; + } + + public interface IJobCustom where T : struct, IBufferElementData + { + void Execute(Entity entity, ref T t0, ref Baz baz, NativeArray foos); + } + + public static class TestUtility where TJob : struct, IJobCustom where T0 : struct, IBufferElementData + { + [BurstCompile] + public struct WrapperJob : IJobChunk + { + // wrapped job ends up here + public TJob wrappedJob; + + [ReadOnly] + [DeallocateOnJobCompletion] + public NativeArray foos; + + [ReadOnly] + public EntityTypeHandle entityType; + public ComponentTypeHandle bazType; + public BufferTypeHandle t0Type; + public bool isReadOnly_T0; + + public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + { + var entities = chunk.GetNativeArray(entityType); + var bazArray = chunk.GetNativeArray(bazType); + var t0Buffers = chunk.GetBufferAccessor(t0Type); + + for (int i = 0; i < chunk.Count; i++) + { + var entity = entities[i]; + var baz = bazArray[i]; + var t0Buffer = t0Buffers[i]; + + for (int iT0 = 0; iT0 < t0Buffer.Length; iT0++) + { + var t0 = t0Buffer[iT0]; + + // wrapped job Execute method is called + wrappedJob.Execute(entity, ref t0, ref baz, foos); + + bazArray[i] = baz; + + if (!isReadOnly_T0) + { + t0Buffer[iT0] = t0; + } + } + } + } + } + + public static JobHandle Schedule(CustomSystemBase system, JobHandle dependentOn, TJob jobData) + { + EntityQuery query = GetExistingEntityQuery(system); + + if (query == default) + { + ComponentType[] componentTypes; + if (!componentTypesByJobType.TryGetValue(typeof(TJob), out componentTypes)) + { + componentTypes = GetIJobCustomComponentTypes(); + } + + query = system.GetEntityQueryPublic(componentTypes); + + system.RequireForUpdate(query); + + if (query.CalculateChunkCount() == 0) + { + return dependentOn; + } + } + + WrapperJob wrapperJob = new WrapperJob + { + wrappedJob = jobData, + // foos = new NativeArray(10, Allocator.TempJob), -- this will just leak and cause test failures. we're just testing that the Schedule() will not work in the first place + entityType = system.EntityManager.GetEntityTypeHandle(), + bazType = system.EntityManager.GetComponentTypeHandle(false), + t0Type = system.EntityManager.GetBufferTypeHandle(false), + isReadOnly_T0 = false + }; + + return wrapperJob.ScheduleParallel(query, dependentOn); + } + + private static Dictionary componentTypesByJobType = new Dictionary(); + + private static EntityQuery GetExistingEntityQuery(ComponentSystemBase system) + { + ComponentType[] componentTypes; + if (!componentTypesByJobType.TryGetValue(typeof(TJob), out componentTypes)) + { + return default; + } + + for (var i = 0; i != system.EntityQueries.Length; i++) + { + if (system.EntityQueries[i].CompareComponents(componentTypes)) + return system.EntityQueries[i]; + } + + return default; + } + + private static ComponentType[] GetIJobCustomComponentTypes() + { + // Simplified for testing purposes. The real version uses reflection to get this data, and caches it for later. + return new ComponentType[] + { + ComponentType.ReadWrite(), + ComponentType.ReadWrite() + }; + } + } + + public abstract class CustomSystemBase : SystemBase + { + public EntityQuery GetEntityQueryPublic(ComponentType[] componentTypes) + { + return GetEntityQuery(componentTypes); + } + } + public class MySystem : CustomSystemBase + { + protected override void OnCreate() + { + // Creating a single entity for testing purposes + Entity entity = EntityManager.CreateEntity(ComponentType.ReadWrite(), ComponentType.ReadWrite()); + + DynamicBuffer barBuffer = EntityManager.GetBuffer(entity); + barBuffer.Add(new Bar { num = 0 }); + } + + protected override void OnUpdate() + { + Dependency = TestUtility.Schedule(this, Dependency, new WrappedCustomJob + { + toAdd = 10 + }); + } + + public struct WrappedCustomJob : IJobCustom + { + public int toAdd; + + public void Execute(Entity entity, ref Bar t0, ref Baz baz, NativeArray foos) + { + // do custom logic here + t0.num += toAdd; + } + } + } + +#if !NET_DOTS && UNITY_2020_2_OR_NEWER // Regex is not supported in NET_DOTS + public class UserGenericJobCode1 : ECSTestsFixture + { + [Test] + public void NoReflectionDataForHiddenGenerics() + { + // This should throw, as we can't pre-make the reflection data for this type of generic job + LogAssert.Expect(LogType.Exception, new Regex("Job reflection data")); + var repro = World.GetOrCreateSystem(); + var simulationGroup = World.GetOrCreateSystem(); + simulationGroup.AddSystemToUpdateList(repro); + World.Update(); + } + } +#endif +} + +namespace Unity.Entities.Tests.CustomerProvided.Forum2 +{ + public struct Foo : IComponentData + { + public int value; + } + + public static class TestUtility where T : struct, IComponentData + { + [BurstCompile] + public struct ProcessChunks : IJobChunk + { + public ComponentTypeHandle typeHandle; + + public void Execute(ArchetypeChunk chunk, int chunkIndex, int entityOffset) + { + for (int i = 0; i < 10000; i++) + { + var testDataArray = chunk.GetNativeArray(typeHandle); + testDataArray[0] = new T(); + } + } + } + } + + public class MySystem : SystemBase + { + EntityQuery query; + + protected override void OnCreate() + { + query = GetEntityQuery(ComponentType.ReadWrite()); + + // for testing purposes. Create an entity with a Foo component + EntityManager.CreateEntity(ComponentType.ReadWrite()); + } + + protected override void OnUpdate() + { + Dependency = new TestUtility.ProcessChunks + { + typeHandle = GetComponentTypeHandle() + }.ScheduleParallel(query, Dependency); + } + } + + public class UserGenericJobCode2 : ECSTestsFixture + { + [Test, DotsRuntimeFixme] + public void DoesntCrashEditor() + { + var repro = World.GetOrCreateSystem(); + var simulationGroup = World.GetOrCreateSystem(); + simulationGroup.AddSystemToUpdateList(repro); + World.Update(); + } + } +} + + +namespace Unity.Entities.Tests.CustomerProvided.Forum1_Tweaked +{ + public struct Foo + { + public int num; + } + + public struct Bar : IBufferElementData + { + public int num; + } + + public struct Baz : IComponentData + { + public int num; + } + + public interface IJobCustom where T : struct, IBufferElementData + { + void Execute(Entity entity, ref T t0, ref Baz baz, NativeArray foos); + } + + public static class TestUtility where TJob : struct, IJobCustom where T0 : struct, IBufferElementData + { + public struct BlahBlah where Q : unmanaged + { + public WrapperJob Thing; + + [BurstCompile] + public struct WrapperJob : IJobChunk + { + // wrapped job ends up here + public TJob wrappedJob; + + [ReadOnly] + [DeallocateOnJobCompletion] + public NativeArray foos; + + [ReadOnly] + public EntityTypeHandle entityType; + public ComponentTypeHandle bazType; + public BufferTypeHandle t0Type; + public bool isReadOnly_T0; + public Q stuff; + + public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + { + var entities = chunk.GetNativeArray(entityType); + var bazArray = chunk.GetNativeArray(bazType); + var t0Buffers = chunk.GetBufferAccessor(t0Type); + + for (int i = 0; i < chunk.Count; i++) + { + var entity = entities[i]; + var baz = bazArray[i]; + var t0Buffer = t0Buffers[i]; + + for (int iT0 = 0; iT0 < t0Buffer.Length; iT0++) + { + var t0 = t0Buffer[iT0]; + + // wrapped job Execute method is called + wrappedJob.Execute(entity, ref t0, ref baz, foos); + + bazArray[i] = baz; + + if (!isReadOnly_T0) + { + t0Buffer[iT0] = t0; + } + } + } + } + } + } + + public static bool MakeJob(CustomSystemBase system, TJob jobData, out BlahBlah job, out EntityQuery query) where Q: unmanaged + { + query = GetExistingEntityQuery(system); + job = default; + + if (query == default) + { + ComponentType[] componentTypes; + if (!componentTypesByJobType.TryGetValue(typeof(TJob), out componentTypes)) + { + componentTypes = GetIJobCustomComponentTypes(); + } + + query = system.GetEntityQueryPublic(componentTypes); + + system.RequireForUpdate(query); + + if (query.CalculateChunkCount() == 0) + { + return false; + } + } + + job = new BlahBlah + { + Thing = new BlahBlah.WrapperJob + { + wrappedJob = jobData, + foos = new NativeArray(10, Allocator.TempJob), + entityType = system.EntityManager.GetEntityTypeHandle(), + bazType = system.EntityManager.GetComponentTypeHandle(false), + t0Type = system.EntityManager.GetBufferTypeHandle(false), + isReadOnly_T0 = false + } + }; + + return true; + } + + private static Dictionary componentTypesByJobType = new Dictionary(); + + private static EntityQuery GetExistingEntityQuery(ComponentSystemBase system) + { + ComponentType[] componentTypes; + if (!componentTypesByJobType.TryGetValue(typeof(TJob), out componentTypes)) + { + return default; + } + + for (var i = 0; i != system.EntityQueries.Length; i++) + { + if (system.EntityQueries[i].CompareComponents(componentTypes)) + return system.EntityQueries[i]; + } + + return default; + } + + private static ComponentType[] GetIJobCustomComponentTypes() + { + // Simplified for testing purposes. The real version uses reflection to get this data, and caches it for later. + return new ComponentType[] + { + ComponentType.ReadWrite(), + ComponentType.ReadWrite() + }; + } + } + + public abstract class CustomSystemBase : SystemBase + { + public EntityQuery GetEntityQueryPublic(ComponentType[] componentTypes) + { + return GetEntityQuery(componentTypes); + } + } + public class MySystem : CustomSystemBase + { + protected override void OnCreate() + { + // Creating a single entity for testing purposes + Entity entity = EntityManager.CreateEntity(ComponentType.ReadWrite(), ComponentType.ReadWrite()); + + DynamicBuffer barBuffer = EntityManager.GetBuffer(entity); + barBuffer.Add(new Bar { num = 0 }); + } + + protected override void OnUpdate() + { + if (TestUtility.MakeJob(this, new WrappedCustomJob { toAdd = 10 }, out var resultJob, out var query)) + { + Dependency = resultJob.Thing.ScheduleParallel(query, Dependency); + } + } + + public struct WrappedCustomJob : IJobCustom + { + public int toAdd; + + public void Execute(Entity entity, ref Bar t0, ref Baz baz, NativeArray foos) + { + // do custom logic here + t0.num += toAdd; + } + } + } + + public class UserGenericJobCode3 : ECSTestsFixture + { + [Test] + public void ReflectionDataForVisibleGenerics() + { + var repro = World.GetOrCreateSystem(); + var simulationGroup = World.GetOrCreateSystem(); + simulationGroup.AddSystemToUpdateList(repro); + World.Update(); + } + } +} + +namespace Unity.Entities.Tests.CustomerProvided.Forum3 +{ + public abstract partial class CustomSystem : SystemBase where TComponent : struct, IComponentData + { + protected interface IProcessor + { + void Execute(ref TComponent component); + } + + [BurstCompile] + protected struct WrapperJob : IJobChunk where TProcessor : struct, IProcessor + { + public TProcessor processor; + + public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) + { + TComponent component = default; + + processor.Execute(ref component); + } + } + + protected WrapperJob CreateJob(TProcessor processor) where TProcessor : struct, IProcessor + { + return new WrapperJob + { + processor = processor + }; + } + } + + public class TestSystem : CustomSystem + { + protected override void OnUpdate() + { + CreateJob(new TestProcessor + { + }).Run(EntityManager.UniversalQuery); + } + + struct TestProcessor : IProcessor + { + public void Execute(ref Translation translation) + { + } + } + } + + public class UserGenericJobCode4 : ECSTestsFixture + { + [Test] + public void ReflectionDataForVisibleGenerics() + { + var repro = World.GetOrCreateSystem(); + repro.Update(); + } + } + +} diff --git a/Unity.Entities.Tests/GenericJobScanningRepros.cs.meta b/Unity.Entities.Tests/GenericJobScanningRepros.cs.meta new file mode 100644 index 00000000..4091023f --- /dev/null +++ b/Unity.Entities.Tests/GenericJobScanningRepros.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11ab8f04f2380d14c81562d7dab157f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities.Tests/IJobEntityBatchTests.cs b/Unity.Entities.Tests/IJobEntityBatchTests.cs index 05e7ac8a..379c98cc 100644 --- a/Unity.Entities.Tests/IJobEntityBatchTests.cs +++ b/Unity.Entities.Tests/IJobEntityBatchTests.cs @@ -1,6 +1,8 @@ using System; using NUnit.Framework; +using Unity.Burst; using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; using UnityEngine; using UnityEngine.TestTools; #if !NET_DOTS @@ -11,6 +13,7 @@ namespace Unity.Entities.Tests { class IJobEntityBatchTests : ECSTestsFixture { + [BurstCompile(CompileSynchronously = true)] struct WriteBatchIndex : IJobEntityBatch { public ComponentTypeHandle EcsTestTypeHandle; @@ -30,6 +33,7 @@ static unsafe bool IsBatchInitialized(ArchetypeChunk batch) return batch.m_Chunk != null; } + // Not Burst compiling since we are Asserting in this job struct WriteBatchInfoToArray : IJobEntityBatch { [NativeDisableParallelForRestriction] @@ -46,6 +50,7 @@ public void Execute(ArchetypeChunk batchInChunk, int batchIndex) } } + // Not Burst compiling since we are Asserting in this job struct WriteBatchInfoAndEntityOffsetToArray : IJobEntityBatchWithIndex { // These arrays are indexed by batchIndex, not entityIndex, so range-checking must be disabled. @@ -71,57 +76,42 @@ public void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirs public void IJobEntityBatchRun() { var archetype = m_Manager.CreateArchetype(typeof(EcsTestData)); - var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - - var entityCount = 100; - - var entities = m_Manager.CreateEntity(archetype, entityCount, Allocator.Temp); - var job = new WriteBatchIndex - { - EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false) - }; - - Assert.DoesNotThrow(()=> + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) { - job.Run(query); - }); - - query.Dispose(); + var entityCount = 100; + m_Manager.CreateEntity(archetype, entityCount); + var job = new WriteBatchIndex + { + EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false) + }; + Assert.DoesNotThrow(() => { job.Run(query); }); + } } [Test] public void IJobEntityBatchRunWithoutDependency_Throws() { var archetype = m_Manager.CreateArchetype(typeof(EcsTestData)); - var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - - var entityCount = 100; - - var entities = m_Manager.CreateEntity(archetype, entityCount, Allocator.Temp); - var job = new WriteBatchIndex + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) { - EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false) - }; - - var handle = job.Schedule(query); - - Assert.Throws(()=> - { - job.Run(query); - }); - - handle.Complete(); - query.Dispose(); + var entityCount = 100; + m_Manager.CreateEntity(archetype, entityCount); + var job = new WriteBatchIndex + { + EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false) + }; + var handle = job.Schedule(query); + Assert.Throws(() => { job.Run(query); }); + handle.Complete(); + } } [Test] public void IJobEntityBatch_WithoutFiltering_GeneratesExpectedBatches([Values(1, 4, 17, 100)] int batchesPerChunk) { var archetype = m_Manager.CreateArchetype(typeof(EcsTestData)); - var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - var entityCount = 10000; - + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) using (var entities = m_Manager.CreateEntity(archetype, entityCount, Allocator.TempJob)) using (var batches = new NativeArray(archetype.ChunkCount * batchesPerChunk, Allocator.TempJob)) { @@ -160,8 +150,6 @@ public void IJobEntityBatch_WithoutFiltering_GeneratesExpectedBatches([Values(1, Assert.AreEqual(1, m_Manager.GetComponentData(entities[i]).value); } } - - query.Dispose(); } [Test] @@ -230,6 +218,7 @@ public void IJobEntityBatch_WithFiltering_GeneratesExpectedBatches([Values(1, 4, query.Dispose(); } + [BurstCompile(CompileSynchronously = true)] struct WriteEntityIndex : IJobEntityBatchWithIndex { public ComponentTypeHandle EcsTestTypeHandle; @@ -245,13 +234,11 @@ public void Execute(ArchetypeChunk batch, int batchIndex, int indexOfFirstEntity } [Test] - public void IJobEntityBatchIndex_WithoutFiltering_GeneratesExpectedBatches([Values(1, 4, 17, 100)] int batchesPerChunk) + public void IJobEntityBatchWithIndex_WithoutFiltering_GeneratesExpectedBatches([Values(1, 4, 17, 100)] int batchesPerChunk) { var archetype = m_Manager.CreateArchetype(typeof(EcsTestData)); - var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - var entityCount = 10000; - + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) using (var entities = m_Manager.CreateEntity(archetype, entityCount, Allocator.TempJob)) using (var batches = new NativeArray(archetype.ChunkCount * batchesPerChunk, Allocator.TempJob)) { @@ -303,10 +290,7 @@ public void IJobEntityBatchIndex_WithoutFiltering_GeneratesExpectedBatches([Valu { Assert.AreEqual(1, m_Manager.GetComponentData(entities[i]).value); } - } - - query.Dispose(); } [Test] @@ -396,49 +380,40 @@ public void IJobEntityBatchWithIndex_WithFiltering_GeneratesExpectedBatches([Val public void IJobEntityBatchWithIndex_Run() { var archetype = m_Manager.CreateArchetype(typeof(EcsTestData)); - var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - - var entityCount = 100; - - var entities = m_Manager.CreateEntity(archetype, entityCount, Allocator.Temp); - - Assert.DoesNotThrow(()=> + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) { - var job = new WriteEntityIndex + var entityCount = 100; + m_Manager.CreateEntity(archetype, entityCount); + Assert.DoesNotThrow(() => { - EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false) - }; - job.Run(query); - }); - - query.Dispose(); + var job = new WriteEntityIndex + { + EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false) + }; + job.Run(query); + }); + } } [Test] public void IJobEntityBatchRunWithIndexWithoutDependency_Throws() { var archetype = m_Manager.CreateArchetype(typeof(EcsTestData)); - var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - - var entityCount = 100; - - var entities = m_Manager.CreateEntity(archetype, entityCount, Allocator.Temp); - var job = new WriteEntityIndex - { - EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false) - }; - - var handle = job.Schedule(query); - - Assert.Throws(()=> + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) { - job.Run(query); - }); - - handle.Complete(); - query.Dispose(); + var entityCount = 100; + m_Manager.CreateEntity(archetype, entityCount); + var job = new WriteEntityIndex + { + EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false) + }; + var handle = job.Schedule(query); + Assert.Throws(() => { job.Run(query); }); + handle.Complete(); + } } + [BurstCompile(CompileSynchronously = true)] struct WriteToArray : IJobEntityBatch { public NativeArray MyArray; @@ -457,14 +432,12 @@ public void Execute(ArchetypeChunk batchInChunk, int batchIndex) public void ParallelArrayWriteTriggersSafetySystem() { var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); - var entitiesA = new NativeArray(archetypeA.ChunkCapacity, Allocator.Temp); - m_Manager.CreateEntity(archetypeA, entitiesA); - var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - + using(var entitiesA = new NativeArray(archetypeA.ChunkCapacity, Allocator.TempJob)) + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) using (var local = new NativeArray(archetypeA.ChunkCapacity * 2, Allocator.TempJob)) { + m_Manager.CreateEntity(archetypeA, entitiesA); LogAssert.Expect(LogType.Exception, new Regex("IndexOutOfRangeException: *")); - new WriteToArray { MyArray = local @@ -477,12 +450,11 @@ public void ParallelArrayWriteTriggersSafetySystem() public void SingleArrayWriteDoesNotTriggerSafetySystem() { var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); - var entitiesA = new NativeArray(archetypeA.ChunkCapacity, Allocator.Temp); - m_Manager.CreateEntity(archetypeA, entitiesA); - var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - + using(var entitiesA = new NativeArray(archetypeA.ChunkCapacity, Allocator.TempJob)) + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) using (var local = new NativeArray(archetypeA.ChunkCapacity * 2, Allocator.TempJob)) { + m_Manager.CreateEntity(archetypeA, entitiesA); new WriteToArray { MyArray = local @@ -490,6 +462,7 @@ public void SingleArrayWriteDoesNotTriggerSafetySystem() } } + [BurstCompile(CompileSynchronously = true)] struct WriteToArrayWithIndex : IJobEntityBatchWithIndex { public NativeArray MyArray; @@ -508,12 +481,11 @@ public void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirs public void ParallelArrayWriteTriggersSafetySystem_WithIndex() { var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); - var entitiesA = new NativeArray(archetypeA.ChunkCapacity, Allocator.Temp); - m_Manager.CreateEntity(archetypeA, entitiesA); - var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - + using(var entitiesA = new NativeArray(archetypeA.ChunkCapacity, Allocator.TempJob)) + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) using (var local = new NativeArray(archetypeA.ChunkCapacity * 2, Allocator.TempJob)) { + m_Manager.CreateEntity(archetypeA, entitiesA); LogAssert.Expect(LogType.Exception, new Regex("IndexOutOfRangeException: *")); new WriteToArrayWithIndex @@ -528,17 +500,418 @@ public void ParallelArrayWriteTriggersSafetySystem_WithIndex() public void SingleArrayWriteDoesNotTriggerSafetySystem_WithIndex() { var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); - var entitiesA = new NativeArray(archetypeA.ChunkCapacity, Allocator.Temp); - m_Manager.CreateEntity(archetypeA, entitiesA); - var query = m_Manager.CreateEntityQuery(typeof(EcsTestData)); - + using(var entitiesA = new NativeArray(archetypeA.ChunkCapacity, Allocator.TempJob)) + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) using (var local = new NativeArray(archetypeA.ChunkCapacity * 2, Allocator.TempJob)) { + m_Manager.CreateEntity(archetypeA, entitiesA); new WriteToArrayWithIndex { MyArray = local }.Schedule(query).Complete(); } } + + [Test] + public unsafe void IJobEntityBatch_ScheduleWithEntityList() + { + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); + var archetypeB = m_Manager.CreateArchetype(typeof(EcsTestData2)); + + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + using (var allEntitiesA = m_Manager.CreateEntity(archetypeA, 100, Allocator.TempJob)) + using (var allEntitiesB = m_Manager.CreateEntity(archetypeB, 100, Allocator.TempJob)) + { + + // One batch, all matching + { + var entities = new NativeArray(10, Allocator.TempJob); + + for (int i = 0; i < 10; ++i) + { + entities[i] = allEntitiesA[i]; + } + + for (int i = 0; i < allEntitiesA.Length; ++i) + { + m_Manager.SetComponentData(allEntitiesA[i], new EcsTestData {value = -1}); + } + + new WriteBatchIndex {EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false)} + .Schedule(query, entities).Complete(); + + Assert.AreEqual(0, m_Manager.GetComponentData(allEntitiesA[0]).value); + for (int i = 1; i < 100; ++i) + Assert.AreEqual(-1, m_Manager.GetComponentData(allEntitiesA[i]).value); + + entities.Dispose(); + } + + // All separate batches, all matching + { + var entities = new NativeArray(10, Allocator.TempJob); + for (int i = 0; i < 10; ++i) + { + entities[i] = allEntitiesA[i * 10]; + } + + for (int i = 0; i < allEntitiesA.Length; ++i) + { + m_Manager.SetComponentData(allEntitiesA[i], new EcsTestData {value = -1}); + } + + new WriteBatchIndex {EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false)} + .Schedule(query, entities).Complete(); + + for (int i = 0; i < 100; i++) + { + var div = i / 10; + var mod = i % 10; + if (mod == 0) + Assert.AreEqual(div, m_Manager.GetComponentData(allEntitiesA[i]).value); + else + Assert.AreEqual(-1, m_Manager.GetComponentData(allEntitiesA[i]).value); + } + + entities.Dispose(); + } + + // Mixed batches, mixed matching archetype + { + var entities = new NativeArray(100, Allocator.TempJob); + for (int i = 0; i < 100; ++i) + { + if (i % 5 == 0) + entities[i] = allEntitiesB[i]; + else + entities[i] = allEntitiesA[i]; + } + + for (int i = 0; i < allEntitiesA.Length; ++i) + { + m_Manager.SetComponentData(allEntitiesA[i], new EcsTestData {value = -1}); + } + + new WriteBatchIndex {EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false)} + .Schedule(query, entities).Complete(); + + for (int i = 0; i < 100; ++i) + { + var div = i / 5; + var mod = i % 5; + if (mod == 1) + Assert.AreEqual(div, m_Manager.GetComponentData(allEntitiesA[i]).value); + else + Assert.AreEqual(-1, m_Manager.GetComponentData(allEntitiesA[i]).value); + } + + entities.Dispose(); + } + } + } + + [Test] + public unsafe void IJobEntityBatchWithIndex_ScheduleWithEntityList() + { + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); + + var archetypeB = m_Manager.CreateArchetype(typeof(EcsTestData2)); + + using (var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + using (var allEntitiesA = m_Manager.CreateEntity(archetypeA, 100, Allocator.TempJob)) + using (var allEntitiesB = m_Manager.CreateEntity(archetypeB, 100, Allocator.TempJob)) + { + // One batch, all matching + { + var entities = new NativeArray(10, Allocator.TempJob); + + for (int i = 0; i < 10; ++i) + { + entities[i] = allEntitiesA[i]; + } + + for (int i = 0; i < allEntitiesA.Length; ++i) + { + m_Manager.SetComponentData(allEntitiesA[i], new EcsTestData {value = -1}); + } + + new WriteEntityIndex {EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false)} + .Schedule(query, entities).Complete(); + + Assert.AreEqual(0, m_Manager.GetComponentData(allEntitiesA[0]).value); + for (int i = 1; i < 100; ++i) + Assert.AreEqual(-1, m_Manager.GetComponentData(allEntitiesA[i]).value); + + entities.Dispose(); + } + + // All separate batches, all matching + { + var entities = new NativeArray(10, Allocator.TempJob); + for (int i = 0; i < 10; ++i) + { + entities[i] = allEntitiesA[i * 10]; + } + + for (int i = 0; i < allEntitiesA.Length; ++i) + { + m_Manager.SetComponentData(allEntitiesA[i], new EcsTestData {value = -1}); + } + + new WriteEntityIndex {EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false)} + .Schedule(query, entities).Complete(); + + for (int i = 0; i < 100; i++) + { + var div = i / 10; + var mod = i % 10; + if (mod == 0) + Assert.AreEqual(div, m_Manager.GetComponentData(allEntitiesA[i]).value); + else + Assert.AreEqual(-1, m_Manager.GetComponentData(allEntitiesA[i]).value); + } + + entities.Dispose(); + } + + // Mixed batches, mixed matching archetype + { + var entities = new NativeArray(100, Allocator.TempJob); + for (int i = 0; i < 100; ++i) + { + if (i % 5 == 0) + entities[i] = allEntitiesB[i]; + else + entities[i] = allEntitiesA[i]; + } + + for (int i = 0; i < allEntitiesA.Length; ++i) + { + m_Manager.SetComponentData(allEntitiesA[i], new EcsTestData {value = -1}); + } + + new WriteEntityIndex {EcsTestTypeHandle = m_Manager.GetComponentTypeHandle(false)} + .Schedule(query, entities).Complete(); + + for (int i = 0; i < 100; ++i) + { + var div = i / 5; + var mod = i % 5; + if (mod == 1) + Assert.AreEqual(div * 4, m_Manager.GetComponentData(allEntitiesA[i]).value); + else + Assert.AreEqual(-1, m_Manager.GetComponentData(allEntitiesA[i]).value); + } + + entities.Dispose(); + } + } + } + + [Test] + public void IJobEntityBatch_GeneratesExpectedBatches_WithEntityList() + { + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData)); + var archetypeB = m_Manager.CreateArchetype(typeof(EcsTestData2)); + var archetypeC = m_Manager.CreateArchetype(typeof(EcsTestData3)); + + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData))) + using(var entitiesA = m_Manager.CreateEntity(archetypeA, 100, Allocator.TempJob)) + using(var entitiesB = m_Manager.CreateEntity(archetypeB, 100, Allocator.TempJob)) + using(var entitiesC = m_Manager.CreateEntity(archetypeC, 100, Allocator.TempJob)) + { + for (int i = 0; i < entitiesA.Length; ++i) + { + m_Manager.SetComponentData(entitiesA[i], new EcsTestData(i)); + } + // AAAAABBBBCAAAAABBBBC... + var limitEntities = new NativeArray(100, Allocator.TempJob); + for (int i = 0; i < 100; ++i) + { + var mod = i % 10; + if (mod < 5) + limitEntities[i] = entitiesA[i]; + else if (mod < 9) + limitEntities[i] = entitiesB[i]; + else + limitEntities[i] = entitiesC[i]; + } + + var batches = new NativeArray(10, Allocator.TempJob); + var job = new WriteBatchInfoToArray + { + BatchInfos = batches, + }; + job.ScheduleParallel(query, limitEntities).Complete(); + + using (var matchingEntities = query.ToEntityArray(limitEntities, Allocator.TempJob)) + { + var entityTypeHandle = m_Manager.GetEntityTypeHandle(); + int markedEntityCount = 0; + for (int batchIndex = 0; batchIndex < batches.Length; ++batchIndex) + { + var batch = batches[batchIndex]; + Assert.IsTrue(IsBatchInitialized(batch)); + + Assert.AreEqual(5, batch.Count); + + var batchEntities = batch.GetNativeArray(entityTypeHandle); + for (int i = 0; i < batchEntities.Length; ++i) + { + Assert.AreEqual(batchIndex * 10 + i, m_Manager.GetComponentData(batchEntities[i]).value); + Assert.AreEqual(matchingEntities[markedEntityCount], batchEntities[i]); + markedEntityCount++; + } + } + Assert.AreEqual(query.CalculateEntityCount(limitEntities), markedEntityCount); + } + + limitEntities.Dispose(); + batches.Dispose(); + } + } + + [Test] + public void IJobEntityBatch_GeneratesExpectedBatches_WithEntityList_WithFiltering() + { + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestSharedComp)); + var archetypeB = m_Manager.CreateArchetype(typeof(EcsTestData2), typeof(EcsTestSharedComp)); + var archetypeC = m_Manager.CreateArchetype(typeof(EcsTestData3), typeof(EcsTestSharedComp)); + + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp))) + using(var entitiesA = m_Manager.CreateEntity(archetypeA, 100, Allocator.TempJob)) + using(var entitiesB = m_Manager.CreateEntity(archetypeB, 100, Allocator.TempJob)) + using(var entitiesC = m_Manager.CreateEntity(archetypeC, 100, Allocator.TempJob)) + { + for (int i = 0; i < entitiesA.Length; ++i) + { + m_Manager.SetComponentData(entitiesA[i], new EcsTestData(i)); + + var mod = i % 5; + var val = mod < 3 ? 17 : 7; + m_Manager.SetSharedComponentData(entitiesA[i], new EcsTestSharedComp(val)); + } + + query.SetSharedComponentFilter(new EcsTestSharedComp(17)); + + // AAAAABBBBCAAAAABBBBC... + // With filtering its A1A1A1A2A2BBBBCA1A1A1A2A2BBBBC... + var limitEntities = new NativeArray(100, Allocator.TempJob); + for (int i = 0; i < 100; ++i) + { + var mod = i % 10; + if (mod < 5) + limitEntities[i] = entitiesA[i]; + else if (mod < 9) + limitEntities[i] = entitiesB[i]; + else + limitEntities[i] = entitiesC[i]; + } + + var batches = new NativeArray(20, Allocator.TempJob); + var job = new WriteBatchInfoToArray + { + BatchInfos = batches, + }; + job.ScheduleParallel(query, limitEntities).Complete(); + + using (var matchingEntities = query.ToEntityArray(limitEntities, Allocator.TempJob)) + { + var entityTypeHandle = m_Manager.GetEntityTypeHandle(); + int markedEntityCount = 0; + int validBatchCount = 0; + for (int batchIndex = 0; batchIndex < batches.Length; ++batchIndex) + { + var batch = batches[batchIndex]; + if (!IsBatchInitialized(batch)) + continue; // this is fine; empty/filtered batches will be skipped and left uninitialized. + + Assert.AreEqual(3, batch.Count); + + var batchEntities = batch.GetNativeArray(entityTypeHandle); + for (int i = 0; i < batchEntities.Length; ++i) + { + Assert.AreEqual(validBatchCount * 10 + i, m_Manager.GetComponentData(batchEntities[i]).value); + Assert.AreEqual(matchingEntities[markedEntityCount], batchEntities[i]); + markedEntityCount++; + } + + validBatchCount++; + } + Assert.AreEqual(query.CalculateEntityCount(limitEntities), markedEntityCount); + } + + limitEntities.Dispose(); + batches.Dispose(); + } + } + + // Not Burst compiling since we are Asserting in this job + struct CheckBatchIndices : IJobEntityBatch + { + public ComponentTypeHandle EcsTestDataTypeHandle; + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) + { + var testData = batchInChunk.GetNativeArray(EcsTestDataTypeHandle); + Assert.AreEqual(batchIndex, testData[0].value); + } + } + struct CheckBatchAndFirstEntityIndices : IJobEntityBatchWithIndex + { + public ComponentTypeHandle EcsTestDataTypeHandle; + public void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirstEntityInQuery) + { + var testData = batchInChunk.GetNativeArray(EcsTestDataTypeHandle); + Assert.AreEqual(batchIndex, testData[0].value); + Assert.AreEqual(indexOfFirstEntityInQuery, testData[0].value); + } + } + + public enum ScheduleMode + { + Parallel, Single, Run, RunWithoutJobs + } + + [Test] + public void IJobEntityBatch_WithNoBatching_HasCorrectIndices( + [Values(ScheduleMode.Parallel, ScheduleMode.Single, ScheduleMode.Run, ScheduleMode.RunWithoutJobs)] ScheduleMode scheduleMode) + { + var archetypeA = m_Manager.CreateArchetype(typeof(EcsTestData), typeof(EcsTestSharedComp)); + + using(var query = m_Manager.CreateEntityQuery(typeof(EcsTestData), typeof(EcsTestSharedComp))) + using (var entities = m_Manager.CreateEntity(archetypeA, 100, Allocator.TempJob)) + { + var val = 0; + foreach (var entity in entities) + { + m_Manager.SetComponentData(entity, new EcsTestData() {value = val}); + m_Manager.SetSharedComponentData(entity, new EcsTestSharedComp() {value = val}); + val++; + } + + var job = new CheckBatchIndices {EcsTestDataTypeHandle = EmptySystem.GetComponentTypeHandle() }; + var jobWithIndex = new CheckBatchAndFirstEntityIndices {EcsTestDataTypeHandle = EmptySystem.GetComponentTypeHandle() }; + + switch (scheduleMode) + { + case ScheduleMode.Parallel: + job.ScheduleParallel(query).Complete(); + jobWithIndex.ScheduleParallel(query).Complete(); + break; + case ScheduleMode.Single: + job.Schedule(query).Complete(); + jobWithIndex.Schedule(query).Complete(); + break; + case ScheduleMode.Run: + job.Run(query); + jobWithIndex.Run(query); + break; + case ScheduleMode.RunWithoutJobs: + JobEntityBatchExtensions.RunWithoutJobs(ref job, query); + JobEntityBatchIndexExtensions.RunWithoutJobs(ref jobWithIndex, query); + break; + } + } + } } } diff --git a/Unity.Entities.Tests/IJobForEachTests.cs b/Unity.Entities.Tests/IJobForEachTests.cs index f58de1c6..84d6dfdd 100644 --- a/Unity.Entities.Tests/IJobForEachTests.cs +++ b/Unity.Entities.Tests/IJobForEachTests.cs @@ -166,7 +166,7 @@ public void ForEachJobHandleDependency() } #if ENABLE_UNITY_COLLECTIONS_CHECKS - [Test, Ignore("Unstable - DOTS-2621")] + [Test] public void JobWithMissingDependency() { m_Manager.CreateEntity(typeof(EcsTestData), typeof(EcsTestData2)); diff --git a/Unity.Entities.Tests/JobComponentSystemDependencyTests.cs b/Unity.Entities.Tests/JobComponentSystemDependencyTests.cs index b8c0d724..2398696f 100644 --- a/Unity.Entities.Tests/JobComponentSystemDependencyTests.cs +++ b/Unity.Entities.Tests/JobComponentSystemDependencyTests.cs @@ -182,7 +182,7 @@ public void ReturningWrongJobThrowsInCorrectSystemUpdate() Assert.Throws(() => { rs2.Update(); }); } - [Test, Ignore("Unstable - DOTS-2621")] + [Test] public void IgnoredInputDepsThrowsInCorrectSystemUpdate() { var entity = m_Manager.CreateEntity(typeof(EcsTestData)); diff --git a/Unity.Entities.Tests/JobSafetyTests.cs b/Unity.Entities.Tests/JobSafetyTests.cs index 0ab204a9..9cc5e820 100644 --- a/Unity.Entities.Tests/JobSafetyTests.cs +++ b/Unity.Entities.Tests/JobSafetyTests.cs @@ -7,7 +7,7 @@ namespace Unity.Entities.Tests { - class JobSafetyTests : ECSTestsFixture + partial class JobSafetyTests : ECSTestsFixture { struct TestIncrementJob : IJob { @@ -57,7 +57,7 @@ public void ComponentAccessAfterScheduledJobThrows() // These tests require: // - JobsDebugger support for static safety IDs (added in 2020.1) // - Asserting throws -#if UNITY_2020_1_OR_NEWER && !UNITY_DOTSRUNTIME +#if !UNITY_DOTSRUNTIME struct UseComponentDataFromEntity : IJob { public ComponentDataFromEntity data; @@ -618,7 +618,7 @@ public void DynamicBuffer_UnsafePtr_DoesntThrowWhenReadWrite() } #endif // !UNITY_DOTSRUNTIME - public class DynamicBufferReadOnlySystem : SystemBase + public partial class DynamicBufferReadOnlySystem : SystemBase { protected override void OnUpdate() { diff --git a/Unity.Entities.Tests/ManagedObjectUtilityTests.cs b/Unity.Entities.Tests/ManagedObjectUtilityTests.cs index 07b80739..7897bccd 100644 --- a/Unity.Entities.Tests/ManagedObjectUtilityTests.cs +++ b/Unity.Entities.Tests/ManagedObjectUtilityTests.cs @@ -85,6 +85,24 @@ public void ManagedObjectClone_ClassWithCollections() Assert.That(dst.IntList, Is.EquivalentTo(src.IntList)); } + [Test] + public void ManagedObjectClone_ClassWithBlobAssetReference() + { + using (var blobAssetReference = BlobAssetReference.Create(13)) + { + var src = new ClassWithBlobAssetReference + { + BlobAssetReference = blobAssetReference + }; + + var dst = new ManagedObjectClone().Clone(src) as ClassWithBlobAssetReference; + + Assert.That(dst, Is.Not.Null); + Assert.That(dst, Is.Not.SameAs(src)); + Assert.That(dst.BlobAssetReference.Value, Is.EqualTo(13)); + } + } + [Test] public void ManagedObjectEquals_Null() { diff --git a/Unity.Entities.Tests/SafetyTests.cs b/Unity.Entities.Tests/SafetyTests.cs index 00ffb55b..5a00b7c0 100644 --- a/Unity.Entities.Tests/SafetyTests.cs +++ b/Unity.Entities.Tests/SafetyTests.cs @@ -171,19 +171,11 @@ public void CreateEntityWithOneNullTypeThrows() Assert.Throws(() => m_Manager.CreateEntity(null, typeof(EcsTestData))); } -// We want these types registered with in DOTS Runtime by default -#if !UNITY_DOTSRUNTIME - [DisableAutoTypeRegistration] -#endif unsafe struct BigComponentData1 : IComponentData { public fixed int BigArray[10000]; } -// We want these types registered with in DOTS Runtime by default -#if !UNITY_DOTSRUNTIME - [DisableAutoTypeRegistration] -#endif unsafe struct BigComponentData2 : IComponentData { public fixed float BigArray[10000]; @@ -192,11 +184,6 @@ unsafe struct BigComponentData2 : IComponentData [Test] public void CreateTooBigArchetypeThrows() { -// TypeManager.AddNewComponentTypes is not supported in DOTS Runtime currently -#if !UNITY_DOTSRUNTIME - TypeManager.AddNewComponentTypes(new []{typeof(BigComponentData1), typeof(BigComponentData2)}); -#endif - Assert.Throws(() => { m_Manager.CreateArchetype(typeof(BigComponentData1), typeof(BigComponentData2)); diff --git a/Unity.Entities.Tests/Serialization/SerializeTests.cs b/Unity.Entities.Tests/Serialization/SerializeTests.cs index 829535bc..173710ec 100644 --- a/Unity.Entities.Tests/Serialization/SerializeTests.cs +++ b/Unity.Entities.Tests/Serialization/SerializeTests.cs @@ -40,7 +40,7 @@ public void ReadBytes(void* data, int bytes) public unsafe class TestBinaryWriter : BinaryWriter { - internal NativeList content = new NativeList(Allocator.TempJob); + public NativeList content = new NativeList(Allocator.TempJob); public void Dispose() { diff --git a/Unity.Entities.Tests/Serialization/WorldTest.yaml b/Unity.Entities.Tests/Serialization/WorldTest.yaml index 72de0525..f2661e3e 100644 --- a/Unity.Entities.Tests/Serialization/WorldTest.yaml +++ b/Unity.Entities.Tests/Serialization/WorldTest.yaml @@ -3,139 +3,142 @@ # ECS Debugging file Archetypes: Archetype: - name: " - Entity - TestComponentData2 - EcsTestData - EcsTestData2" - TypesCount: 4 + name: " - Entity - EcsComplexEntityRefElement [B]" + TypesCount: 2 ChunkCount: 1 - ChunkCapacity: 496 + ChunkCapacity: 226 properties: [] Archetype: - name: " - Entity - TestComponentData1 - EcsTestData - EcsTestData2 - EcsIntElement [B]" + name: " - Entity - TestComponentData1 - TestComponentData2 - EcsTestData - EcsIntElement [B]" TypesCount: 5 ChunkCount: 1 - ChunkCapacity: 200 + ChunkCapacity: 192 properties: [] Archetype: - name: " - Entity - TestComponentData1 - TestComponentData2 - EcsTestData - EcsIntElement [B]" - TypesCount: 5 + name: " - Entity - TestComponentData2 - EcsTestData - EcsTestData2" + TypesCount: 4 ChunkCount: 1 - ChunkCapacity: 190 + ChunkCapacity: 506 properties: [] Archetype: - name: " - Entity - EcsComplexEntityRefElement [B]" - TypesCount: 2 + name: " - Entity - TestComponentData1 - EcsTestData - EcsTestData2 - EcsIntElement [B]" + TypesCount: 5 ChunkCount: 1 - ChunkCapacity: 223 + ChunkCapacity: 202 properties: [] ChunksData: Archetype: - name: " - Entity - TestComponentData2 - EcsTestData - EcsTestData2" + name: " - Entity - EcsComplexEntityRefElement [B]" ChunkData: Header: metaChunkEntity: {index: 0, version: 0} - Capacity: 496 + Capacity: 226 Count: 1 ComponentDataCollection: ComponentData: info: {Type: Entity, SizeInChunk: 8} Entities: - Entity(2:1): {Index: "2", Version: "1"} - ComponentData: - info: {Type: TestComponentData2, SizeInChunk: 12} - Entities: - Entity(2:1): {referencedEntity: "Entity(1:1)", value: "20"} - ComponentData: - info: {Type: EcsTestData, SizeInChunk: 4} - Entities: - Entity(2:1): {value: "2"} + Entity(4:1): {Index: "4", Version: "1"} ComponentData: - info: {Type: EcsTestData2, SizeInChunk: 8} + info: {Type: EcsComplexEntityRefElement, SizeInChunk: 64} Entities: - Entity(2:1): {value0: "-2", value1: "-2"} + Entity(4:1): + Length: 3 Capacity: 4 + 0000: {Dummy: "1", Entity: "Entity(1:1)"} + 0001: {Dummy: "2", Entity: "Entity(2:1)"} + 0002: {Dummy: "3", Entity: "Entity(3:1)"} Archetype: - name: " - Entity - TestComponentData1 - EcsTestData - EcsTestData2 - EcsIntElement [B]" + name: " - Entity - TestComponentData1 - TestComponentData2 - EcsTestData - EcsIntElement [B]" ChunkData: Header: metaChunkEntity: {index: 0, version: 0} - Capacity: 200 + Capacity: 192 Count: 1 ComponentDataCollection: ComponentData: info: {Type: Entity, SizeInChunk: 8} Entities: - Entity(1:1): {Index: "1", Version: "1"} + Entity(3:1): {Index: "3", Version: "1"} ComponentData: info: {Type: TestComponentData1, SizeInChunk: 12} Entities: - Entity(1:1): {referencedEntity: "Entity(2:1)", value: "10"} + Entity(3:1): {referencedEntity: "Entity.Null", value: "30"} ComponentData: - info: {Type: EcsTestData, SizeInChunk: 4} + info: {Type: TestComponentData2, SizeInChunk: 12} Entities: - Entity(1:1): {value: "1"} + Entity(3:1): {referencedEntity: "Entity.Null", value: "40"} ComponentData: - info: {Type: EcsTestData2, SizeInChunk: 8} + info: {Type: EcsTestData, SizeInChunk: 4} Entities: - Entity(1:1): {value0: "-1", value1: "-1"} + Entity(3:1): {value: "3"} ComponentData: info: {Type: EcsIntElement, SizeInChunk: 48} Entities: - Entity(1:1): + Entity(3:1): + Length: 10 Capacity: 16 0000: {Value: "1"} 0001: {Value: "2"} 0002: {Value: "3"} + 0003: {Value: "4"} + 0004: {Value: "5"} + 0005: {Value: "6"} + 0006: {Value: "7"} + 0007: {Value: "8"} + 0008: {Value: "9"} + 0009: {Value: "10"} Archetype: - name: " - Entity - TestComponentData1 - TestComponentData2 - EcsTestData - EcsIntElement [B]" + name: " - Entity - TestComponentData2 - EcsTestData - EcsTestData2" ChunkData: Header: metaChunkEntity: {index: 0, version: 0} - Capacity: 190 + Capacity: 506 Count: 1 ComponentDataCollection: ComponentData: info: {Type: Entity, SizeInChunk: 8} Entities: - Entity(3:1): {Index: "3", Version: "1"} - ComponentData: - info: {Type: TestComponentData1, SizeInChunk: 12} - Entities: - Entity(3:1): {referencedEntity: "Entity.Null", value: "30"} + Entity(2:1): {Index: "2", Version: "1"} ComponentData: info: {Type: TestComponentData2, SizeInChunk: 12} Entities: - Entity(3:1): {referencedEntity: "Entity.Null", value: "40"} + Entity(2:1): {referencedEntity: "Entity(1:1)", value: "20"} ComponentData: info: {Type: EcsTestData, SizeInChunk: 4} Entities: - Entity(3:1): {value: "3"} + Entity(2:1): {value: "2"} ComponentData: - info: {Type: EcsIntElement, SizeInChunk: 48} + info: {Type: EcsTestData2, SizeInChunk: 8} Entities: - Entity(3:1): - 0000: {Value: "1"} - 0001: {Value: "2"} - 0002: {Value: "3"} - 0003: {Value: "4"} - 0004: {Value: "5"} - 0005: {Value: "6"} - 0006: {Value: "7"} - 0007: {Value: "8"} - 0008: {Value: "9"} - 0009: {Value: "10"} + Entity(2:1): {value0: "-2", value1: "-2"} Archetype: - name: " - Entity - EcsComplexEntityRefElement [B]" + name: " - Entity - TestComponentData1 - EcsTestData - EcsTestData2 - EcsIntElement [B]" ChunkData: Header: metaChunkEntity: {index: 0, version: 0} - Capacity: 223 + Capacity: 202 Count: 1 ComponentDataCollection: ComponentData: info: {Type: Entity, SizeInChunk: 8} Entities: - Entity(4:1): {Index: "4", Version: "1"} + Entity(1:1): {Index: "1", Version: "1"} ComponentData: - info: {Type: EcsComplexEntityRefElement, SizeInChunk: 64} + info: {Type: TestComponentData1, SizeInChunk: 12} Entities: - Entity(4:1): - 0000: {Dummy: "1", Entity: "Entity(1:1)"} - 0001: {Dummy: "2", Entity: "Entity(2:1)"} - 0002: {Dummy: "3", Entity: "Entity(3:1)"} + Entity(1:1): {referencedEntity: "Entity(2:1)", value: "10"} + ComponentData: + info: {Type: EcsTestData, SizeInChunk: 4} + Entities: + Entity(1:1): {value: "1"} + ComponentData: + info: {Type: EcsTestData2, SizeInChunk: 8} + Entities: + Entity(1:1): {value0: "-1", value1: "-1"} + ComponentData: + info: {Type: EcsIntElement, SizeInChunk: 48} + Entities: + Entity(1:1): + Length: 3 Capacity: 8 + 0000: {Value: "1"} + 0001: {Value: "2"} + 0002: {Value: "3"} diff --git a/Unity.Entities.Tests/SingletonTests.cs b/Unity.Entities.Tests/SingletonTests.cs index f8bed2c6..b0b9bb0b 100644 --- a/Unity.Entities.Tests/SingletonTests.cs +++ b/Unity.Entities.Tests/SingletonTests.cs @@ -157,6 +157,46 @@ public void GetSingletonEntityWorks() Assert.AreEqual(entity, singletonEntity); } + [Test] + public void TryGetSingletonEntity() + { + var entity = m_Manager.CreateEntity(typeof(EcsTestData)); + + var hasEntity = EmptySystem.TryGetSingletonEntity(out var singletonEntity); + + Assert.True(hasEntity); + Assert.AreEqual(entity, singletonEntity); + } + + [Test] + public void TryGetSingletonEntityNoSingleton() + { + var hasEntity = EmptySystem.TryGetSingletonEntity(out var singletonEntity); + + Assert.IsFalse(hasEntity); + Assert.AreEqual(default(Entity), singletonEntity); + } + + [Test] + public void TryGetSingleton() + { + m_Manager.CreateEntity(typeof(EcsTestData)); + + EmptySystem.SetSingleton(new EcsTestData(10)); + var hasSingleTon = EmptySystem.TryGetSingleton(out var ecsTestData); + Assert.IsTrue(hasSingleTon); + Assert.AreEqual(10, ecsTestData.value); + + } + + [Test] + public void TryGetSingletonNoSingleton() + { + var hasSingleTon = EmptySystem.TryGetSingleton(out var ecsTestData); + Assert.IsFalse(hasSingleTon); + Assert.AreEqual(default(EcsTestData).value, ecsTestData.value); + } + #if !UNITY_DISABLE_MANAGED_COMPONENTS [Test] public void GetSetSingleton_ManagedComponents() diff --git a/Unity.Entities.Tests/SizeTests.cs b/Unity.Entities.Tests/SizeTests.cs index 013e2756..7936f833 100644 --- a/Unity.Entities.Tests/SizeTests.cs +++ b/Unity.Entities.Tests/SizeTests.cs @@ -121,10 +121,6 @@ public void SIZ_TagCannotGetNativeArrayFromArchetypeChunk() #pragma warning restore 0219 -// We want these types registered with in DOTS Runtime by default -#if !UNITY_DOTSRUNTIME - [DisableAutoTypeRegistration] -#endif unsafe struct TestTooBig : IComponentData { fixed byte Value[32768]; @@ -133,10 +129,6 @@ unsafe struct TestTooBig : IComponentData [Test] public void ThrowsWhenTooLargeCreate() { -// TypeManager.AddNewComponentTypes is not supported in DOTS Runtime currently -#if !UNITY_DOTSRUNTIME - TypeManager.AddNewComponentTypes(typeof(TestTooBig)); -#endif Assert.Throws(() => { m_Manager.CreateEntity(typeof(TestTooBig)); @@ -146,10 +138,6 @@ public void ThrowsWhenTooLargeCreate() [Test] public void ThrowsWhenTooLargeAddComponent() { -// TypeManager.AddNewComponentTypes is not supported in DOTS Runtime currently -#if !UNITY_DOTSRUNTIME - TypeManager.AddNewComponentTypes(typeof(TestTooBig)); -#endif var entity = m_Manager.CreateEntity(); Assert.Throws(() => { diff --git a/Unity.Entities.Tests/SystemBaseDependencyTests.cs b/Unity.Entities.Tests/SystemBaseDependencyTests.cs index e48e714d..033af02f 100644 --- a/Unity.Entities.Tests/SystemBaseDependencyTests.cs +++ b/Unity.Entities.Tests/SystemBaseDependencyTests.cs @@ -7,9 +7,9 @@ namespace Unity.Entities.Tests { - class SystemBaseDependencyTests : ECSTestsFixture + partial class SystemBaseDependencyTests : ECSTestsFixture { - public class ReadSystem1 : SystemBase + public partial class ReadSystem1 : SystemBase { protected override void OnUpdate() { @@ -22,7 +22,7 @@ protected override void OnCreate() } } - public class ReadSystem2 : SystemBase + public partial class ReadSystem2 : SystemBase { public bool returnWrongJob = false; public bool ignoreInputDeps = false; @@ -44,7 +44,7 @@ protected override void OnCreate() } } - public class ReadSystem3 : SystemBase + public partial class ReadSystem3 : SystemBase { public EntityQuery m_ReadGroup; @@ -55,7 +55,7 @@ protected override void OnCreate() } } - public class WriteSystem : SystemBase + public partial class WriteSystem : SystemBase { public bool SkipJob = false; @@ -73,6 +73,28 @@ protected override void OnCreate() } } + public class GenericSystem : SystemBase + { + public T thing; + public T thing2; + + protected override void OnUpdate() + { + thing = thing2; + } + } + +#if !NET_DOTS + [Test] + public void CreatingGenericSystem_Works() + { + var system = (GenericSystem)World.CreateSystem(typeof(GenericSystem)); + system.thing = 5; + system.Update(); + Assert.AreEqual(system.thing, system.thing2); + } +#endif + [Test] public void ReturningWrongJobThrowsInCorrectSystemUpdate() { @@ -137,7 +159,7 @@ public void ReadAfterWrite_JobForEachGroup_Works() rs.Update(); } - class UseEcsTestDataFromEntity : SystemBase + partial class UseEcsTestDataFromEntity : SystemBase { public struct MutateEcsTestDataJob : IJob { @@ -168,14 +190,14 @@ public void AddingDependencyTypeDuringOnUpdateSyncsDependency() systemB.Update(); } - class EmptySystemBase : SystemBase + partial class EmptySystemBase : SystemBase { protected override void OnUpdate() { } } - class SystemBaseWithJobChunkJob : SystemBase + partial class SystemBaseWithJobChunkJob : SystemBase { public struct EmptyJob : IJobChunk { @@ -206,7 +228,7 @@ public void EmptySystemAfterNonEmptySystemDoesntThrow() systemB.Update(); } - class SystemBaseEntitiesForEachDependencies : SystemBase + partial class SystemBaseEntitiesForEachDependencies : SystemBase { public bool DoRunToCompleteDependencies = false; @@ -252,7 +274,7 @@ public void SystemBaseEntitiesForEachDependencies_WithRun_HasNoUncompletedDepend }); } - class SystemBaseEntitiesForEachScheduling : SystemBase + partial class SystemBaseEntitiesForEachScheduling : SystemBase { public int ScheduleMode; public NativeArray CreatedEntities; @@ -319,7 +341,7 @@ public void SystemBaseEntitiesForEachScheduling_ScheduleAndRun_RunsOverAllCompon system.CreatedEntities.Dispose(); } - class SystemBaseEntitiesForEachComponentDataFromEntity : SystemBase + partial class SystemBaseEntitiesForEachComponentDataFromEntity : SystemBase { public bool RunScheduleParallel = false; @@ -362,5 +384,28 @@ public void SystemBaseEntitiesForEachComponentDataFromEntity_Scheduled_ThrowsApp Assert.DoesNotThrow(() => { system.Update(); }); } } + + partial class SystemWithSyncPointAfterSchedule : SystemBase + { + protected override void OnUpdate() + { + Entities.ForEach((ref EcsTestData _) => { }).Schedule(); + + // this forces a sync-point and must finish the job we just scheduled + EntityManager.CreateEntity(); + } + + protected override void OnCreate() + { + EntityManager.CreateEntity(typeof(EcsTestData)); + } + } + + [Test] + public void SystemBase_CanHaveSyncPointAfterSchedule() + { + var s = World.CreateSystem(); + Assert.DoesNotThrow(() => s.Update()); + } } } diff --git a/Unity.Entities.Tests/SystemBaseSingletonAccessTests.cs b/Unity.Entities.Tests/SystemBaseSingletonAccessTests.cs index e121aedc..8da9b695 100644 --- a/Unity.Entities.Tests/SystemBaseSingletonAccessTests.cs +++ b/Unity.Entities.Tests/SystemBaseSingletonAccessTests.cs @@ -6,7 +6,7 @@ namespace Unity.Entities.Tests { - class SystemBaseSingletonAccessTests : ECSTestsFixture + partial class SystemBaseSingletonAccessTests : ECSTestsFixture { SystemBase_TestSystem TestSystem; @@ -16,7 +16,7 @@ public void SetUp() TestSystem = World.GetOrCreateSystem(); } - public class SystemBase_TestSystem : SystemBase + public partial class SystemBase_TestSystem : SystemBase { protected override void OnUpdate() {} @@ -184,6 +184,18 @@ public void GetSingletonThroughQueryWorks() Assert.AreEqual(3, query.GetSingleton().value); } + public struct GenericDataType : IComponentData where T : unmanaged + { + public T value; + } + public void GetSingletonWithGenericThrows() + { + EntityManager.CreateEntity(typeof(GenericDataType)); + + SetSingleton(new GenericDataType() { value = 10 }); + Assert.AreEqual(10, GetSingleton>().value); + } + #if !UNITY_DISABLE_MANAGED_COMPONENTS public void GetSetSingleton_ManagedComponents() { @@ -282,6 +294,13 @@ public void SystemBase_GetSingletonThroughQueryWorks() TestSystem.GetSingletonThroughQueryWorks(); } + [Test] + public void SystemBase_GetSingletonWithGenericThrows() + { + // Will now throw exception around not knowing component types at compile time instead of crashing + Assert.Throws(()=>TestSystem.GetSingletonWithGenericThrows()); + } + #if !UNITY_DISABLE_MANAGED_COMPONENTS [Test] public void SystemBase_GetSetSingleton_ManagedComponents() @@ -298,3 +317,5 @@ public void SystemBase_HasSingletonWorks_ManagedComponents() #endif } } + + diff --git a/Unity.Entities.Tests/TestComponents.cs b/Unity.Entities.Tests/TestComponents.cs index cd978a55..55e2e333 100644 --- a/Unity.Entities.Tests/TestComponents.cs +++ b/Unity.Entities.Tests/TestComponents.cs @@ -4,7 +4,6 @@ using Unity.Entities; using Unity.Entities.Tests; using Unity.Assertions; -using Unity.Collections; [assembly: RegisterGenericComponentType(typeof(EcsTestGeneric))] [assembly: RegisterGenericComponentType(typeof(EcsTestGeneric))] @@ -93,6 +92,11 @@ public EcsTestData5(int inValue) public int GetValue() => value0; } + public struct EcsTestNonComponent + { + public int Value; + } + public struct EcsTestFloatData : IComponentData { public float Value; @@ -276,6 +280,20 @@ public struct EcsTestDataBlobAssetRef : IComponentData public BlobAssetReference value; } +#if !UNITY_DISABLE_MANAGED_COMPONENTS + public class EcsTestDataBlobAssetRefClass : IComponentData + { + public BlobAssetReference value; + public BlobAssetReference value2; + } +#endif + + public struct EcsTestDataBlobAssetRefShared : ISharedComponentData + { + public BlobAssetReference value; + public BlobAssetReference value2; + } + public struct EcsTestDataBlobAssetRef2 : IComponentData { public BlobAssetReference value; @@ -319,6 +337,16 @@ public EcsState1(int value) } } + public struct EcsStateShared1 : ISystemStateSharedComponentData + { + public int Value; + + public EcsStateShared1(int value) + { + Value = value; + } + } + public struct EcsStateTag1 : ISystemStateComponentData { } @@ -437,11 +465,11 @@ public struct EcsTestGenericTag : IComponentData #if !UNITY_DISABLE_MANAGED_COMPONENTS - public class ClassWithString + sealed public class ClassWithString { public string String; } - public class ClassWithClassFields + sealed public class ClassWithClassFields { public ClassWithString ClassWithString; } diff --git a/Unity.Entities.Tests/TypeManagerTests.cs b/Unity.Entities.Tests/TypeManagerTests.cs index dafc7dac..e9a234b1 100644 --- a/Unity.Entities.Tests/TypeManagerTests.cs +++ b/Unity.Entities.Tests/TypeManagerTests.cs @@ -6,6 +6,7 @@ using Unity.Collections.LowLevel.Unsafe; using Unity.Entities; using Unity.Entities.Tests; +using Unity.Mathematics; using Unity.Transforms; using UnityEngine; @@ -13,6 +14,8 @@ [assembly: RegisterGenericComponentType(typeof(TypeManagerTests.GenericComponent))] [assembly: RegisterGenericComponentType(typeof(TypeManagerTests.GenericComponent))] +[assembly: RegisterGenericComponentType(typeof(TypeManagerTests.GenericComponent))] +[assembly: RegisterGenericComponentType(typeof(TypeManagerTests.GenericComponent>))] namespace Unity.Entities { @@ -31,6 +34,15 @@ struct TestType1 : IComponentData { int empty; } + struct TestTypeWithEntity : IComponentData + { + Entity Entity; + } + struct TestTypeWithBlobRef : IComponentData + { + BlobAssetReference Blobb; + } + struct TestType2 : IComponentData { int empty; @@ -105,6 +117,24 @@ public void TestGenericComponents() Assert.AreNotEqual(index1, index2); } + [Test] + public void TestEntityRef() + { + Assert.IsTrue(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex())); + Assert.IsTrue(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex>())); + Assert.IsFalse(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex>())); + Assert.IsFalse(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex())); + } + + [Test] + public void TestBlobRef() + { + Assert.IsTrue(TypeManager.GetTypeInfo().HasBlobAssetRefs); + Assert.IsTrue(TypeManager.GetTypeInfo>>().HasBlobAssetRefs); + Assert.IsFalse(TypeManager.GetTypeInfo>().HasBlobAssetRefs); + Assert.IsFalse(TypeManager.GetTypeInfo().HasBlobAssetRefs); + } + [Test] public void TestGenericComponentsThrowsOnUnregisteredGeneric() { @@ -361,6 +391,23 @@ public void TestGetSystemName() Assert.AreEqual("Unity.Entities.Tests.TypeManagerTests+TestComponentSystem", TypeManager.GetSystemName(typeof(TestComponentSystem))); } + + // Warnings will be thrown about redundant attributes since all systems are disabled in this assembly + // [DisableAutoCreation] + class DisabledSystem : SystemBase + { + protected override void OnUpdate() + { + } + } + + class ChildOfDisabledSystem : SystemBase + { + protected override void OnUpdate() + { + } + } + [Test] public void TestGetSystemAttributes() { @@ -371,6 +418,14 @@ public void TestGetSystemAttributes() var updateAfterAttributes = TypeManager.GetSystemAttributes(typeof(TestComponentSystem), typeof(UpdateAfterAttribute)); Assert.AreEqual(1, updateAfterAttributes.Length); Assert.AreEqual(typeof(InitializationSystemGroup), ((UpdateAfterAttribute)updateAfterAttributes[0]).SystemType); + + var disableAttributes = TypeManager.GetSystemAttributes(typeof(DisabledSystem), typeof(DisableAutoCreationAttribute)); + Assert.AreEqual(1, disableAttributes.Length); + + // Annoyingly we cannot test this without adding a new dependent assembly to this test assembly. This is because all systems are disabled (rightfully so) + // for this test assembly via [assembly: DisableAutoCreation] so we cannot check that a child system defined in this assembly is _not_ disabled + //var inheritedDisableAttributes = TypeManager.GetSystemAttributes(typeof(ChildOfDisabledSystem), typeof(DisableAutoCreationAttribute)); + //Assert.AreEqual(0, inheritedDisableAttributes.Length); // we should not inherit DisableAutoCreation attributes } [Test] @@ -476,12 +531,49 @@ public void BuildComponentType_ThrowsArgumentException_WithExpectedFailures(Type ); } + struct UnmanagedSharedComponent : ISharedComponentData + { + int a; + } + + struct ManagedSharedComponent : ISharedComponentData, IEquatable + { + private string a; + + public bool Equals(ManagedSharedComponent other) + { + return a == other.a; + } + + public override bool Equals(object obj) + { + return obj is ManagedSharedComponent other && Equals(other); + } + + public override int GetHashCode() + { + return (a != null ? a.GetHashCode() : 0); + } + } + + [Test] + public void SharedComponent_ManagedFlagCorrectlySet() + { + Assert.IsTrue(TypeManager.IsManagedType(TypeManager.GetTypeIndex())); + Assert.IsTrue(TypeManager.IsSharedComponentType(TypeManager.GetTypeIndex())); + Assert.IsTrue(TypeManager.IsManagedSharedComponent(TypeManager.GetTypeIndex())); + + + Assert.IsFalse(TypeManager.IsManagedType(TypeManager.GetTypeIndex())); + Assert.IsTrue(TypeManager.IsSharedComponentType(TypeManager.GetTypeIndex())); + Assert.IsFalse(TypeManager.IsManagedSharedComponent(TypeManager.GetTypeIndex())); + } + [Test] public void ManagedFieldLayoutWorks() { var t = TypeManager.GetTypeInfo(); var layout = TypeManager.GetFastEqualityTypeInfo(t); - Assert.IsNull(layout.Layouts); Assert.IsNotNull(layout.GetHashFn); Assert.IsNotNull(layout.EqualFn); } @@ -699,7 +791,7 @@ unsafe void EnsureMatch(TypeManager.TypeInfo expected, TypeManager.TypeInfo actu Assert.AreEqual(expected.Type, actual.Type); Assert.AreEqual(expected.IsZeroSized, actual.IsZeroSized); Assert.AreEqual(expected.HasWriteGroups, actual.HasWriteGroups); - Assert.AreEqual(expected.HasEntities, actual.HasEntities); + Assert.AreEqual(expected.EntityOffsetCount, actual.EntityOffsetCount); } foreach (var ti in TypeManager.AllTypes) @@ -748,7 +840,7 @@ unsafe void EnsureMatch(TypeManager.TypeInfo expected, TypeManager.TypeInfo actu public unsafe void TypeInfo_EntityReferenceOffsets_AreSortedAndCorrect() { var typeInfo = TypeManager.GetTypeInfo(); - Assert.IsTrue(typeInfo.HasEntities); + Assert.IsTrue(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex())); Assert.AreEqual(2, typeInfo.EntityOffsetCount); var offsets = TypeManager.GetEntityOffsets(typeInfo); int offsetA = offsets[0].Offset; @@ -772,8 +864,93 @@ public unsafe void TypeInfo_BlobAssetReferenceOffsets_AreSortedAndCorrect() } #endif + #if !UNITY_DISABLE_MANAGED_COMPONENTS -#if !UNITY_DOTSRUNTIME // No UnityEngine in DOTS Runtime + interface IBaseInterface + { + } + class BaseClass + { + } + + sealed class SealedNothing + { + private float value; + } + + sealed class ClassWithBlobAndEntity : BaseClass + { + BlobAssetReference blob; + Entity entity; + } + + + class TestNoRef : IComponentData + { + float3 blah; + SealedNothing nothing; + float[] floatArray; + SealedNothing[] nothingArray; + } + + class TestEmbedInterface : IComponentData + { + private IBaseInterface baseInterface; + } + + class TestTestEmbedBaseClass : IComponentData + { + private BaseClass baseClass; + } + + class TestHasBlobRefAndEntityRef : IComponentData + { + ClassWithBlobAndEntity reference; + } + class TestEntityArray : IComponentData + { + Entity[] entityArray; + } + class TestBlobArray : IComponentData + { + BlobAssetReference[] entityArray; + } + class TestEntityInClass : IComponentData + { + Entity entityRef; + } + + [Test] + public void TestHasEntityReferencedManaged() + { + Assert.IsFalse(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex())); + Assert.IsFalse(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex())); + + Assert.IsTrue(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex())); + Assert.IsTrue(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex())); + Assert.IsTrue(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex())); + Assert.IsTrue(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex())); + Assert.IsTrue(TypeManager.HasEntityReferences(TypeManager.GetTypeIndex())); + } + + [Test] + public void TestHasBlobReferencesManaged() + { + Assert.IsFalse(TypeManager.GetTypeInfo().HasBlobAssetRefs); + Assert.IsFalse(TypeManager.GetTypeInfo().HasBlobAssetRefs); + Assert.IsFalse(TypeManager.GetTypeInfo().HasBlobAssetRefs); + + Assert.IsTrue(TypeManager.GetTypeInfo().HasBlobAssetRefs); + Assert.IsTrue(TypeManager.GetTypeInfo().HasBlobAssetRefs); + Assert.IsTrue(TypeManager.GetTypeInfo().HasBlobAssetRefs); + Assert.IsTrue(TypeManager.GetTypeInfo().HasBlobAssetRefs); + } + +#endif + + +// Tests including Unityengine +#if !UNITY_DISABLE_MANAGED_COMPONENTS && !UNITY_DOTSRUNTIME [DisableAutoTypeRegistration] class ManagedComponentDataNoDefaultConstructor : IComponentData, IEquatable { @@ -825,7 +1002,6 @@ public void TypeManagerGetHashCode_WithNullScriptableObject_DoesNotThrow() }); } -#endif #endif } } diff --git a/Unity.Entities.Tests/Unity.Entities.Tests.asmdef b/Unity.Entities.Tests/Unity.Entities.Tests.asmdef index ae56233a..21d1caa9 100644 --- a/Unity.Entities.Tests/Unity.Entities.Tests.asmdef +++ b/Unity.Entities.Tests/Unity.Entities.Tests.asmdef @@ -21,6 +21,12 @@ "precompiledReferences": [], "autoReferenced": true, "defineConstraints": [], - "versionDefines": [], + "versionDefines": [ + { + "name": "com.unity.roslyn", + "expression": "0.0.0-preview.2", + "define": "ROSLYN_SOURCEGEN_ENABLED" + } + ], "noEngineReferences": false } diff --git a/Unity.Entities.Tests/WorldTests.cs b/Unity.Entities.Tests/WorldTests.cs index c919e4b0..2268afc2 100644 --- a/Unity.Entities.Tests/WorldTests.cs +++ b/Unity.Entities.Tests/WorldTests.cs @@ -591,7 +591,7 @@ public void CreatingUnmanagedSystemWithManagedTypesThrows() Assert.Throws(() => w.AddSystem()); } } - + } [BurstCompile] @@ -602,7 +602,7 @@ private struct SystemDummy public fixed byte Bytes[4097]; } - private World.StateAllocator alloc; + private WorldUnmanagedImpl.StateAllocator alloc; private SystemDummy systems; [SetUp] @@ -617,7 +617,7 @@ public void TearDown() alloc.Dispose(); } - internal static int CountLiveByBits(ref World.StateAllocator alloc) + internal static int CountLiveByBits(ref WorldUnmanagedImpl.StateAllocator alloc) { int live = 0; @@ -629,7 +629,7 @@ internal static int CountLiveByBits(ref World.StateAllocator alloc) return live; } - internal static int CountLiveByPointer(ref World.StateAllocator alloc) + internal static int CountLiveByPointer(ref WorldUnmanagedImpl.StateAllocator alloc) { int live = 0; @@ -644,7 +644,7 @@ internal static int CountLiveByPointer(ref World.StateAllocator alloc) return live; } - internal static void SanityCheck(ref World.StateAllocator alloc) + internal static void SanityCheck(ref WorldUnmanagedImpl.StateAllocator alloc) { } @@ -712,7 +712,7 @@ private static void ThrowResolveFailed() [BurstCompile(CompileSynchronously = true)] static void RunStressTest(IntPtr allocPtr, IntPtr sys_) { - var alloc = (World.StateAllocator*)allocPtr; + var alloc = (WorldUnmanagedImpl.StateAllocator*)allocPtr; var sys = (byte*)sys_; ushort* handles = stackalloc ushort[4096]; ushort* versions = stackalloc ushort[4096]; @@ -768,7 +768,7 @@ static void RunStressTest(IntPtr allocPtr, IntPtr sys_) [Test] public void StressTestFromBurst() { - fixed(World.StateAllocator* p = &alloc) + fixed(WorldUnmanagedImpl.StateAllocator* p = &alloc) fixed(byte* s = systems.Bytes) { BurstCompiler.CompileFunctionPointer(RunStressTest).Invoke((IntPtr)p, (IntPtr)s); @@ -778,7 +778,7 @@ public void StressTestFromBurst() [Test] public void StressTestFromMono() { - fixed(World.StateAllocator* p = &alloc) + fixed(WorldUnmanagedImpl.StateAllocator* p = &alloc) fixed(byte* s = systems.Bytes) { RunStressTest((IntPtr)p, (IntPtr)s); diff --git a/Unity.Entities/AssemblyInfo.cs b/Unity.Entities/AssemblyInfo.cs index b3397915..abfaf293 100644 --- a/Unity.Entities/AssemblyInfo.cs +++ b/Unity.Entities/AssemblyInfo.cs @@ -1,5 +1,6 @@ using System.Runtime.CompilerServices; +[assembly: InternalsVisibleTo("Unity.Entities.CodeGen")] [assembly: InternalsVisibleTo("Unity.Entities.Editor")] [assembly: InternalsVisibleTo("Unity.Entities.Editor.Tests")] [assembly: InternalsVisibleTo("Unity.Entities.Hybrid")] @@ -9,6 +10,7 @@ [assembly: InternalsVisibleTo("Unity.Entities.Hybrid.Tests")] [assembly: InternalsVisibleTo("Unity.Entities.Hybrid.PerformanceTests")] [assembly: InternalsVisibleTo("Unity.Scenes.Editor")] +[assembly: InternalsVisibleTo("Unity.Scenes.Editor.Tests")] [assembly: InternalsVisibleTo("Unity.Scenes")] [assembly: InternalsVisibleTo("Unity.Scenes.Hybrid.Tests")] [assembly: InternalsVisibleTo("Unity.DOTS.Editor")] @@ -25,6 +27,7 @@ [assembly: InternalsVisibleTo("Unity.DataFlowGraph.Tests")] [assembly: InternalsVisibleTo("Unity.Samples.Tests")] [assembly: InternalsVisibleTo("Unity.Transforms.Hybrid")] +[assembly: InternalsVisibleTo("Unity.Burst.Tests")] #if UNITY_ENTITIES_RUNTIME_TOOLING [assembly: InternalsVisibleTo("Unity.Entities.RuntimeTools")] [assembly: InternalsVisibleTo("Unity.Entities.RuntimeTools2")] diff --git a/Unity.Entities/BlobBuilder.cs b/Unity.Entities/BlobBuilder.cs index db29311d..31b31fa2 100644 --- a/Unity.Entities/BlobBuilder.cs +++ b/Unity.Entities/BlobBuilder.cs @@ -78,7 +78,7 @@ public int Length /// A blob asset is an immutable data structure stored in unmanaged memory. /// Blob assets can contain primitive types, strings, structs, arrays, and arrays of arrays. Arrays and structs /// must only contain blittable types. Strings must be of type (or a specialized unmanaged - /// string type such as ). + /// string type such as ). /// /// To use a BlobBuilder object to create a blob asset: /// 1. Declare the structure of the blob asset as a struct. diff --git a/Unity.Entities/Blobs.cs b/Unity.Entities/Blobs.cs index 20f06bbf..9f9eefd6 100644 --- a/Unity.Entities/Blobs.cs +++ b/Unity.Entities/Blobs.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; @@ -231,9 +231,16 @@ internal BlobAssetHeader* Header /// /// 2) Serialization - Before serialization, the field is patched with a serialized hash. The visitor encounters this member /// and writes/reads back the value. The value is then patched back to the new ptr. + /// + /// 3) ManagedObjectClone - When cloning managed objects Unity.Properties does not have access to the internal pointer field. This property is used to copy the bits for this struct. /// // ReSharper disable once UnusedMember.Local - [Properties.CreateProperty] long SerializedHash => m_Align8Union; + [Properties.CreateProperty] + long SerializedHash + { + get => m_Align8Union; + set => m_Align8Union = value; + } #endif [BurstDiscard] @@ -436,6 +443,19 @@ internal static BlobAssetReference Create(BlobAssetReferenceData blobData) return new BlobAssetReference { m_data = blobData }; } + public static bool TryRead(U binaryReader, int version, out BlobAssetReference result) + where U : BinaryReader + { + var storedVersion = binaryReader.ReadInt(); + if (storedVersion != version) + { + result = default; + return false; + } + result = binaryReader.Read(); + return true; + } + #if !UNITY_DOTSRUNTIME /// /// Reads bytes from a fileName, validates the expected serialized version, and deserializes them into a new blob asset. @@ -451,18 +471,9 @@ public static bool TryRead(string path, int version, out BlobAssetReference r result = default; return false; } - using (var binaryReader = new StreamBinaryReader(path, UnsafeUtility.SizeOf() + sizeof(int))) { - var storedVersion = binaryReader.ReadInt(); - if (storedVersion != version) - { - result = default; - return false; - } - - result = binaryReader.Read(); - return true; + return TryRead(binaryReader, version, out result); } } #else @@ -489,6 +500,15 @@ public static bool TryRead(byte* data, int version, out BlobAssetReference re } #endif + public static void Write(U writer, BlobBuilder builder, int verison) + where U : BinaryWriter + { + using (var asset = builder.CreateBlobAssetReference(Allocator.TempJob)) + { + writer.Write(verison); + writer.Write(asset); + } + } #if !NET_DOTS /// /// Writes the blob data to a path with serialized version. @@ -498,13 +518,9 @@ public static bool TryRead(byte* data, int version, out BlobAssetReference re /// Serialized version number of the blob data. public static void Write(BlobBuilder builder, string path, int verison) { - using (var asset = builder.CreateBlobAssetReference(Allocator.TempJob)) + using (var writer = new StreamBinaryWriter(path)) { - using (var writer = new StreamBinaryWriter(path)) - { - writer.Write(verison); - writer.Write(asset); - } + Write(writer, builder, verison); } } #endif @@ -733,13 +749,13 @@ public class MayOnlyLiveInBlobStorageAttribute : Attribute [MayOnlyLiveInBlobStorage] unsafe public struct BlobString { - internal BlobArray Data; + internal BlobArray Data; /// - /// The length of the string in characters. + /// The length of the string in UTF-8 bytes. /// public int Length { - get { return Data.Length; } + get { return math.max(0,Data.Length-1); } // it's null-terminated, but we don't count the trailing null. } /// @@ -748,7 +764,11 @@ public int Length /// The C# string. public new string ToString() { - return new string((char*) Data.GetUnsafePtr(), 0, Data.Length); + var utf16_capacity = math.max(1, Length * 2); + var c = stackalloc char[utf16_capacity]; + int utf16_length = 0; + Unicode.Utf8ToUtf16((byte*)Data.GetUnsafePtr(), Length, c, out utf16_length, utf16_capacity); + return new String(c, 0, utf16_length); } } @@ -766,11 +786,14 @@ public static class BlobStringExtensions /// The string to copy into the blob asset. unsafe public static void AllocateString(ref this BlobBuilder builder, ref BlobString blobStr, string value) { - var res = builder.Allocate(ref blobStr.Data, value.Length); - var len = value.Length; - fixed (char* p = value) + fixed (char* c = value) { - UnsafeUtility.MemCpy(res.GetUnsafePtr(), p, sizeof(char) * len); + var utf8_capacity = value.Length * 2 + 1; + byte* b = (byte*)UnsafeUtility.Malloc(utf8_capacity, 1, Allocator.Temp); + Unicode.Utf16ToUtf8(c, value.Length, b, out int utf8_length, utf8_capacity); + b[utf8_length] = 0; + var res = builder.Allocate(ref blobStr.Data, utf8_length + 1); + UnsafeUtility.MemCpy(res.GetUnsafePtr(), b, utf8_length + 1); } } } @@ -829,3 +852,39 @@ unsafe public static BlobAssetReference Read(this BinaryReader binaryReade } } } + +namespace Unity.Entities.LowLevel.Unsafe +{ + /// + /// An untyped reference to a blob assets. UnsafeUntypedBlobAssetReference can be cast to specific typed BlobAssetReferences. + /// + [ChunkSerializable] + public struct UnsafeUntypedBlobAssetReference : IDisposable, IEquatable + { + internal BlobAssetReferenceData m_data; + + public static UnsafeUntypedBlobAssetReference Create (BlobAssetReference blob) where T : struct + { + UnsafeUntypedBlobAssetReference value; + value.m_data = blob.m_data; + return value; + } + + public BlobAssetReference Reinterpret() where T : struct + { + BlobAssetReference value; + value.m_data = m_data; + return value; + } + + public void Dispose() + { + m_data.Dispose(); + } + + public bool Equals(UnsafeUntypedBlobAssetReference other) + { + return m_data.Equals(other.m_data); + } + } +} diff --git a/Unity.Entities/BlockAllocator.cs b/Unity.Entities/BlockAllocator.cs index efd5d9c1..cb3154e2 100644 --- a/Unity.Entities/BlockAllocator.cs +++ b/Unity.Entities/BlockAllocator.cs @@ -1,4 +1,4 @@ -#if !UNITY_WEBGL && (UNITY_2020_1_OR_NEWER || UNITY_DOTSRUNTIME) +#if !UNITY_WEBGL #define USE_VIRTUAL_MEMORY #endif using System; diff --git a/Unity.Entities/ChunkDataUtility.cs b/Unity.Entities/ChunkDataUtility.cs index b8231542..42502bef 100644 --- a/Unity.Entities/ChunkDataUtility.cs +++ b/Unity.Entities/ChunkDataUtility.cs @@ -385,49 +385,51 @@ public static void Convert(Chunk* srcChunk, int srcIndex, Chunk* dstChunk, int d public static void MemsetUnusedChunkData(Chunk* chunk, byte value) { var arch = chunk->Archetype; - var bufferSize = Chunk.GetChunkBufferSize(); var buffer = chunk->Buffer; var count = chunk->Count; - for (int i = 0; i < arch->TypesCount - 1; ++i) + // Clear unused buffer data + for (int i = 0; i < arch->TypesCount; ++i) { - var index = arch->TypeMemoryOrder[i]; + var componentDataType = &arch->Types[i]; + var componentSize = arch->SizeOfs[i]; - var nextIndex = arch->TypeMemoryOrder[i + 1]; - var componentSize = arch->SizeOfs[index]; - var startOffset = arch->Offsets[index] + count * componentSize; - var endOffset = arch->Offsets[nextIndex]; - var componentDataType = &arch->Types[index]; - - // Start Offset needs to be fixed if we have a Dynamic Buffer if (componentDataType->IsBuffer) { var elementSize = TypeManager.GetTypeInfo(componentDataType->TypeIndex).ElementSize; - var bufferCapacity = arch->BufferCapacities[index]; + var bufferCapacity = arch->BufferCapacities[i]; for (int chunkI = 0; chunkI < count; chunkI++) { - var bufferHeader = (BufferHeader*)(buffer + arch->Offsets[index] + (chunkI * componentSize)); + var bufferHeader = (BufferHeader*)(buffer + arch->Offsets[i] + (chunkI * componentSize)); + BufferHeader.MemsetUnusedMemory(bufferHeader, bufferCapacity, elementSize, value); + } + } + } - // If bufferHeader->Pointer is not null it means with rely on a dedicated buffer instead of the internal one (that follows the header) to store the elements - // in this case we wipe everything after the header. Otherwise we wipe after the used elements. - var elementCountToClean = bufferHeader->Pointer != null ? bufferCapacity : (bufferHeader->Capacity - bufferHeader->Length); - var firstElementToClean = bufferHeader->Pointer != null ? 0 : bufferHeader->Length; + // Clear chunk data stream padding + for (int i = 0; i < arch->TypesCount - 1; ++i) + { + var index = arch->TypeMemoryOrder[i]; - byte* internalBuffer = (byte*)(bufferHeader + 1); + var nextIndex = arch->TypeMemoryOrder[i + 1]; + var componentSize = arch->SizeOfs[index]; + var startOffset = arch->Offsets[index] + count * componentSize; + var endOffset = arch->Offsets[nextIndex]; - UnsafeUtility.MemSet(internalBuffer + (firstElementToClean * elementSize), value, elementCountToClean * elementSize); - } - } + Assert.AreNotEqual(-1, startOffset); + Assert.AreNotEqual(-1, endOffset); + Assert.IsTrue(componentSize >= 0); UnsafeUtility.MemSet(buffer + startOffset, value, endOffset - startOffset); } var lastIndex = arch->TypeMemoryOrder[arch->TypesCount - 1]; var lastStartOffset = arch->Offsets[lastIndex] + count * arch->SizeOfs[lastIndex]; + var bufferSize = Chunk.GetChunkBufferSize(); UnsafeUtility.MemSet(buffer + lastStartOffset, value, bufferSize - lastStartOffset); - // 0 the sequence number and the chunk header padding zone - UnsafeUtility.MemClear(40 + (byte*)chunk, 24); // End of chunk header at 40, we clear the header padding (24) and the Buffer value which is the very first data after the header + // clear the chunk header padding zone + UnsafeUtility.MemClear(Chunk.kSerializedHeaderSize + (byte*)chunk, Chunk.kBufferOffset - Chunk.kSerializedHeaderSize); } public static bool AreLayoutCompatible(Archetype* a, Archetype* b) @@ -705,11 +707,11 @@ public static void ChangeArchetypeInPlace(Chunk* srcChunk, Archetype* dstArchety srcArchetype->RemoveFromChunkList(srcChunk, ref entityComponentStore->m_ChunkListChangesTracker); srcChunk->ListIndex = chunkIndexInDstArchetype; + entityComponentStore->SetArchetype(srcChunk, dstArchetype); + if (hasEmptySlots) dstArchetype->EmptySlotTrackingAddChunk(srcChunk); - entityComponentStore->SetArchetype(srcChunk, dstArchetype); - srcArchetype->EntityCount -= count; dstArchetype->EntityCount += count; @@ -1059,7 +1061,7 @@ public static void ClearMissingReferences(Chunk* chunk) continue; } - var typeInfo = entityComponentStore->GetTypeInfo(componentTypeInArchetype.TypeIndex); + ref readonly var typeInfo = ref entityComponentStore->GetTypeInfo(componentTypeInArchetype.TypeIndex); var typeInChunkPtr = GetChunkBuffer(chunk) + archetype->Offsets[typeIndexInArchetype]; var typeSizeOf = archetype->SizeOfs[typeIndexInArchetype]; @@ -1092,7 +1094,7 @@ public static void ClearMissingReferences(Chunk* chunk) } } - static bool ClearEntityReferences(EntityComponentStore* entityComponentStore, TypeManager.TypeInfo typeInfo, byte* address, int elementCount) + static bool ClearEntityReferences(EntityComponentStore* entityComponentStore, in TypeManager.TypeInfo typeInfo, byte* address, int elementCount) { var changed = false; diff --git a/Unity.Entities/CodeGeneratedJobForEach/LambdaJobDescription.cs b/Unity.Entities/CodeGeneratedJobForEach/LambdaJobDescription.cs index fdf0c2d7..f2acde2b 100644 --- a/Unity.Entities/CodeGeneratedJobForEach/LambdaJobDescription.cs +++ b/Unity.Entities/CodeGeneratedJobForEach/LambdaJobDescription.cs @@ -1,6 +1,7 @@ using System; using System.Runtime.InteropServices; using Unity.Burst; +using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using Unity.Entities.CodeGeneratedJobForEach; using Unity.Jobs; @@ -119,10 +120,6 @@ internal class AllowMultipleInvocationsAttribute : Attribute {} [AllowMultipleInvocations] public static TDescription WithReadOnly(this TDescription description, [AllowDynamicValue] TCapturedVariableType capturedVariable) where TDescription : ILambdaJobDescription => description; - [Obsolete("Use WithDisposeOnCompletion(capturedVariable) instead. (RemovedAfter 2020-20-08)")] - [AllowMultipleInvocations] - public static TDescription WithDeallocateOnJobCompletion(this TDescription description, [AllowDynamicValue] TCapturedVariableType capturedVariable) where TDescription : ILambdaJobDescription => description; - [AllowMultipleInvocations] public static TDescription WithDisposeOnCompletion(this TDescription description, [AllowDynamicValue] TCapturedVariableType capturedVariable) where TDescription : ILambdaJobDescription => description; [AllowMultipleInvocations] @@ -214,12 +211,15 @@ public static TDescription SetSharedComponentFilterOnQuery(this public static class InternalCompilerInterface { + // Todo: rename these to reference `IJobEntityBatch` instead of `IJobChunk` once we have removed non-source generated Entities.ForEach public static JobRunWithoutJobSystemDelegate BurstCompile(JobRunWithoutJobSystemDelegate d) => BurstCompiler.CompileFunctionPointer(d).Invoke; public static JobChunkRunWithoutJobSystemDelegate BurstCompile(JobChunkRunWithoutJobSystemDelegate d) => BurstCompiler.CompileFunctionPointer(d).Invoke; - + public static JobEntityBatchRunWithoutJobSystemDelegateLimitEntities BurstCompile(JobEntityBatchRunWithoutJobSystemDelegateLimitEntities d) => BurstCompiler.CompileFunctionPointer(d).Invoke; public unsafe delegate void JobChunkRunWithoutJobSystemDelegate(ArchetypeChunkIterator* iterator, void* job); public unsafe delegate void JobRunWithoutJobSystemDelegate(void* job); + public unsafe delegate void JobEntityBatchRunWithoutJobSystemDelegate(ArchetypeChunkIterator* iterator, void* job); + public unsafe delegate void JobEntityBatchRunWithoutJobSystemDelegateLimitEntities(EntityQuery* query, Entity* limitToEntityArray, int limitToEntityArrayLength, void* job); #if UNITY_DOTSRUNTIME && ENABLE_UNITY_COLLECTIONS_CHECKS && !UNITY_DOTSRUNTIME_IL2CPP // DOTS Runtime always compiles against the .Net Framework which will re-order structs if they contain non-blittable data (unlike mono which @@ -283,16 +283,22 @@ public static unsafe void RunIJob(ref T jobData, JobRunWithoutJobSystemDelega var marshalToBurstFnPtr = JobMarshalFnLookup.GetMarshalToBurstFn(); UnsafeUtility.EnterTempScope(); - UnsafeUtility.CallFunctionPtr_pp(marshalToBurstFnPtr.ToPointer(), dst, src); + try + { + UnsafeUtility.CallFunctionPtr_pp(marshalToBurstFnPtr.ToPointer(), dst, src); - // In the case of JobStruct we know the jobwrapper doesn't add - // anything to the jobData so just pass it along, no offset required unlike JobChunk - functionPointer(alignedUnmanagedJobData); + // In the case of JobStruct we know the jobwrapper doesn't add + // anything to the jobData so just pass it along, no offset required unlike JobChunk + functionPointer(alignedUnmanagedJobData); - // Since Run can capture locals for write back, we must write back the marshalled jobData after the job executes - var marshalFromBurstFnPtr = JobMarshalFnLookup.GetMarshalFromBurstFn(); - UnsafeUtility.CallFunctionPtr_pp(marshalFromBurstFnPtr.ToPointer(), src, dst); - UnsafeUtility.ExitTempScope(); + // Since Run can capture locals for write back, we must write back the marshalled jobData after the job executes + var marshalFromBurstFnPtr = JobMarshalFnLookup.GetMarshalFromBurstFn(); + UnsafeUtility.CallFunctionPtr_pp(marshalFromBurstFnPtr.ToPointer(), src, dst); + } + finally + { + UnsafeUtility.ExitTempScope(); + } jobData = jobStructData.JobData; } @@ -329,23 +335,29 @@ public static unsafe void RunJobChunk(ref T jobData, EntityQuery query, JobCh var marshalToBurstFnPtr = JobMarshalFnLookup.GetMarshalToBurstFn(); UnsafeUtility.EnterTempScope(); - UnsafeUtility.CallFunctionPtr_pp(marshalToBurstFnPtr.ToPointer(), dst, src); - - // Since we are running inline, normally the outer job scheduling code would - // reference jobWrapper.Data however we can't do that since if we are in this code it means - // we are dealing with a job/jobwrapper that is burst compiled and is non-blittable. Thus any - // type-safe offset we calculate here will be based on the managed data layout which is not useful. - // Instead we can at least know that for a sequential layout (which is what we know we must be using - // since we are burst compiled) our JobChunkData contains a safety field as its first member. Skipping over this will - // provide the necessary offset to jobChunkData.Data - var DataOffset = UnsafeUtility.SizeOf(); - Assertions.Assert.AreEqual(jobChunkWrapper.safety.GetType(), typeof(JobChunkExtensions.EntitySafetyHandle)); - functionPointer(&myIterator, alignedUnmanagedJobData + DataOffset); - - // Since Run can capture locals for write back, we must write back the marshalled jobData after the job executes - var marshalFromBurstFnPtr = JobMarshalFnLookup.GetMarshalFromBurstFn(); - UnsafeUtility.CallFunctionPtr_pp(marshalFromBurstFnPtr.ToPointer(), src, dst); - UnsafeUtility.ExitTempScope(); + try + { + UnsafeUtility.CallFunctionPtr_pp(marshalToBurstFnPtr.ToPointer(), dst, src); + + // Since we are running inline, normally the outer job scheduling code would + // reference jobWrapper.Data however we can't do that since if we are in this code it means + // we are dealing with a job/jobwrapper that is burst compiled and is non-blittable. Thus any + // type-safe offset we calculate here will be based on the managed data layout which is not useful. + // Instead we can at least know that for a sequential layout (which is what we know we must be using + // since we are burst compiled) our JobChunkData contains a safety field as its first member. Skipping over this will + // provide the necessary offset to jobChunkData.Data + var DataOffset = UnsafeUtility.SizeOf(); + Assertions.Assert.AreEqual(jobChunkWrapper.safety.GetType(), typeof(JobChunkExtensions.EntitySafetyHandle)); + functionPointer(&myIterator, alignedUnmanagedJobData + DataOffset); + + // Since Run can capture locals for write back, we must write back the marshalled jobData after the job executes + var marshalFromBurstFnPtr = JobMarshalFnLookup.GetMarshalFromBurstFn(); + UnsafeUtility.CallFunctionPtr_pp(marshalFromBurstFnPtr.ToPointer(), src, dst); + } + finally + { + UnsafeUtility.ExitTempScope(); + } jobData = jobChunkWrapper.JobData; } @@ -386,6 +398,81 @@ public static unsafe void RunJobChunk(ref T jobData, EntityQuery query, JobCh #endif } +#if ROSLYN_SOURCEGEN_ENABLED + + // Unsafe methods used to provide access for source-generated code. + // Do not use these methods outside of source-generated code. + // Unsafe methods to run jobs (replacing ILPP invoked methods) + public static unsafe void UnsafeRunIJob(void* jobPtr, JobRunWithoutJobSystemDelegate functionPointer) + { + functionPointer(jobPtr); + } + + public static unsafe void UnsafeRunJobEntityBatch(void* jobPtr, EntityQuery query, JobChunkRunWithoutJobSystemDelegate functionPointer) + { + var myIterator = query.GetArchetypeChunkIterator(); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + var access = query._GetImpl()->_Access; + try + { + access->DependencyManager->IsInForEachDisallowStructuralChange++; + functionPointer(&myIterator, jobPtr); + } + finally + { + access->DependencyManager->IsInForEachDisallowStructuralChange--; + } +#else + functionPointer(&myIterator, jobPtr); +#endif + } + + public static unsafe void UnsafeRunJobEntityBatch(void* jobPtr, EntityQuery query, NativeArray limitToEntityArray, JobEntityBatchRunWithoutJobSystemDelegateLimitEntities functionPointer) + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + var access = query._GetImpl()->_Access; + try + { + access->DependencyManager->IsInForEachDisallowStructuralChange++; + functionPointer(&query, (Entity*)limitToEntityArray.GetUnsafeReadOnlyPtr(), limitToEntityArray.Length, jobPtr); + } + finally + { + access->DependencyManager->IsInForEachDisallowStructuralChange--; + } +#else + functionPointer(&myIterator, jobPtr); +#endif + } + + + // Unsafe methods used to provide access for StructuralChanges + public static unsafe T GetComponentData(EntityManager manager, Entity entity, int typeIndex, out T originalComponent) + where T : struct, IComponentData + { + var access = manager.GetCheckedEntityDataAccess(); + var ecs = access->EntityComponentStore; + UnsafeUtility.CopyPtrToStructure(ecs->GetComponentDataWithTypeRO(entity, typeIndex), out originalComponent); + return originalComponent; + } + public static unsafe void WriteComponentData(EntityManager manager, Entity entity, int typeIndex, ref T lambdaComponent, ref T originalComponent) + where T : struct, IComponentData + { + var access = manager.GetCheckedEntityDataAccess(); + var ecs = access->EntityComponentStore; + // MemCmp check is necessary to ensure we only write-back the value if we changed it in the lambda (or a called function) + if (UnsafeUtility.MemCmp(UnsafeUtility.AddressOf(ref lambdaComponent), UnsafeUtility.AddressOf(ref originalComponent), UnsafeUtility.SizeOf()) != 0 && + ecs->HasComponent(entity, typeIndex)) + { + UnsafeUtility.CopyStructureToPtr(ref lambdaComponent, ecs->GetComponentDataWithTypeRW(entity, typeIndex, ecs->GlobalSystemVersion)); + } + } + public static void UnsafeCreateGatherEntitiesResult(ref EntityQuery query, out EntityQuery.GatherEntitiesResult result) => + query.GatherEntitiesToArray(out result); + public static void UnsafeReleaseGatheredEntities(ref EntityQuery query, ref EntityQuery.GatherEntitiesResult result) => + query.ReleaseGatheredEntities(ref result); +#endif // #if ROSLYN_SOURCEGEN_ENABLED #endif } } diff --git a/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.gen.cs b/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.gen.cs index 5d056500..5fb855ae 100644 --- a/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.gen.cs +++ b/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.gen.cs @@ -32,6 +32,9 @@ public static class LambdaJobQueryConstructionMethods public static ForEachLambdaJobDescription WithEntityQueryOptions(this ForEachLambdaJobDescription description, EntityQueryOptions options) => description; public static ForEachLambdaJobDescription WithSharedComponentFilter(this ForEachLambdaJobDescription description, [AllowDynamicValue] T sharedComponent) where T : struct, ISharedComponentData => description; +#if ROSLYN_SOURCEGEN_ENABLED + public static ForEachLambdaJobDescription WithFilter(this ForEachLambdaJobDescription description, [AllowDynamicValue]Unity.Collections.NativeArray entities) => description; +#endif /// /// You can use this method to store the EntityQuery generated for this Entities.ForEach invocation in a variable that you can then reuse for other purposes, @@ -69,6 +72,9 @@ public static class LambdaJobQueryConstructionMethods public static LambdaJobChunkDescription WithEntityQueryOptions(this LambdaJobChunkDescription description, EntityQueryOptions options) => description; public static LambdaJobChunkDescription WithSharedComponentFilter(this LambdaJobChunkDescription description, [AllowDynamicValue] T sharedComponent) where T : struct, ISharedComponentData => description; public static LambdaJobChunkDescription WithStoreEntityQueryInField(this LambdaJobChunkDescription description, [AllowDynamicValue] ref EntityQuery query) => description; +#if ROSLYN_SOURCEGEN_ENABLED + public static LambdaJobChunkDescription WithFilter(this LambdaJobChunkDescription description, [AllowDynamicValue]Unity.Collections.NativeArray entities) => description; +#endif //Start of query creating functions for ForEachLambdaJobDescriptionJCS. Unfortunately there's no C# way to use generics to make these work for multiple jobdescription types, so we're lowteching it with t4 here. [AllowMultipleInvocationsAttribute] @@ -97,5 +103,9 @@ public static class LambdaJobQueryConstructionMethods public static ForEachLambdaJobDescriptionJCS WithEntityQueryOptions(this ForEachLambdaJobDescriptionJCS description, EntityQueryOptions options) => description; public static ForEachLambdaJobDescriptionJCS WithSharedComponentFilter(this ForEachLambdaJobDescriptionJCS description, [AllowDynamicValue] T sharedComponent) where T : struct, ISharedComponentData => description; public static ForEachLambdaJobDescriptionJCS WithStoreEntityQueryInField(this ForEachLambdaJobDescriptionJCS description, [AllowDynamicValue] ref EntityQuery query) => description; +#if ROSLYN_SOURCEGEN_ENABLED + public static ForEachLambdaJobDescriptionJCS WithFilter(this ForEachLambdaJobDescriptionJCS description, [AllowDynamicValue]Unity.Collections.NativeArray entities) => description; +#endif + } } diff --git a/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.tt b/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.tt index 91655629..b4f3e19e 100644 --- a/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.tt +++ b/Unity.Entities/CodeGeneratedJobForEach/LambdaJobQueryConstructionMethods.tt @@ -43,8 +43,12 @@ foreach(var type in types) public static <#=type#> WithChangeFilter(this <#=type#> description) => description; public static <#=type#> WithEntityQueryOptions(this <#=type#> description, EntityQueryOptions options) => description; + //TODO: Deprecate and rename to WithFilter for consistency public static <#=type#> WithSharedComponentFilter(this <#=type#> description, [AllowDynamicValue] T sharedComponent) where T : struct, ISharedComponentData => description; public static <#=type#> WithStoreEntityQueryInField(this <#=type#> description, [AllowDynamicValue] ref EntityQuery query) => description; +#if ROSLYN_SOURCEGEN_ENABLED + public static <#=type#> WithFilter(this <#=type#> description, [AllowDynamicValue] NativeArray entities) => description; +#dndif <# } diff --git a/Unity.Entities/CodeGeneratedJobForEach/OnUpdateExecutionMethods.cs b/Unity.Entities/CodeGeneratedJobForEach/OnUpdateExecutionMethods.cs new file mode 100644 index 00000000..44f9592b --- /dev/null +++ b/Unity.Entities/CodeGeneratedJobForEach/OnUpdateExecutionMethods.cs @@ -0,0 +1,21 @@ +// The OnUpdateExecutionMethods class is meant for scheduling a new IJobEntity interface that is coming soon. + +#if ROSLYN_SOURCEGEN_ENABLED +using Unity.Entities.CodeGeneratedJobForEach; + +namespace Unity.Entities +{ + public static class OnUpdateExecutionMethods + { + public static EntitiesOnUpdateMethod OnUpdate( + this ForEachLambdaJobDescription _, T iJobEntity) where T : struct, IJobEntity + { + return new EntitiesOnUpdateMethod(); + } + + public struct EntitiesOnUpdateMethod : ILambdaJobExecutionDescription + { + } + } +} +#endif diff --git a/Unity.Entities/CodeGeneratedJobForEach/OnUpdateExecutionMethods.cs.meta b/Unity.Entities/CodeGeneratedJobForEach/OnUpdateExecutionMethods.cs.meta new file mode 100644 index 00000000..da042806 --- /dev/null +++ b/Unity.Entities/CodeGeneratedJobForEach/OnUpdateExecutionMethods.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4532a2d12d01418b842f8777b8610082 +timeCreated: 1600755446 \ No newline at end of file diff --git a/Unity.Entities/ComponentDependencyManager.cs b/Unity.Entities/ComponentDependencyManager.cs index 0c913920..0ee63542 100644 --- a/Unity.Entities/ComponentDependencyManager.cs +++ b/Unity.Entities/ComponentDependencyManager.cs @@ -52,6 +52,7 @@ struct DependencyHandle bool _IsInTransaction; private ProfilerMarker m_Marker; + private WorldUnmanaged m_World; #if ENABLE_UNITY_COLLECTIONS_CHECKS public ComponentSafetyHandles Safety; @@ -83,8 +84,9 @@ void ClearDependencies() m_DependencyHandlesCount = 0; } - public void OnCreate() + public void OnCreate(WorldUnmanaged world) { + m_World = world; m_TypeArrayIndices = (ushort*)Memory.Unmanaged.Allocate(sizeof(ushort) * kMaxTypes, 16, Allocator.Persistent); UnsafeUtility.MemSet(m_TypeArrayIndices, 0xFF, sizeof(ushort) * kMaxTypes); @@ -120,6 +122,14 @@ private static void AssertCompleteSyncPoint() public void CompleteAllJobsAndInvalidateArrays() { + var executingSystem = m_World.ExecutingSystem; + if (executingSystem != default) + { + var systemState = m_World.ResolveSystemState(executingSystem); + if (systemState != null) + systemState->m_JobHandle.Complete(); + } + if (m_DependencyHandlesCount != 0) { AssertCompleteSyncPoint(); @@ -385,11 +395,13 @@ unsafe partial struct ComponentDependencyManager public ComponentSafetyHandles Safety; #endif public int IsInForEachDisallowStructuralChange; + private WorldUnmanaged m_World; - public void OnCreate() + public void OnCreate(WorldUnmanaged world) { m_Dependency = default; _IsInTransaction = false; + m_World = world; IsInForEachDisallowStructuralChange = 0; m_ExclusiveTransactionDependency = default; @@ -400,6 +412,13 @@ public void OnCreate() public void CompleteAllJobsAndInvalidateArrays() { + var executingSystem = m_World.ExecutingSystem; + if (executingSystem != default) + { + var systemState = m_World.ResolveSystemState(executingSystem); + if (systemState != null) + systemState->m_JobHandle.Complete(); + } m_Dependency.Complete(); #if ENABLE_UNITY_COLLECTIONS_CHECKS diff --git a/Unity.Entities/ComponentSafetyHandles.cs b/Unity.Entities/ComponentSafetyHandles.cs index ee8f2066..f59e66b4 100644 --- a/Unity.Entities/ComponentSafetyHandles.cs +++ b/Unity.Entities/ComponentSafetyHandles.cs @@ -19,7 +19,6 @@ unsafe struct ComponentSafetyHandles ushort* m_TypeArrayIndices; const ushort NullTypeIndex = 0xFFFF; -#if UNITY_2020_1_OR_NEWER // Per-component-type Static safety IDs are shared across all Worlds. static int* m_StaticSafetyIdsForComponentDataFromEntity; static int* m_StaticSafetyIdsForArchetypeChunkArrays; @@ -61,13 +60,13 @@ void CreateStaticSafetyIdsForType(int typeIndex) { m_StaticSafetyIdsForComponentDataFromEntity[typeIndexWithoutFlags] = CreateStaticSafetyId( - "BufferFromEntity<" + TypeManager.GetTypeInfo(typeIndex).Debug.TypeName + ">"); + "BufferFromEntity<" + TypeManager.GetTypeInfo(typeIndex).DebugTypeName + ">"); } else { m_StaticSafetyIdsForComponentDataFromEntity[typeIndexWithoutFlags] = CreateStaticSafetyId( - "ComponentDataFromEntity<" + TypeManager.GetTypeInfo(typeIndex).Debug.TypeName + ">"); + "ComponentDataFromEntity<" + TypeManager.GetTypeInfo(typeIndex).DebugTypeName + ">"); } } if (m_StaticSafetyIdsForArchetypeChunkArrays[typeIndexWithoutFlags] == 0) @@ -76,19 +75,19 @@ void CreateStaticSafetyIdsForType(int typeIndex) { m_StaticSafetyIdsForArchetypeChunkArrays[typeIndexWithoutFlags] = CreateStaticSafetyId( - "BufferTypeHandle<" + TypeManager.GetTypeInfo(typeIndex).Debug.TypeName + ">"); + "BufferTypeHandle<" + TypeManager.GetTypeInfo(typeIndex).DebugTypeName + ">"); } - else if (TypeManager.IsSharedComponent(typeIndex)) + else if (TypeManager.IsSharedComponentType(typeIndex)) { m_StaticSafetyIdsForArchetypeChunkArrays[typeIndexWithoutFlags] = CreateStaticSafetyId( - "SharedComponentTypeHandle<" + TypeManager.GetTypeInfo(typeIndex).Debug.TypeName + ">"); + "SharedComponentTypeHandle<" + TypeManager.GetTypeInfo(typeIndex).DebugTypeName + ">"); } else { m_StaticSafetyIdsForArchetypeChunkArrays[typeIndexWithoutFlags] = CreateStaticSafetyId( - "ComponentTypeHandle<" + TypeManager.GetTypeInfo(typeIndex).Debug.TypeName + ">"); + "ComponentTypeHandle<" + TypeManager.GetTypeInfo(typeIndex).DebugTypeName + ">"); } } } @@ -117,7 +116,6 @@ private void SetStaticSafetyIdForHandle_FromEntity(ref AtomicSafetyHandle handle AtomicSafetyHandle.SetStaticSafetyId(ref handle, staticSafetyId); } -#endif ushort GetTypeArrayIndex(int typeIndex) { var typeIndexWithoutFlags = typeIndex & TypeManager.ClearFlagsMask; @@ -134,13 +132,11 @@ ushort GetTypeArrayIndex(int typeIndex) m_ComponentSafetyHandles[arrayIndex].BufferHandle = AtomicSafetyHandle.Create(); AtomicSafetyHandle.SetBumpSecondaryVersionOnScheduleWrite(m_ComponentSafetyHandles[arrayIndex].BufferHandle, true); -#if UNITY_2020_1_OR_NEWER // Create static safety IDs for this type if they don't already exist. CreateStaticSafetyIdsForType(typeIndex); // Set default static safety IDs for handles SetStaticSafetyIdForHandle_ArchetypeChunk(ref m_ComponentSafetyHandles[arrayIndex].SafetyHandle, typeIndex, false); SetStaticSafetyIdForHandle_ArchetypeChunk(ref m_ComponentSafetyHandles[arrayIndex].BufferHandle, typeIndex, false); -#endif return arrayIndex; } @@ -163,7 +159,6 @@ public void OnCreate() m_ComponentSafetyHandlesCount = 0; m_InvalidateArraysMarker = new ProfilerMarker("InvalidateArrays"); -#if UNITY_2020_1_OR_NEWER if (m_StaticSafetyIdsForComponentDataFromEntity == null) { m_StaticSafetyIdsForComponentDataFromEntity = @@ -188,7 +183,6 @@ public void OnCreate() m_CustomDeallocatedErrorMessageBytes); SetCustomErrorMessage(m_StaticSafetyIdForEntityTypeHandle, AtomicSafetyErrorType.DeallocatedFromJob, m_CustomDeallocatedFromJobErrorMessageBytes); -#endif } public AtomicSafetyHandle ExclusiveTransactionSafety; @@ -279,10 +273,8 @@ public AtomicSafetyHandle GetEntityManagerSafetyHandle() public AtomicSafetyHandle GetSafetyHandleForComponentDataFromEntity(int type, bool isReadOnly) { var handle = GetSafetyHandle(type, isReadOnly); -#if UNITY_2020_1_OR_NEWER // Override the handle's default static safety ID SetStaticSafetyIdForHandle_FromEntity(ref handle, type); -#endif return handle; } @@ -290,10 +282,8 @@ public AtomicSafetyHandle GetBufferHandleForBufferFromEntity(int type) { Assert.IsTrue(TypeManager.IsBuffer(type)); var handle = GetBufferSafetyHandle(type); -#if UNITY_2020_1_OR_NEWER // Override the handle's default static safety ID SetStaticSafetyIdForHandle_FromEntity(ref handle, type); -#endif return handle; } @@ -307,10 +297,8 @@ public AtomicSafetyHandle GetSafetyHandleForComponentTypeHandle(int type, bool i public AtomicSafetyHandle GetSafetyHandleForDynamicComponentTypeHandle(int type, bool isReadOnly) { var handle = GetSafetyHandle(type, isReadOnly); -#if UNITY_2020_1_OR_NEWER // We need to override the handle's default static safety ID to use the DynamicComponentTypeHandle version. SetStaticSafetyIdForHandle_ArchetypeChunk(ref handle, type, true); -#endif return handle; } @@ -331,7 +319,7 @@ public AtomicSafetyHandle GetBufferHandleForBufferTypeHandle(int type) public AtomicSafetyHandle GetSafetyHandleForSharedComponentTypeHandle(int type) { - Assert.IsTrue(TypeManager.IsSharedComponent(type)); + Assert.IsTrue(TypeManager.IsSharedComponentType(type)); var handle = GetSafetyHandle(type, false); // safety handles are configured with the static safety ID for ArchetypeChunk*Type by default, // so no further static safety ID setup is necessary in this path. diff --git a/Unity.Entities/ComponentSystem.cs b/Unity.Entities/ComponentSystem.cs index 123e647c..8340b403 100644 --- a/Unity.Entities/ComponentSystem.cs +++ b/Unity.Entities/ComponentSystem.cs @@ -97,16 +97,17 @@ public sealed override void Update() if (Enabled && ShouldRunSystem()) { - if (!state->m_PreviouslyEnabled) + if (!state->PreviouslyEnabled) { - state->m_PreviouslyEnabled = true; + state->PreviouslyEnabled = true; OnStartRunning(); } BeforeOnUpdate(); - var oldExecutingSystem = ms_ExecutingSystem; - ms_ExecutingSystem = this; + var world = World.Unmanaged; + var oldExecutingSystem = world.ExecutingSystem; + world.ExecutingSystem = state->m_Handle; try { @@ -114,13 +115,13 @@ public sealed override void Update() } finally { - ms_ExecutingSystem = oldExecutingSystem; + world.ExecutingSystem = oldExecutingSystem; AfterOnUpdate(); } } - else if (state->m_PreviouslyEnabled) + else if (state->PreviouslyEnabled) { - state->m_PreviouslyEnabled = false; + state->PreviouslyEnabled = false; OnStopRunningInternal(); } } diff --git a/Unity.Entities/ComponentSystemBase.cs b/Unity.Entities/ComponentSystemBase.cs index 4c1cd10b..55906d53 100644 --- a/Unity.Entities/ComponentSystemBase.cs +++ b/Unity.Entities/ComponentSystemBase.cs @@ -38,7 +38,7 @@ public abstract unsafe partial class ComponentSystemBase /// The Enabled property is intended for debugging so that you can easily turn on and off systems /// from the Entity Debugger window. A system with Enabled set to false will not update, even if its /// function returns true. - public bool Enabled { get => CheckedState()->m_Enabled; set => CheckedState()->m_Enabled = value; } + public bool Enabled { get => CheckedState()->Enabled; set => CheckedState()->Enabled = value; } /// /// The query objects cached by this system. @@ -111,11 +111,9 @@ internal static EntityQuery[] UnsafeListToRefArray(ref UnsafeList o // ============ - internal void CreateInstance(World world) + internal void CreateInstance(World world, SystemState* statePtr) { - m_StatePtr = SystemState.Allocate(); - m_StatePtr->InitManaged(world, GetType()); - + m_StatePtr = statePtr; OnBeforeCreateInternal(world); try { @@ -211,10 +209,6 @@ internal void OnDestroy_Internal() // =================== - internal static ComponentSystemBase ms_ExecutingSystem; - - public static Type ExecutingSystemType => ms_ExecutingSystem?.GetType(); - internal ComponentSystemBase GetSystemFromSystemID(World world, int systemID) { foreach (var system in world.Systems) @@ -269,9 +263,7 @@ internal virtual void OnBeforeCreateInternal(World world) internal void OnAfterDestroyInternal() { var state = CheckedState(); - - state->Dispose(); - SystemState.Deallocate(state); + World.Unmanaged.DestroyManagedSystem(state); m_StatePtr = null; } @@ -293,9 +285,9 @@ internal virtual void OnBeforeDestroyInternal() { var state = CheckedState(); - if (state->m_PreviouslyEnabled) + if (state->PreviouslyEnabled) { - state->m_PreviouslyEnabled = false; + state->PreviouslyEnabled = false; OnStopRunning(); } } @@ -374,7 +366,18 @@ public BufferTypeHandle GetBufferTypeHandle(bool isReadOnly = false) public SharedComponentTypeHandle GetSharedComponentTypeHandle() where T : struct, ISharedComponentData { - return EntityManager.GetSharedComponentTypeHandle(); + return CheckedState()->GetSharedComponentTypeHandle(); + } + + /// + /// Gets the run-time type information required to access a shared component data in a chunk. + /// + /// The component type to get access to. + /// An object representing the type information required to safely access shared component data stored in a + /// chunk. + public DynamicSharedComponentTypeHandle GetDynamicSharedComponentTypeHandle(ComponentType componentType) + { + return CheckedState()->GetDynamicSharedComponentTypeHandle(componentType); } /// @@ -384,7 +387,7 @@ public SharedComponentTypeHandle GetSharedComponentTypeHandle() /// chunk. public EntityTypeHandle GetEntityTypeHandle() { - return EntityManager.GetEntityTypeHandle(); + return CheckedState()->GetEntityTypeHandle(); } /// @@ -397,8 +400,7 @@ public EntityTypeHandle GetEntityTypeHandle() public ComponentDataFromEntity GetComponentDataFromEntity(bool isReadOnly = false) where T : struct, IComponentData { - AddReaderWriter(isReadOnly ? ComponentType.ReadOnly() : ComponentType.ReadWrite()); - return EntityManager.GetComponentDataFromEntity(isReadOnly); + return CheckedState()->GetComponentDataFromEntity(isReadOnly); } /// @@ -413,8 +415,7 @@ public ComponentDataFromEntity GetComponentDataFromEntity(bool isReadOnly /// public BufferFromEntity GetBufferFromEntity(bool isReadOnly = false) where T : struct, IBufferElementData { - AddReaderWriter(isReadOnly ? ComponentType.ReadOnly() : ComponentType.ReadWrite()); - return EntityManager.GetBufferFromEntity(isReadOnly); + return CheckedState()->GetBufferFromEntity(isReadOnly); } /// @@ -428,13 +429,7 @@ public BufferFromEntity GetBufferFromEntity(bool isReadOnly = false) where /// vice versa. public void RequireForUpdate(EntityQuery query) { - var state = CheckedState(); -#if ENABLE_UNITY_COLLECTIONS_CHECKS - if (state->m_AlwaysUpdateSystem) - throw new InvalidOperationException($"Cannot require {nameof(EntityQuery)} for update on a system with {nameof(AlwaysUpdateSystemAttribute)}"); -#endif - - state->RequiredEntityQueries.Add(query); + CheckedState()->RequireForUpdate(query); } /// @@ -443,9 +438,7 @@ public void RequireForUpdate(EntityQuery query) /// The subtype of the singleton component. public void RequireSingletonForUpdate() { - var type = ComponentType.ReadOnly(); - var query = GetSingletonEntityQueryInternal(type); - RequireForUpdate(query); + CheckedState()->RequireSingletonForUpdate(); } /// @@ -454,11 +447,8 @@ public void RequireSingletonForUpdate() /// The subtype of the singleton component. /// True, if a singleton of the specified type exists in the current . public bool HasSingleton() - where T : struct, IComponentData { - var type = ComponentType.ReadOnly(); - var query = GetSingletonEntityQueryInternal(type); - return query.CalculateEntityCount() == 1; + return CheckedState()->HasSingleton(); } /// @@ -470,9 +460,19 @@ public bool HasSingleton() public T GetSingleton() where T : struct, IComponentData { - var type = ComponentType.ReadOnly(); - var query = GetSingletonEntityQueryInternal(type); - return query.GetSingleton(); + return CheckedState()->GetSingleton(); + } + + /// + /// Gets the value of a singleton component, and returns whether or not a singleton component of the specified type exists in the . + /// + /// The subtype of the singleton component. + /// The component. if an with the specified type does not exist in the , this is assigned a default value + /// True, if exactly one exists in the with the provided component type. + public bool TryGetSingleton(out T value) + where T : struct, IComponentData + { + return CheckedState()->TryGetSingleton(out value); } /// @@ -484,9 +484,7 @@ public T GetSingleton() public void SetSingleton(T value) where T : struct, IComponentData { - var type = ComponentType.ReadWrite(); - var query = GetSingletonEntityQueryInternal(type); - query.SetSingleton(value); + CheckedState()->SetSingleton(value); } /// @@ -497,27 +495,19 @@ public void SetSingleton(T value) /// public Entity GetSingletonEntity() { - var type = ComponentType.ReadOnly(); - var query = GetSingletonEntityQueryInternal(type); - return query.GetSingletonEntity(); - } - - internal void AddReaderWriter(ComponentType componentType) - { - var state = CheckedState(); - if (CalculateReaderWriterDependency.Add(componentType, ref state->m_JobDependencyForReadingSystems, ref state->m_JobDependencyForWritingSystems)) - { - CompleteDependencyInternal(); - } + return CheckedState()->GetSingletonEntity(); } - internal void AddReaderWriters(EntityQuery query) + /// + /// Gets the singleton Entity, and returns whether or not a singleton of the specified type exists in the . + /// + /// The subtype of the singleton component. + /// The associated with the specified singleton component. + /// If a singleton of the specified types does not exist in the current , this is set to Entity.Null + /// True, if exactly one exists in the with the provided component type. + public bool TryGetSingletonEntity(out Entity value) { - var state = CheckedState(); - if (query.AddReaderWritersToLists(ref state->m_JobDependencyForReadingSystems, ref state->m_JobDependencyForWritingSystems)) - { - CompleteDependencyInternal(); - } + return CheckedState()->TryGetSingletonEntity(out value); } // Fast path for singletons diff --git a/Unity.Entities/ComponentSystemBase.deprecated.cs b/Unity.Entities/ComponentSystemBase.deprecated.cs deleted file mode 100644 index cf05c16a..00000000 --- a/Unity.Entities/ComponentSystemBase.deprecated.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Diagnostics; -using System.Runtime.InteropServices; -using Unity.Burst; -using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; -using Unity.Core; -using Unity.Jobs; -using Unity.Jobs.LowLevel.Unsafe; - -namespace Unity.Entities -{ - public abstract unsafe partial class ComponentSystemBase - { - [Obsolete("GetArchetypeChunkComponentType has been renamed to GetComponentTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetComponentTypeHandle(*)", false)] - public ArchetypeChunkComponentType GetArchetypeChunkComponentType(bool isReadOnly = false) where T : struct, IComponentData - { - AddReaderWriter(isReadOnly ? ComponentType.ReadOnly() : ComponentType.ReadWrite()); - return EntityManager.GetArchetypeChunkComponentType(isReadOnly); - } - - [Obsolete("GetArchetypeChunkComponentTypeDynamic has been renamed to GetDynamicComponentTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetDynamicComponentTypeHandle(*)", false)] - public ArchetypeChunkComponentTypeDynamic GetArchetypeChunkComponentTypeDynamic(ComponentType componentType) - { - AddReaderWriter(componentType); - return EntityManager.GetArchetypeChunkComponentTypeDynamic(componentType); - } - - [Obsolete("GetArchetypeChunkBufferType has been renamed to GetBufferTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetBufferTypeHandle(*)", false)] - public ArchetypeChunkBufferType GetArchetypeChunkBufferType(bool isReadOnly = false) - where T : struct, IBufferElementData - { - AddReaderWriter(isReadOnly ? ComponentType.ReadOnly() : ComponentType.ReadWrite()); - return EntityManager.GetArchetypeChunkBufferType(isReadOnly); - } - - [Obsolete("GetArchetypeChunkSharedComponentType has been renamed to GetSharedComponentTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetSharedComponentTypeHandle()", false)] - public ArchetypeChunkSharedComponentType GetArchetypeChunkSharedComponentType() - where T : struct, ISharedComponentData - { - return EntityManager.GetArchetypeChunkSharedComponentType(); - } - - [Obsolete("GetArchetypeChunkEntityType has been renamed to GetEntityTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetEntityTypeHandle()", false)] - public ArchetypeChunkEntityType GetArchetypeChunkEntityType() - { - return EntityManager.GetArchetypeChunkEntityType(); - } - } -} diff --git a/Unity.Entities/ComponentSystemBase.deprecated.cs.meta b/Unity.Entities/ComponentSystemBase.deprecated.cs.meta deleted file mode 100644 index 9968070f..00000000 --- a/Unity.Entities/ComponentSystemBase.deprecated.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 8dc2de7c8eef84ca1b5aec4ab2ecb9f2 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities/ComponentSystemGroup.cs b/Unity.Entities/ComponentSystemGroup.cs index 0cec5ed8..bd5dae17 100644 --- a/Unity.Entities/ComponentSystemGroup.cs +++ b/Unity.Entities/ComponentSystemGroup.cs @@ -28,6 +28,20 @@ public unsafe abstract class ComponentSystemGroup : ComponentSystem { private bool m_systemSortDirty = false; + // If true (the default), calling SortSystems() will sort the system update list, respecting the constraints + // imposed by [UpdateBefore] and [UpdateAfter] attributes. SortSystems() is called automatically during + // DefaultWorldInitialization, as well as at the beginning of ComponentSystemGroup.OnUpdate(), but may also be + // called manually. + // + // If false, calls to SortSystems() on this system group will have no effect on update order of systems in this + // group (though SortSystems() will still be called recursively on any child system groups). The group's systems + // will update in the order of the most recent sort operation, with any newly-added systems updating in + // insertion order at the end of the list. In this mode, removing systems from the group is an error. + // + // Setting this value to false is not recommended unless you know exactly what you're doing, and you have full + // control over the systems which will be updated in this group. + public bool EnableSystemSorting { get; protected set; } = true; + internal bool Created { get; private set; } = false; internal List m_systemsToUpdate = new List(); @@ -86,6 +100,7 @@ public void AddSystemToUpdateList(ComponentSystemBase sys) return; } + m_MasterUpdateList.Add(new UpdateIndex(m_systemsToUpdate.Count, true)); m_systemsToUpdate.Add(sys); m_systemSortDirty = true; } @@ -117,6 +132,7 @@ internal void AddUnmanagedSystemToUpdateList(SystemHandleUntyped sysHandle) return; } + m_MasterUpdateList.Add(new UpdateIndex(m_UnmanagedSystemsToUpdate.Length, false)); m_UnmanagedSystemsToUpdate.Add(sysHandle); m_systemSortDirty = true; } @@ -124,6 +140,8 @@ internal void AddUnmanagedSystemToUpdateList(SystemHandleUntyped sysHandle) public void RemoveSystemFromUpdateList(ComponentSystemBase sys) { CheckCreated(); + if (!EnableSystemSorting) + throw new InvalidOperationException("Removing systems from a group is not supported if group.EnableSystemSorting is false."); if (m_systemsToUpdate.Contains(sys) && !m_systemsToRemove.Contains(sys)) { @@ -135,6 +153,8 @@ public void RemoveSystemFromUpdateList(ComponentSystemBase sys) internal void RemoveUnmanagedSystemFromUpdateList(SystemHandleUntyped sys) { CheckCreated(); + if (!EnableSystemSorting) + throw new InvalidOperationException("Removing systems from a group is not supported if group.EnableSystemSorting is false."); if (m_UnmanagedSystemsToUpdate.Contains(sys) && !m_UnmanagedSystemsToRemove.Contains(sys)) { @@ -164,11 +184,29 @@ private void RemovePending() m_UnmanagedSystemsToRemove.Clear(); } - private void RecurseUpdate(ComponentSystemGroup group) + private void RecurseUpdate() { - if (!m_systemSortDirty) - return; + if (!EnableSystemSorting) + { + m_systemSortDirty = true; + } + else if (m_systemSortDirty) + { + GenerateMasterUpdateList(); + } + foreach (var sys in m_systemsToUpdate) + { + if (TypeManager.IsSystemAGroup(sys.GetType())) + { + var childGroup = sys as ComponentSystemGroup; + childGroup.RecurseUpdate(); + } + } + } + + private void GenerateMasterUpdateList() + { RemovePending(); var groupType = GetType(); @@ -191,7 +229,7 @@ private void RecurseUpdate(ComponentSystemGroup group) } for (int i = 0; i < m_UnmanagedSystemsToUpdate.Length; ++i) { - var sysType = World.GetTypeOfUnmanagedSystem(m_UnmanagedSystemsToUpdate[i]); + var sysType = World.Unmanaged.GetTypeOfSystem(m_UnmanagedSystemsToUpdate[i]); int orderingBucket = ComputeSystemOrdering(sysType, groupType); allElems[m_systemsToUpdate.Count + i] = new ComponentSystemSorter.SystemElement { @@ -269,14 +307,6 @@ private void RecurseUpdate(ComponentSystemGroup group) } m_systemSortDirty = false; - - foreach (var sys in m_systemsToUpdate) - { - if (TypeManager.IsSystemAGroup(sys.GetType())) - { - RecurseUpdate((ComponentSystemGroup) sys); - } - } } internal static int ComputeSystemOrdering(Type sysType, Type ourType) @@ -309,7 +339,7 @@ public void SortSystems() { CheckCreated(); - RecurseUpdate(this); + RecurseUpdate(); } #if UNITY_DOTSRUNTIME @@ -345,21 +375,21 @@ internal override void OnStopRunningInternal() if (sys.m_StatePtr == null) continue; - if (!sys.m_StatePtr->m_PreviouslyEnabled) + if (!sys.m_StatePtr->PreviouslyEnabled) continue; - sys.m_StatePtr->m_PreviouslyEnabled = false; + sys.m_StatePtr->PreviouslyEnabled = false; sys.OnStopRunningInternal(); } for (int i = 0; i < m_UnmanagedSystemsToUpdate.Length; ++i) { - var sys = World.ResolveSystemState(m_UnmanagedSystemsToUpdate[i]); + var sys = World.Unmanaged.ResolveSystemState(m_UnmanagedSystemsToUpdate[i]); - if (sys == null || !sys->m_PreviouslyEnabled) + if (sys == null || !sys->PreviouslyEnabled) continue; - sys->m_PreviouslyEnabled = false; + sys->PreviouslyEnabled = false; // Optional callback here } @@ -404,7 +434,12 @@ void UpdateAllSystems() // The master update list contains indices for both managed and unmanaged systems. // Negative values indicate an index in the unmanaged system list. // Positive values indicate an index in the managed system list. - for (int i = 0; i < m_MasterUpdateList.Length; ++i) + var world = World.Unmanaged; + var previouslyExecutingSystem = world.ExecutingSystem; + // Cache the update list length before updating; any new systems added mid-loop will change the length and + // should not be processed until the subsequent group update, to give SortSystems() a chance to run. + int updateListLength = m_MasterUpdateList.Length; + for (int i = 0; i < updateListLength; ++i) { try { @@ -413,7 +448,9 @@ void UpdateAllSystems() if (!index.IsManaged) { // Update unmanaged (burstable) code. - SystemState* sys = World.ResolveSystemState(m_UnmanagedSystemsToUpdate[index.Index]); + var handle = m_UnmanagedSystemsToUpdate[index.Index]; + world.ExecutingSystem = handle; + SystemState* sys = world.ResolveSystemState(m_UnmanagedSystemsToUpdate[index.Index]); if (sys != null) { bool updateError = false; @@ -446,12 +483,16 @@ void UpdateAllSystems() throw; #endif } + finally + { + world.ExecutingSystem = previouslyExecutingSystem; + } if (World.QuitUpdate) break; } - World.InternalDestroyPendingUnmanagedSystems(); + World.Unmanaged.DestroyPendingSystems(); } } diff --git a/Unity.Entities/DOTSCompilerPatchedMethodAttribute.cs b/Unity.Entities/DOTSCompilerPatchedMethodAttribute.cs new file mode 100644 index 00000000..905c9759 --- /dev/null +++ b/Unity.Entities/DOTSCompilerPatchedMethodAttribute.cs @@ -0,0 +1,14 @@ +#if ROSLYN_SOURCEGEN_ENABLED +using System; + +namespace Unity.Entities +{ + // Used by Source Generators to target method patching. + // Only used by internal Unity codegen. + [AttributeUsage(AttributeTargets.Method)] + public class DOTSCompilerPatchedMethodAttribute : Attribute + { + public DOTSCompilerPatchedMethodAttribute(string targetMethodName) { } + } +} +#endif diff --git a/Unity.Entities/DOTSCompilerPatchedMethodAttribute.cs.meta b/Unity.Entities/DOTSCompilerPatchedMethodAttribute.cs.meta new file mode 100644 index 00000000..bc86fc53 --- /dev/null +++ b/Unity.Entities/DOTSCompilerPatchedMethodAttribute.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8703b97b88d247b49a89df827f64810f +timeCreated: 1604063835 \ No newline at end of file diff --git a/Unity.Entities/DebugView.cs b/Unity.Entities/DebugView.cs index 48bd4352..ec317035 100644 --- a/Unity.Entities/DebugView.cs +++ b/Unity.Entities/DebugView.cs @@ -111,7 +111,7 @@ public static Components GetComponents(EntityManager m, Entity e) var componentType = chunk->Archetype->Types[i]; if (componentType.IsSharedComponent) continue; - var typeInfo = TypeManager.GetTypeInfo(componentType.TypeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(componentType.TypeIndex); var type = TypeManager.GetType(typeInfo.TypeIndex); var offset = archetype->Offsets[i]; var size = archetype->SizeOfs[i]; diff --git a/Unity.Entities/DefaultWorld.cs b/Unity.Entities/DefaultWorld.cs index aceab6fe..6702d3d7 100644 --- a/Unity.Entities/DefaultWorld.cs +++ b/Unity.Entities/DefaultWorld.cs @@ -58,7 +58,7 @@ public float Timestep } } - [Obsolete("MaximumDeltaTime is now specified at the World level as World.MaximumDeltaTime (RemovedAfter 2020-012-26)")] + [Obsolete("MaximumDeltaTime is now specified at the World level as World.MaximumDeltaTime (RemovedAfter 2020-12-26)")] public float MaximumDeltaTime { get => World.MaximumDeltaTime; diff --git a/Unity.Entities/DefaultWorldInitialization.cs b/Unity.Entities/DefaultWorldInitialization.cs index 3443aad4..42bb576a 100644 --- a/Unity.Entities/DefaultWorldInitialization.cs +++ b/Unity.Entities/DefaultWorldInitialization.cs @@ -92,10 +92,7 @@ internal static void DomainUnloadOrPlayModeChangeShutdown() PlayerLoop.SetPlayerLoop(playerLoop); World.DisposeAllWorlds(); - - WordStorage.Instance.Dispose(); - WordStorage.Instance = null; - + s_UnloadOrPlayModeChangeShutdownRegistered = false; DefaultWorldDestroyed?.Invoke(); @@ -224,7 +221,7 @@ private static void AddSystemToRootLevelSystemGroupsInternal(World world, IEnume // Add unmanaged systems foreach (var type in unmanagedTypes) { - SystemHandleUntyped sysHandle = world.CreateUnmanagedSystem(type); + SystemHandleUntyped sysHandle = world.Unmanaged.CreateUnmanagedSystem(world, type); // Add systems to their groups, based on the [UpdateInGroup] attribute. diff --git a/Unity.Entities/Diff/EntityChangeSet.cs b/Unity.Entities/Diff/EntityChangeSet.cs index b78ab903..daa7b284 100644 --- a/Unity.Entities/Diff/EntityChangeSet.cs +++ b/Unity.Entities/Diff/EntityChangeSet.cs @@ -27,11 +27,19 @@ public EntityGuid(int originatingId, byte namespaceId, uint serial) b = serial | ((ulong)namespaceId << 32); } + internal EntityGuid(int originatingId, uint namespaceId, uint serial) + { + a = (ulong)originatingId; + b = serial | ((ulong)namespaceId << 32); + } + /// Session-unique ID for originating object (typically the authoring GameObject's InstanceID). public int OriginatingId => (int)a; /// An ID that supports multiple primary groupings of converted Entities with the same originating object. /// ID zero is reserved for default conversions. Nonzero ID's are for the developer to manage. + [Obsolete("This functionality is no longer supported. (RemovedAfter 2021-01-09).")] public byte NamespaceId => (byte)(b >> 32); + internal uint FullNamespaceId => (uint) (b >> 32); /// A unique number used to differentiate Entities associated with the same originating object and namespace. public uint Serial => (uint)b; @@ -60,7 +68,7 @@ public int CompareTo(EntityGuid other) return 0; } - public override string ToString() => $"{OriginatingId}:{NamespaceId:x2}:{Serial:x8}"; + public override string ToString() => $"{OriginatingId}:{FullNamespaceId:x8}:{Serial:x8}"; } public readonly struct EntityChanges : IDisposable @@ -431,5 +439,173 @@ public void Dispose() foreach (var managed in SetManagedComponents) (managed.BoxedValue as IDisposable)?.Dispose(); } + + } + +#if !NET_DOTS + internal static class EntityChangeSetFormatter { + internal static string PrintSummary(this EntityChangeSet changeSet) + { + var sb = new System.Text.StringBuilder(); + PrintSummary(changeSet, sb); + return sb.ToString(); + } + + internal static void PrintSummary(this EntityChangeSet changeSet, System.Text.StringBuilder sb) + { + sb.AppendLine("Change Summary:"); + if (changeSet.CreatedEntityCount > 0) + sb.AppendLine("\tEntities created: " + changeSet.CreatedEntityCount); + if (changeSet.DestroyedEntityCount > 0) + sb.AppendLine("\tEntities destroyed: " + changeSet.DestroyedEntityCount); + if (changeSet.EntityReferenceChanges.Length > 0) + sb.AppendLine("\tEntity references changed: " + changeSet.EntityReferenceChanges.Length); + if (changeSet.AddComponents.Length > 0) + sb.AppendLine("\tComponents added: " + changeSet.AddComponents.Length); + if (changeSet.RemoveComponents.Length > 0) + sb.AppendLine("\tComponents removed: " + changeSet.RemoveComponents.Length); + if (changeSet.SetComponents.Length > 0) + sb.AppendLine("\tUnmanaged components changed: " + changeSet.SetComponents.Length); + if (changeSet.SetManagedComponents.Length > 0) + sb.AppendLine("\tManaged components changed: " + changeSet.SetManagedComponents.Length); + if (changeSet.SetSharedComponents.Length > 0) + sb.AppendLine("\tShared components changed: " + changeSet.SetSharedComponents.Length); + if (changeSet.CreatedBlobAssets.Length > 0) + sb.AppendLine("\tBlob assets created: " + changeSet.CreatedBlobAssets.Length); + if (changeSet.DestroyedBlobAssets.Length > 0) + sb.AppendLine("\tBlob assets destroyed: " + changeSet.DestroyedBlobAssets.Length); + if (changeSet.BlobAssetReferenceChanges.Length > 0) + sb.AppendLine("\tBlob asset references changed: " + changeSet.BlobAssetReferenceChanges.Length); + if (changeSet.LinkedEntityGroupAdditions.Length > 0) + sb.AppendLine("\tLinked entity group additions: " + changeSet.LinkedEntityGroupAdditions.Length); + if (changeSet.LinkedEntityGroupRemovals.Length > 0) + sb.AppendLine("\tLinked entity group removals: " + changeSet.LinkedEntityGroupRemovals.Length); + sb.AppendLine(); + + if (changeSet.CreatedEntityCount > 0) + { + sb.AppendLine("Entities created:"); + for (int i = 0; i < changeSet.CreatedEntityCount; i++) + { + sb.Append('\t'); + sb.Append(changeSet.Names[i].ToString()); + sb.Append(" - "); + sb.AppendLine(changeSet.Entities[i].ToString()); + } + sb.AppendLine(); + } + + if (changeSet.DestroyedEntityCount > 0) + { + sb.AppendLine("Entities destroyed:"); + int d = changeSet.Names.Length - 1; + for (int i = 0; i < changeSet.DestroyedEntityCount; i++) + { + sb.Append('\t'); + sb.Append(changeSet.Names[d - i].ToString()); + sb.Append(" - "); + sb.AppendLine(changeSet.Entities[d - i].ToString()); + } + sb.AppendLine(); + } + + if (changeSet.AddComponents.Length > 0) + { + sb.AppendLine("Components added:"); + for (int i = 0; i < changeSet.AddComponents.Length; i++) + FormatComponentChange(ref changeSet, changeSet.AddComponents[i], sb); + sb.AppendLine(); + } + + if (changeSet.RemoveComponents.Length > 0) + { + sb.AppendLine("Components removed:"); + for (int i = 0; i < changeSet.RemoveComponents.Length; i++) + FormatComponentChange(ref changeSet, changeSet.RemoveComponents[i], sb); + sb.AppendLine(); + } + + if (changeSet.SetComponents.Length > 0) + { + sb.AppendLine("Unmanaged components changed:"); + for (int i = 0; i < changeSet.SetComponents.Length; i++) + FormatComponentChange(ref changeSet, changeSet.SetComponents[i].Component, sb); + sb.AppendLine(); + } + + if (changeSet.SetManagedComponents.Length > 0) + { + sb.AppendLine("Managed components changed:"); + for (int i = 0; i < changeSet.SetManagedComponents.Length; i++) + FormatComponentChange(ref changeSet, changeSet.SetManagedComponents[i].Component, sb); + sb.AppendLine(); + } + + if (changeSet.SetSharedComponents.Length > 0) + { + sb.AppendLine("Shared components changed:"); + for (int i = 0; i < changeSet.SetSharedComponents.Length; i++) + FormatComponentChange(ref changeSet, changeSet.SetSharedComponents[i].Component, sb); + sb.AppendLine(); + } + + if (changeSet.EntityReferenceChanges.Length > 0) + { + sb.AppendLine("Entity references changed:"); + for (int i = 0; i < changeSet.EntityReferenceChanges.Length; i++) + FormatComponentChange(ref changeSet, changeSet.EntityReferenceChanges[i].Component, sb); + sb.AppendLine(); + } + + if (changeSet.BlobAssetReferenceChanges.Length > 0) + { + sb.AppendLine("Blob asset references changed:"); + for (int i = 0; i < changeSet.BlobAssetReferenceChanges.Length; i++) + FormatComponentChange(ref changeSet, changeSet.BlobAssetReferenceChanges[i].Component, sb); + sb.AppendLine(); + } + + if (changeSet.LinkedEntityGroupAdditions.Length > 0) + { + sb.AppendLine("Linked entity group additions:"); + for (int i = 0; i < changeSet.LinkedEntityGroupAdditions.Length; i++) + { + sb.Append('\t'); + sb.Append(changeSet.LinkedEntityGroupAdditions[i].ChildEntityGuid.ToString()); + sb.Append(" added to "); + sb.Append(changeSet.LinkedEntityGroupAdditions[i].RootEntityGuid.ToString()); + sb.AppendLine(); + } + + sb.AppendLine(); + } + + if (changeSet.LinkedEntityGroupRemovals.Length > 0) + { + sb.AppendLine("Linked entity group removals:"); + for (int i = 0; i < changeSet.LinkedEntityGroupRemovals.Length; i++) + { + sb.Append('\t'); + sb.Append(changeSet.LinkedEntityGroupRemovals[i].ChildEntityGuid.ToString()); + sb.Append(" removed from "); + sb.Append(changeSet.LinkedEntityGroupRemovals[i].RootEntityGuid.ToString()); + sb.AppendLine(); + } + + sb.AppendLine(); + } + } + + static void FormatComponentChange(ref EntityChangeSet changeSet, PackedComponent c, System.Text.StringBuilder sb) + { + int ti = TypeManager.GetTypeIndexFromStableTypeHash(changeSet.TypeHashes[c.PackedTypeIndex].StableTypeHash); + var typeName = TypeManager.GetTypeInfo(ti).DebugTypeName; + sb.Append("\t"); + sb.Append(typeName); + sb.Append(" - "); + // Could also print out GUID here + sb.AppendLine(changeSet.Names[c.PackedEntityIndex].ToString()); + } } +#endif } diff --git a/Unity.Entities/Diff/EntityDiffer.cs b/Unity.Entities/Diff/EntityDiffer.cs index e5898cf9..50e3bc6b 100644 --- a/Unity.Entities/Diff/EntityDiffer.cs +++ b/Unity.Entities/Diff/EntityDiffer.cs @@ -153,6 +153,9 @@ unsafe partial class EntityDiffer static Profiling.ProfilerMarker s_GetChangedManagedComponentsProfilerMarker = new Profiling.ProfilerMarker(nameof(GetChangedManagedComponents)); static Profiling.ProfilerMarker s_GetChangedSharedComponentsProfilerMarker = new Profiling.ProfilerMarker(nameof(GetChangedSharedComponents)); static Profiling.ProfilerMarker s_CopyAndReplaceChunksProfilerMarker = new Profiling.ProfilerMarker(nameof(CopyAndReplaceChunks)); + static Profiling.ProfilerMarker s_DestroyChunksProfilerMarker = new Profiling.ProfilerMarker(nameof(DestroyChunks)); + static Profiling.ProfilerMarker s_CloneAndAddChunksProfilerMarker = new Profiling.ProfilerMarker(nameof(CloneAndAddChunks)); + static Profiling.ProfilerMarker s_GetBlobAssetsWithDistinctHash = new Profiling.ProfilerMarker(nameof(GetBlobAssetsWithDistinctHash)); /// /// Generates a detailed change set between and . @@ -342,60 +345,8 @@ internal static EntityChanges GetChanges( if (CheckOption(options, EntityManagerDifferOptions.FastForwardShadowWorld)) { CopyAndReplaceChunks(srcEntityManager, dstEntityManager, dstEntityQuery, archetypeChunkChanges); - - var batch = blobAssetCache.BlobAssetBatch; - var remap = blobAssetCache.BlobAssetRemap; - - using (var createdBlobAssets = new NativeList(1, Allocator.TempJob)) - using (var destroyedBlobAssets = new NativeList(1, Allocator.TempJob)) - { - new GatherCreatedAndDestroyedBlobAssets - { - CreatedBlobAssets = createdBlobAssets, - DestroyedBlobAssets = destroyedBlobAssets, - AfterBlobAssets = srcBlobAssetsWithDistinctHash.BlobAssets, - BeforeBlobAssets = dstBlobAssetsWithDistinctHash - }.Schedule().Complete(); - - for (var i = 0; i < destroyedBlobAssets.Length; i++) - { - if (!batch->TryGetBlobAsset(destroyedBlobAssets[i].Hash, out _)) - { - throw new Exception($"Failed to destroy a BlobAsset to the shadow world. A BlobAsset with the Hash=[{createdBlobAssets[i].Header->Hash}] does not exists."); - } - - batch->ReleaseBlobAssetImmediately(destroyedBlobAssets[i].Hash); - - using (var keys = remap.GetKeyArray(Allocator.Temp)) - using (var values = remap.GetValueArray(Allocator.Temp)) - { - for (var remapIndex = 0; remapIndex < values.Length; remapIndex++) - { - if (destroyedBlobAssets[i].Data != values[remapIndex].Data) - continue; - - remap.Remove(keys[remapIndex]); - break; - } - } - } - - for (var i = 0; i < createdBlobAssets.Length; i++) - { - if (batch->TryGetBlobAsset(createdBlobAssets[i].Header->Hash, out _)) - { - throw new Exception($"Failed to copy a BlobAsset to the shadow world. A BlobAsset with the Hash=[{createdBlobAssets[i].Header->Hash}] already exists."); - } - - var blobAssetPtr = batch->AllocateBlobAsset(createdBlobAssets[i].Data, createdBlobAssets[i].Length, createdBlobAssets[i].Header->Hash); - remap.TryAdd(createdBlobAssets[i], blobAssetPtr); - } - - if (destroyedBlobAssets.Length > 0 || createdBlobAssets.Length > 0) - { - batch->SortByHash(); - } - } + UpdateBlobAssetCache(blobAssetCache, srcBlobAssetsWithDistinctHash.BlobAssets, + dstBlobAssetsWithDistinctHash); } } finally @@ -416,6 +367,84 @@ internal static EntityChanges GetChanges( return changes; } + internal static void PrecomputeBlobAssetCache(EntityManager entityManager, EntityQueryDesc entityQueryDesc, BlobAssetCache blobAssetCache) + { + CheckEntityGuidComponent(entityQueryDesc); + entityManager.CompleteAllJobs(); + var srcEntityQuery = entityManager.CreateEntityQuery(entityQueryDesc); + // Gather a set of a chunks to consider for diffing in both the src and dst worlds. + using (var srcChunks = srcEntityQuery.CreateArchetypeChunkArray(Allocator.TempJob)) + { + using (var srcBlobAssetsWithDistinctHash = GetBlobAssetsWithDistinctHash( + entityManager.GetCheckedEntityDataAccess()->ManagedComponentStore, + srcChunks, Allocator.TempJob)) + using (var dstBlobAssets = new NativeList(Allocator.TempJob)) + { + UpdateBlobAssetCache(blobAssetCache, srcBlobAssetsWithDistinctHash.BlobAssets, dstBlobAssets); + } + } + } + + static void UpdateBlobAssetCache(BlobAssetCache blobAssetCache, NativeList srcBlobAssets, NativeList dstBlobAssets) + { + var batch = blobAssetCache.BlobAssetBatch; + var remap = blobAssetCache.BlobAssetRemap; + + using (var createdBlobAssets = new NativeList(1, Allocator.TempJob)) + using (var destroyedBlobAssets = new NativeList(1, Allocator.TempJob)) + { + new GatherCreatedAndDestroyedBlobAssets + { + CreatedBlobAssets = createdBlobAssets, + DestroyedBlobAssets = destroyedBlobAssets, + AfterBlobAssets = srcBlobAssets, + BeforeBlobAssets = dstBlobAssets + }.Run(); + + for (var i = 0; i < destroyedBlobAssets.Length; i++) + { + if (!batch->TryGetBlobAsset(destroyedBlobAssets[i].Hash, out _)) + { + throw new Exception( + $"Failed to destroy a BlobAsset to the shadow world. A BlobAsset with the Hash=[{createdBlobAssets[i].Header->Hash}] does not exists."); + } + + batch->ReleaseBlobAssetImmediately(destroyedBlobAssets[i].Hash); + + using (var keys = remap.GetKeyArray(Allocator.Temp)) + using (var values = remap.GetValueArray(Allocator.Temp)) + { + for (var remapIndex = 0; remapIndex < values.Length; remapIndex++) + { + if (destroyedBlobAssets[i].Data != values[remapIndex].Data) + continue; + + remap.Remove(keys[remapIndex]); + break; + } + } + } + + for (var i = 0; i < createdBlobAssets.Length; i++) + { + if (batch->TryGetBlobAsset(createdBlobAssets[i].Header->Hash, out _)) + { + throw new Exception( + $"Failed to copy a BlobAsset to the shadow world. A BlobAsset with the Hash=[{createdBlobAssets[i].Header->Hash}] already exists."); + } + + var blobAssetPtr = batch->AllocateBlobAsset(createdBlobAssets[i].Data, + createdBlobAssets[i].Length, createdBlobAssets[i].Header->Hash); + remap.TryAdd(createdBlobAssets[i], blobAssetPtr); + } + + if (destroyedBlobAssets.Length > 0 || createdBlobAssets.Length > 0) + { + batch->SortByHash(); + } + } + } + [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] static void CheckEntityGuidComponent(EntityQueryDesc entityQueryDesc) { diff --git a/Unity.Entities/Diff/EntityDifferBlobs.cs b/Unity.Entities/Diff/EntityDifferBlobs.cs index e3655ac7..eeb1d2b5 100644 --- a/Unity.Entities/Diff/EntityDifferBlobs.cs +++ b/Unity.Entities/Diff/EntityDifferBlobs.cs @@ -154,6 +154,7 @@ internal static BlobAssetsWithDistinctHash GetBlobAssetsWithDistinctHash( NativeArray chunks, Allocator allocator) { + s_GetBlobAssetsWithDistinctHash.Begin(); var blobAssetsWithDistinctHash = new BlobAssetsWithDistinctHash(allocator); var typeInfoPtr = TypeManager.GetTypeInfoPointer(); @@ -169,7 +170,7 @@ internal static BlobAssetsWithDistinctHash GetBlobAssetsWithDistinctHash( var archetype = chunk->Archetype; // skip this chunk only if we are _certain_ there are no blob asset refs. - if (archetype->NumManagedComponents == 0 && archetype->NumSharedComponents == 0 && !archetype->ContainsBlobAssetRefs) + if (!archetype->HasBlobAssetRefs) continue; var typesCount = archetype->TypesCount; @@ -178,12 +179,14 @@ internal static BlobAssetsWithDistinctHash GetBlobAssetsWithDistinctHash( for (var unorderedTypeIndexInArchetype = 0; unorderedTypeIndexInArchetype < typesCount; unorderedTypeIndexInArchetype++) { var typeIndexInArchetype = archetype->TypeMemoryOrder[unorderedTypeIndexInArchetype]; - var componentTypeInArchetype = archetype->Types[typeIndexInArchetype]; - if (componentTypeInArchetype.IsZeroSized) continue; + ref var typeInfo = ref typeInfoPtr[componentTypeInArchetype.TypeIndex & TypeManager.ClearFlagsMask]; + if (!typeInfo.HasBlobAssetRefs) + continue; + var chunkBuffer = chunk->Buffer; var subArrayOffset = archetype->Offsets[typeIndexInArchetype]; var componentArrayStart = chunkBuffer + subArrayOffset; @@ -204,12 +207,8 @@ internal static BlobAssetsWithDistinctHash GetBlobAssetsWithDistinctHash( } else { - var typeInfo = typeInfoPtr[componentTypeInArchetype.TypeIndex & TypeManager.ClearFlagsMask]; var blobAssetRefCount = typeInfo.BlobAssetRefOffsetCount; - if (blobAssetRefCount == 0) - continue; - var blobAssetRefOffsets = blobAssetRefOffsetPtr + typeInfo.BlobAssetRefOffsetStartIndex; if (componentTypeInArchetype.IsBuffer) @@ -254,8 +253,7 @@ internal static BlobAssetsWithDistinctHash GetBlobAssetsWithDistinctHash( for (var i = 0; i < archetype->NumSharedComponents; i++) { var sharedComponentIndex = sharedComponentValues[i]; - - if (sharedComponentIndex == 0) + if (!managedComponentStore.HasBlobReferences(sharedComponentIndex)) continue; var sharedComponentValue = managedComponentStore.GetSharedComponentDataNonDefaultBoxed(sharedComponentIndex); @@ -292,6 +290,8 @@ internal static BlobAssetsWithDistinctHash GetBlobAssetsWithDistinctHash( Array = blobAssetsWithDistinctHash.BlobAssets.AsDeferredJobArray() }.Run(); + s_GetBlobAssetsWithDistinctHash.End(); + return blobAssetsWithDistinctHash; } diff --git a/Unity.Entities/Diff/EntityDifferClearMissingReferences.cs b/Unity.Entities/Diff/EntityDifferClearMissingReferences.cs index 5383910b..1ced8c7c 100644 --- a/Unity.Entities/Diff/EntityDifferClearMissingReferences.cs +++ b/Unity.Entities/Diff/EntityDifferClearMissingReferences.cs @@ -10,11 +10,7 @@ static unsafe partial class EntityDiffer [BurstCompile] struct ClearMissingReferencesJob : IJobParallelFor { - [NativeDisableUnsafePtrRestriction] public TypeManager.TypeInfo* TypeInfo; - [NativeDisableUnsafePtrRestriction] public TypeManager.EntityOffsetInfo* EntityOffsetInfo; - [ReadOnly] public uint GlobalSystemVersion; [ReadOnly] public NativeArray Chunks; - [ReadOnly, NativeDisableUnsafePtrRestriction] public EntityComponentStore* EntityComponentStore; public void Execute(int index) { @@ -28,11 +24,7 @@ static void ClearMissingReferences(EntityManager entityManager, NativeArrayEntityComponentStore, }.Schedule(chunks.Length, 64, dependsOn); } } diff --git a/Unity.Entities/Diff/EntityDifferComponentChanges.cs b/Unity.Entities/Diff/EntityDifferComponentChanges.cs index 22a965f0..2cf8096a 100644 --- a/Unity.Entities/Diff/EntityDifferComponentChanges.cs +++ b/Unity.Entities/Diff/EntityDifferComponentChanges.cs @@ -111,6 +111,69 @@ public int GetOrAdd(T value) } } + static internal void GatherLinkedEntityGroupChanges( + EntityGuid entityGuid, + NativeArray beforeLinkedEntityGroup, + NativeArray afterLinkedEntityGroup, + NativeList additions, + NativeList removals) + { + beforeLinkedEntityGroup.Sort(); + afterLinkedEntityGroup.Sort(); + + var beforeIndex = 0; + var afterIndex = 0; + + int beforeLength = beforeLinkedEntityGroup.Length; + int afterLength = afterLinkedEntityGroup.Length; + + while (beforeIndex < beforeLength && afterIndex < afterLength) + { + var beforeEntityGuid = beforeLinkedEntityGroup[beforeIndex]; + var afterEntityGuid = afterLinkedEntityGroup[afterIndex]; + + var comparison = beforeEntityGuid.CompareTo(afterEntityGuid); + + if (comparison == 0) + { + // If the guids are equal, we know that the entity exists in both states. + beforeIndex++; + afterIndex++; + } + else if (comparison > 0) + { + // If the before guid is greater, then we know that whatever guid we compared to + // belongs to an entity that was added. Otherwise, we would already have matched it + // in the first case before. + additions.Add(new LinkedEntityGroupChange + {RootEntityGuid = entityGuid, ChildEntityGuid = afterEntityGuid}); + afterIndex++; + } + else if (comparison < 0) + { + // If the before guid is smaller, then we know that that entity must have been + // removed + removals.Add(new LinkedEntityGroupChange + {RootEntityGuid = entityGuid, ChildEntityGuid = beforeEntityGuid}); + beforeIndex++; + } + } + + while (beforeIndex < beforeLength) + { + // If the entity is in "before" but not "after", it's been removed. + removals.Add(new LinkedEntityGroupChange + {RootEntityGuid = entityGuid, ChildEntityGuid = beforeLinkedEntityGroup[beforeIndex++]}); + } + + while (afterIndex < afterLength) + { + // If the entity is in "after" but not "before", it's been added. + additions.Add(new LinkedEntityGroupChange + {RootEntityGuid = entityGuid, ChildEntityGuid = afterLinkedEntityGroup[afterIndex++]}); + } + } + [BurstCompile] struct GatherComponentChanges : IJob { @@ -430,52 +493,9 @@ void SetComponentData( afterLinkedEntityGroupEntityGuids[i] = afterEntityGuid; } - beforeLinkedEntityGroupEntityGuids.Sort(); - afterLinkedEntityGroupEntityGuids.Sort(); - - var beforeIndex = 0; - var afterIndex = 0; - - while (beforeIndex < beforeLength && afterIndex < afterLength) - { - var beforeEntityGuid = beforeLinkedEntityGroupEntityGuids[beforeIndex]; - var afterEntityGuid = afterLinkedEntityGroupEntityGuids[afterIndex]; - - var comparison = beforeEntityGuid.CompareTo(afterEntityGuid); - - if (comparison == 0) - { - // If the entity is in both "before" and "after", then there is no change. - beforeIndex++; - afterIndex++; - } - else if (comparison > 0) - { - // If the entity is in "before" but not "after", it's been removed. - LinkedEntityGroupRemovals.Add(new LinkedEntityGroupChange {RootEntityGuid = entityGuid, ChildEntityGuid = beforeEntityGuid}); - beforeIndex++; - } - else if (comparison < 0) - { - // If the entity is in "after" but not "before", it's been added. - LinkedEntityGroupAdditions.Add(new LinkedEntityGroupChange {RootEntityGuid = entityGuid, ChildEntityGuid = afterEntityGuid}); - afterIndex++; - } - } - - while (beforeIndex < beforeLength) - { - // If the entity is in "before" but not "after", it's been removed. - LinkedEntityGroupRemovals.Add(new LinkedEntityGroupChange - {RootEntityGuid = entityGuid, ChildEntityGuid = beforeLinkedEntityGroupEntityGuids[beforeIndex++]}); - } - - while (afterIndex < afterLength) - { - // If the entity is in "after" but not "before", it's been added. - LinkedEntityGroupAdditions.Add(new LinkedEntityGroupChange - {RootEntityGuid = entityGuid, ChildEntityGuid = afterLinkedEntityGroupEntityGuids[afterIndex++]}); - } + GatherLinkedEntityGroupChanges(entityGuid, + beforeLinkedEntityGroupEntityGuids, afterLinkedEntityGroupEntityGuids, + LinkedEntityGroupAdditions, LinkedEntityGroupRemovals); } } else @@ -1067,7 +1087,7 @@ static PackedManagedComponentDataChange[] GetChangedManagedComponents( for (var i = 0; i < changes.Length; i++) { var change = changes[i]; - var typeInfo = TypeManager.GetTypeInfo(change.TypeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(change.TypeIndex); if (typeInfo.Category == TypeManager.TypeCategory.UnityEngineObject) { diff --git a/Unity.Entities/Diff/EntityDifferCopyAndReplace.cs b/Unity.Entities/Diff/EntityDifferCopyAndReplace.cs index 2f5fbd89..cc694a37 100644 --- a/Unity.Entities/Diff/EntityDifferCopyAndReplace.cs +++ b/Unity.Entities/Diff/EntityDifferCopyAndReplace.cs @@ -1,13 +1,18 @@ -using Unity.Assertions; using Unity.Burst; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; using Unity.Jobs; +using Unity.Profiling; +using UnityEngine.Profiling; namespace Unity.Entities { static unsafe partial class EntityDiffer { + static readonly Profiling.ProfilerMarker s_PlaybackManagedChangesMarker = new Profiling.ProfilerMarker("PlaybackManagedChanges"); + static readonly Profiling.ProfilerMarker s_CopySharedComponentsMarker = new Profiling.ProfilerMarker("CopySharedComponents"); + static readonly Profiling.ProfilerMarker s_CopyManagedComponentsMarker = new Profiling.ProfilerMarker("CopyManagedComponents"); + [BurstCompile] struct PatchAndAddClonedChunks : IJobParallelFor { @@ -70,127 +75,239 @@ internal static void CopyAndReplaceChunks( s_CopyAndReplaceChunksProfilerMarker.End(); } - static void DestroyChunks(EntityManager entityManager, NativeList chunks) + [BurstCompile] + struct DestroyChunksJob : IJob { - var access = entityManager.GetCheckedEntityDataAccess(); - var ecs = access->EntityComponentStore; + public EntityManager EntityManager; + public NativeList Chunks; - for (var i = 0; i < chunks.Length; i++) + public void Execute() { - Assert.IsTrue(chunks[i].m_EntityComponentStore == access); - DestroyChunkForDiffing(entityManager, chunks[i].m_Chunk); + var access = EntityManager.GetCheckedEntityDataAccess(); + var ecs = access->EntityComponentStore; + + for (var i = 0; i < Chunks.Length; i++) + { + var chunk = Chunks[i].m_Chunk; + var count = chunk->Count; + ChunkDataUtility.DeallocateBuffers(chunk); + ecs->DeallocateManagedComponents(chunk, 0, count); + + chunk->Archetype->EntityCount -= chunk->Count; + ecs->FreeEntities(chunk); + + ChunkDataUtility.SetChunkCountKeepMetaChunk(chunk, 0); + } } } - static void DestroyChunkForDiffing(EntityManager entityManager, Chunk* chunk) + static void DestroyChunks(EntityManager entityManager, NativeList chunks) { + s_DestroyChunksProfilerMarker.Begin(); + new DestroyChunksJob + { + EntityManager = entityManager, + Chunks = chunks + }.Run(); + s_PlaybackManagedChangesMarker.Begin(); var access = entityManager.GetCheckedEntityDataAccess(); var ecs = access->EntityComponentStore; var mcs = access->ManagedComponentStore; + mcs.Playback(ref ecs->ManagedChangesTracker); + s_PlaybackManagedChangesMarker.End(); + s_DestroyChunksProfilerMarker.End(); + } - var count = chunk->Count; - ChunkDataUtility.DeallocateBuffers(chunk); - ecs->DeallocateManagedComponents(chunk, 0, count); + [BurstCompile] + struct CollectSharedComponentIndices : IJob + { + public NativeList Chunks; + public NativeList SharedComponentIndices; - chunk->Archetype->EntityCount -= chunk->Count; - ecs->FreeEntities(chunk); + public void Execute() + { + var indices = new UnsafeHashSet(128, Allocator.Temp); + for (int i = 0; i < Chunks.Length; i++) + HandleChunk(Chunks[i].m_Chunk, ref indices); - ChunkDataUtility.SetChunkCountKeepMetaChunk(chunk, 0); + SharedComponentIndices.AddRange(indices.ToNativeArray(Allocator.Temp)); + } - mcs.Playback(ref ecs->ManagedChangesTracker); + void HandleChunk(Chunk* srcChunk, ref UnsafeHashSet indices) + { + var srcArchetype = srcChunk->Archetype; + var n = srcArchetype->NumSharedComponents; + var sharedIndices = stackalloc int[srcArchetype->NumSharedComponents]; + srcChunk->SharedComponentValues.CopyTo(sharedIndices, 0, srcArchetype->NumSharedComponents); + for (int i = 0; i < n; i++) + { + indices.Add(sharedIndices[i]); + } + } } - static void CloneAndAddChunks(EntityManager srcEntityManager, EntityManager dstEntityManager, NativeList chunks) + [BurstCompile] + struct CreateNewChunks : IJob { - var cloned = new NativeArray(chunks.Length, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); + public NativeList Chunks; + public NativeArray ClonedChunks; + public EntityManager DstEntityManager; - var srcAccess = srcEntityManager.GetCheckedEntityDataAccess(); - var dstAccess = dstEntityManager.GetCheckedEntityDataAccess(); + [ReadOnly] + public NativeArray SrcSharedComponentIndices; + [ReadOnly] + public NativeArray DstSharedComponentIndices; - for (var i = 0; i < chunks.Length; i++) + public void Execute() { - var srcChunk = chunks[i].m_Chunk; + var dstEntityComponentStore = DstEntityManager.GetCheckedEntityDataAccess()->EntityComponentStore; - var dstChunk = CloneChunkWithoutAllocatingEntities( - dstEntityManager, - srcChunk, - srcAccess->ManagedComponentStore); - - cloned[i] = new ArchetypeChunk {m_Chunk = dstChunk}; + var remapping = new UnsafeHashMap(SrcSharedComponentIndices.Length, Allocator.Temp); + for (int i = 0; i < SrcSharedComponentIndices.Length; i++) + remapping.Add(SrcSharedComponentIndices[i], DstSharedComponentIndices[i]); + for (int i = 0; i < Chunks.Length; i++) + HandleChunk(i, dstEntityComponentStore, remapping); } - // Ensure capacity in the dst world before we start linking entities. - dstAccess->EntityComponentStore->EnsureCapacity(srcEntityManager.EntityCapacity); - dstAccess->EntityComponentStore->CopyNextFreeEntityIndex(srcAccess->EntityComponentStore); - - new PatchAndAddClonedChunks + void HandleChunk(int idx, EntityComponentStore* dstEntityComponentStore, UnsafeHashMap sharedComponentRemap) { - SrcChunks = chunks, - DstChunks = cloned, - DstEntityComponentStore = dstAccess->EntityComponentStore - }.Schedule(chunks.Length, 64).Complete(); + var srcChunk = Chunks[idx].m_Chunk; + var numSharedComponents = srcChunk->Archetype->NumSharedComponents; + var dstSharedIndices = stackalloc int[numSharedComponents]; + srcChunk->SharedComponentValues.CopyTo(dstSharedIndices, 0, numSharedComponents); + for (int i = 0; i < numSharedComponents; i++) + dstSharedIndices[i] = sharedComponentRemap[dstSharedIndices[i]]; - cloned.Dispose(); + var srcArchetype = srcChunk->Archetype; + var dstArchetype = dstEntityComponentStore->GetOrCreateArchetype(srcArchetype->Types, srcArchetype->TypesCount); + var dstChunk = dstEntityComponentStore->GetCleanChunkNoMetaChunk(dstArchetype, dstSharedIndices); + dstChunk->metaChunkEntity = srcChunk->metaChunkEntity; + ChunkDataUtility.SetChunkCountKeepMetaChunk(dstChunk, srcChunk->Count); + dstChunk->Archetype->EntityCount += srcChunk->Count; + dstChunk->SequenceNumber = srcChunk->SequenceNumber; + + ClonedChunks[idx] = new ArchetypeChunk {m_Chunk = dstChunk}; + } } - static Chunk* CloneChunkWithoutAllocatingEntities(EntityManager dstEntityManager, Chunk* srcChunk, ManagedComponentStore srcManagedComponentStore) + [BurstCompile] + struct CopyChunkBuffers : IJobFor { - var dstAccess = dstEntityManager.GetCheckedEntityDataAccess(); - var dstEntityComponentStore = dstAccess->EntityComponentStore; - var dstManagedComponentStore = dstAccess->ManagedComponentStore; + [ReadOnly] + public NativeList Chunks; + [ReadOnly] + public NativeArray ClonedChunks; - // Copy shared component data - var dstSharedIndices = stackalloc int[srcChunk->Archetype->NumSharedComponents]; - srcChunk->SharedComponentValues.CopyTo(dstSharedIndices, 0, srcChunk->Archetype->NumSharedComponents); - dstManagedComponentStore.CopySharedComponents(srcManagedComponentStore, dstSharedIndices, srcChunk->Archetype->NumSharedComponents); + public void Execute(int index) + { + var srcChunk = Chunks[index].m_Chunk; + var dstChunk = ClonedChunks[index].m_Chunk; + var copySize = Chunk.GetChunkBufferSize(); + UnsafeUtility.MemCpy((byte*)dstChunk + Chunk.kBufferOffset, (byte*)srcChunk + Chunk.kBufferOffset, copySize); + BufferHeader.PatchAfterCloningChunk(dstChunk); + } + } - // @TODO: Why don't we memcpy the whole chunk. So we include all extra fields??? + static void CloneAndAddChunks(EntityManager srcEntityManager, EntityManager dstEntityManager, NativeList chunks) + { + s_CloneAndAddChunksProfilerMarker.Begin(); - // Allocate a new chunk - var srcArchetype = srcChunk->Archetype; - var dstArchetype = dstEntityComponentStore->GetOrCreateArchetype(srcArchetype->Types, srcArchetype->TypesCount); + // sort chunks by archetype and clone chunks + var srcSharedComponentIndices = new NativeList(128, Allocator.TempJob); + new CollectSharedComponentIndices + { + Chunks = chunks, + SharedComponentIndices = srcSharedComponentIndices, + }.Run(); - var dstChunk = dstEntityComponentStore->GetCleanChunkNoMetaChunk(dstArchetype, dstSharedIndices); - dstManagedComponentStore.Playback(ref dstEntityComponentStore->ManagedChangesTracker); + // copy shared components + s_CopySharedComponentsMarker.Begin(); + var srcAccess = srcEntityManager.GetCheckedEntityDataAccess(); + var dstAccess = dstEntityManager.GetCheckedEntityDataAccess(); + var srcManagedComponentStore = srcAccess->ManagedComponentStore; + var dstManagedComponentStore = dstAccess->ManagedComponentStore; - dstChunk->metaChunkEntity = srcChunk->metaChunkEntity; + var dstSharedComponentIndicesRemapped = new NativeArray(srcSharedComponentIndices, Allocator.TempJob); + dstManagedComponentStore.CopySharedComponents(srcManagedComponentStore, (int*)dstSharedComponentIndicesRemapped.GetUnsafeReadOnlyPtr(), dstSharedComponentIndicesRemapped.Length); + s_CopySharedComponentsMarker.End(); - // Release any references obtained by GetCleanChunk & CopySharedComponents - for (var i = 0; i < srcChunk->Archetype->NumSharedComponents; i++) - dstManagedComponentStore.RemoveReference(dstSharedIndices[i]); + // clone chunks + var cloned = new NativeArray(chunks.Length, Allocator.TempJob, NativeArrayOptions.UninitializedMemory); + new CreateNewChunks + { + Chunks = chunks, + ClonedChunks = cloned, + DstEntityManager = dstEntityManager, + SrcSharedComponentIndices = srcSharedComponentIndices, + DstSharedComponentIndices = dstSharedComponentIndicesRemapped, + }.Run(); + + var copyJob = new CopyChunkBuffers + { + Chunks = chunks, + ClonedChunks = cloned + }.Schedule(chunks.Length, default); + JobHandle.ScheduleBatchedJobs(); + srcSharedComponentIndices.Dispose(); - ChunkDataUtility.SetChunkCountKeepMetaChunk(dstChunk, srcChunk->Count); - dstManagedComponentStore.Playback(ref dstEntityComponentStore->ManagedChangesTracker); + s_PlaybackManagedChangesMarker.Begin(); + dstManagedComponentStore.Playback(ref dstAccess->EntityComponentStore->ManagedChangesTracker); - dstChunk->Archetype->EntityCount += srcChunk->Count; + // Release any references obtained by CopySharedComponents above + for (var i = 0; i < dstSharedComponentIndicesRemapped.Length; i++) + dstAccess->RemoveSharedComponentReference(dstSharedComponentIndicesRemapped[i]); + s_PlaybackManagedChangesMarker.End(); - var copySize = Chunk.GetChunkBufferSize(); - UnsafeUtility.MemCpy((byte*)dstChunk + Chunk.kBufferOffset, (byte*)srcChunk + Chunk.kBufferOffset, copySize); + dstSharedComponentIndicesRemapped.Dispose(); + copyJob.Complete(); - var numManagedComponents = dstChunk->Archetype->NumManagedComponents; - var hasHybridComponents = dstArchetype->HasHybridComponents; - for (int t = 0; t < numManagedComponents; ++t) + s_CopyManagedComponentsMarker.Begin(); + for (int i = 0; i < cloned.Length; i++) { - int indexInArchetype = t + dstChunk->Archetype->FirstManagedComponent; - - if (hasHybridComponents) + var dstChunk = cloned[i].m_Chunk; + var dstArchetype = dstChunk->Archetype; + var numManagedComponents = dstArchetype->NumManagedComponents; + var hasHybridComponents = dstArchetype->HasHybridComponents; + for (int t = 0; t < numManagedComponents; ++t) { - // We consider hybrid components as always different, there's no reason to clone those at this point - var typeCategory = TypeManager.GetTypeInfo(dstChunk->Archetype->Types[indexInArchetype].TypeIndex).Category; - if (typeCategory == TypeManager.TypeCategory.UnityEngineObject) - continue; - } + int indexInArchetype = t + dstChunk->Archetype->FirstManagedComponent; + var offset = dstChunk->Archetype->Offsets[indexInArchetype]; + var a = (int*) (dstChunk->Buffer + offset); + int count = dstChunk->Count; - var offset = dstChunk->Archetype->Offsets[indexInArchetype]; - var a = (int*)(dstChunk->Buffer + offset); + if (hasHybridComponents) + { + // We consider hybrid components as always different, there's no reason to clone those at this point. + var typeCategory = TypeManager.GetTypeInfo(dstChunk->Archetype->Types[indexInArchetype].TypeIndex).Category; + if (typeCategory == TypeManager.TypeCategory.UnityEngineObject) + { + // We still need to patch their indices, because otherwise they might point to invalid memory in + // the managed component store. Setting them to the invalid index 0 is harmless, assuming nobody + // actually operates on the shadow world. + UnsafeUtility.MemSet(a, 0, sizeof(int) * count); + continue; + } + } - dstManagedComponentStore.CloneManagedComponentsFromDifferentWorld(a, dstChunk->Count, srcManagedComponentStore, ref *dstAccess->EntityComponentStore); + dstManagedComponentStore.CloneManagedComponentsFromDifferentWorld(a, count, + srcManagedComponentStore, ref *dstAccess->EntityComponentStore); + } } + s_CopyManagedComponentsMarker.End(); + + // Ensure capacity in the dst world before we start linking entities. + dstAccess->EntityComponentStore->EnsureCapacity(srcEntityManager.EntityCapacity); + dstAccess->EntityComponentStore->CopyNextFreeEntityIndex(srcAccess->EntityComponentStore); - BufferHeader.PatchAfterCloningChunk(dstChunk); - dstChunk->SequenceNumber = srcChunk->SequenceNumber; + new PatchAndAddClonedChunks + { + SrcChunks = chunks, + DstChunks = cloned, + DstEntityComponentStore = dstAccess->EntityComponentStore + }.Schedule(chunks.Length, 64).Complete(); - return dstChunk; + cloned.Dispose(); + s_CloneAndAddChunksProfilerMarker.End(); } } } diff --git a/Unity.Entities/Diff/EntityManagerDiffer.cs b/Unity.Entities/Diff/EntityManagerDiffer.cs index bf7c32f0..ee12f64c 100644 --- a/Unity.Entities/Diff/EntityManagerDiffer.cs +++ b/Unity.Entities/Diff/EntityManagerDiffer.cs @@ -8,7 +8,7 @@ namespace Unity.Entities /// public struct EntityManagerDiffer : IDisposable { - static EntityQueryDesc EntityGuidQueryDesc { get; } = new EntityQueryDesc + internal static EntityQueryDesc EntityGuidQueryDesc { get; } = new EntityQueryDesc { All = new ComponentType[] { diff --git a/Unity.Entities/Diff/EntityPatcher.cs b/Unity.Entities/Diff/EntityPatcher.cs index d3b6ca17..d48aa99a 100644 --- a/Unity.Entities/Diff/EntityPatcher.cs +++ b/Unity.Entities/Diff/EntityPatcher.cs @@ -60,17 +60,17 @@ public static unsafe partial class EntityPatcher // Restore to BuildComponentToEntityMultiHashMap once fix goes in: // https://unity3d.atlassian.net/browse/DOTSR-354 [BurstCompile] - struct BuildComponentToEntityMultiHashMap : IJobChunk + struct BuildComponentToEntityMultiHashMap : IJobEntityBatch { [ReadOnly] public ComponentTypeHandle ComponentTypeHandle; [ReadOnly] public EntityTypeHandle EntityTypeHandle; [WriteOnly] public NativeMultiHashMap.ParallelWriter ComponentToEntity; - public void Execute(ArchetypeChunk chunk, int entityIndex, int chunkIndex) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) { - var components = chunk.GetNativeArray(ComponentTypeHandle); - var entities = chunk.GetNativeArray(EntityTypeHandle); + var components = batchInChunk.GetNativeArray(ComponentTypeHandle); + var entities = batchInChunk.GetNativeArray(EntityTypeHandle); for (var i = 0; i != entities.Length; i++) { ComponentToEntity.Add(components[i], entities[i]); @@ -81,17 +81,17 @@ public void Execute(ArchetypeChunk chunk, int entityIndex, int chunkIndex) // Restore to BuildComponentToEntityMultiHashMap once fix goes in: // https://unity3d.atlassian.net/browse/DOTSR-354 [BurstCompile] - struct BuildComponentToEntityHashMap : IJobChunk + struct BuildComponentToEntityHashMap : IJobEntityBatch { [ReadOnly] public ComponentTypeHandle ComponentTypeHandle; [ReadOnly] public EntityTypeHandle EntityTypeHandle; [WriteOnly] public NativeHashMap.ParallelWriter ComponentToEntity; - public void Execute(ArchetypeChunk chunk, int entityIndex, int chunkIndex) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) { - var components = chunk.GetNativeArray(ComponentTypeHandle); - var entities = chunk.GetNativeArray(EntityTypeHandle); + var components = batchInChunk.GetNativeArray(ComponentTypeHandle); + var entities = batchInChunk.GetNativeArray(EntityTypeHandle); for (var i = 0; i != entities.Length; i++) { ComponentToEntity.TryAdd(components[i], entities[i]); @@ -102,17 +102,17 @@ public void Execute(ArchetypeChunk chunk, int entityIndex, int chunkIndex) // Restore to BuildComponentToEntityMultiHashMap once fix goes in: // https://unity3d.atlassian.net/browse/DOTSR-354 [BurstCompile] - struct BuildEntityToComponentHashMap : IJobChunk + struct BuildEntityToComponentHashMap : IJobEntityBatch { [ReadOnly] public ComponentTypeHandle EntityGuidComponentTypeHandle; [ReadOnly] public EntityTypeHandle EntityTypeHandle; [WriteOnly] public NativeHashMap.ParallelWriter EntityToEntityGuid; - public void Execute(ArchetypeChunk chunk, int entityIndex, int chunkIndex) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) { - var components = chunk.GetNativeArray(EntityGuidComponentTypeHandle); - var entities = chunk.GetNativeArray(EntityTypeHandle); + var components = batchInChunk.GetNativeArray(EntityGuidComponentTypeHandle); + var entities = batchInChunk.GetNativeArray(EntityTypeHandle); for (var i = 0; i != entities.Length; i++) { EntityToEntityGuid.TryAdd(entities[i], components[i]); @@ -144,14 +144,14 @@ public void Execute() } [BurstCompile] - struct BuildLinkedEntityGroupHashMap : IJobChunk + struct BuildLinkedEntityGroupHashMap : IJobEntityBatch { [WriteOnly] public NativeHashMap.ParallelWriter EntityToLinkedEntityGroupRoot; [ReadOnly] public BufferTypeHandle LinkedEntityGroupTypeHandle; - public void Execute(ArchetypeChunk chunk, int entityIndex, int chunkIndex) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex) { - var linkedEntityGroups = chunk.GetBufferAccessor(LinkedEntityGroupTypeHandle); + var linkedEntityGroups = batchInChunk.GetBufferAccessor(LinkedEntityGroupTypeHandle); for (var bufferIndex = 0; bufferIndex != linkedEntityGroups.Length; bufferIndex++) { @@ -377,14 +377,14 @@ static void BuildEntityLookups( EntityTypeHandle = entityManager.GetEntityTypeHandle(), ComponentTypeHandle = entityManager.GetComponentTypeHandle(true), ComponentToEntity = entityGuidToEntity.AsParallelWriter() - }.Schedule(entityQuery); + }.ScheduleParallel(entityQuery, 1); var buildEntityToEntityGuid = new BuildEntityToComponentHashMap { EntityTypeHandle = entityManager.GetEntityTypeHandle(), EntityGuidComponentTypeHandle = entityManager.GetComponentTypeHandle(true), EntityToEntityGuid = entityToEntityGuid.AsParallelWriter() - }.Schedule(entityQuery); + }.ScheduleParallel(entityQuery, 1); JobHandle.CombineDependencies(buildEntityGuidToEntity, buildEntityToEntityGuid).Complete(); s_BuildEntityLookupsProfilerMarker.End(); @@ -404,13 +404,13 @@ static void BuildPrefabAndLinkedEntityGroupLookups( EntityTypeHandle = entityManager.GetEntityTypeHandle(), ComponentTypeHandle = entityManager.GetComponentTypeHandle(true), ComponentToEntity = entityGuidToPrefab.AsParallelWriter() - }.Schedule(prefabQuery); + }.ScheduleParallel(prefabQuery, 1); var buildLinkedEntityGroupLookups = new BuildLinkedEntityGroupHashMap { EntityToLinkedEntityGroupRoot = entityToLinkedEntityGroupRoot.AsParallelWriter(), LinkedEntityGroupTypeHandle = entityManager.GetBufferTypeHandle(true) - }.Schedule(linkedEntityGroupQuery); + }.ScheduleParallel(linkedEntityGroupQuery, 1); JobHandle.CombineDependencies(buildPrefabLookups, buildLinkedEntityGroupLookups).Complete(); s_BuildPrefabAndLinkedEntityGroupLookupsProfilerMarker.End(); @@ -510,6 +510,7 @@ static void ApplyDestroyEntities( NativeMultiHashMap entityGuidToEntity) { s_ApplyDestroyEntitiesProfilerMarker.Begin(); + var linkedEntityGroupType = ComponentType.ReadOnly(); var s = entityManager.GetCheckedEntityDataAccess(); for (var i = changeSet.Entities.Length - changeSet.DestroyedEntityCount; i < changeSet.Entities.Length; i++) { @@ -524,14 +525,18 @@ static void ApplyDestroyEntities( // @NOTE We do NOT remove from the `entityToEntityGuid` here since the LinkedEntityGroup removal will need it to map back groups. entityGuidToEntity.Remove(changeSet.Entities[i], entity); + // It's possible that this entity has already been deleted. This can happen in two different scenarios: + // - the change set is inconsistent with the state of the world. That means that the world has diverged. + // - the entity was part of a LinkedEntityGroup that has already been destroyed earlier while applying this patch if (s->Exists(entity)) { + // We need to remove the linked entity group component before destroying the entity, because + // otherwise we cannot handle the case when an entity has its linked entity group modified and + // is then destroyed: The Differ won't pick up the changes to the linked entity group, which + // means that the patcher operates on a stale linked entity group and deletes too many entities. + s->RemoveComponent(entity, linkedEntityGroupType); s->DestroyEntity(entity); } - else - { - Debug.LogWarning($"DestroyEntity({entity}) but it does not exist."); - } } while (packedEntities.TryGetNextValue(out entity, ref iterator)); } @@ -621,7 +626,7 @@ static void ApplyRemoveComponents( } else { - Debug.LogWarning($"RemoveComponent({packedEntityGuids[packedComponent.PackedEntityIndex]}, {component}) but the component already exists."); + Debug.LogWarning($"RemoveComponent({packedEntityGuids[packedComponent.PackedEntityIndex]}, {component}) but the component was already removed."); } } while (packedEntities.TryGetNextValue(out entity, ref iterator)); @@ -791,7 +796,7 @@ public void Execute() } else if (componentTypeInArchetype.IsBuffer) { - var typeInfo = TypeManager.GetTypeInfo(componentTypeInArchetype.TypeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(componentTypeInArchetype.TypeIndex); var elementSize = typeInfo.ElementSize; var lengthInElements = size / elementSize; var header = (BufferHeader*)EntityManager.GetComponentDataRawRW(entity, component.TypeIndex); @@ -884,7 +889,7 @@ internal struct ManagedObjectBlobAssetReferencePatch public ulong Target; } - internal struct EntityComponentPair : IEquatable + internal struct EntityComponentPair : IEquatable, IComparable { public Entity Entity; public ComponentType Component; @@ -893,6 +898,14 @@ public bool Equals(EntityComponentPair other) { return Entity == other.Entity && Component == other.Component; } + + public int CompareTo(EntityComponentPair other) + { + var result = Entity.CompareTo(other.Entity); + if (result != 0) return result; + result = Component.TypeIndex.CompareTo(other.Component.TypeIndex); + return result; + } } static void ApplyEntityPatches( @@ -1017,8 +1030,12 @@ static void ApplyEntityPatches( // Apply all managed entity patches using (var keys = managedObjectEntityReferencePatches.GetKeyArray(Allocator.Temp)) { - foreach (var pair in keys) + keys.Sort(); + var uniqueCount = keys.Unique(); + + for (var i = 0; i < uniqueCount; i++) { + var pair = keys[i]; var patches = managedObjectEntityReferencePatches.GetValuesForKey(pair); if (pair.Component.IsManagedComponent) @@ -1217,11 +1234,6 @@ static void ApplyLinkedEntityGroupRemovals( ChildEntity = childEntity, ChildEntityGuid = linkedEntityGroupRemoval.ChildEntityGuid, }); - - if (s->Exists(childEntity)) - { - s->DestroyEntity(childEntity); - } break; } } @@ -1235,20 +1247,7 @@ static void ApplyLinkedEntityGroupRemovals( for (var i = 0; i < removals.Length; ++i) { - var removal = removals[i]; - - for (var packedEntityGuidIndex = 0; packedEntityGuidIndex < packedEntityGuids.Length; ++packedEntityGuidIndex) - { - if (packedEntityGuids[packedEntityGuidIndex].Equals(removal.ChildEntityGuid)) - { - packedEntities.Remove(packedEntityGuidIndex, removal.ChildEntity); - break; - } - } - - entityToEntityGuid.Remove(removal.ChildEntity); - entityGuidToEntity.Remove(removal.ChildEntityGuid, removal.ChildEntity); - entityToLinkedEntityGroupRoot.Remove(removal.ChildEntity); + entityToLinkedEntityGroupRoot.Remove(removals[i].ChildEntity); } } s_ApplyLinkedEntityGroupRemovalsProfilerMarker.End(); diff --git a/Unity.Entities/Diff/EntityPatcherBlobs.cs b/Unity.Entities/Diff/EntityPatcherBlobs.cs index 11c16ca8..90bac4e7 100644 --- a/Unity.Entities/Diff/EntityPatcherBlobs.cs +++ b/Unity.Entities/Diff/EntityPatcherBlobs.cs @@ -159,13 +159,17 @@ static void ApplyBlobAssetChanges( s_ApplyBlobAssetChangesProfilerMarker.End(); #if !UNITY_DOTSRUNTIME - var managedObjectPatcher = new ManagedObjectEntityBlobAssetReferencePatcher(); + var managedObjectPatcher = new ManagedObjectBlobAssetReferencePatcher(patcherBlobAssetSystem); // Apply all managed entity patches using (var keys = managedObjectBlobAssetReferencePatches.GetKeyArray(Allocator.Temp)) { - foreach (var pair in keys) + keys.Sort(); + var uniqueCount = keys.Unique(); + + for (var i = 0; i < uniqueCount; i++) { + var pair = keys[i]; var patches = managedObjectBlobAssetReferencePatches.GetValuesForKey(pair); if (pair.Component.IsManagedComponent) @@ -192,23 +196,45 @@ static void ApplyBlobAssetChanges( } #if !UNITY_DOTSRUNTIME - class ManagedObjectEntityBlobAssetReferencePatcher : PropertyVisitor, Properties.Adapters.IVisit + class ManagedObjectBlobAssetReferencePatcher : PropertyVisitor, Properties.Adapters.IVisit { + EntityPatcherBlobAssetSystem m_EntityPatcherBlobAssetSystem; NativeMultiHashMap.Enumerator Patches; - public ManagedObjectEntityBlobAssetReferencePatcher() + public ManagedObjectBlobAssetReferencePatcher(EntityPatcherBlobAssetSystem entityPatcherBlobAssetSystem) { + m_EntityPatcherBlobAssetSystem = entityPatcherBlobAssetSystem; AddAdapter(this); } public void ApplyPatches(ref object obj, NativeMultiHashMap.Enumerator patches) { Patches = patches; - PropertyContainer.Visit(obj, this); + PropertyContainer.Visit(ref obj, this); } VisitStatus Properties.Adapters.IVisit.Visit(Property property, ref TContainer container, ref BlobAssetReferenceData value) { + // Make a copy for we can re-use the enumerator + var patches = Patches; + + foreach (var patch in patches) + { + if (value.m_Align8Union == patch.Id) + { + if (m_EntityPatcherBlobAssetSystem.TryGetBlobAsset(patch.Target, out var blobAssetPtr)) + { + value = new BlobAssetReferenceData {m_Ptr = (byte*) blobAssetPtr.Data}; + } + else + { + value = new BlobAssetReferenceData(); + } + + break; + } + } + return VisitStatus.Stop; } } diff --git a/Unity.Entities/ECBInterop.cs b/Unity.Entities/ECBInterop.cs index cb36740e..d455d6ba 100644 --- a/Unity.Entities/ECBInterop.cs +++ b/Unity.Entities/ECBInterop.cs @@ -15,7 +15,7 @@ internal unsafe static void _RemoveManagedReferences(EntityDataAccess* mgr, int* { for (var i = 0; i < count; i++) { - mgr->ManagedComponentStore.RemoveReference(sharedIndex[i]); + mgr->ManagedComponentStore.RemoveSharedComponentReference_Managed(sharedIndex[i]); } } catch (Exception e) diff --git a/Unity.Entities/ECBInterop.interop.gen.cs b/Unity.Entities/ECBInterop.interop.gen.cs index a1d73464..4503011c 100644 --- a/Unity.Entities/ECBInterop.interop.gen.cs +++ b/Unity.Entities/ECBInterop.interop.gen.cs @@ -22,7 +22,7 @@ namespace Unity.Entities unsafe partial struct ECBInterop { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstDiscard] private static void CheckDelegate(ref bool useDelegate) @@ -54,7 +54,7 @@ struct TagType_RemoveManagedReferences {}; [NotBurstCompatible] internal static void Initialize() { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (Managed._initialized) return; Managed._initialized = true; @@ -68,7 +68,7 @@ internal static void Initialize() internal static void RemoveManagedReferences (EntityDataAccess* mgr, int* sharedIndex, int count) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (!UseDelegate()) { #if ENABLE_UNITY_COLLECTIONS_CHECKS @@ -84,7 +84,7 @@ internal static void RemoveManagedReferences (EntityDataAccess* mgr, int* shared _RemoveManagedReferences(mgr, sharedIndex, count); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [MonoPInvokeCallback(typeof(Managed._dlg_RemoveManagedReferences))] #endif private static void _wrapper_RemoveManagedReferences (IntPtr mgr, IntPtr sharedIndex, int count) diff --git a/Unity.Entities/EditorRenderData.cs b/Unity.Entities/EditorRenderData.cs index 0d20494b..bd471f33 100644 --- a/Unity.Entities/EditorRenderData.cs +++ b/Unity.Entities/EditorRenderData.cs @@ -6,10 +6,6 @@ namespace Unity.Entities { public struct EditorRenderData : ISharedComponentData, IEquatable { -#if !UNITY_2020_1_OR_NEWER - public const UInt64 LiveLinkEditSceneViewMask = 1UL << 60; - public const UInt64 LiveLinkEditGameViewMask = 1UL << 59; -#endif public ulong SceneCullingMask; public GameObject PickableObject; diff --git a/Unity.Entities/EntityCommandBuffer.cs b/Unity.Entities/EntityCommandBuffer.cs index e1ae4149..24b651a8 100644 --- a/Unity.Entities/EntityCommandBuffer.cs +++ b/Unity.Entities/EntityCommandBuffer.cs @@ -38,6 +38,30 @@ internal struct EntityCommand public int BatchCount; } + [StructLayout(LayoutKind.Sequential)] + internal unsafe struct MultipleEntitiesCommand + { + public BasicCommand Header; + public EntityNode Entities; + public int EntitiesCount; + public Allocator Allocator; + } + + [StructLayout(LayoutKind.Sequential)] + internal unsafe struct MultipleEntitiesComponentCommand + { + public MultipleEntitiesCommand Header; + public int ComponentTypeIndex; + public int ComponentSize; + } + + [StructLayout(LayoutKind.Sequential)] + internal struct MultipleEntitiesAndComponentsCommand + { + public MultipleEntitiesCommand Header; + public ComponentTypes Types; + } + [StructLayout(LayoutKind.Sequential)] internal struct EntityComponentCommand { @@ -165,18 +189,49 @@ internal unsafe struct BufferHeaderNode public BufferHeader TempBuffer; } + [StructLayout(LayoutKind.Sequential)] + internal unsafe struct EntityNode + { + public Entity* Ptr; + public EntityNode* Prev; + } + + + [StructLayout(LayoutKind.Sequential, Size = 32)] + internal unsafe struct ChainCleanup + { + public EntityNode* EntityArraysCleanupList; + public BufferHeaderNode* BufferCleanupList; + public EntityComponentGCNode* CleanupList; + } + [StructLayout(LayoutKind.Sequential, Size = (64 > JobsUtility.CacheLineSize) ? 64: JobsUtility.CacheLineSize)] internal unsafe struct EntityCommandBufferChain { public ECBChunk* m_Tail; public ECBChunk* m_Head; - public EntityComponentGCNode* m_CleanupList; - public BufferHeaderNode* m_BufferCleanupList; + public ChainCleanup* m_Cleanup; public CreateCommand* m_PrevCreateCommand; public EntityCommand* m_PrevEntityCommand; public EntityCommandBufferChain* m_NextChain; public int m_LastSortKey; public bool m_CanBurstPlayback; + + internal static void InitChain(EntityCommandBufferChain* chain, Allocator allocator) + { + chain->m_Cleanup = (ChainCleanup*)Memory.Unmanaged.Allocate(sizeof(ChainCleanup), sizeof(ChainCleanup), allocator); + chain->m_Cleanup->CleanupList = null; + chain->m_Cleanup->BufferCleanupList = null; + chain->m_Cleanup->EntityArraysCleanupList = null; + + chain->m_Tail = null; + chain->m_Head = null; + chain->m_PrevCreateCommand = null; + chain->m_PrevEntityCommand = null; + chain->m_LastSortKey = -1; + chain->m_NextChain = null; + chain->m_CanBurstPlayback = true; + } } internal unsafe struct ECBSharedPlaybackState @@ -330,7 +385,13 @@ internal enum ECBCommand RemoveComponentEntityQuery, RemoveMultipleComponentsEntityQuery, DestroyEntitiesInEntityQuery, - AddSharedComponentEntityQuery + AddSharedComponentEntityQuery, + + AddComponentForMultipleEntities, + AddMultipleComponentsForMultipleEntities, + RemoveComponentForMultipleEntities, + RemoveMultipleComponentsForMultipleEntities, + DestroyMultipleEntities } /// @@ -394,6 +455,8 @@ internal unsafe struct EntityCommandBufferData public int m_BufferWithFixupsCount; public UnsafeAtomicCounter32 m_BufferWithFixups; + private static readonly int ALIGN_64_BIT = 8; + internal void InitConcurrentAccess() { if (m_ThreadedChains != null) @@ -407,7 +470,7 @@ internal void InitConcurrentAccess() for (var i = 0; i < JobsUtility.MaxJobThreadCount; ++i) { - m_ThreadedChains[i].m_CanBurstPlayback = true; + EntityCommandBufferChain.InitChain(&m_ThreadedChains[i], m_Allocator); } } @@ -488,10 +551,7 @@ internal bool RequiresEntityFixUp(byte* data, int typeIndex) if (!TypeManager.HasEntityReferences(typeIndex)) return false; - var componentInfo = TypeManager.GetTypeInfo(typeIndex); - var offsets = TypeManager.GetEntityOffsets(componentInfo); - var offsetCount = componentInfo.EntityOffsetCount; - + var offsets = TypeManager.GetEntityOffsets(typeIndex, out var offsetCount); for (int i = 0; i < offsetCount; i++) { if (((Entity*)(data + offsets[i].Offset))->Index < 0) @@ -514,7 +574,7 @@ internal void AddEntityComponentCommand(EntityCommandBufferChain* chain, int // NOTE: This has to be sizeof not TypeManager.SizeInChunk since we use UnsafeUtility.CopyStructureToPtr // even on zero size components. var typeSize = UnsafeUtility.SizeOf(); - var sizeNeeded = Align(sizeof(EntityComponentCommand) + typeSize, 8); + var sizeNeeded = Align(sizeof(EntityComponentCommand) + typeSize, ALIGN_64_BIT); ResetCommandBatching(chain); var cmd = (EntityComponentCommand*)Reserve(chain, sortKey, sizeNeeded); @@ -542,8 +602,8 @@ internal void AddEntityComponentCommand(EntityCommandBufferChain* chain, int Entity e, out int internalCapacity) where T : struct, IBufferElementData { var typeIndex = TypeManager.GetTypeIndex(); - var type = TypeManager.GetTypeInfo(); - var sizeNeeded = Align(sizeof(EntityBufferCommand) + type.SizeInChunk, 8); + ref readonly var type = ref TypeManager.GetTypeInfo(); + var sizeNeeded = Align(sizeof(EntityBufferCommand) + type.SizeInChunk, ALIGN_64_BIT); ResetCommandBatching(chain); var cmd = (EntityBufferCommand*)Reserve(chain, sortKey, sizeNeeded); @@ -558,8 +618,8 @@ internal void AddEntityComponentCommand(EntityCommandBufferChain* chain, int BufferHeader* header = &cmd->BufferNode.TempBuffer; BufferHeader.Initialize(header, type.BufferCapacity); - cmd->BufferNode.Prev = chain->m_BufferCleanupList; - chain->m_BufferCleanupList = &(cmd->BufferNode); + cmd->BufferNode.Prev = chain->m_Cleanup->BufferCleanupList; + chain->m_Cleanup->BufferCleanupList = &(cmd->BufferNode); internalCapacity = type.BufferCapacity; @@ -587,7 +647,7 @@ internal static int Align(int size, int alignmentPowerOfTwo) internal void AddEntityComponentTypeCommand(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, Entity e, ComponentType t) { - var sizeNeeded = Align(sizeof(EntityComponentCommand), 8); + var sizeNeeded = Align(sizeof(EntityComponentCommand), ALIGN_64_BIT); ResetCommandBatching(chain); var data = (EntityComponentCommand*)Reserve(chain, sortKey, sizeNeeded); @@ -602,7 +662,7 @@ internal void AddEntityComponentTypeCommand(EntityCommandBufferChain* chain, int internal void AddEntityComponentTypesCommand(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, Entity e, ComponentTypes t) { - var sizeNeeded = Align(sizeof(EntityMultipleComponentsCommand), 8); + var sizeNeeded = Align(sizeof(EntityMultipleComponentsCommand), ALIGN_64_BIT); ResetCommandBatching(chain); var data = (EntityMultipleComponentsCommand*)Reserve(chain, sortKey, sizeNeeded); @@ -616,7 +676,7 @@ internal void AddEntityComponentTypesCommand(EntityCommandBufferChain* chain, in internal void AddEntityQueryComponentCommand(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, EntityQuery entityQuery, ComponentType t) { - var sizeNeeded = Align(sizeof(EntityQueryComponentCommand), 8); + var sizeNeeded = Align(sizeof(EntityQueryComponentCommand), ALIGN_64_BIT); ResetCommandBatching(chain); @@ -628,7 +688,7 @@ internal void AddEntityQueryComponentCommand(EntityCommandBufferChain* chain, in internal void AddEntityQueryMultipleComponentsCommand(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, EntityQuery entityQuery, ComponentTypes t) { - var sizeNeeded = Align(sizeof(EntityQueryMultipleComponentsCommand), 8); + var sizeNeeded = Align(sizeof(EntityQueryMultipleComponentsCommand), ALIGN_64_BIT); ResetCommandBatching(chain); @@ -638,16 +698,149 @@ internal void AddEntityQueryMultipleComponentsCommand(EntityCommandBufferChain* data->Types = t; } - internal void AddEntitySharedComponentCommand(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, Entity e, int hashCode, object boxedObject) - where T : struct + internal bool AppendMultipleEntitiesCommand(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, EntityQuery entityQuery) { - var typeIndex = TypeManager.GetTypeIndex(); - var sizeNeeded = Align(sizeof(EntitySharedComponentCommand), 8); + var entities = entityQuery.ToEntityArray(m_Allocator); + if (entities.Length == 0) + { + entities.Dispose(); + return false; + } + + var sizeNeeded = Align(sizeof(MultipleEntitiesCommand), ALIGN_64_BIT); + + ResetCommandBatching(chain); + + var cmd = (MultipleEntitiesCommand*)Reserve(chain, sortKey, sizeNeeded); + cmd->Entities.Ptr = (Entity*) entities.GetUnsafeReadOnlyPtr(); + cmd->Entities.Prev = chain->m_Cleanup->EntityArraysCleanupList; + chain->m_Cleanup->EntityArraysCleanupList = &(cmd->Entities); + + cmd->EntitiesCount = entities.Length; + cmd->Allocator = m_Allocator; + + cmd->Header.CommandType = (int)op; + cmd->Header.TotalSize = sizeNeeded; + cmd->Header.SortKey = chain->m_LastSortKey; + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + DisposeSentinel.Dispose(ref entities.m_Safety, ref entities.m_DisposeSentinel); // dispose safety handle, but we'll dispose of the actual data in playback +#endif + return true; + } + + internal bool AppendMultipleEntitiesComponentCommandWithValue(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, EntityQuery entityQuery, T component) where T : struct, IComponentData + { + var ctype = ComponentType.ReadWrite(); + if (ctype.IsZeroSized) + return AppendMultipleEntitiesComponentCommand(chain, sortKey, op, entityQuery, ctype); + + var entities = entityQuery.ToEntityArray(m_Allocator); // disposed in playback + if (entities.Length == 0) + { + entities.Dispose(); + return false; + } + + var typeSize = UnsafeUtility.SizeOf(); + var sizeNeeded = Align(sizeof(MultipleEntitiesComponentCommand) + typeSize, ALIGN_64_BIT); + + ResetCommandBatching(chain); + + var cmd = (MultipleEntitiesComponentCommand*)Reserve(chain, sortKey, sizeNeeded); + cmd->Header.Entities.Ptr = (Entity*) entities.GetUnsafeReadOnlyPtr(); + cmd->Header.Entities.Prev = chain->m_Cleanup->EntityArraysCleanupList; + chain->m_Cleanup->EntityArraysCleanupList = &(cmd->Header.Entities); + + cmd->Header.EntitiesCount = entities.Length; + cmd->Header.Allocator = m_Allocator; + + cmd->Header.Header.CommandType = (int)op; + cmd->Header.Header.TotalSize = sizeNeeded; + cmd->Header.Header.SortKey = chain->m_LastSortKey; + cmd->ComponentTypeIndex = ctype.TypeIndex; + cmd->ComponentSize = typeSize; + + byte* componentData = (byte*)(cmd + 1); + UnsafeUtility.CopyStructureToPtr(ref component, componentData); #if ENABLE_UNITY_COLLECTIONS_CHECKS - if (TypeManager.GetTypeInfo().HasEntities) - throw new System.ArgumentException("EntityCommandBuffer.AddSharedComponentData does not support shared components with Entity fields."); + DisposeSentinel.Dispose(ref entities.m_Safety, ref entities.m_DisposeSentinel); // dispose safety handle, but we'll dispose of the actual data in playback #endif + return true; + } + + internal bool AppendMultipleEntitiesComponentCommand(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, EntityQuery entityQuery, ComponentType t) + { + var entities = entityQuery.ToEntityArray(m_Allocator); // disposed in playback + if (entities.Length == 0) + { + entities.Dispose(); + return false; + } + + var sizeNeeded = Align(sizeof(MultipleEntitiesComponentCommand), ALIGN_64_BIT); + + ResetCommandBatching(chain); + + var cmd = (MultipleEntitiesComponentCommand*)Reserve(chain, sortKey, sizeNeeded); + cmd->Header.Entities.Ptr = (Entity*) entities.GetUnsafeReadOnlyPtr(); + cmd->Header.Entities.Prev = chain->m_Cleanup->EntityArraysCleanupList; + chain->m_Cleanup->EntityArraysCleanupList = &(cmd->Header.Entities); + + cmd->Header.EntitiesCount = entities.Length; + cmd->Header.Allocator = m_Allocator; + + cmd->Header.Header.CommandType = (int)op; + cmd->Header.Header.TotalSize = sizeNeeded; + cmd->Header.Header.SortKey = chain->m_LastSortKey; + cmd->ComponentTypeIndex = t.TypeIndex; + cmd->ComponentSize = 0; // signifies that the command doesn't include a value for the new component + + #if ENABLE_UNITY_COLLECTIONS_CHECKS + DisposeSentinel.Dispose(ref entities.m_Safety, ref entities.m_DisposeSentinel); // dispose safety handle, but we'll dispose of the actual data in playback + #endif + return true; + } + + internal bool AppendMultipleEntitiesMultipleComponentsCommand(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, EntityQuery entityQuery, ComponentTypes t) + { + var entities = entityQuery.ToEntityArray(m_Allocator); // disposed in playback + if (entities.Length == 0) + { + entities.Dispose(); + return false; + } + + var sizeNeeded = Align(sizeof(MultipleEntitiesAndComponentsCommand), ALIGN_64_BIT); + + ResetCommandBatching(chain); + + var cmd = (MultipleEntitiesAndComponentsCommand*)Reserve(chain, sortKey, sizeNeeded); + cmd->Header.Entities.Ptr = (Entity*) entities.GetUnsafeReadOnlyPtr(); + cmd->Header.Entities.Prev = chain->m_Cleanup->EntityArraysCleanupList; + chain->m_Cleanup->EntityArraysCleanupList = &(cmd->Header.Entities); + + cmd->Header.EntitiesCount = entities.Length; + cmd->Header.Allocator = m_Allocator; + + cmd->Header.Header.CommandType = (int)op; + cmd->Header.Header.TotalSize = sizeNeeded; + cmd->Header.Header.SortKey = chain->m_LastSortKey; + + cmd->Types = t; + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + DisposeSentinel.Dispose(ref entities.m_Safety, ref entities.m_DisposeSentinel); // dispose safety handle, but we'll dispose of the actual data in playback +#endif + return true; + } + + internal void AddEntitySharedComponentCommand(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, Entity e, int hashCode, object boxedObject) + where T : struct + { + var typeIndex = TypeManager.GetTypeIndex(); + var sizeNeeded = Align(sizeof(EntitySharedComponentCommand), ALIGN_64_BIT); ResetCommandBatching(chain); chain->m_CanBurstPlayback = false; @@ -664,8 +857,8 @@ internal void AddEntitySharedComponentCommand(EntityCommandBufferChain* chain { data->GCNode.BoxedObject = GCHandle.Alloc(boxedObject); // We need to store all GCHandles on a cleanup list so we can dispose them later, regardless of if playback occurs or not. - data->GCNode.Prev = chain->m_CleanupList; - chain->m_CleanupList = &(data->GCNode); + data->GCNode.Prev = chain->m_Cleanup->CleanupList; + chain->m_Cleanup->CleanupList = &(data->GCNode); } else { @@ -675,7 +868,7 @@ internal void AddEntitySharedComponentCommand(EntityCommandBufferChain* chain internal void AddEntityQueryComponentCommand(EntityCommandBufferChain* chain, int sortKey, ECBCommand op, EntityQuery entityQuery) { - var sizeNeeded = Align(sizeof(EntityQueryComponentCommand), 8); + var sizeNeeded = Align(sizeof(EntityQueryComponentCommand), ALIGN_64_BIT); ResetCommandBatching(chain); var data = (EntityQueryCommand*)Reserve(chain, sortKey, sizeNeeded); @@ -700,12 +893,7 @@ internal void AddEntitySharedComponentCommand(EntityCommandBufferChain* chain where T : struct { var typeIndex = TypeManager.GetTypeIndex(); - var sizeNeeded = Align(sizeof(EntityQuerySharedComponentCommand), 8); - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - if (TypeManager.GetTypeInfo().HasEntities) - throw new System.ArgumentException("EntityCommandBuffer.AddSharedComponentDataEntity does not support shared components with Entity fields."); -#endif + var sizeNeeded = Align(sizeof(EntityQuerySharedComponentCommand), ALIGN_64_BIT); ResetCommandBatching(chain); chain->m_CanBurstPlayback = false; @@ -718,8 +906,8 @@ internal void AddEntitySharedComponentCommand(EntityCommandBufferChain* chain { data->GCNode.BoxedObject = GCHandle.Alloc(boxedObject); // We need to store all GCHandles on a cleanup list so we can dispose them later, regardless of if playback occurs or not. - data->GCNode.Prev = chain->m_CleanupList; - chain->m_CleanupList = &(data->GCNode); + data->GCNode.Prev = chain->m_Cleanup->CleanupList; + chain->m_Cleanup->CleanupList = &(data->GCNode); } else { @@ -732,9 +920,9 @@ internal void AddEntitySharedComponentCommand(EntityCommandBufferChain* chain int newSortKey = sortKey; if (newSortKey < chain->m_LastSortKey) { - EntityCommandBufferChain* archivedChain = (EntityCommandBufferChain*)Memory.Unmanaged.Allocate(sizeof(EntityCommandBufferChain), 8, m_Allocator); + EntityCommandBufferChain* archivedChain = (EntityCommandBufferChain*)Memory.Unmanaged.Allocate(sizeof(EntityCommandBufferChain), ALIGN_64_BIT, m_Allocator); *archivedChain = *chain; - UnsafeUtility.MemClear(chain, sizeof(EntityCommandBufferChain)); + EntityCommandBufferChain.InitChain(chain, m_Allocator); chain->m_NextChain = archivedChain; } chain->m_LastSortKey = newSortKey; @@ -793,7 +981,7 @@ public void AppendToBufferCommand(EntityCommandBufferChain* chain, int sortKe // NOTE: This has to be sizeof not TypeManager.SizeInChunk since we use UnsafeUtility.CopyStructureToPtr // even on zero size components. var typeSize = UnsafeUtility.SizeOf(); - var sizeNeeded = Align(sizeof(EntityComponentCommand) + typeSize, 8); + var sizeNeeded = Align(sizeof(EntityComponentCommand) + typeSize, ALIGN_64_BIT); ResetCommandBatching(chain); var cmd = (EntityComponentCommand*)Reserve(chain, sortKey, sizeNeeded); @@ -867,16 +1055,12 @@ internal void WaitForWriterJobs() AtomicSafetyHandle.EnforceAllBufferJobsHaveCompleted(m_ArrayInvalidationSafety); } - -#if UNITY_2020_1_OR_NEWER private static readonly SharedStatic s_staticSafetyId = SharedStatic.GetOrCreate(); [BurstDiscard] private static void CreateStaticSafetyId() { s_staticSafetyId.Data = AtomicSafetyHandle.NewStaticSafetyId(); } - -#endif #endif static readonly ProfilerMarker k_ProfileEcbPlayback = new ProfilerMarker("EntityCommandBuffer.Playback"); @@ -966,15 +1150,7 @@ internal EntityCommandBuffer(Allocator label, int disposeSentinelStackDepth, Pla m_Data->m_BufferWithFixupsCount = 0; m_Data->m_BufferWithFixups = new UnsafeAtomicCounter32(&m_Data->m_BufferWithFixupsCount); - m_Data->m_MainThreadChain.m_CleanupList = null; - m_Data->m_MainThreadChain.m_BufferCleanupList = null; - m_Data->m_MainThreadChain.m_Tail = null; - m_Data->m_MainThreadChain.m_Head = null; - m_Data->m_MainThreadChain.m_PrevCreateCommand = null; - m_Data->m_MainThreadChain.m_PrevEntityCommand = null; - m_Data->m_MainThreadChain.m_LastSortKey = -1; - m_Data->m_MainThreadChain.m_NextChain = null; - m_Data->m_MainThreadChain.m_CanBurstPlayback = true; + EntityCommandBufferChain.InitChain(&m_Data->m_MainThreadChain, label); m_Data->m_ThreadedChains = null; m_Data->m_RecordedChainCount = 0; @@ -1000,7 +1176,6 @@ internal EntityCommandBuffer(Allocator label, int disposeSentinelStackDepth, Pla m_SafetyReadOnlyCount = 0; m_SafetyReadWriteCount = 3; -#if UNITY_2020_1_OR_NEWER if (s_staticSafetyId.Data == 0) { CreateStaticSafetyId(); @@ -1008,7 +1183,6 @@ internal EntityCommandBuffer(Allocator label, int disposeSentinelStackDepth, Pla AtomicSafetyHandle.SetStaticSafetyId(ref m_Safety0, s_staticSafetyId.Data); AtomicSafetyHandle.SetStaticSafetyId(ref m_BufferSafety, s_staticSafetyId.Data); AtomicSafetyHandle.SetStaticSafetyId(ref m_ArrayInvalidationSafety, s_staticSafetyId.Data); -#endif #endif m_Data->m_Entity = new Entity(); m_Data->m_BufferWithFixups.Reset(); @@ -1049,28 +1223,40 @@ private void FreeChain(EntityCommandBufferChain* chain, PlaybackPolicy playbackP { return; } - var cleanup_list = chain->m_CleanupList; + + var cleanup_list = chain->m_Cleanup->CleanupList; while (cleanup_list != null) { cleanup_list->BoxedObject.Free(); cleanup_list = cleanup_list->Prev; } - chain->m_CleanupList = null; + chain->m_Cleanup->CleanupList = null; // Buffers played in ecbs which can be played back more than once are always copied during playback. + // Also, entity arrays in commands are only disposed in playback if ECB is single playback. if (playbackPolicy == PlaybackPolicy.MultiPlayback || !didPlayback) { - var bufferCleanupList = chain->m_BufferCleanupList; + var bufferCleanupList = chain->m_Cleanup->BufferCleanupList; while (bufferCleanupList != null) { var prev = bufferCleanupList->Prev; BufferHeader.Destroy(&bufferCleanupList->TempBuffer); bufferCleanupList = prev; } + + var entityArraysCleanupList = chain->m_Cleanup->EntityArraysCleanupList; + while (entityArraysCleanupList != null) + { + var prev = entityArraysCleanupList->Prev; + UnsafeUtility.Free(entityArraysCleanupList->Ptr, m_Data->m_Allocator); + entityArraysCleanupList = prev; + } } - chain->m_BufferCleanupList = null; + chain->m_Cleanup->BufferCleanupList = null; + chain->m_Cleanup->EntityArraysCleanupList = null; + Memory.Unmanaged.Free(chain->m_Cleanup, m_Data->m_Allocator); while (chain->m_Tail != null) { @@ -1314,6 +1500,144 @@ public void DestroyEntity(EntityQuery entityQuery) ECBCommand.DestroyEntitiesInEntityQuery, entityQuery); } + /// Records a command to add a component to all entities matching a query. + /// The set of entities matching the query is 'captured' in the method call, and the recorded command stores an array of all these entities. + /// + /// Does not affect entities which already have the component. + /// + /// If one of these entities is destroyed before playback, playback will fail. (With safety checks enabled, an exception is thrown. Without safety checks, + /// playback will perform invalid and unsafe memory access.) + /// + /// The query specifying the entities to which the component is added. + /// The type of component to add. + /// True if the query matches any entities. False if it matches none. + public void AddComponentForEntityQuery(EntityQuery entityQuery, ComponentType componentType) + { + AssertDidNotPlayback(); + m_Data->AppendMultipleEntitiesComponentCommand(&m_Data->m_MainThreadChain, MainThreadSortKey, + ECBCommand.AddComponentForMultipleEntities, entityQuery, componentType); + } + + /// Records a command to add a component to all entities matching a query. + /// The set of entities matching the query is 'captured' in the method call, and the recorded command stores an array of all these entities. + /// + /// Does not affect entities which already have the component. + /// + /// If one of these entities is destroyed before playback, playback will fail. (With safety checks enabled, an exception is thrown. Without safety checks, + /// playback will perform invalid and unsafe memory access.) + /// + /// The query specifying the entities to which the component is added. + /// The type of component to add. + /// True if the query matches any entities. False if it matches none. + public void AddComponentForEntityQuery(EntityQuery entityQuery) + { + AddComponentForEntityQuery(entityQuery, ComponentType.ReadWrite()); + } + + /// Records a command to add a component to all entities matching a query. Also sets the value of this new component on all the matching entities. + /// The set of entities matching the query is 'captured' in the method call, and the recorded command stores an array of all these entities. + /// + /// Entities which already have the component type will have the component set to the value. + /// + /// If one of these entities is destroyed before playback, playback will fail. (With safety checks enabled, an exception is thrown. Without safety checks, + /// playback will perform invalid and unsafe memory access.) + /// + /// The query specifying the entities to which the component is added. + /// The value to set on the new component in playback for all entities matching the query. + /// The type of component to add. + /// True if the query matches any entities. False if it matches none. + public void AddComponentForEntityQuery(EntityQuery entityQuery, T value) where T : struct, IComponentData + { + AssertDidNotPlayback(); + m_Data->AppendMultipleEntitiesComponentCommandWithValue(&m_Data->m_MainThreadChain, MainThreadSortKey, + ECBCommand.AddComponentForMultipleEntities, entityQuery, value); + } + + /// Records a command to add multiple components to all entities matching a query. + /// The set of entities matching the query is 'captured' in the method call, and the recorded command stores an array of all these entities. + /// + /// Some matching entities may already have some or all of the specified components. After this operation, all matching entities will have all of the components. + /// + /// If one of these entities is destroyed before playback, playback will fail. (With safety checks enabled, an exception is thrown. Without safety checks, + /// playback will perform invalid and unsafe memory access.) + /// + /// The query specifying the entities to which the components are added. + /// The types of components to add. + /// True if the query matches any entities. False if it matches none. + public void AddComponentForEntityQuery(EntityQuery entityQuery, ComponentTypes componentTypes) + { + AssertDidNotPlayback(); + m_Data->AppendMultipleEntitiesMultipleComponentsCommand(&m_Data->m_MainThreadChain, MainThreadSortKey, + ECBCommand.AddMultipleComponentsForMultipleEntities, entityQuery, componentTypes); + } + + /// Records a command to remove a component from all entities matching a query. + /// The set of entities matching the query is 'captured' in the method call, and the recorded command stores an array of all these entities. + /// + /// Does not affect entities already missing the component. + /// + /// If one of these entities is destroyed before playback, playback will fail. (With safety checks enabled, an exception is thrown. Without safety checks, + /// playback will perform invalid and unsafe memory access.) + /// + /// The query specifying the entities from which the component is removed. + /// The types of component to remove. + /// True if the query matches any entities. False if it matches none. + public void RemoveComponentForEntityQuery(EntityQuery entityQuery, ComponentType componentType) + { + AssertDidNotPlayback(); + m_Data->AppendMultipleEntitiesComponentCommand(&m_Data->m_MainThreadChain, MainThreadSortKey, + ECBCommand.RemoveComponentForMultipleEntities, entityQuery, componentType); + } + + /// Records a command to remove a component from all entities matching a query. + /// The set of entities matching the query is 'captured' in the method call, and the recorded command stores an array of all these entities. + /// + /// Does not affect entities already missing the component. + /// + /// If one of these entities is destroyed before playback, playback will fail. (With safety checks enabled, an exception is thrown. Without safety checks, + /// playback will perform invalid and unsafe memory access.) + /// + /// The query specifying the entities from which the component is removed. + /// The type of component to remove. + /// True if the query matches any entities. False if it matches none. + public void RemoveComponentForEntityQuery(EntityQuery entityQuery) + { + RemoveComponentForEntityQuery(entityQuery, ComponentType.ReadWrite()); + } + + /// Records a command to remove multiple components from all entities matching a query. + /// The set of entities matching the query is 'captured' in the method call, and the recorded command stores an array of all these entities. + /// + /// Some matching entities may already be missing some or all of the specified components. After this operation, all matching entities will have none of the components. + /// + /// If one of these entities is destroyed before playback, playback will fail. (With safety checks enabled, an exception is thrown. Without safety checks, + /// playback will perform invalid and unsafe memory access.) + /// + /// The query specifying the entities from which the components are removed. + /// The types of components to remove. + /// True if the query matches any entities. False if it matches none. + public void RemoveComponentForEntityQuery(EntityQuery entityQuery, ComponentTypes componentTypes) + { + AssertDidNotPlayback(); + m_Data->AppendMultipleEntitiesMultipleComponentsCommand(&m_Data->m_MainThreadChain, MainThreadSortKey, + ECBCommand.RemoveMultipleComponentsForMultipleEntities, entityQuery, componentTypes); + } + + /// Records a command to destroy all entities matching a query. + /// The set of entities matching the query is 'captured' in the method call, and the recorded command stores an array of all these entities. + /// + /// If one of these entities is destroyed before playback, playback will fail. (With safety checks enabled, an exception is thrown. Without safety checks, + /// playback will perform invalid and unsafe memory access.) + /// + /// The query specifying the entities to destroy. + /// True if the query matches any entities. False if it matches none. + public void DestroyEntitiesForEntityQuery(EntityQuery entityQuery) + { + AssertDidNotPlayback(); + m_Data->AppendMultipleEntitiesCommand(&m_Data->m_MainThreadChain, MainThreadSortKey, + ECBCommand.DestroyMultipleEntities, entityQuery); + } + static bool IsDefaultObject(ref T component, out int hashCode) where T : struct, ISharedComponentData { var defaultValue = default(T); @@ -1326,6 +1650,7 @@ public void AddSharedComponent(Entity e, T component) where T : struct, IShar { EnforceSingleThreadOwnership(); AssertDidNotPlayback(); + int hashCode; if (IsDefaultObject(ref component, out hashCode)) m_Data->AddEntitySharedComponentCommand(&m_Data->m_MainThreadChain, MainThreadSortKey, ECBCommand.AddSharedComponentData, e, hashCode, null); @@ -1342,6 +1667,7 @@ public void AddSharedComponent(EntityQuery entityQuery, T component) where T { EnforceSingleThreadOwnership(); AssertDidNotPlayback(); + int hashCode; if (IsDefaultObject(ref component, out hashCode)) m_Data->AddEntitySharedComponentCommand(&m_Data->m_MainThreadChain, MainThreadSortKey, ECBCommand.AddSharedComponentEntityQuery, entityQuery, hashCode, null); @@ -1353,6 +1679,7 @@ public void SetSharedComponent(Entity e, T component) where T : struct, IShar { EnforceSingleThreadOwnership(); AssertDidNotPlayback(); + int hashCode; if (IsDefaultObject(ref component, out hashCode)) m_Data->AddEntitySharedComponentCommand(&m_Data->m_MainThreadChain, MainThreadSortKey, ECBCommand.SetSharedComponentData, e, hashCode, null); @@ -1587,12 +1914,7 @@ private static void FixupComponentData(byte* data, int typeIndex, ECBSharedPlayb private static void FixupComponentData(byte* data, int count, int typeIndex, ECBSharedPlaybackState playbackState) { - var componentTypeInfo = TypeManager.GetTypeInfo(typeIndex); - -//#if ENABLE_UNITY_COLLECTIONS_CHECKS -// if (!componentTypeInfo.HasEntities) -// Assert.IsTrue(false, "componentTypeInfo.EntityOffsets is null."); -//#endif + ref readonly var componentTypeInfo = ref TypeManager.GetTypeInfo(typeIndex); var offsets = TypeManager.GetEntityOffsets(componentTypeInfo); var offsetCount = componentTypeInfo.EntityOffsetCount; @@ -1612,15 +1934,42 @@ private static void FixupComponentData(byte* data, int count, int typeIndex, ECB } } - static void SetCommandDataWithFixup( - EntityDataAccess mgr, EntityComponentCommand* cmd, Entity entity, - ECBSharedPlaybackState playbackState) + +#if !NET_DOTS + class FixupManagedComponent : Unity.Properties.PropertyVisitor, Properties.Adapters.IVisit { - byte* data = (byte*)mgr.GetComponentDataRawRW(entity, cmd->ComponentTypeIndex); - UnsafeUtility.MemCpy(data, cmd + 1, cmd->ComponentSize); - FixupComponentData(data, cmd->ComponentTypeIndex, - playbackState); + [ThreadStatic] + public static FixupManagedComponent _CachedVisitor; + + ECBSharedPlaybackState PlaybackState; + public FixupManagedComponent() + { + AddAdapter(this); + } + + public static void FixUpComponent(object obj, in ECBSharedPlaybackState state) + { + var visitor = FixupManagedComponent._CachedVisitor; + if (FixupManagedComponent._CachedVisitor == null) + FixupManagedComponent._CachedVisitor = visitor = new FixupManagedComponent(); + + visitor.PlaybackState = state; + Unity.Properties.PropertyContainer.Visit(ref obj, visitor); + } + + Unity.Properties.VisitStatus Properties.Adapters.IVisit.Visit(Unity.Properties.Property property, ref TContainer container, ref Entity value) + { + if (value.Index < 0) + { + var index = -value.Index - 1; + Entity real = *(PlaybackState.CreateEntityBatch + index); + value = real; + } + + return Unity.Properties.VisitStatus.Stop; + } } +#endif static void SetCommandDataWithFixup( EntityComponentStore* mgr, EntityComponentCommand* cmd, Entity entity, @@ -1671,7 +2020,6 @@ static void PlaybackChain( Assert.IsTrue(false, "chainStates[" + currentChain + "].Offset is invalid: " + off + ". Should be between 0 and " + chunk->Used); #endif -#if !UNITY_DOTSRUNTIME if (chainStates[currentChain].CanBurstPlayback) { // Bursting PlaybackChain @@ -1679,7 +2027,6 @@ static void PlaybackChain( chainStates, currentChain, nextChain, isFirstPlayback, playbackPolicy); } else -#endif { // Non-Bursted PlaybackChain _PlaybackChainChunk(mgr, managedReferenceIndexRemovalCount, ref archetypeChanges, ref playbackState, @@ -1957,7 +2304,7 @@ internal static bool PlaybackUnmanagedCommandInternal(EntityDataAccess* mgr, Bas BufferHeader* bufferHeader = (BufferHeader*)mgr->EntityComponentStore->GetComponentDataWithTypeRW(entity, cmd->ComponentTypeIndex, mgr->EntityComponentStore->GlobalSystemVersion); - var typeInfo = TypeManager.GetTypeInfo(cmd->ComponentTypeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(cmd->ComponentTypeIndex); var alignment = typeInfo.AlignmentInBytes; var elementSize = typeInfo.ElementSize; @@ -1977,7 +2324,7 @@ internal static bool PlaybackUnmanagedCommandInternal(EntityDataAccess* mgr, Bas BufferHeader* bufferHeader = (BufferHeader*)mgr->EntityComponentStore->GetComponentDataWithTypeRW(entity, cmd->ComponentTypeIndex, mgr->EntityComponentStore->GlobalSystemVersion); - var typeInfo = TypeManager.GetTypeInfo(cmd->ComponentTypeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(cmd->ComponentTypeIndex); var alignment = typeInfo.AlignmentInBytes; var elementSize = typeInfo.ElementSize; @@ -2029,7 +2376,6 @@ internal static bool PlaybackUnmanagedCommandInternal(EntityDataAccess* mgr, Bas case ECBCommand.DestroyEntitiesInEntityQuery: { - ProcessTrackedChanges(mgr, managedReferenceIndexRemovalCount, ref archetypeChanges); StartTrackingChanges(mgr, managedReferenceIndexRemovalCount, ref archetypeChanges); @@ -2038,6 +2384,102 @@ internal static bool PlaybackUnmanagedCommandInternal(EntityDataAccess* mgr, Bas mgr->DestroyEntityDuringStructuralChange(cmd->QueryData->MatchingArchetypes, cmd->EntityQueryFilter); } return true; + + case ECBCommand.AddComponentForMultipleEntities: + { + var cmd = (MultipleEntitiesComponentCommand*)header; + var componentType = ComponentType.FromTypeIndex(cmd->ComponentTypeIndex); + var entities = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(cmd->Header.Entities.Ptr, + cmd->Header.EntitiesCount, cmd->Header.Allocator); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref entities, AtomicSafetyHandle.Create()); +#endif + + mgr->AddComponentDuringStructuralChange(entities, componentType); + if (cmd->ComponentSize > 0) + { + for (int i = 0; i < entities.Length; i++) + { + mgr->EntityComponentStore->SetComponentDataRawEntityHasComponent(entities[i], + cmd->ComponentTypeIndex, cmd + 1, cmd->ComponentSize); + } + } + + if (playbackPolicy == PlaybackPolicy.SinglePlayback) + entities.Dispose(); + } + return true; + + case ECBCommand.RemoveComponentForMultipleEntities: + { + var cmd = (MultipleEntitiesComponentCommand*)header; + var componentType = ComponentType.FromTypeIndex(cmd->ComponentTypeIndex); + var entities = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(cmd->Header.Entities.Ptr, + cmd->Header.EntitiesCount, cmd->Header.Allocator); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref entities, AtomicSafetyHandle.Create()); +#endif + + mgr->RemoveComponentDuringStructuralChange(entities, componentType); + + if (playbackPolicy == PlaybackPolicy.SinglePlayback) + entities.Dispose(); + } + return true; + + case ECBCommand.AddMultipleComponentsForMultipleEntities: + { + var cmd = (MultipleEntitiesAndComponentsCommand*)header; + var entities = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(cmd->Header.Entities.Ptr, + cmd->Header.EntitiesCount, cmd->Header.Allocator); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref entities, AtomicSafetyHandle.Create()); +#endif + + mgr->AddMultipleComponentsDuringStructuralChange(entities, cmd->Types); + + if (playbackPolicy == PlaybackPolicy.SinglePlayback) + entities.Dispose(); + } + return true; + + case ECBCommand.RemoveMultipleComponentsForMultipleEntities: + { + var cmd = (MultipleEntitiesAndComponentsCommand*)header; + var entities = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(cmd->Header.Entities.Ptr, + cmd->Header.EntitiesCount, cmd->Header.Allocator); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref entities, AtomicSafetyHandle.Create()); +#endif + + mgr->RemoveMultipleComponentsDuringStructuralChange(entities, cmd->Types); + + if (playbackPolicy == PlaybackPolicy.SinglePlayback) + entities.Dispose(); + } + return true; + + case ECBCommand.DestroyMultipleEntities: + { + var cmd = (MultipleEntitiesCommand*)header; + var entities = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(cmd->Entities.Ptr, + cmd->EntitiesCount, cmd->Allocator); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref entities, AtomicSafetyHandle.Create()); +#endif + + mgr->DestroyEntityDuringStructuralChange(entities); + + if (playbackPolicy == PlaybackPolicy.SinglePlayback) + entities.Dispose(); + } + return true; + } return false; @@ -2060,7 +2502,14 @@ static void PlaybackManagedCommand(EntityDataAccess* mgr, BasicCommand* header, ProcessTrackedChanges(mgr, managedReferenceIndexRemovalCount, ref archetypeChanges); StartTrackingChanges(mgr, managedReferenceIndexRemovalCount, ref archetypeChanges); } - mgr->SetComponentObject(entity, ComponentType.FromTypeIndex(cmd->ComponentTypeIndex), cmd->GetBoxedObject(), mgr->ManagedComponentStore); + + var box = cmd->GetBoxedObject(); +#if !NET_DOTS + if (box != null && TypeManager.HasEntityReferences(cmd->ComponentTypeIndex)) + FixupManagedComponent.FixUpComponent(box, playbackState); +#endif + + mgr->SetComponentObject(entity, ComponentType.FromTypeIndex(cmd->ComponentTypeIndex), box, mgr->ManagedComponentStore); } break; @@ -2087,6 +2536,13 @@ static void PlaybackManagedCommand(EntityDataAccess* mgr, BasicCommand* header, ProcessTrackedChanges(mgr, managedReferenceIndexRemovalCount, ref archetypeChanges); StartTrackingChanges(mgr, managedReferenceIndexRemovalCount, ref archetypeChanges); } + + var box = cmd->GetBoxedObject(); +#if !NET_DOTS + if (box != null && TypeManager.HasEntityReferences(cmd->ComponentTypeIndex)) + FixupManagedComponent.FixUpComponent(box, playbackState); +#endif + mgr->SetComponentObject(entity, ComponentType.FromTypeIndex(cmd->ComponentTypeIndex), cmd->GetBoxedObject(), mgr->ManagedComponentStore); } break; @@ -2144,15 +2600,15 @@ static void ProcessTrackedChanges(EntityDataAccess* mgr, UnsafeList* managedRefe [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] static void AssertValidEntityQuery(EntityQueryCommand* cmd, EntityComponentStore* store) { - #if ENABLE_UNITY_COLLECTIONS_CHECKS +#if ENABLE_UNITY_COLLECTIONS_CHECKS EntityComponentStore.AssertValidEntityQuery(cmd->Store, store); - #endif +#endif } [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] static void AssertSinglePlayback(ECBCommand commandType, bool isFirstPlayback) { - #if ENABLE_UNITY_COLLECTIONS_CHECKS +#if ENABLE_UNITY_COLLECTIONS_CHECKS if (isFirstPlayback) return; @@ -2165,7 +2621,7 @@ static void AssertSinglePlayback(ECBCommand commandType, bool isFirstPlayback) default: return; } - #endif +#endif } static BufferHeader CloneBuffer(BufferHeader* srcBuffer, int componentTypeIndex) @@ -2174,20 +2630,11 @@ static BufferHeader CloneBuffer(BufferHeader* srcBuffer, int componentTypeIndex) BufferHeader.Initialize(&clone, 0); var alignment = 8; // TODO: Need a way to compute proper alignment for arbitrary non-generic types in TypeManager - var elementSize = TypeManager.GetTypeInfo(componentTypeIndex).ElementSize; + ref readonly var elementSize = ref TypeManager.GetTypeInfo(componentTypeIndex).ElementSize; BufferHeader.Assign(&clone, BufferHeader.GetElementPointer(srcBuffer), srcBuffer->Length, elementSize, alignment, false, 0); return clone; } - - [Obsolete( - "ToConcurrent() been renamed to AsParallelWriter() (RemovedAfter 2020-09-01). (UnityUpgradable) -> AsParallelWriter()", - false)] - public ParallelWriter ToConcurrent() - { - return AsParallelWriter(); - } - public ParallelWriter AsParallelWriter() { EntityCommandBuffer.ParallelWriter parallelWriter; @@ -2217,13 +2664,6 @@ public ParallelWriter AsParallelWriter() return parallelWriter; } - [Obsolete( - "EntityCommandBuffer.Concurrent has been renamed to EntityCommandBuffer.ParallelWriter (RemovedAfter 2020-09-01). (UnityUpgradable) -> EntityCommandBuffer/ParallelWriter", - true)] - public struct Concurrent - { - } - /// /// Allows concurrent (deterministic) command buffer recording. /// @@ -2503,16 +2943,12 @@ public static void SetComponent(this EntityCommandBuffer ecb, Entity e, T com AddEntityComponentCommandFromMainThread(ecb.m_Data, ecb.MainThreadSortKey, ECBCommand.SetManagedComponentData, e, component); } + internal static void AddEntityComponentCommandFromMainThread(EntityCommandBufferData* ecbd, int sortKey, ECBCommand op, Entity e, T component) where T : class, IComponentData { var typeIndex = TypeManager.GetTypeIndex(); var sizeNeeded = EntityCommandBufferData.Align(sizeof(EntityManagedComponentCommand), 8); -#if ENABLE_UNITY_COLLECTIONS_CHECKS - if (TypeManager.GetTypeInfo().HasEntities) - throw new System.ArgumentException("EntityCommandBuffer.AddComponentData does not support managed components with Entity fields."); -#endif - var chain = &ecbd->m_MainThreadChain; ecbd->ResetCommandBatching(chain); var data = (EntityManagedComponentCommand*)ecbd->Reserve(chain, sortKey, sizeNeeded); @@ -2527,8 +2963,8 @@ internal static void AddEntityComponentCommandFromMainThread(EntityCommandBuf { data->GCNode.BoxedObject = GCHandle.Alloc(component); // We need to store all GCHandles on a cleanup list so we can dispose them later, regardless of if playback occurs or not. - data->GCNode.Prev = chain->m_CleanupList; - chain->m_CleanupList = &(data->GCNode); + data->GCNode.Prev = chain->m_Cleanup->CleanupList; + chain->m_Cleanup->CleanupList = &(data->GCNode); } else { diff --git a/Unity.Entities/EntityCommandBuffer.interop.gen.cs b/Unity.Entities/EntityCommandBuffer.interop.gen.cs index 90a05d30..0c631355 100644 --- a/Unity.Entities/EntityCommandBuffer.interop.gen.cs +++ b/Unity.Entities/EntityCommandBuffer.interop.gen.cs @@ -22,7 +22,7 @@ namespace Unity.Entities public unsafe partial struct EntityCommandBuffer { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstDiscard] private static void CheckDelegate(ref bool useDelegate) @@ -52,7 +52,7 @@ static class Managed [NotBurstCompatible] internal static void Initialize() { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (Managed._initialized) return; Managed._initialized = true; @@ -63,7 +63,7 @@ internal static void Initialize() private static void PlaybackChainChunk (EntityDataAccess* mgr, Unity.Collections.LowLevel.Unsafe.UnsafeList* managedReferenceIndexRemovalCount, ref EntityComponentStore.ArchetypeChanges archetypeChanges, ref ECBSharedPlaybackState playbackState, ECBChainPlaybackState* chainStates, int currentChain, int nextChain, bool isFirstPlayback, PlaybackPolicy playbackPolicy) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_PlaybackChainChunk(mgr, managedReferenceIndexRemovalCount, ref archetypeChanges, ref playbackState, chainStates, currentChain, nextChain, isFirstPlayback, playbackPolicy); @@ -74,7 +74,7 @@ private static void PlaybackChainChunk (EntityDataAccess* mgr, Unity.Collection _PlaybackChainChunk(mgr, managedReferenceIndexRemovalCount, ref archetypeChanges, ref playbackState, chainStates, currentChain, nextChain, isFirstPlayback, playbackPolicy); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_PlaybackChainChunk))] private static void _mono_to_burst_PlaybackChainChunk(IntPtr mgr, IntPtr managedReferenceIndexRemovalCount, ref EntityComponentStore.ArchetypeChanges archetypeChanges, ref ECBSharedPlaybackState playbackState, IntPtr chainStates, int currentChain, int nextChain, bool isFirstPlayback, PlaybackPolicy playbackPolicy) diff --git a/Unity.Entities/EntityCommandBufferSystem.cs b/Unity.Entities/EntityCommandBufferSystem.cs index da50ace1..2ee393a9 100644 --- a/Unity.Entities/EntityCommandBufferSystem.cs +++ b/Unity.Entities/EntityCommandBufferSystem.cs @@ -80,7 +80,9 @@ internal NativeList PendingBuffers public EntityCommandBuffer CreateCommandBuffer() { var cmds = new EntityCommandBuffer(Allocator.TempJob, -1, PlaybackPolicy.SinglePlayback); - cmds.SystemID = ms_ExecutingSystem != null ? ms_ExecutingSystem.CheckedState()->m_SystemID : 0; + var world = World.Unmanaged; + var state = world.ResolveSystemState(world.ExecutingSystem); + cmds.SystemID = state != null ? state->m_SystemID : 0; m_PendingBuffers.Add(cmds); return cmds; diff --git a/Unity.Entities/EntityComponentStore.cs b/Unity.Entities/EntityComponentStore.cs index 2f40d4aa..a05dc88a 100644 --- a/Unity.Entities/EntityComponentStore.cs +++ b/Unity.Entities/EntityComponentStore.cs @@ -148,28 +148,22 @@ public void PatchEntitiesForPrefab(Archetype* archetype, Chunk* chunk, int index UnsafeUtility.MemCpy(remapSrcCopy, remapSrc, remapSrcSize); UnsafeUtility.MemCpy(remapDstCopy, remapDst, remapDstSize); - var hasHybridComponents = archetype->HasHybridComponents; - var types = archetype->Types; - var firstManagedComponent = archetype->FirstManagedComponent; for (int i = 0; i < numManagedComponents; ++i) { - int type = i + firstManagedComponent; + int indexInArchetype = i + firstManagedComponent; - if (hasHybridComponents && TypeManager.GetTypeInfo(types[type].TypeIndex).Category == TypeManager.TypeCategory.UnityEngineObject) + if (archetype->Types[indexInArchetype].HasEntityReferences) { + var a = (int*)ChunkDataUtility.GetComponentDataRO(chunk, 0, indexInArchetype); for (int ei = 0; ei < allocatedCount; ++ei) - { - managedComponents[ei * numManagedComponents + i] = 0; // 0 means do not remap - } + managedComponents[ei * numManagedComponents + i] = a[ei + indexInChunk]; } else { - var a = (int*) ChunkDataUtility.GetComponentDataRO(chunk, 0, type); for (int ei = 0; ei < allocatedCount; ++ei) - { - managedComponents[ei * numManagedComponents + i] = a[ei + indexInChunk]; - } + managedComponents[ei * numManagedComponents + i] = 0; // 0 means do not remap + } } @@ -293,7 +287,12 @@ internal unsafe partial struct EntityComponentStore ulong m_NextChunkSequenceNumber; + // Free list index for entity id allocation int m_NextFreeEntityIndex; + // Any entity creation / destruction, bumps this version number + // Generally any write to m_NextFreeEntityIndex must also increment m_EntityCreateDestroyVersion + int m_EntityCreateDestroyVersion; + uint m_GlobalSystemVersion; int m_EntitiesCapacity; int m_IntentionallyInconsistent; @@ -391,6 +390,7 @@ internal void EnsureCapacity(int value) public void CopyNextFreeEntityIndex(EntityComponentStore* src) { m_NextFreeEntityIndex = src->m_NextFreeEntityIndex; + m_EntityCreateDestroyVersion++; } private void InitializeAdditionalCapacity(int start) @@ -443,10 +443,6 @@ public static void Create(EntityComponentStore* entities, ulong startChunkSequen entities->m_ChunkListChangesTracker = new ChunkListChanges(); entities->m_ChunkListChangesTracker.Init(); -#if USE_VIRTUAL_MEMORY - s_chunkStore.Data.Initialize(TotalChunkAddressSpaceInBytes); -#endif - // Sanity check a few alignments #if UNITY_ASSERTIONS // Buffer should be 16 byte aligned to ensure component data layout itself can guarantee being aligned @@ -467,24 +463,16 @@ internal void InitializeTypeManagerPointers() m_EntityOffsetInfos = TypeManager.GetEntityOffsetsPointer(); } - public TypeManager.TypeInfo GetTypeInfo(int typeIndex) + public ref readonly TypeManager.TypeInfo GetTypeInfo(int typeIndex) { - return m_TypeInfos[typeIndex & TypeManager.ClearFlagsMask]; + return ref m_TypeInfos[typeIndex & TypeManager.ClearFlagsMask]; } - public TypeManager.EntityOffsetInfo* GetEntityOffsets(TypeManager.TypeInfo typeInfo) + public TypeManager.EntityOffsetInfo* GetEntityOffsets(in TypeManager.TypeInfo typeInfo) { - if (!typeInfo.HasEntities) - return null; return m_EntityOffsetInfos + typeInfo.EntityOffsetStartIndex; } - public TypeManager.EntityOffsetInfo* GetEntityOffsets(int typeIndex) - { - var typeInfo = m_TypeInfos[typeIndex & TypeManager.ClearFlagsMask]; - return GetEntityOffsets(typeInfo); - } - public int ChunkComponentToNormalTypeIndex(int typeIndex) => m_TypeInfos[typeIndex & TypeManager.ClearFlagsMask].TypeIndex; public static void Destroy(EntityComponentStore* entityComponentStore) @@ -539,24 +527,36 @@ void Dispose() m_ArchetypeChunkAllocator.Dispose(); ManagedChangesTracker.Dispose(); m_ManagedComponentFreeIndex.Dispose(); - s_chunkStore.Data.Dispose(); } - public void FreeAllEntities() + public void FreeAllEntities(bool resetVersion) { for (var i = 0; i != EntitiesCapacity; i++) { m_EntityInChunkByEntity[i].IndexInChunk = i + 1; - m_VersionByEntity[i] += 1; m_EntityInChunkByEntity[i].Chunk = null; #if UNITY_EDITOR m_NameByEntity[i] = new NumberedWords(); #endif } + if (resetVersion) + { + for (var i = 0; i != EntitiesCapacity; i++) + m_VersionByEntity[i] = 1; + } + else + { + for (var i = 0; i != EntitiesCapacity; i++) + m_VersionByEntity[i] += 1; + } + + + // Last entity indexInChunk identifies that we ran out of space... m_EntityInChunkByEntity[EntitiesCapacity - 1].IndexInChunk = -1; m_NextFreeEntityIndex = 0; + m_EntityCreateDestroyVersion++; } public void FreeEntities(Chunk* chunk) @@ -577,6 +577,7 @@ public void FreeEntities(Chunk* chunk) } m_NextFreeEntityIndex = freeIndex; + m_EntityCreateDestroyVersion++; } #if UNITY_EDITOR @@ -798,6 +799,8 @@ public void AllocateConsecutiveEntitiesForLoading(int count) int newCapacity = count + 1; // make room for Entity.Null EnsureCapacity(newCapacity + 1); // the last entity is used to indicate we ran out of space m_NextFreeEntityIndex = newCapacity; + m_EntityCreateDestroyVersion++; + for (int i = 1; i < newCapacity; ++i) { Assert.IsTrue(m_EntityInChunkByEntity[i].Chunk == null); // Loading into non-empty entity manager is not supported. @@ -823,8 +826,7 @@ public void AddExistingEntitiesInChunk(Chunk* chunk) } } - public void AllocateEntitiesForRemapping(EntityComponentStore* srcEntityComponentStore, - ref NativeArray entityRemapping) + public void AllocateEntitiesForRemapping(EntityComponentStore* srcEntityComponentStore, ref NativeArray entityRemapping) { var count = srcEntityComponentStore->EntitiesCapacity; for (var i = 0; i != count; i++) @@ -839,17 +841,19 @@ public void AllocateEntitiesForRemapping(EntityComponentStore* srcEntityComponen } var entityVersion = m_VersionByEntity[m_NextFreeEntityIndex]; - +#if UNITY_EDITOR + m_NameByEntity[m_NextFreeEntityIndex] = srcEntityComponentStore->m_NameByEntity[i]; +#endif EntityRemapUtility.AddEntityRemapping(ref entityRemapping, new Entity {Version = srcEntityComponentStore->m_VersionByEntity[i], Index = i}, new Entity {Version = entityVersion, Index = m_NextFreeEntityIndex}); m_NextFreeEntityIndex = entityIndexInChunk; + m_EntityCreateDestroyVersion++; } } } - public void AllocateEntitiesForRemapping(Chunk* chunk, - ref NativeArray entityRemapping) + public void AllocateEntitiesForRemapping(Chunk* chunk, EntityComponentStore* srcComponentStore, ref NativeArray entityRemapping) { var count = chunk->Count; var entities = (Entity*)chunk->Buffer; @@ -863,16 +867,19 @@ public void AllocateEntitiesForRemapping(Chunk* chunk, } var entityVersion = m_VersionByEntity[m_NextFreeEntityIndex]; +#if UNITY_EDITOR + m_NameByEntity[m_NextFreeEntityIndex] = srcComponentStore->m_NameByEntity[entities[i].Index]; +#endif EntityRemapUtility.AddEntityRemapping(ref entityRemapping, new Entity {Version = entities[i].Version, Index = entities[i].Index}, new Entity {Version = entityVersion, Index = m_NextFreeEntityIndex}); m_NextFreeEntityIndex = entityIndexInChunk; + m_EntityCreateDestroyVersion++; } } - public void RemapChunk(Archetype* arch, Chunk* chunk, int baseIndex, int count, - ref NativeArray entityRemapping) + public void RemapChunk(Archetype* arch, Chunk* chunk, int baseIndex, int count, ref NativeArray entityRemapping) { Assert.AreEqual(chunk->Archetype->Offsets[0], 0); Assert.AreEqual(chunk->Archetype->SizeOfs[0], sizeof(Entity)); @@ -907,27 +914,11 @@ public enum ComponentOperation RemoveComponent } - internal bool CreateEntityBatchListForAddComponent(NativeArray entities, - ComponentType componentType, - out NativeList entityBatchList) - { - return CreateEntityBatchList(m_EntityInChunkByEntity, entities, ComponentOperation.AddComponent, - componentType, out entityBatchList); - } - - internal bool CreateEntityBatchListForRemoveComponent(NativeArray entities, - ComponentType componentType, - out NativeList entityBatchList) - { - return CreateEntityBatchList(m_EntityInChunkByEntity, entities, ComponentOperation.RemoveComponent, - componentType, out entityBatchList); - } - [BurstMonoInteropMethod(MakePublic = false)] private static void _EntityBatchFromEntityChunkDataShared(in EntityInChunk* chunkData, int chunkCount, EntityBatchInChunk* entityBatchList, int* currentbatchIndex, - ComponentOperation operation, ref ComponentType componentType, int* foundError) + int nSharedComponentsToAdd, int* foundError) { *foundError = 0; @@ -958,14 +949,10 @@ private static void _EntityBatchFromEntityChunkDataShared(in EntityInChunk* chun if (runBreak && entityBatch.Chunk != null) { - if (operation == ComponentOperation.AddComponent) + if (nSharedComponentsToAdd + entityBatch.Chunk->Archetype->NumSharedComponents > kMaxSharedComponentCount) { - if (componentType.IsSharedComponent && - (entityBatch.Chunk->Archetype->NumSharedComponents == kMaxSharedComponentCount)) - { - *foundError = 1; - return; - } + *foundError = 1; + return; } entityBatchList[*currentbatchIndex] = entityBatch; @@ -1001,14 +988,10 @@ private static void _EntityBatchFromEntityChunkDataShared(in EntityInChunk* chun return; // Deleted Entity (not an error) - if (operation == ComponentOperation.AddComponent) + if (nSharedComponentsToAdd + entityBatch.Chunk->Archetype->NumSharedComponents > kMaxSharedComponentCount) { - if (componentType.IsSharedComponent && - (entityBatch.Chunk->Archetype->NumSharedComponents == kMaxSharedComponentCount)) - { - *foundError = 1; - return; - } + *foundError = 1; + return; } entityBatchList[*currentbatchIndex] = entityBatch; @@ -1044,8 +1027,15 @@ private static void _GatherEntityInChunkForEntities(Entity* Entities, } } + internal bool CreateEntityBatchList(NativeArray entities, int nSharedComponentsToAdd, + out NativeList entityBatchList) + { + return CreateEntityBatchList(m_EntityInChunkByEntity, entities, + nSharedComponentsToAdd, out entityBatchList); + } + private static bool CreateEntityBatchList(EntityInChunk* entityInChunk, NativeArray entities, - ComponentOperation componentOperation, ComponentType componentType, + int nSharedComponentsToAdd, out NativeList entityBatchList) { if (entities.Length == 0) @@ -1072,7 +1062,7 @@ private static bool CreateEntityBatchList(EntityInChunk* entityInChunk, NativeAr EntityBatchFromEntityChunkDataShared((EntityInChunk*)entityChunkData.GetUnsafePtr(), entityChunkData.Length, (EntityBatchInChunk*)entityBatchList.GetUnsafePtr(),&finalBatchSize, - componentOperation,ref componentType,&foundError); + nSharedComponentsToAdd,&foundError); entityBatchList.Length = finalBatchSize; @@ -1182,20 +1172,7 @@ struct ChunkStore static readonly int Log2ChunkSizeInBytesRoundedUpToPow2 = math.tzcnt(ChunkSizeInBytesRoundedUpToPow2); static readonly int MegachunkSizeInBytes = 1 << (Log2ChunkSizeInBytesRoundedUpToPow2 + 6); - int m_refCount; - -#if USE_VIRTUAL_MEMORY - uint m_MegachunkSizeInPages; - long m_pagesCommitted; - VMRange m_chunkAddressSpace; - - public ulong ReservedBytes => m_chunkAddressSpace.SizeInBytes; - public ulong CommittedBytes => (ulong)(m_pagesCommitted * m_chunkAddressSpace.PageSizeInBytes); - - public long ReservedPages => m_chunkAddressSpace.pageCount; - public long CommittedPages => m_pagesCommitted; - public long PageSizeInBytes => m_chunkAddressSpace.PageSizeInBytes; -#endif +// int m_refCount; int AllocationFailed(int megachunkIndex, int offset, int count) { @@ -1215,55 +1192,6 @@ int AllocationFailed(int megachunkIndex, int offset, int count) } } - public int Initialize(ulong sizeOfAddressRangeInBytes) - { - m_refCount++; - - if (m_refCount != 1) - { - return kErrorNone; - } - -#if USE_VIRTUAL_MEMORY - m_pagesCommitted = 0; - - BaselibErrorState errorState = default; - m_chunkAddressSpace = VirtualMemoryUtility.ReserveAddressSpace(sizeOfAddressRangeInBytes / VirtualMemoryUtility.DefaultPageSizeInBytes, VirtualMemoryUtility.DefaultPageSizeInBytes, out errorState); - - VirtualMemoryUtility.ReportWrappedBaselibError(errorState); - if(errorState.OutOfMemory) - { - FixedString512 error = "Failed to reserve "; - error.Append(sizeOfAddressRangeInBytes); - FixedString128 e2 = " bytes. System ran out of memory."; - error.Append(e2); - Debug.LogError(error); - } - - m_MegachunkSizeInPages = (uint)(((MegachunkSizeInBytes + m_chunkAddressSpace.PageSizeInBytes - 1) & ~(m_chunkAddressSpace.PageSizeInBytes - 1)) / m_chunkAddressSpace.PageSizeInBytes); -#endif - return kErrorNone; - } - - public void Dispose() - { - m_refCount--; - - if(m_refCount == 0) - { -#if USE_VIRTUAL_MEMORY - BaselibErrorState errorState = default; - VirtualMemoryUtility.FreeAddressSpace(m_chunkAddressSpace, out errorState); - VirtualMemoryUtility.ReportWrappedBaselibError(errorState); - if(errorState.InvalidAddressRange) - { - FixedString512 error = "Failed to free address range because it is was never reserved."; - Debug.LogError(error); - } -#endif - } - } - void longestConsecutiveOnes(long value, out int offset, out int count) { count = 0; @@ -1310,46 +1238,8 @@ public int AllocateContiguousChunks(out Chunk* value, int requestedCount, out in { if (originalValue == 0) // we are the one who allocates this megachunk! we set the first bit in the mask { -#if USE_VIRTUAL_MEMORY - BaselibErrorState errorState = default; - - IntPtr allocationPtr = - (IntPtr)((long)m_chunkAddressSpace.ptr + megachunkIndex * MegachunkSizeInBytes); - VMRange allocationRange = new VMRange { ptr = allocationPtr, log2PageSize = - m_chunkAddressSpace.log2PageSize, pageCount = m_MegachunkSizeInPages }; - - if (m_pagesCommitted + m_MegachunkSizeInPages > m_chunkAddressSpace.pageCount) - { - FixedString512 error = - "You have committed all virtual memory reserved for Chunks ("; - error.Append(CommittedBytes); - FixedString128 e2 = " bytes). To allocate more than "; - error.Append(e2); - error.Append((CommittedBytes / (ulong)ChunkSizeInBytesRoundedUpToPow2)); - e2 = " Chunks, you must reserve a larger virtual address range by setting "; - error.Append(e2); - e2 = nameof(TotalChunkAddressSpaceInBytes); - error.Append(e2); - e2 = " during World initialization."; - error.Append(e2); - Debug.LogError(error); - } - - VirtualMemoryUtility.CommitMemory(allocationRange, out errorState); - VirtualMemoryUtility.ReportWrappedBaselibError(errorState); - - long allocated = (long)allocationRange.ptr; - if (!errorState.Success) - { - AllocationFailed(megachunkIndex, bit); - return (int)errorState.code; - } - - Interlocked.Add(ref m_pagesCommitted, m_MegachunkSizeInPages); -#else long allocated = (long) Memory.Unmanaged.Allocate(MegachunkSizeInBytes, CollectionHelper.CacheLineSize, Allocator.Persistent); -#endif if (allocated == 0) // if the allocation failed... return AllocationFailed(megachunkIndex, offset, actualCount); while (0L != Interlocked.CompareExchange(ref megachunk[megachunkIndex], @@ -1414,21 +1304,7 @@ public int FreeContiguousChunks(Chunk* value, int count) long allocated = Interlocked.Exchange(ref megachunk[megachunkIndex], 0L); // swap the pointer with null if (allocated == 0L) // but if it was already null, return kErrorChunkAlreadyFreed; // someone already freed our pointer? that's uncool -#if USE_VIRTUAL_MEMORY - VMRange rangeToFree = new VMRange { ptr = (IntPtr)allocated, log2PageSize = m_chunkAddressSpace.log2PageSize, pageCount = m_MegachunkSizeInPages }; - BaselibErrorState errorState = default; - VirtualMemoryUtility.DecommitMemory(rangeToFree, out errorState); - VirtualMemoryUtility.ReportWrappedBaselibError(errorState); - - if (!errorState.Success) - { - return (int)errorState.code; - } - - Interlocked.Add(ref m_pagesCommitted, -m_MegachunkSizeInPages); -#else Memory.Unmanaged.Free((void*)allocated, Allocator.Persistent); // no need to hurry, nobody depends on this finishing -#endif } return kErrorNone; } @@ -1444,19 +1320,11 @@ public int FreeContiguousChunks(Chunk* value, int count) public static void GetChunkMemoryStats(out long reservedPages, out long committedPages, out ulong reservedBytes, out ulong committedBytes, out long pageSizeInBytes) { -#if USE_VIRTUAL_MEMORY - reservedPages = s_chunkStore.Data.ReservedPages; - reservedBytes = s_chunkStore.Data.ReservedBytes; - committedPages = s_chunkStore.Data.CommittedPages; - committedBytes = s_chunkStore.Data.CommittedBytes; - pageSizeInBytes = s_chunkStore.Data.PageSizeInBytes; -#else reservedPages = 0; reservedBytes = 0; committedPages = 0; committedBytes = 0; pageSizeInBytes = 0; -#endif } public Chunk* AllocateChunk() @@ -1523,12 +1391,11 @@ static int CalculateChunkCapacity(int bufferSize, ushort* componentSizes, int co // the same as the type count. var scalarEntityPatchCount = 0; var bufferEntityPatchCount = 0; - var managedEntityPatchCount = 0; var numManagedArrays = 0; var numSharedComponents = 0; for (var i = 0; i < count; ++i) { - var ct = GetTypeInfo(types[i].TypeIndex); + ref readonly var ct = ref GetTypeInfo(types[i].TypeIndex); if (ct.Category == TypeManager.TypeCategory.ISharedComponentData) { @@ -1537,13 +1404,9 @@ static int CalculateChunkCapacity(int bufferSize, ushort* componentSizes, int co else if (TypeManager.IsManagedComponent(types[i].TypeIndex)) { ++numManagedArrays; - ++managedEntityPatchCount; } else { - if (!ct.HasEntities) - continue; - if (ct.BufferCapacity >= 0) bufferEntityPatchCount += ct.EntityOffsetCount; else if (ct.SizeInChunk > 0) @@ -1560,7 +1423,6 @@ static int CalculateChunkCapacity(int bufferSize, ushort* componentSizes, int co ChunkAllocate(&dstArchetype->TypeMemoryOrder, count); ChunkAllocate(&dstArchetype->ScalarEntityPatches, scalarEntityPatchCount); ChunkAllocate(&dstArchetype->BufferEntityPatches, bufferEntityPatchCount); - ChunkAllocate(&dstArchetype->ManagedEntityPatches, managedEntityPatchCount); dstArchetype->TypesCount = count; Memory.Array.Copy(dstArchetype->Types, types, count); @@ -1597,17 +1459,19 @@ static int CalculateChunkCapacity(int bufferSize, ushort* componentSizes, int co for (var i = 0; i < count; ++i) { var typeIndex = types[i].TypeIndex; - var typeInfo = GetTypeInfo(typeIndex); + ref readonly var typeInfo = ref GetTypeInfo(typeIndex); if (typeIndex == m_DisabledType) dstArchetype->Flags |= ArchetypeFlags.Disabled; if (typeIndex == m_PrefabType) dstArchetype->Flags |= ArchetypeFlags.Prefab; if (typeIndex == m_ChunkHeaderType) dstArchetype->Flags |= ArchetypeFlags.HasChunkHeader; - if (typeInfo.BlobAssetRefOffsetCount > 0) - dstArchetype->Flags |= ArchetypeFlags.ContainsBlobAssetRefs; + if (typeInfo.HasBlobAssetRefs) + dstArchetype->Flags |= ArchetypeFlags.HasBlobAssetRefs; if (!types[i].IsChunkComponent && types[i].IsManagedComponent && typeInfo.Category == TypeManager.TypeCategory.UnityEngineObject) dstArchetype->Flags |= ArchetypeFlags.HasHybridComponents; + if (types[i].IsManagedComponent && TypeManager.HasEntityReferences(typeIndex)) + dstArchetype->Flags |= ArchetypeFlags.HasManagedEntityRefs; } if (dstArchetype->NumManagedComponents > 0) @@ -1621,12 +1485,11 @@ static int CalculateChunkCapacity(int bufferSize, ushort* componentSizes, int co dstArchetype->ScalarEntityPatchCount = scalarEntityPatchCount; dstArchetype->BufferEntityPatchCount = bufferEntityPatchCount; - dstArchetype->ManagedEntityPatchCount = managedEntityPatchCount; int maxCapacity = TypeManager.MaximumChunkCapacity; for (var i = 0; i < count; ++i) { - var cType = GetTypeInfo(types[i].TypeIndex); + ref readonly var cType = ref GetTypeInfo(types[i].TypeIndex); if (i < dstArchetype->NonZeroSizedTypesCount) { if (cType.SizeInChunk > short.MaxValue) @@ -1710,10 +1573,9 @@ bool MemoryOrderCompare(int lhs, int rhs) // Fill in arrays of scalar, buffer and managed entity patches var scalarPatchInfo = dstArchetype->ScalarEntityPatches; var bufferPatchInfo = dstArchetype->BufferEntityPatches; - var managedPatchInfo = dstArchetype->ManagedEntityPatches; for (var i = 0; i != count; i++) { - var ct = GetTypeInfo(types[i].TypeIndex); + ref readonly var ct = ref GetTypeInfo(types[i].TypeIndex); var offsets = GetEntityOffsets(ct); var offsetCount = ct.EntityOffsetCount; @@ -1723,8 +1585,6 @@ bool MemoryOrderCompare(int lhs, int rhs) } else if (TypeManager.IsManagedComponent(ct.TypeIndex)) { - var index = dstArchetype->TypeMemoryOrder[i]; - managedPatchInfo = EntityRemapUtility.AppendManagedEntityPatches(managedPatchInfo, ComponentType.FromTypeIndex(ct.TypeIndex)); } else if (ct.SizeInChunk > 0) { @@ -1735,7 +1595,6 @@ bool MemoryOrderCompare(int lhs, int rhs) dstArchetype->ScalarEntityPatchCount = scalarEntityPatchCount; dstArchetype->BufferEntityPatchCount = bufferEntityPatchCount; - dstArchetype->ManagedEntityPatchCount = managedEntityPatchCount; UnsafeUtility.MemClear(dstArchetype->QueryMaskArray, sizeof(byte) * 128); // Update the list of all created archetypes @@ -1761,8 +1620,7 @@ bool MemoryOrderCompare(int lhs, int rhs) private bool ArchetypeSystemStateCleanupComplete(Archetype* archetype) { - if (archetype->TypesCount == 2 && archetype->Types[1].TypeIndex == m_CleanupEntityType) return true; - return false; + return archetype->TypesCount == 2 && archetype->Types[1].TypeIndex == m_CleanupEntityType; } private bool ArchetypeSystemStateCleanupNeeded(Archetype* archetype) diff --git a/Unity.Entities/EntityComponentStore.interop.gen.cs b/Unity.Entities/EntityComponentStore.interop.gen.cs index ac161cf4..cfb84f00 100644 --- a/Unity.Entities/EntityComponentStore.interop.gen.cs +++ b/Unity.Entities/EntityComponentStore.interop.gen.cs @@ -22,7 +22,7 @@ namespace Unity.Entities unsafe partial struct EntityComponentStore { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstDiscard] private static void CheckDelegate(ref bool useDelegate) @@ -42,7 +42,7 @@ static class Managed { public static bool _initialized = false; - public delegate void _dlg_EntityBatchFromEntityChunkDataShared(in EntityInChunk* chunkData, int chunkCount, IntPtr entityBatchList, IntPtr currentbatchIndex, EntityComponentStore.ComponentOperation operation, ref ComponentType componentType, IntPtr foundError); + public delegate void _dlg_EntityBatchFromEntityChunkDataShared(in EntityInChunk* chunkData, int chunkCount, IntPtr entityBatchList, IntPtr currentbatchIndex, int nSharedComponentsToAdd, IntPtr foundError); public static _dlg_EntityBatchFromEntityChunkDataShared _bfp_EntityBatchFromEntityChunkDataShared; public delegate void _dlg_SortEntityInChunk(IntPtr entityInChunks, int count); public static _dlg_SortEntityInChunk _bfp_SortEntityInChunk; @@ -56,7 +56,7 @@ static class Managed [NotBurstCompatible] internal static void Initialize() { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (Managed._initialized) return; Managed._initialized = true; @@ -67,37 +67,37 @@ internal static void Initialize() #endif } - private static void EntityBatchFromEntityChunkDataShared (in EntityInChunk* chunkData, int chunkCount, EntityBatchInChunk* entityBatchList, int* currentbatchIndex, EntityComponentStore.ComponentOperation operation, ref ComponentType componentType, int* foundError) + private static void EntityBatchFromEntityChunkDataShared (in EntityInChunk* chunkData, int chunkCount, EntityBatchInChunk* entityBatchList, int* currentbatchIndex, int nSharedComponentsToAdd, int* foundError) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { - _forward_mono_EntityBatchFromEntityChunkDataShared(in chunkData, chunkCount, entityBatchList, currentbatchIndex, operation, ref componentType, foundError); + _forward_mono_EntityBatchFromEntityChunkDataShared(in chunkData, chunkCount, entityBatchList, currentbatchIndex, nSharedComponentsToAdd, foundError); return; } #endif - _EntityBatchFromEntityChunkDataShared(in chunkData, chunkCount, entityBatchList, currentbatchIndex, operation, ref componentType, foundError); + _EntityBatchFromEntityChunkDataShared(in chunkData, chunkCount, entityBatchList, currentbatchIndex, nSharedComponentsToAdd, foundError); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_EntityBatchFromEntityChunkDataShared))] - private static void _mono_to_burst_EntityBatchFromEntityChunkDataShared(in EntityInChunk* chunkData, int chunkCount, IntPtr entityBatchList, IntPtr currentbatchIndex, EntityComponentStore.ComponentOperation operation, ref ComponentType componentType, IntPtr foundError) + private static void _mono_to_burst_EntityBatchFromEntityChunkDataShared(in EntityInChunk* chunkData, int chunkCount, IntPtr entityBatchList, IntPtr currentbatchIndex, int nSharedComponentsToAdd, IntPtr foundError) { - _EntityBatchFromEntityChunkDataShared(in chunkData, chunkCount, (EntityBatchInChunk*)entityBatchList, (int*)currentbatchIndex, operation, ref componentType, (int*)foundError); + _EntityBatchFromEntityChunkDataShared(in chunkData, chunkCount, (EntityBatchInChunk*)entityBatchList, (int*)currentbatchIndex, nSharedComponentsToAdd, (int*)foundError); } [BurstDiscard] - private static void _forward_mono_EntityBatchFromEntityChunkDataShared(in EntityInChunk* chunkData, int chunkCount, EntityBatchInChunk* entityBatchList, int* currentbatchIndex, EntityComponentStore.ComponentOperation operation, ref ComponentType componentType, int* foundError) + private static void _forward_mono_EntityBatchFromEntityChunkDataShared(in EntityInChunk* chunkData, int chunkCount, EntityBatchInChunk* entityBatchList, int* currentbatchIndex, int nSharedComponentsToAdd, int* foundError) { - Managed._bfp_EntityBatchFromEntityChunkDataShared(in chunkData, chunkCount, (IntPtr) entityBatchList, (IntPtr) currentbatchIndex, operation, ref componentType, (IntPtr) foundError); + Managed._bfp_EntityBatchFromEntityChunkDataShared(in chunkData, chunkCount, (IntPtr) entityBatchList, (IntPtr) currentbatchIndex, nSharedComponentsToAdd, (IntPtr) foundError); } #endif private static void SortEntityInChunk (EntityInChunk* entityInChunks, int count) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_SortEntityInChunk(entityInChunks, count); @@ -108,7 +108,7 @@ private static void SortEntityInChunk (EntityInChunk* entityInChunks, int count _SortEntityInChunk(entityInChunks, count); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_SortEntityInChunk))] private static void _mono_to_burst_SortEntityInChunk(IntPtr entityInChunks, int count) @@ -125,7 +125,7 @@ private static void _forward_mono_SortEntityInChunk(EntityInChunk* entityInChunk private static void GatherEntityInChunkForEntities (Entity* Entities, EntityInChunk* globalEntityInChunk, EntityInChunk* EntityChunkData, int numEntities) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_GatherEntityInChunkForEntities(Entities, globalEntityInChunk, EntityChunkData, numEntities); @@ -136,7 +136,7 @@ private static void GatherEntityInChunkForEntities (Entity* Entities, EntityInC _GatherEntityInChunkForEntities(Entities, globalEntityInChunk, EntityChunkData, numEntities); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_GatherEntityInChunkForEntities))] private static void _mono_to_burst_GatherEntityInChunkForEntities(IntPtr Entities, IntPtr globalEntityInChunk, IntPtr EntityChunkData, int numEntities) diff --git a/Unity.Entities/EntityComponentStoreChangeArchetype.cs b/Unity.Entities/EntityComponentStoreChangeArchetype.cs index 3eb4508b..e224ea8b 100644 --- a/Unity.Entities/EntityComponentStoreChangeArchetype.cs +++ b/Unity.Entities/EntityComponentStoreChangeArchetype.cs @@ -62,6 +62,22 @@ bool AddComponent(EntityBatchInChunk entityBatchInChunk, ComponentType component return true; } + bool AddComponents(EntityBatchInChunk entityBatchInChunk, ComponentTypes componentTypes) + { + var srcChunk = entityBatchInChunk.Chunk; + + var dstArchetype = GetArchetypeWithAddedComponents(srcChunk->Archetype, componentTypes); + if (dstArchetype == srcChunk->Archetype) // none were added + return false; + + var archetypeChunkFilter = GetArchetypeChunkFilterWithAddedComponents(srcChunk, dstArchetype); + if (archetypeChunkFilter.Archetype == null) + return false; + + Move(entityBatchInChunk, ref archetypeChunkFilter); + return true; + } + bool RemoveComponent(EntityBatchInChunk entityBatchInChunk, ComponentType componentType) { var srcChunk = entityBatchInChunk.Chunk; @@ -73,6 +89,22 @@ bool RemoveComponent(EntityBatchInChunk entityBatchInChunk, ComponentType compon return true; } + bool RemoveComponents(EntityBatchInChunk entityBatchInChunk, ComponentTypes componentTypes) + { + var srcChunk = entityBatchInChunk.Chunk; + + var dstArchetype = GetArchetypeWithRemovedComponents(srcChunk->Archetype, componentTypes); + if (dstArchetype == srcChunk->Archetype) // none were removed + return false; + + var archetypeChunkFilter = GetArchetypeChunkFilterWithRemovedComponents(srcChunk, dstArchetype); + if (archetypeChunkFilter.Archetype == null) + return false; + + Move(entityBatchInChunk, ref archetypeChunkFilter); + return true; + } + public void AddComponent(ArchetypeChunk* chunks, int chunkCount, ComponentType componentType, int sharedComponentIndex = 0) { Archetype* prevArchetype = null; @@ -183,6 +215,24 @@ public void AddComponent(UnsafeList* sortedEntityBatchList, ComponentType type, AddComponent(((EntityBatchInChunk*)sortedEntityBatchList->Ptr)[i], type, existingSharedComponentIndex); } + public void AddComponents(UnsafeList* sortedEntityBatchList, ref ComponentTypes types) + { + Assert.IsFalse(types.ChunkComponentCount > 0); + + // Reverse order so that batch indices do not change while iterating. + for (int i = sortedEntityBatchList->Length - 1; i >= 0; i--) + AddComponents(((EntityBatchInChunk*)sortedEntityBatchList->Ptr)[i], types); + } + + public void RemoveComponents(UnsafeList* sortedEntityBatchList, ref ComponentTypes types) + { + Assert.IsFalse(types.ChunkComponentCount > 0); + + // Reverse order so that batch indices do not change while iterating. + for (int i = sortedEntityBatchList->Length - 1; i >= 0; i--) + RemoveComponents(((EntityBatchInChunk*)sortedEntityBatchList->Ptr)[i], types); + } + public void RemoveComponent(UnsafeList* sortedEntityBatchList, ComponentType type) { Assert.IsFalse(type.IsChunkComponent); diff --git a/Unity.Entities/EntityComponentStoreChunk.cs b/Unity.Entities/EntityComponentStoreChunk.cs index 55623d7e..8208253c 100644 --- a/Unity.Entities/EntityComponentStoreChunk.cs +++ b/Unity.Entities/EntityComponentStoreChunk.cs @@ -68,6 +68,7 @@ internal void AllocateEntities(Archetype* arch, Chunk* chunk, int baseIndex, int #endif m_NextFreeEntityIndex = entityIndexInChunk; + m_EntityCreateDestroyVersion++; } } @@ -93,6 +94,7 @@ internal void DeallocateDataEntitiesInChunk(Chunk* chunk, int indexInChunk, int } m_NextFreeEntityIndex = freeIndex; + m_EntityCreateDestroyVersion++; // Compute the number of things that need to moved and patched. int patchCount = Math.Min(batchCount, chunk->Count - indexInChunk - batchCount); diff --git a/Unity.Entities/EntityComponentStoreCreateDestroyEntities.cs b/Unity.Entities/EntityComponentStoreCreateDestroyEntities.cs index 7a761988..686bc0b8 100644 --- a/Unity.Entities/EntityComponentStoreCreateDestroyEntities.cs +++ b/Unity.Entities/EntityComponentStoreCreateDestroyEntities.cs @@ -139,35 +139,6 @@ public void DestroyEntityWithValidation(Entity* entities, int count) DestroyEntities(entities, count); } - [Obsolete("CreateChunks is deprecated. (RemovedAfter 2020-06-05)", false)] - public void CreateChunks(Archetype* archetype, ArchetypeChunk* chunks, int chunksCount, int entityCount) - { - fixed(EntityComponentStore* entityComponentStore = &this) - { - int* sharedComponentValues = stackalloc int[archetype->NumSharedComponents]; - - int chunkIndex = 0; - while (entityCount != 0) - { - #if ENABLE_UNITY_COLLECTIONS_CHECKS - if (chunkIndex >= chunksCount) - throw new System.ArgumentException($"CreateChunks chunks array is not large enough to hold the array of chunks {chunksCount}."); - #endif - - var chunk = GetCleanChunk(archetype, sharedComponentValues); - var allocateCount = math.min(entityCount, chunk->UnusedCount); - - ChunkDataUtility.Allocate(chunk, allocateCount); - - chunks[chunkIndex] = new ArchetypeChunk(chunk, entityComponentStore); - - entityCount -= allocateCount; - chunkIndex++; - } - IncrementComponentTypeOrderVersion(archetype); - } - } - public Chunk* GetCleanChunkNoMetaChunk(Archetype* archetype, SharedComponentValues sharedComponentValues) { var newChunk = AllocateChunk(); @@ -438,7 +409,7 @@ void InstantiateEntitiesGroup(Entity* srcEntities, int srcEntityCount, Entity* o dstArchetype->BufferEntityPatches, dstArchetype->BufferEntityPatchCount, chunk->Buffer, indexInChunk, allocatedCount, srcEntities, localRemap, srcEntityCount); - if (dstArchetype->ManagedEntityPatchCount > 0) + if (dstArchetype->HasManagedEntityRefs) { ManagedChangesTracker.PatchEntitiesForPrefab(dstArchetype, chunk, indexInChunk, allocatedCount, srcEntities, localRemap, srcEntityCount, Allocator.Temp); } @@ -496,7 +467,7 @@ EntityBatchInChunk GetFirstEntityBatchInChunk(Entity* entities, int count) public static JobHandle GetCreatedAndDestroyedEntities(EntityComponentStore* store, NativeList state, NativeList createdEntities, NativeList destroyedEntities, bool async) { // Early outwhen no entities were created or destroyed compared to the last time this method was called - if (state.Length != 0 && store->EntityOrderVersion == state[0]) + if (state.Length != 0 && store->m_EntityCreateDestroyVersion == state[0]) { createdEntities.Clear(); destroyedEntities.Clear(); @@ -540,7 +511,7 @@ public void Execute() DestroyedEntities.Clear(); State.Resize(capacity + 1, NativeArrayOptions.ClearMemory); - State[0] = Store->EntityOrderVersion; + State[0] = Store->m_EntityCreateDestroyVersion; var state = State.AsArray().GetSubArray(1, capacity); for (int i = 0; i != capacity; i++) diff --git a/Unity.Entities/EntityComponentStoreDebug.cs b/Unity.Entities/EntityComponentStoreDebug.cs index c8f6af92..0793ed92 100644 --- a/Unity.Entities/EntityComponentStoreDebug.cs +++ b/Unity.Entities/EntityComponentStoreDebug.cs @@ -168,11 +168,12 @@ public void CheckInternalConsistency(object[] managedComponentData) } [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] - public static void AssertSameEntities(EntityComponentStore* rhs, EntityComponentStore* lhs) + public static void AssertAllEntitiesCopied(EntityComponentStore* lhs, EntityComponentStore* rhs) { - Assert.AreEqual(rhs->EntitiesCapacity, lhs->EntitiesCapacity); - var lhsEntities = lhs->m_EntityInChunkByEntity; + Assert.IsTrue(rhs->EntitiesCapacity >= lhs->EntitiesCapacity); var rhsEntities = rhs->m_EntityInChunkByEntity; + var lhsEntities = lhs->m_EntityInChunkByEntity; + int capacity = lhs->EntitiesCapacity; for (int i = 0; i != capacity; i++) { @@ -182,7 +183,7 @@ public static void AssertSameEntities(EntityComponentStore* rhs, EntityComponent if (lhsEntities[i].IndexInChunk != rhsEntities[i].IndexInChunk) Assert.AreEqual(lhsEntities[i].IndexInChunk, rhsEntities[i].IndexInChunk); } - Assert.AreEqual(rhs->m_NextFreeEntityIndex, lhs->m_NextFreeEntityIndex); + Assert.AreEqual(lhs->m_NextFreeEntityIndex, rhs->m_NextFreeEntityIndex); } [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] @@ -303,6 +304,29 @@ public void AssertCanAddComponent(Archetype* archetype, ComponentType componentT throw new InvalidOperationException("Entity archetype component data is too large. Previous archetype size per instance {archetype->InstanceSizeWithOverhead} bytes. Attempting to add component size {componentInstanceSize} bytes. Maximum chunk size {chunkDataSize}."); } + [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] + public void AssertCanAddComponents(Archetype* archetype, ComponentTypes componentTypes) + { + int totalComponentInstanceSize = 0; + for (int i = 0; i < componentTypes.Length; i++) + { + var type = componentTypes.GetComponentType(i); + + if (type == m_EntityComponentType) + throw new ArgumentException("Cannot add Entity as a component."); + + if (type.IsSharedComponent && (archetype->NumSharedComponents == kMaxSharedComponentCount)) + throw new InvalidOperationException($"Cannot add more than {kMaxSharedComponentCount} SharedComponent to a single Archetype"); + + var componentTypeInfo = GetTypeInfo(type.TypeIndex); + totalComponentInstanceSize += GetComponentArraySize(componentTypeInfo.SizeInChunk, 1); + } + var archetypeInstanceSize = archetype->InstanceSizeWithOverhead + totalComponentInstanceSize; + var chunkDataSize = Chunk.GetChunkBufferSize(); + if (archetypeInstanceSize > chunkDataSize) + throw new InvalidOperationException("Entity archetype component data is too large. Previous archetype size per instance {archetype->InstanceSizeWithOverhead} bytes. Attempting to add component size {totalComponentInstanceSize} bytes. Maximum chunk size {chunkDataSize}."); + } + [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] public void AssertCanAddComponent(Entity entity, ComponentType componentType) { @@ -354,7 +378,28 @@ public void AssertCanAddComponents(UnsafeMatchingArchetypePtrList archetypeList, public void AssertCanAddComponents(Entity entity, ComponentTypes types) { for (int i = 0; i < types.Length; ++i) - AssertCanAddComponent(entity, ComponentType.FromTypeIndex(types.GetTypeIndex(i))); + AssertCanAddComponent(entity, types.GetComponentType(i)); + } + + [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] + public void AssertCanAddComponents(NativeArray entities, ComponentTypes types) + { + for (int i = 0; i < entities.Length; ++i) + { + var entity = entities[i]; + for (int j = 0; j < types.Length; ++j) + AssertCanAddComponent(entity, types.GetComponentType(j)); + } + } + + [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] + public void AssertCanAddComponent(NativeArray entities, ComponentType type) + { + for (int i = 0; i < entities.Length; ++i) + { + var entity = entities[i]; + AssertCanAddComponent(entity, type); + } } [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] @@ -453,9 +498,14 @@ public void ThrowDestroyEntityError(Entity errorEntity, Entity errorReferencedEn } [BurstDiscard] + [Conditional("UNITY_EDITOR")] private void ThrowDestroyEntityErrorFancy(Entity errorEntity, Entity errorReferencedEntity) { - throw new ArgumentException($"DestroyEntity(EntityQuery query) is destroying entity {errorEntity} which contains a LinkedEntityGroup and the entity {errorReferencedEntity} in that group is not included in the query. If you want to destroy entities using a query all linked entities must be contained in the query.."); +#if UNITY_EDITOR + string errorEntityName = Exists(errorEntity) ? GetName(errorEntity) : "(Deleted)"; + string errorReferencedEntityName = Exists(errorReferencedEntity) ? GetName(errorReferencedEntity) : "(Deleted)"; + throw new ArgumentException($"DestroyEntity(EntityQuery query) is destroying entity {errorEntity} '{errorEntityName}' which contains a LinkedEntityGroup and the entity {errorReferencedEntity} '{errorReferencedEntityName}' in that group is not included in the query. If you want to destroy entities using a query all linked entities must be contained in the query.."); +#endif } diff --git a/Unity.Entities/EntityDataAccess.cs b/Unity.Entities/EntityDataAccess.cs index 44ec45f6..ba6dbcfe 100644 --- a/Unity.Entities/EntityDataAccess.cs +++ b/Unity.Entities/EntityDataAccess.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.Diagnostics; using System.Runtime.InteropServices; using System.Threading; @@ -60,6 +61,10 @@ unsafe struct EntityDataAccess : IDisposable { private delegate void PlaybackManagedDelegate(IntPtr self); + // approximate count of entities past which it is faster + // to form batches when iterating through them all + internal static readonly int FASTER_TO_BATCH_THRESHOLD = 10; + private static readonly SharedStatic s_ManagedPlaybackTrampoline = SharedStatic.GetOrCreate(); private static object s_DelegateGCPrevention; @@ -110,6 +115,26 @@ internal ComponentDependencyManager* DependencyManager public EntityQuery m_UniversalQuery; // matches all components [NativeDisableUnsafePtrRestriction] public EntityQuery m_UniversalQueryWithChunks; + [NativeDisableUnsafePtrRestriction] + public EntityQuery m_EntityGuidQuery; +#if UNITY_EDITOR + public int m_CachedEntityGUIDToEntityIndexVersion; + UntypedUnsafeHashMap m_CachedEntityGUIDToEntityIndex; + + public ref UnsafeMultiHashMap CachedEntityGUIDToEntityIndex + { + get + { + fixed (void* ptr = &m_CachedEntityGUIDToEntityIndex) + { + return ref UnsafeUtility.AsRef>(ptr); + } + } + } + internal const int kBuiltinEntityQueryCount = 4; +#else + internal const int kBuiltinEntityQueryCount = 3; +#endif private int m_ManagedAccessHandle; @@ -132,8 +157,8 @@ internal ref UnsafeHashMap AliveEntityQueries } } - internal bool m_IsInExclusiveTransaction; - internal bool IsInExclusiveTransaction => m_IsInExclusiveTransaction; + internal byte m_IsInExclusiveTransaction; + internal bool IsInExclusiveTransaction => m_IsInExclusiveTransaction != 0; [BurstCompile] internal struct DestroyChunks : IJobBurstSchedulable @@ -157,10 +182,12 @@ public static void Initialize(EntityDataAccess* self, World world) self->m_ManagedAccessHandle = ManagedEntityDataAccess.AllocHandle(managedGuts); self->AliveEntityQueries = new UnsafeHashMap(32, Allocator.Persistent); - +#if UNITY_EDITOR + self->CachedEntityGUIDToEntityIndex = new UnsafeMultiHashMap(32, Allocator.Persistent); +#endif managedGuts.m_World = world; - self->m_DependencyManager.OnCreate(); + self->m_DependencyManager.OnCreate(world.Unmanaged); Entities.EntityComponentStore.Create(&self->m_EntityComponentStore, world.SequenceNumber << 32); Unity.Entities.EntityQueryManager.Create(&self->m_EntityQueryManager, &self->m_DependencyManager); @@ -168,30 +195,37 @@ public static void Initialize(EntityDataAccess* self, World world) self->m_UniversalQuery = self->m_EntityQueryManager.CreateEntityQuery( self, - new EntityQueryDesc[] - { - new EntityQueryDesc { Options = EntityQueryOptions.IncludePrefab | EntityQueryOptions.IncludeDisabled }, - } + new EntityQueryDesc { Options = EntityQueryOptions.IncludePrefab | EntityQueryOptions.IncludeDisabled } ); self->m_UniversalQueryWithChunks = self->m_EntityQueryManager.CreateEntityQuery( self, - new EntityQueryDesc[] + new EntityQueryDesc { - new EntityQueryDesc - { - All = new[] {ComponentType.ReadWrite()}, - Options = EntityQueryOptions.IncludeDisabled | EntityQueryOptions.IncludePrefab - }, - new EntityQueryDesc - { - Options = EntityQueryOptions.IncludeDisabled | EntityQueryOptions.IncludePrefab - } + All = new[] {ComponentType.ReadWrite()}, + Options = EntityQueryOptions.IncludeDisabled | EntityQueryOptions.IncludePrefab + }, + new EntityQueryDesc + { + Options = EntityQueryOptions.IncludeDisabled | EntityQueryOptions.IncludePrefab }); +#if UNITY_EDITOR + self->m_EntityGuidQuery = self->m_EntityQueryManager.CreateEntityQuery( + self, + new EntityQueryDesc + { + All = new[] {ComponentType.ReadWrite()}, + Options = EntityQueryOptions.IncludeDisabled | EntityQueryOptions.IncludePrefab + } + ); +#endif #if ENABLE_UNITY_COLLECTIONS_CHECKS self->m_UniversalQuery._GetImpl()->_DisallowDisposing = true; self->m_UniversalQueryWithChunks._GetImpl()->_DisallowDisposing = true; +#if UNITY_EDITOR + self->m_EntityGuidQuery._GetImpl()->_DisallowDisposing = true; +#endif #endif if (s_DelegateGCPrevention == null) @@ -232,11 +266,18 @@ public void Dispose() #if ENABLE_UNITY_COLLECTIONS_CHECKS m_UniversalQuery._GetImpl()->_DisallowDisposing = false; m_UniversalQueryWithChunks._GetImpl()->_DisallowDisposing = false; +#if UNITY_EDITOR + m_EntityGuidQuery._GetImpl()->_DisallowDisposing = false; +#endif #endif m_UniversalQuery.Dispose(); m_UniversalQueryWithChunks.Dispose(); m_UniversalQuery = default; m_UniversalQueryWithChunks = default; +#if UNITY_EDITOR + m_EntityGuidQuery.Dispose(); + m_EntityGuidQuery = default; +#endif m_DependencyManager.Dispose(); Entities.EntityComponentStore.Destroy(EntityComponentStore); @@ -251,6 +292,10 @@ public void Dispose() AliveEntityQueries.Dispose(); AliveEntityQueries = default; +#if UNITY_EDITOR + CachedEntityGUIDToEntityIndex.Dispose(); + CachedEntityGUIDToEntityIndex = default; +#endif } public bool Exists(Entity entity) @@ -281,7 +326,7 @@ public void BeforeStructuralChange() CheckIsStructuralChange(); EntityComponentStore->AssertNoQueuedManagedDeferredCommands(); - if (!m_IsInExclusiveTransaction) + if (m_IsInExclusiveTransaction == 0) DependencyManager->CompleteAllJobsAndInvalidateArrays(); } @@ -332,6 +377,8 @@ public void DestroyEntity(UnsafeMatchingArchetypePtrList archetypeList, EntityQu RunDestroyChunks(chunks); EndMarker(ref marker_DestroyChunks); + EntityComponentStore->InvalidateChunkListCacheForChangedArchetypes(); + BeginMarker(ref marker_ManagedPlayback); PlaybackManagedChanges(); EndMarker(ref marker_ManagedPlayback); @@ -365,6 +412,22 @@ private void RunDestroyChunks(NativeArray chunks) EntityComponentStore->DestroyEntities(chunks); } + + /// + /// EntityManager.BeforeStructuralChange must be called before invoking this. + /// ManagedComponentStore.Playback must be called after invoking this. + /// EntityQueryManager.AddAdditionalArchetypes must be called after invoking this. + /// Invoking this must be wrapped in ArchetypeChangeTracking. + /// + /// + /// + /// + public void DestroyEntityDuringStructuralChange(NativeArray entities) + { + AssertMainThread(); + StructuralChange.DestroyEntity(EntityComponentStore, (Entity*)entities.GetUnsafePtr(), entities.Length); + } + /// /// EntityManager.BeforeStructuralChange must be called before invoking this. /// ManagedComponentStore.Playback must be called after invoking this. @@ -610,10 +673,10 @@ public void AddComponent(UnsafeMatchingArchetypePtrList archetypeList, EntityQue /// EntityQueryManager.AddAdditionalArchetypes must be called after invoking this. /// Invoking this must be wrapped in ArchetypeChangeTracking. /// - /// - /// - /// - /// + /// The set of archetypes that defines the set of matching entities. + /// Additional filter criteria for the entities. + /// The component type being added to the entities. + /// Thrown if the component cannot be added to the entities. public void AddComponentDuringStructuralChange(UnsafeMatchingArchetypePtrList archetypeList, EntityQueryFilter filter, ComponentType componentType) { AssertMainThread(); @@ -636,6 +699,109 @@ internal void AddComponentsDuringStructuralChange(UnsafeMatchingArchetypePtrList chunks.Dispose(); } + /// + /// EntityManager.BeforeStructuralChange must be called before invoking this. + /// ManagedComponentStore.Playback must be called after invoking this. + /// EntityQueryManager.AddAdditionalArchetypes must be called after invoking this. + /// Invoking this must be wrapped in ArchetypeChangeTracking. + /// + /// The set of entities. + /// The component type added to the entities. + /// Thrown if the component cannot be added to the entities. + public void AddComponentDuringStructuralChange(NativeArray entities, ComponentType componentType) + { + AssertMainThread(); + + EntityComponentStore->AssertCanAddComponent(entities, componentType); + + // use batches + NativeList entityBatchList; + if (entities.Length > FASTER_TO_BATCH_THRESHOLD + && EntityComponentStore->CreateEntityBatchList(entities, + componentType.IsSharedComponent ? 1 : 0, out entityBatchList)) + { + StructuralChange.AddComponentEntitiesBatch(EntityComponentStore, + (UnsafeList*)NativeListUnsafeUtility.GetInternalListDataPtrUnchecked(ref entityBatchList), componentType.TypeIndex); + entityBatchList.Dispose(); + return; + } + + for (int i = 0; i < entities.Length; i++) + { + var entity = entities[i]; + StructuralChange.AddComponentEntity(EntityComponentStore, &entity, componentType.TypeIndex); + } + } + + /// + /// EntityManager.BeforeStructuralChange must be called before invoking this. + /// ManagedComponentStore.Playback must be called after invoking this. + /// EntityQueryManager.AddAdditionalArchetypes must be called after invoking this. + /// Invoking this must be wrapped in ArchetypeChangeTracking. + /// + /// The set of entities. + /// The component types added to the entities. + /// Thrown if the component cannot be added to the entities. + public void AddMultipleComponentsDuringStructuralChange(NativeArray entities, ComponentTypes componentTypes) + { + AssertMainThread(); + + EntityComponentStore->AssertCanAddComponents(entities, componentTypes); + + // use batches + NativeList entityBatchList; + if (entities.Length > FASTER_TO_BATCH_THRESHOLD + && EntityComponentStore->CreateEntityBatchList(entities, + componentTypes.m_masks.SharedComponents, out entityBatchList)) + { + StructuralChange.AddComponentsEntitiesBatch(EntityComponentStore, + (UnsafeList*)NativeListUnsafeUtility.GetInternalListDataPtrUnchecked(ref entityBatchList), ref componentTypes); + entityBatchList.Dispose(); + return; + } + + for (int i = 0; i < entities.Length; i++) + { + var entity = entities[i]; + StructuralChange.AddComponentsEntity(EntityComponentStore, &entity, ref componentTypes); + } + } + + /// + /// EntityManager.BeforeStructuralChange must be called before invoking this. + /// ManagedComponentStore.Playback must be called after invoking this. + /// EntityQueryManager.AddAdditionalArchetypes must be called after invoking this. + /// Invoking this must be wrapped in ArchetypeChangeTracking. + /// + /// + /// + /// + /// + public void RemoveMultipleComponentsDuringStructuralChange(NativeArray entities, ComponentTypes componentTypes) + { + AssertMainThread(); + + EntityComponentStore->AssertCanRemoveComponents(componentTypes); + + // use batches + NativeList entityBatchList; + if (entities.Length > FASTER_TO_BATCH_THRESHOLD + && EntityComponentStore->CreateEntityBatchList(entities, + 0, out entityBatchList)) + { + StructuralChange.AddComponentsEntitiesBatch(EntityComponentStore, + (UnsafeList*)NativeListUnsafeUtility.GetInternalListDataPtrUnchecked(ref entityBatchList), ref componentTypes); + entityBatchList.Dispose(); + return; + } + + for (int i = 0; i < entities.Length; i++) + { + var entity = entities[i]; + StructuralChange.RemoveComponentsEntity(EntityComponentStore, &entity, ref componentTypes); + } + } + internal void AddComponents(UnsafeMatchingArchetypePtrList archetypeList, EntityQueryFilter filter, ComponentTypes types) { AssertMainThread(); @@ -765,6 +931,43 @@ internal void RemoveComponentDuringStructuralChange(NativeArray EntityComponentStore->RemoveComponentWithValidation(chunks, componentType); } + /// + /// EntityManager.BeforeStructuralChange must be called before invoking this. + /// ManagedComponentStore.Playback must be called after invoking this. + /// EntityQueryManager.AddAdditionalArchetypes must be called after invoking this. + /// Invoking this must be wrapped in ArchetypeChangeTracking. + /// + /// + /// + /// + /// + public void RemoveComponentDuringStructuralChange(NativeArray entities, ComponentType componentType) + { + AssertMainThread(); + + bool useBatches = entities.Length > 10; + NativeList entityBatchList = default; + if (useBatches) + { + useBatches = EntityComponentStore->CreateEntityBatchList(entities, 0, out entityBatchList); + } + + EntityComponentStore->AssertCanRemoveComponent(componentType); + if (!useBatches) + { + for (int i = 0; i < entities.Length; i++) + { + var entity = entities[i]; + StructuralChange.RemoveComponentEntity(EntityComponentStore, &entity, componentType.TypeIndex); + } + } + else + { + StructuralChange.RemoveComponentEntitiesBatch(EntityComponentStore, (UnsafeList*)NativeListUnsafeUtility.GetInternalListDataPtrUnchecked(ref entityBatchList), componentType.TypeIndex); + entityBatchList.Dispose(); + } + } + public bool HasComponent(Entity entity, ComponentType type) { return EntityComponentStore->HasComponent(entity, type); @@ -890,7 +1093,7 @@ public void AddSharedComponentDataBoxedDefaultMustBeNull(UnsafeMatchingArchetype newSharedComponentDataIndex = managedComponentStore.InsertSharedComponentAssumeNonDefault(typeIndex, hashCode, componentData); AddSharedComponentData(chunks, newSharedComponentDataIndex, componentType); - managedComponentStore.RemoveReference(newSharedComponentDataIndex); + RemoveSharedComponentReference(newSharedComponentDataIndex); } } @@ -986,13 +1189,13 @@ internal void AddSharedComponentDataDuringStructuralChange(NativeArray(Entity entity, ManagedComponentStore managedComponentStore) where T : struct, ISharedComponentData + public T GetSharedComponentData(Entity entity) where T : struct, ISharedComponentData { var typeIndex = TypeManager.GetTypeIndex(); EntityComponentStore->AssertEntityHasComponent(entity, typeIndex); var sharedComponentIndex = EntityComponentStore->GetSharedComponentDataIndex(entity, typeIndex); - return managedComponentStore.GetSharedComponentData(sharedComponentIndex); + return GetSharedComponentData(sharedComponentIndex); } [NotBurstCompatible] @@ -1005,11 +1208,11 @@ public void SetSharedComponentData(Entity entity, T componentData, ManagedCom var componentType = ComponentType.FromTypeIndex(typeIndex); EntityComponentStore->AssertEntityHasComponent(entity, typeIndex); - var newSharedComponentDataIndex = managedComponentStore.InsertSharedComponent(componentData); + var newSharedComponentDataIndex = InsertSharedComponent(componentData); EntityComponentStore->SetSharedComponentDataIndex(entity, componentType, newSharedComponentDataIndex); EntityComponentStore->InvalidateChunkListCacheForChangedArchetypes(); managedComponentStore.Playback(ref EntityComponentStore->ManagedChangesTracker); - managedComponentStore.RemoveReference(newSharedComponentDataIndex); + RemoveSharedComponentReference(newSharedComponentDataIndex); } [NotBurstCompatible] @@ -1028,7 +1231,7 @@ public void SetSharedComponentDataBoxedDefaultMustBeNull(Entity entity, int type EntityComponentStore->SetSharedComponentDataIndex(entity, componentType, newSharedComponentDataIndex); EntityComponentStore->InvalidateChunkListCacheForChangedArchetypes(); ManagedComponentStore.Playback(ref EntityComponentStore->ManagedChangesTracker); - ManagedComponentStore.RemoveReference(newSharedComponentDataIndex); + RemoveSharedComponentReference(newSharedComponentDataIndex); } /// @@ -1205,19 +1408,60 @@ public BufferTypeHandle GetBufferTypeHandle(bool isReadOnly) #endif } - [Obsolete("GetArchetypeChunkBufferType has been renamed to GetBufferTypeHandle (RemovedAfter 2020-08-01).")] - public ArchetypeChunkBufferType GetArchetypeChunkBufferType(bool isReadOnly) - where T : struct, IBufferElementData + [NotBurstCompatible] + public void GetAllUniqueSharedComponents(List sharedComponentValues) + where T : struct, ISharedComponentData { -#if ENABLE_UNITY_COLLECTIONS_CHECKS - var typeIndex = TypeManager.GetTypeIndex(); - return new ArchetypeChunkBufferType( - DependencyManager->Safety.GetSafetyHandleForBufferTypeHandle(typeIndex, isReadOnly), - DependencyManager->Safety.GetBufferHandleForBufferTypeHandle(typeIndex), - isReadOnly, EntityComponentStore->GlobalSystemVersion); -#else - return new ArchetypeChunkBufferType(isReadOnly, EntityComponentStore->GlobalSystemVersion); -#endif + ManagedComponentStore.GetAllUniqueSharedComponents_Managed(sharedComponentValues); + } + + [NotBurstCompatible] + public void GetAllUniqueSharedComponents(List sharedComponentValues, List sharedComponentIndices) + where T : struct, ISharedComponentData + { + ManagedComponentStore.GetAllUniqueSharedComponents_Managed(sharedComponentValues, sharedComponentIndices); + } + + [NotBurstCompatible] + public int InsertSharedComponent(T newData) where T : struct + { + return ManagedComponentStore.InsertSharedComponent_Managed(newData); + } + + [NotBurstCompatible] + public int GetSharedComponentVersion(T sharedData) where T : struct + { + return ManagedComponentStore.GetSharedComponentVersion_Managed(sharedData); + } + + [NotBurstCompatible] + public T GetSharedComponentData(int sharedComponentIndex) where T : struct + { + return ManagedComponentStore.GetSharedComponentData_Managed(sharedComponentIndex); + } + + [NotBurstCompatible] + public void AddSharedComponentReference(int sharedComponentIndex, int numRefs = 1) + { + ManagedComponentStore.AddSharedComponentReference_Managed(sharedComponentIndex, numRefs); + } + + [NotBurstCompatible] + public void RemoveSharedComponentReference(int sharedComponentIndex, int numRefs = 1) + { + ManagedComponentStore.RemoveSharedComponentReference_Managed(sharedComponentIndex, numRefs); + } + + [NotBurstCompatible] + public NativeArray MoveAllSharedComponents(ManagedComponentStore srcManagedComponents, Allocator allocator) + { + return ManagedComponentStore.MoveAllSharedComponents_Managed(srcManagedComponents, allocator); + } + + [NotBurstCompatible] + public NativeArray MoveSharedComponents(ManagedComponentStore srcManagedComponents, NativeArray chunks, Allocator allocator) + { + return ManagedComponentStore.MoveSharedComponents_Managed(srcManagedComponents, chunks, allocator); } } diff --git a/Unity.Entities/EntityManager.Deprecated.cs b/Unity.Entities/EntityManager.Deprecated.cs deleted file mode 100644 index 1ddf320e..00000000 --- a/Unity.Entities/EntityManager.Deprecated.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; - -namespace Unity.Entities -{ - public unsafe partial struct EntityManager - { - // Workaround for EntityManager.IsCreated while we wait for deprecation - internal static class DeprecatedRegistry - { - static private readonly object s_Lock = new object(); - - struct Cell - { - public World World; - public uint WorldId; - } - - static private readonly Dictionary s_Mapping = new Dictionary(); - - public static bool IsAlive(EntityManager manager) - { - var key = new IntPtr(manager.m_EntityDataAccess); - lock (s_Lock) - { - if (!s_Mapping.TryGetValue(key, out var cell)) - return false; - - return cell.World.IsCreated && cell.World.m_WorldId == cell.WorldId; - } - } - - public static void Register(EntityManager manager, World w) - { - lock (s_Lock) - { - s_Mapping[new IntPtr(manager.m_EntityDataAccess)] = new Cell { World = w, WorldId = w.m_WorldId }; - } - } - - public static void Unregister(EntityManager manager) - { - lock (s_Lock) - { - s_Mapping.Remove(new IntPtr(manager.m_EntityDataAccess)); - } - } - } - - /// - /// Reports whether the EntityManager has been initialized yet. - /// - /// True, if the EntityManager's OnCreateManager() function has finished. - [Obsolete("Use World.IsCreated. EntityManager lifetimes are tied to the world they came from. (RemoveAfter 2020-08-01)")] - public bool IsCreated => DeprecatedRegistry.IsAlive(this); - - // Temporarily allow conversion from null reference to allow existing packages to compile. - [EditorBrowsable(EditorBrowsableState.Never)] - [Obsolete("EntityManager is a struct. Please use `default` instead of `null`. (RemovedAfter 2020-07-01)")] - public static implicit operator EntityManager(EntityManagerNullShim? shim) => default(EntityManager); - - [EditorBrowsable(EditorBrowsableState.Never)] - [Obsolete("This is slow. Use The EntityDataAccess directly in new code. (RemovedAfter 2020-08-04)")] - internal EntityComponentStore* EntityComponentStore => GetCheckedEntityDataAccess()->EntityComponentStore; - - #if ENABLE_UNITY_COLLECTIONS_CHECKS - [EditorBrowsable(EditorBrowsableState.Never)] - [Obsolete("This is slow. Use The EntityDataAccess directly in new code. (RemovedAfter 2020-08-04)")] - internal ComponentSafetyHandles* SafetyHandles => &GetCheckedEntityDataAccess()->DependencyManager->Safety; - #endif - - } -} diff --git a/Unity.Entities/EntityManager.Deprecated.cs.meta b/Unity.Entities/EntityManager.Deprecated.cs.meta deleted file mode 100644 index ffe32e4e..00000000 --- a/Unity.Entities/EntityManager.Deprecated.cs.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 29e0c85a12e242aa994417991ab6659a -timeCreated: 1588628263 \ No newline at end of file diff --git a/Unity.Entities/EntityManager.cs b/Unity.Entities/EntityManager.cs index 7fac8391..45176e61 100644 --- a/Unity.Entities/EntityManager.cs +++ b/Unity.Entities/EntityManager.cs @@ -18,12 +18,6 @@ namespace Unity.Entities { - // Exists to allow `EntityManager mgr = null` to compile, as it required by existing packages (Physics) - [EditorBrowsable(EditorBrowsableState.Never)] - public struct EntityManagerNullShim - { - } - /// /// The EntityManager manages entities and components in a World. /// @@ -50,15 +44,14 @@ public unsafe partial struct EntityManager : IEquatable #if ENABLE_UNITY_COLLECTIONS_CHECKS private AtomicSafetyHandle m_Safety; -#if UNITY_2020_1_OR_NEWER private static readonly SharedStatic s_staticSafetyId = SharedStatic.GetOrCreate(); [BurstDiscard] private static void CreateStaticSafetyId() { s_staticSafetyId.Data = AtomicSafetyHandle.NewStaticSafetyId(); } -#endif - private bool m_IsInExclusiveTransaction; + private byte m_IsInExclusiveTransaction; + private bool IsInExclusiveTransaction => m_IsInExclusiveTransaction != 0; #endif [NativeDisableUnsafePtrRestriction] @@ -68,9 +61,9 @@ private static void CreateStaticSafetyId() private void AssertIsExclusiveTransaction() { #if ENABLE_UNITY_COLLECTIONS_CHECKS - if (m_IsInExclusiveTransaction == !m_EntityDataAccess->IsInExclusiveTransaction) + if (IsInExclusiveTransaction == !m_EntityDataAccess->IsInExclusiveTransaction) { - if (m_IsInExclusiveTransaction) + if (IsInExclusiveTransaction) throw new InvalidOperationException("EntityManager cannot be used from this context because it is part of an exclusive transaction that has already ended."); throw new InvalidOperationException("EntityManager cannot be used from this context because it is not part of the exclusive transaction that is currently active."); } @@ -190,6 +183,7 @@ public static ulong TotalChunkAddressSpaceInBytes [NotBurstCompatible] internal void Initialize(World world) { + WordStorage.Initialize(); TypeManager.Initialize(); StructuralChange.Initialize(); EntityCommandBuffer.Initialize(); @@ -206,15 +200,13 @@ internal void Initialize(World world) #if ENABLE_UNITY_COLLECTIONS_CHECKS m_Safety = AtomicSafetyHandle.Create(); -#if UNITY_2020_1_OR_NEWER if (s_staticSafetyId.Data == 0) { CreateStaticSafetyId(); } AtomicSafetyHandle.SetStaticSafetyId(ref m_Safety, s_staticSafetyId.Data); -#endif - m_IsInExclusiveTransaction = false; + m_IsInExclusiveTransaction = 0; #endif m_EntityDataAccess = (EntityDataAccess*)Memory.Unmanaged.Allocate(sizeof(EntityDataAccess), 16, Allocator.Persistent); UnsafeUtility.MemClear(m_EntityDataAccess, sizeof(EntityDataAccess)); @@ -235,6 +227,7 @@ private void CreateJobReflectionData() IJobBurstSchedulableExtensions.JobStruct.Initialize(); IJobBurstSchedulableExtensions.JobStruct.Initialize(); IJobBurstSchedulableExtensions.JobStruct.Initialize(); + IJobBurstSchedulableExtensions.JobStruct.Initialize(); IJobParallelForExtensionsBurstSchedulable.ParallelForJobStructBurstSchedulable.Initialize(); IJobParallelForExtensionsBurstSchedulable.ParallelForJobStructBurstSchedulable.Initialize(); diff --git a/Unity.Entities/EntityManagerAccessComponentData.cs b/Unity.Entities/EntityManagerAccessComponentData.cs index c3e036d5..396556c2 100644 --- a/Unity.Entities/EntityManagerAccessComponentData.cs +++ b/Unity.Entities/EntityManagerAccessComponentData.cs @@ -190,16 +190,15 @@ public void SetSharedComponentData(EntityQuery query, T componentData) where return; var ecs = GetCheckedEntityDataAccess(); - var mcs = ecs->ManagedComponentStore; ecs->BeforeStructuralChange(); var type = ComponentType.ReadWrite(); ecs->RemoveComponent(chunks, type); - int sharedComponentIndex = mcs.InsertSharedComponent(componentData); + int sharedComponentIndex = ecs->InsertSharedComponent(componentData); ecs->AddSharedComponentData(chunks, sharedComponentIndex, type); - mcs.RemoveReference(sharedComponentIndex); + ecs->RemoveSharedComponentReference(sharedComponentIndex); } } @@ -213,8 +212,7 @@ public void SetSharedComponentData(EntityQuery query, T componentData) where public T GetSharedComponentData(Entity entity) where T : struct, ISharedComponentData { var ecs = GetCheckedEntityDataAccess(); - var mcs = ecs->ManagedComponentStore; - return ecs->GetSharedComponentData(entity, mcs); + return ecs->GetSharedComponentData(entity); } [BurstCompatible(GenericTypeArguments = new[] { typeof(BurstCompatibleSharedComponentData) })] @@ -242,10 +240,17 @@ public int GetSharedComponentDataIndex(Entity entity) where T : struct, IShar /// A copy of the shared component. [NotBurstCompatible] public T GetSharedComponentData(int sharedComponentIndex) where T : struct, ISharedComponentData + { + var ecs = GetCheckedEntityDataAccess(); + return ecs->GetSharedComponentData(sharedComponentIndex); + } + + [NotBurstCompatible] + public object GetSharedComponentDataBoxed(int sharedComponentIndex, int typeIndex) { var ecs = GetCheckedEntityDataAccess(); var mcs = ecs->ManagedComponentStore; - return mcs.GetSharedComponentData(sharedComponentIndex); + return mcs.GetSharedComponentDataBoxed(sharedComponentIndex, typeIndex); } /// @@ -264,8 +269,7 @@ public void GetAllUniqueSharedComponentData(List sharedComponentValues) where T : struct, ISharedComponentData { var ecs = GetCheckedEntityDataAccess(); - var mcs = ecs->ManagedComponentStore; - mcs.GetAllUniqueSharedComponents(sharedComponentValues); + ecs->GetAllUniqueSharedComponents(sharedComponentValues); } /// @@ -289,8 +293,7 @@ public void GetAllUniqueSharedComponentData(List sharedComponentValues, Li where T : struct, ISharedComponentData { var ecs = GetCheckedEntityDataAccess(); - var mcs = ecs->ManagedComponentStore; - mcs.GetAllUniqueSharedComponents(sharedComponentValues, sharedComponentIndices); + ecs->GetAllUniqueSharedComponents(sharedComponentValues, sharedComponentIndices); } /// diff --git a/Unity.Entities/EntityManagerChangeArchetype.cs b/Unity.Entities/EntityManagerChangeArchetype.cs index 35e11b86..740b378c 100644 --- a/Unity.Entities/EntityManagerChangeArchetype.cs +++ b/Unity.Entities/EntityManagerChangeArchetype.cs @@ -23,12 +23,24 @@ static void _AddComponentEntitiesBatch(EntityComponentStore* entityComponentStor entityComponentStore->AddComponent(entityBatchList, ComponentType.FromTypeIndex(typeIndex), 0); } + [BurstMonoInteropMethod(MakePublic = true)] + static void _AddComponentsEntitiesBatch(EntityComponentStore* entityComponentStore, UnsafeList* entityBatchList, ref ComponentTypes types) + { + entityComponentStore->AddComponents(entityBatchList, ref types); + } + [BurstMonoInteropMethod(MakePublic = true)] static bool _AddComponentEntity(EntityComponentStore* entityComponentStore, Entity* entity, int typeIndex) { return entityComponentStore->AddComponent(*entity, ComponentType.FromTypeIndex(typeIndex)); } + [BurstMonoInteropMethod(MakePublic = true)] + static void _AddComponentsEntity(EntityComponentStore* entityComponentStore, Entity* entity, ref ComponentTypes types) + { + entityComponentStore->AddComponents(*entity, types); + } + [BurstMonoInteropMethod(MakePublic = true)] static void _AddComponentChunks(EntityComponentStore* entityComponentStore, ArchetypeChunk* chunks, int chunkCount, int typeIndex) { @@ -47,12 +59,24 @@ static bool _RemoveComponentEntity(EntityComponentStore* entityComponentStore, E return entityComponentStore->RemoveComponent(*entity, ComponentType.FromTypeIndex(typeIndex)); } + [BurstMonoInteropMethod(MakePublic = true)] + static void _RemoveComponentsEntity(EntityComponentStore* entityComponentStore, Entity* entity, ref ComponentTypes types) + { + entityComponentStore->RemoveComponents(*entity, types); + } + [BurstMonoInteropMethod(MakePublic = true)] static void _RemoveComponentEntitiesBatch(EntityComponentStore* entityComponentStore, UnsafeList* entityBatchList, int typeIndex) { entityComponentStore->RemoveComponent(entityBatchList, ComponentType.FromTypeIndex(typeIndex)); } + [BurstMonoInteropMethod(MakePublic = true)] + static void _RemoveComponentsEntitiesBatch(EntityComponentStore* entityComponentStore, UnsafeList* entityBatchList, ref ComponentTypes types) + { + entityComponentStore->RemoveComponents(entityBatchList, ref types); + } + [BurstMonoInteropMethod(MakePublic = true)] static void _RemoveComponentChunks(EntityComponentStore* entityComponentStore, ArchetypeChunk* chunks, int chunkCount, int typeIndex) { @@ -89,6 +113,12 @@ static void _CreateEntity(EntityComponentStore* entityComponentStore, void* arch entityComponentStore->CreateEntities((Archetype*)archetype, outEntities, count); } + [BurstMonoInteropMethod(MakePublic = true)] + static void _DestroyEntity(EntityComponentStore* entityComponentStore, Entity* entities, int count) + { + entityComponentStore->DestroyEntities(entities, count); + } + [BurstMonoInteropMethod(MakePublic = true)] static void _InstantiateEntities(EntityComponentStore* entityComponentStore, Entity* srcEntity, Entity* outputEntities, int instanceCount) { @@ -106,6 +136,10 @@ public unsafe partial struct EntityManager /// Adds a component to an entity. /// /// + /// This method can add any kind of component except chunk components and component objects. For chunk + /// components, use . For component objects, use + /// . + /// /// Adding a component changes the entity's archetype and results in the entity being moved to a different /// chunk. /// @@ -135,6 +169,10 @@ public bool AddComponent(Entity entity, ComponentType componentType) /// Adds a component to an entity. /// /// + /// This method can add any kind of component except chunk components and component objects. For chunk + /// components, use . For component objects, use + /// . + /// /// Adding a component changes the entity's archetype and results in the entity being moved to a different /// chunk. /// @@ -298,7 +336,6 @@ public void AddComponent(EntityQuery entityQuery) /// An array of Entity objects. /// The type of component to add. [StructuralChangeMethod] - [BurstCompatible(GenericTypeArguments = new[] { typeof(BurstCompatibleComponentData) })] public void AddComponent(NativeArray entities, ComponentType componentType) { var access = GetCheckedEntityDataAccess(); @@ -310,23 +347,24 @@ public void AddComponent(NativeArray entities, ComponentType componentTy if (entities.Length == 0) return; - ecs->AssertEntitiesExist((Entity*)entities.GetUnsafeReadOnlyPtr(), entities.Length); + ecs->AssertCanAddComponent(entities, componentType); // also checks that the entities exist - bool useBatches = entities.Length > 10; + // must get entity batch list before BeforeStructuralChange() NativeList entityBatchList = default; - if (useBatches) - useBatches = ecs->CreateEntityBatchListForAddComponent(entities, componentType, out entityBatchList); - if (useBatches) - ecs->AssertCanAddComponent(entityBatchList, componentType); - else - { - for (int i = 0; i < entities.Length; i++) - ecs->AssertCanAddComponent(entities[i], componentType); - } + bool useBatches = (entities.Length > EntityDataAccess.FASTER_TO_BATCH_THRESHOLD + && ecs->CreateEntityBatchList(entities, componentType.IsSharedComponent ? 1 : 0, out entityBatchList)); + BeforeStructuralChange(); var archetypeChanges = ecs->BeginArchetypeChangeTracking(); - if (!useBatches) + + if (useBatches) + { + StructuralChange.AddComponentEntitiesBatch(ecs, + (UnsafeList*)NativeListUnsafeUtility.GetInternalListDataPtrUnchecked(ref entityBatchList), componentType.TypeIndex); + entityBatchList.Dispose(); + } + else { for (int i = 0; i < entities.Length; i++) { @@ -334,11 +372,6 @@ public void AddComponent(NativeArray entities, ComponentType componentTy StructuralChange.AddComponentEntity(ecs, &entity, componentType.TypeIndex); } } - else - { - StructuralChange.AddComponentEntitiesBatch(ecs, (UnsafeList*)NativeListUnsafeUtility.GetInternalListDataPtrUnchecked(ref entityBatchList), componentType.TypeIndex); - entityBatchList.Dispose(); - } ecs->EndArchetypeChangeTracking(archetypeChanges, access->EntityQueryManager); ecs->InvalidateChunkListCacheForChangedArchetypes(); @@ -376,10 +409,10 @@ public void RemoveComponent(NativeArray entities, ComponentType componen BeforeStructuralChange(); var archetypeChanges = ecs->BeginArchetypeChangeTracking(); - bool useBatches = entities.Length > 10; + bool useBatches = entities.Length > EntityDataAccess.FASTER_TO_BATCH_THRESHOLD; NativeList entityBatchList = default; if (useBatches) - useBatches = ecs->CreateEntityBatchListForRemoveComponent(entities, componentType, out entityBatchList); + useBatches = ecs->CreateEntityBatchList(entities, 0 , out entityBatchList); if (useBatches) { // For many entities, resort data into batches. @@ -824,6 +857,9 @@ public void RemoveChunkComponentData(EntityQuery entityQuery) /// Adding a component changes an entity's archetype and results in the entity being moved to a different /// chunk. /// + /// (You can add a buffer component with the regular AddComponent methods, but unlike those methods, this + /// method conveniently also returns the new buffer.) + /// /// **Important:** This function creates a sync point, which means that the EntityManager waits for all /// currently running Jobs to complete before adding the buffer and no additional Jobs can start before /// the function is finished. A sync point can cause a drop in performance because the ECS framework may not @@ -837,7 +873,7 @@ public void RemoveChunkComponentData(EntityQuery entityQuery) [BurstCompatible(GenericTypeArguments = new[] { typeof(BurstCompatibleBufferElement) })] public DynamicBuffer AddBuffer(Entity entity) where T : struct, IBufferElementData { - AddComponent(entity, ComponentType.ReadWrite()); + AddComponent(entity); return GetBuffer(entity); } @@ -930,7 +966,6 @@ public void AddSharedComponentData(EntityQuery entityQuery, T componentData) { var access = GetCheckedEntityDataAccess(); var ecs = access->EntityComponentStore; - var mcs = access->ManagedComponentStore; Unity.Entities.EntityComponentStore.AssertValidEntityQuery(entityQuery, ecs); @@ -942,9 +977,9 @@ public void AddSharedComponentData(EntityQuery entityQuery, T componentData) { if (chunks.Length == 0) return; - var newSharedComponentDataIndex = mcs.InsertSharedComponent(componentData); + var newSharedComponentDataIndex = access->InsertSharedComponent(componentData); access->AddSharedComponentData(chunks, newSharedComponentDataIndex, componentType); - mcs.RemoveReference(newSharedComponentDataIndex); + access->RemoveSharedComponentReference(newSharedComponentDataIndex); } } diff --git a/Unity.Entities/EntityManagerChangeArchetype.interop.gen.cs b/Unity.Entities/EntityManagerChangeArchetype.interop.gen.cs index 4442cc0a..907bd93c 100644 --- a/Unity.Entities/EntityManagerChangeArchetype.interop.gen.cs +++ b/Unity.Entities/EntityManagerChangeArchetype.interop.gen.cs @@ -22,7 +22,7 @@ namespace Unity.Entities unsafe partial struct StructuralChange { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstDiscard] private static void CheckDelegate(ref bool useDelegate) @@ -44,16 +44,24 @@ static class Managed public delegate void _dlg_AddComponentEntitiesBatch(IntPtr entityComponentStore, IntPtr entityBatchList, int typeIndex); public static _dlg_AddComponentEntitiesBatch _bfp_AddComponentEntitiesBatch; + public delegate void _dlg_AddComponentsEntitiesBatch(IntPtr entityComponentStore, IntPtr entityBatchList, ref ComponentTypes types); + public static _dlg_AddComponentsEntitiesBatch _bfp_AddComponentsEntitiesBatch; public delegate bool _dlg_AddComponentEntity(IntPtr entityComponentStore, IntPtr entity, int typeIndex); public static _dlg_AddComponentEntity _bfp_AddComponentEntity; + public delegate void _dlg_AddComponentsEntity(IntPtr entityComponentStore, IntPtr entity, ref ComponentTypes types); + public static _dlg_AddComponentsEntity _bfp_AddComponentsEntity; public delegate void _dlg_AddComponentChunks(IntPtr entityComponentStore, IntPtr chunks, int chunkCount, int typeIndex); public static _dlg_AddComponentChunks _bfp_AddComponentChunks; public delegate void _dlg_AddComponentsChunks(IntPtr entityComponentStore, IntPtr chunks, int chunkCount, ref ComponentTypes types); public static _dlg_AddComponentsChunks _bfp_AddComponentsChunks; public delegate bool _dlg_RemoveComponentEntity(IntPtr entityComponentStore, IntPtr entity, int typeIndex); public static _dlg_RemoveComponentEntity _bfp_RemoveComponentEntity; + public delegate void _dlg_RemoveComponentsEntity(IntPtr entityComponentStore, IntPtr entity, ref ComponentTypes types); + public static _dlg_RemoveComponentsEntity _bfp_RemoveComponentsEntity; public delegate void _dlg_RemoveComponentEntitiesBatch(IntPtr entityComponentStore, IntPtr entityBatchList, int typeIndex); public static _dlg_RemoveComponentEntitiesBatch _bfp_RemoveComponentEntitiesBatch; + public delegate void _dlg_RemoveComponentsEntitiesBatch(IntPtr entityComponentStore, IntPtr entityBatchList, ref ComponentTypes types); + public static _dlg_RemoveComponentsEntitiesBatch _bfp_RemoveComponentsEntitiesBatch; public delegate void _dlg_RemoveComponentChunks(IntPtr entityComponentStore, IntPtr chunks, int chunkCount, int typeIndex); public static _dlg_RemoveComponentChunks _bfp_RemoveComponentChunks; public delegate void _dlg_RemoveComponentsChunks(IntPtr entityComponentStore, IntPtr chunks, int chunkCount, ref ComponentTypes types); @@ -66,6 +74,8 @@ static class Managed public static _dlg_SetChunkComponent _bfp_SetChunkComponent; public delegate void _dlg_CreateEntity(IntPtr entityComponentStore, IntPtr archetype, IntPtr outEntities, int count); public static _dlg_CreateEntity _bfp_CreateEntity; + public delegate void _dlg_DestroyEntity(IntPtr entityComponentStore, IntPtr entities, int count); + public static _dlg_DestroyEntity _bfp_DestroyEntity; public delegate void _dlg_InstantiateEntities(IntPtr entityComponentStore, IntPtr srcEntity, IntPtr outputEntities, int instanceCount); public static _dlg_InstantiateEntities _bfp_InstantiateEntities; } @@ -76,22 +86,27 @@ static class Managed [NotBurstCompatible] internal static void Initialize() { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (Managed._initialized) return; Managed._initialized = true; Managed._bfp_AddComponentEntitiesBatch = BurstCompiler.CompileFunctionPointer(_mono_to_burst_AddComponentEntitiesBatch).Invoke; + Managed._bfp_AddComponentsEntitiesBatch = BurstCompiler.CompileFunctionPointer(_mono_to_burst_AddComponentsEntitiesBatch).Invoke; Managed._bfp_AddComponentEntity = BurstCompiler.CompileFunctionPointer(_mono_to_burst_AddComponentEntity).Invoke; + Managed._bfp_AddComponentsEntity = BurstCompiler.CompileFunctionPointer(_mono_to_burst_AddComponentsEntity).Invoke; Managed._bfp_AddComponentChunks = BurstCompiler.CompileFunctionPointer(_mono_to_burst_AddComponentChunks).Invoke; Managed._bfp_AddComponentsChunks = BurstCompiler.CompileFunctionPointer(_mono_to_burst_AddComponentsChunks).Invoke; Managed._bfp_RemoveComponentEntity = BurstCompiler.CompileFunctionPointer(_mono_to_burst_RemoveComponentEntity).Invoke; + Managed._bfp_RemoveComponentsEntity = BurstCompiler.CompileFunctionPointer(_mono_to_burst_RemoveComponentsEntity).Invoke; Managed._bfp_RemoveComponentEntitiesBatch = BurstCompiler.CompileFunctionPointer(_mono_to_burst_RemoveComponentEntitiesBatch).Invoke; + Managed._bfp_RemoveComponentsEntitiesBatch = BurstCompiler.CompileFunctionPointer(_mono_to_burst_RemoveComponentsEntitiesBatch).Invoke; Managed._bfp_RemoveComponentChunks = BurstCompiler.CompileFunctionPointer(_mono_to_burst_RemoveComponentChunks).Invoke; Managed._bfp_RemoveComponentsChunks = BurstCompiler.CompileFunctionPointer(_mono_to_burst_RemoveComponentsChunks).Invoke; Managed._bfp_AddSharedComponentChunks = BurstCompiler.CompileFunctionPointer(_mono_to_burst_AddSharedComponentChunks).Invoke; Managed._bfp_MoveEntityArchetype = BurstCompiler.CompileFunctionPointer(_mono_to_burst_MoveEntityArchetype).Invoke; Managed._bfp_SetChunkComponent = BurstCompiler.CompileFunctionPointer(_mono_to_burst_SetChunkComponent).Invoke; Managed._bfp_CreateEntity = BurstCompiler.CompileFunctionPointer(_mono_to_burst_CreateEntity).Invoke; + Managed._bfp_DestroyEntity = BurstCompiler.CompileFunctionPointer(_mono_to_burst_DestroyEntity).Invoke; Managed._bfp_InstantiateEntities = BurstCompiler.CompileFunctionPointer(_mono_to_burst_InstantiateEntities).Invoke; #endif @@ -99,7 +114,7 @@ internal static void Initialize() public static void AddComponentEntitiesBatch (EntityComponentStore* entityComponentStore, Unity.Collections.LowLevel.Unsafe.UnsafeList* entityBatchList, int typeIndex) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_AddComponentEntitiesBatch(entityComponentStore, entityBatchList, typeIndex); @@ -110,7 +125,7 @@ public static void AddComponentEntitiesBatch (EntityComponentStore* entityCompo _AddComponentEntitiesBatch(entityComponentStore, entityBatchList, typeIndex); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_AddComponentEntitiesBatch))] private static void _mono_to_burst_AddComponentEntitiesBatch(IntPtr entityComponentStore, IntPtr entityBatchList, int typeIndex) @@ -125,9 +140,37 @@ private static void _forward_mono_AddComponentEntitiesBatch(EntityComponentStore } #endif + public static void AddComponentsEntitiesBatch (EntityComponentStore* entityComponentStore, Unity.Collections.LowLevel.Unsafe.UnsafeList* entityBatchList, ref ComponentTypes types) + { +#if !UNITY_IOS + if (UseDelegate()) + { + _forward_mono_AddComponentsEntitiesBatch(entityComponentStore, entityBatchList, ref types); + return; + } +#endif + + _AddComponentsEntitiesBatch(entityComponentStore, entityBatchList, ref types); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_AddComponentsEntitiesBatch))] + private static void _mono_to_burst_AddComponentsEntitiesBatch(IntPtr entityComponentStore, IntPtr entityBatchList, ref ComponentTypes types) + { + _AddComponentsEntitiesBatch((EntityComponentStore*)entityComponentStore, (Unity.Collections.LowLevel.Unsafe.UnsafeList*)entityBatchList, ref types); + } + + [BurstDiscard] + private static void _forward_mono_AddComponentsEntitiesBatch(EntityComponentStore* entityComponentStore, Unity.Collections.LowLevel.Unsafe.UnsafeList* entityBatchList, ref ComponentTypes types) + { + Managed._bfp_AddComponentsEntitiesBatch((IntPtr) entityComponentStore, (IntPtr) entityBatchList, ref types); + } +#endif + public static bool AddComponentEntity (EntityComponentStore* entityComponentStore, Entity* entity, int typeIndex) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { var _retval = default(bool); @@ -139,7 +182,7 @@ public static bool AddComponentEntity (EntityComponentStore* entityComponentSto return _AddComponentEntity(entityComponentStore, entity, typeIndex); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_AddComponentEntity))] private static bool _mono_to_burst_AddComponentEntity(IntPtr entityComponentStore, IntPtr entity, int typeIndex) @@ -154,9 +197,37 @@ private static void _forward_mono_AddComponentEntity(ref bool _retval, EntityCom } #endif + public static void AddComponentsEntity (EntityComponentStore* entityComponentStore, Entity* entity, ref ComponentTypes types) + { +#if !UNITY_IOS + if (UseDelegate()) + { + _forward_mono_AddComponentsEntity(entityComponentStore, entity, ref types); + return; + } +#endif + + _AddComponentsEntity(entityComponentStore, entity, ref types); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_AddComponentsEntity))] + private static void _mono_to_burst_AddComponentsEntity(IntPtr entityComponentStore, IntPtr entity, ref ComponentTypes types) + { + _AddComponentsEntity((EntityComponentStore*)entityComponentStore, (Entity*)entity, ref types); + } + + [BurstDiscard] + private static void _forward_mono_AddComponentsEntity(EntityComponentStore* entityComponentStore, Entity* entity, ref ComponentTypes types) + { + Managed._bfp_AddComponentsEntity((IntPtr) entityComponentStore, (IntPtr) entity, ref types); + } +#endif + public static void AddComponentChunks (EntityComponentStore* entityComponentStore, ArchetypeChunk* chunks, int chunkCount, int typeIndex) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_AddComponentChunks(entityComponentStore, chunks, chunkCount, typeIndex); @@ -167,7 +238,7 @@ public static void AddComponentChunks (EntityComponentStore* entityComponentSto _AddComponentChunks(entityComponentStore, chunks, chunkCount, typeIndex); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_AddComponentChunks))] private static void _mono_to_burst_AddComponentChunks(IntPtr entityComponentStore, IntPtr chunks, int chunkCount, int typeIndex) @@ -184,7 +255,7 @@ private static void _forward_mono_AddComponentChunks(EntityComponentStore* entit public static void AddComponentsChunks (EntityComponentStore* entityComponentStore, ArchetypeChunk* chunks, int chunkCount, ref ComponentTypes types) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_AddComponentsChunks(entityComponentStore, chunks, chunkCount, ref types); @@ -195,7 +266,7 @@ public static void AddComponentsChunks (EntityComponentStore* entityComponentSt _AddComponentsChunks(entityComponentStore, chunks, chunkCount, ref types); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_AddComponentsChunks))] private static void _mono_to_burst_AddComponentsChunks(IntPtr entityComponentStore, IntPtr chunks, int chunkCount, ref ComponentTypes types) @@ -212,7 +283,7 @@ private static void _forward_mono_AddComponentsChunks(EntityComponentStore* enti public static bool RemoveComponentEntity (EntityComponentStore* entityComponentStore, Entity* entity, int typeIndex) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { var _retval = default(bool); @@ -224,7 +295,7 @@ public static bool RemoveComponentEntity (EntityComponentStore* entityComponent return _RemoveComponentEntity(entityComponentStore, entity, typeIndex); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_RemoveComponentEntity))] private static bool _mono_to_burst_RemoveComponentEntity(IntPtr entityComponentStore, IntPtr entity, int typeIndex) @@ -239,9 +310,37 @@ private static void _forward_mono_RemoveComponentEntity(ref bool _retval, Entity } #endif + public static void RemoveComponentsEntity (EntityComponentStore* entityComponentStore, Entity* entity, ref ComponentTypes types) + { +#if !UNITY_IOS + if (UseDelegate()) + { + _forward_mono_RemoveComponentsEntity(entityComponentStore, entity, ref types); + return; + } +#endif + + _RemoveComponentsEntity(entityComponentStore, entity, ref types); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_RemoveComponentsEntity))] + private static void _mono_to_burst_RemoveComponentsEntity(IntPtr entityComponentStore, IntPtr entity, ref ComponentTypes types) + { + _RemoveComponentsEntity((EntityComponentStore*)entityComponentStore, (Entity*)entity, ref types); + } + + [BurstDiscard] + private static void _forward_mono_RemoveComponentsEntity(EntityComponentStore* entityComponentStore, Entity* entity, ref ComponentTypes types) + { + Managed._bfp_RemoveComponentsEntity((IntPtr) entityComponentStore, (IntPtr) entity, ref types); + } +#endif + public static void RemoveComponentEntitiesBatch (EntityComponentStore* entityComponentStore, Unity.Collections.LowLevel.Unsafe.UnsafeList* entityBatchList, int typeIndex) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_RemoveComponentEntitiesBatch(entityComponentStore, entityBatchList, typeIndex); @@ -252,7 +351,7 @@ public static void RemoveComponentEntitiesBatch (EntityComponentStore* entityCo _RemoveComponentEntitiesBatch(entityComponentStore, entityBatchList, typeIndex); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_RemoveComponentEntitiesBatch))] private static void _mono_to_burst_RemoveComponentEntitiesBatch(IntPtr entityComponentStore, IntPtr entityBatchList, int typeIndex) @@ -267,9 +366,37 @@ private static void _forward_mono_RemoveComponentEntitiesBatch(EntityComponentSt } #endif + public static void RemoveComponentsEntitiesBatch (EntityComponentStore* entityComponentStore, Unity.Collections.LowLevel.Unsafe.UnsafeList* entityBatchList, ref ComponentTypes types) + { +#if !UNITY_IOS + if (UseDelegate()) + { + _forward_mono_RemoveComponentsEntitiesBatch(entityComponentStore, entityBatchList, ref types); + return; + } +#endif + + _RemoveComponentsEntitiesBatch(entityComponentStore, entityBatchList, ref types); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_RemoveComponentsEntitiesBatch))] + private static void _mono_to_burst_RemoveComponentsEntitiesBatch(IntPtr entityComponentStore, IntPtr entityBatchList, ref ComponentTypes types) + { + _RemoveComponentsEntitiesBatch((EntityComponentStore*)entityComponentStore, (Unity.Collections.LowLevel.Unsafe.UnsafeList*)entityBatchList, ref types); + } + + [BurstDiscard] + private static void _forward_mono_RemoveComponentsEntitiesBatch(EntityComponentStore* entityComponentStore, Unity.Collections.LowLevel.Unsafe.UnsafeList* entityBatchList, ref ComponentTypes types) + { + Managed._bfp_RemoveComponentsEntitiesBatch((IntPtr) entityComponentStore, (IntPtr) entityBatchList, ref types); + } +#endif + public static void RemoveComponentChunks (EntityComponentStore* entityComponentStore, ArchetypeChunk* chunks, int chunkCount, int typeIndex) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_RemoveComponentChunks(entityComponentStore, chunks, chunkCount, typeIndex); @@ -280,7 +407,7 @@ public static void RemoveComponentChunks (EntityComponentStore* entityComponent _RemoveComponentChunks(entityComponentStore, chunks, chunkCount, typeIndex); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_RemoveComponentChunks))] private static void _mono_to_burst_RemoveComponentChunks(IntPtr entityComponentStore, IntPtr chunks, int chunkCount, int typeIndex) @@ -297,7 +424,7 @@ private static void _forward_mono_RemoveComponentChunks(EntityComponentStore* en public static void RemoveComponentsChunks (EntityComponentStore* entityComponentStore, ArchetypeChunk* chunks, int chunkCount, ref ComponentTypes types) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_RemoveComponentsChunks(entityComponentStore, chunks, chunkCount, ref types); @@ -308,7 +435,7 @@ public static void RemoveComponentsChunks (EntityComponentStore* entityComponen _RemoveComponentsChunks(entityComponentStore, chunks, chunkCount, ref types); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_RemoveComponentsChunks))] private static void _mono_to_burst_RemoveComponentsChunks(IntPtr entityComponentStore, IntPtr chunks, int chunkCount, ref ComponentTypes types) @@ -325,7 +452,7 @@ private static void _forward_mono_RemoveComponentsChunks(EntityComponentStore* e public static void AddSharedComponentChunks (EntityComponentStore* entityComponentStore, ArchetypeChunk* chunks, int chunkCount, int componentTypeIndex, int sharedComponentIndex) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_AddSharedComponentChunks(entityComponentStore, chunks, chunkCount, componentTypeIndex, sharedComponentIndex); @@ -336,7 +463,7 @@ public static void AddSharedComponentChunks (EntityComponentStore* entityCompon _AddSharedComponentChunks(entityComponentStore, chunks, chunkCount, componentTypeIndex, sharedComponentIndex); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_AddSharedComponentChunks))] private static void _mono_to_burst_AddSharedComponentChunks(IntPtr entityComponentStore, IntPtr chunks, int chunkCount, int componentTypeIndex, int sharedComponentIndex) @@ -353,7 +480,7 @@ private static void _forward_mono_AddSharedComponentChunks(EntityComponentStore* public static void MoveEntityArchetype (EntityComponentStore* entityComponentStore, Entity* entity, void* dstArchetype) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_MoveEntityArchetype(entityComponentStore, entity, dstArchetype); @@ -364,7 +491,7 @@ public static void MoveEntityArchetype (EntityComponentStore* entityComponentSt _MoveEntityArchetype(entityComponentStore, entity, dstArchetype); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_MoveEntityArchetype))] private static void _mono_to_burst_MoveEntityArchetype(IntPtr entityComponentStore, IntPtr entity, IntPtr dstArchetype) @@ -381,7 +508,7 @@ private static void _forward_mono_MoveEntityArchetype(EntityComponentStore* enti public static void SetChunkComponent (EntityComponentStore* entityComponentStore, ArchetypeChunk* chunks, int chunkCount, void* componentData, int componentTypeIndex) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_SetChunkComponent(entityComponentStore, chunks, chunkCount, componentData, componentTypeIndex); @@ -392,7 +519,7 @@ public static void SetChunkComponent (EntityComponentStore* entityComponentStor _SetChunkComponent(entityComponentStore, chunks, chunkCount, componentData, componentTypeIndex); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_SetChunkComponent))] private static void _mono_to_burst_SetChunkComponent(IntPtr entityComponentStore, IntPtr chunks, int chunkCount, IntPtr componentData, int componentTypeIndex) @@ -409,7 +536,7 @@ private static void _forward_mono_SetChunkComponent(EntityComponentStore* entity public static void CreateEntity (EntityComponentStore* entityComponentStore, void* archetype, Entity* outEntities, int count) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_CreateEntity(entityComponentStore, archetype, outEntities, count); @@ -420,7 +547,7 @@ public static void CreateEntity (EntityComponentStore* entityComponentStore, vo _CreateEntity(entityComponentStore, archetype, outEntities, count); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_CreateEntity))] private static void _mono_to_burst_CreateEntity(IntPtr entityComponentStore, IntPtr archetype, IntPtr outEntities, int count) @@ -435,9 +562,37 @@ private static void _forward_mono_CreateEntity(EntityComponentStore* entityCompo } #endif + public static void DestroyEntity (EntityComponentStore* entityComponentStore, Entity* entities, int count) + { +#if !UNITY_IOS + if (UseDelegate()) + { + _forward_mono_DestroyEntity(entityComponentStore, entities, count); + return; + } +#endif + + _DestroyEntity(entityComponentStore, entities, count); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_DestroyEntity))] + private static void _mono_to_burst_DestroyEntity(IntPtr entityComponentStore, IntPtr entities, int count) + { + _DestroyEntity((EntityComponentStore*)entityComponentStore, (Entity*)entities, count); + } + + [BurstDiscard] + private static void _forward_mono_DestroyEntity(EntityComponentStore* entityComponentStore, Entity* entities, int count) + { + Managed._bfp_DestroyEntity((IntPtr) entityComponentStore, (IntPtr) entities, count); + } +#endif + public static void InstantiateEntities (EntityComponentStore* entityComponentStore, Entity* srcEntity, Entity* outputEntities, int instanceCount) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_InstantiateEntities(entityComponentStore, srcEntity, outputEntities, instanceCount); @@ -448,7 +603,7 @@ public static void InstantiateEntities (EntityComponentStore* entityComponentSt _InstantiateEntities(entityComponentStore, srcEntity, outputEntities, instanceCount); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_InstantiateEntities))] private static void _mono_to_burst_InstantiateEntities(IntPtr entityComponentStore, IntPtr srcEntity, IntPtr outputEntities, int instanceCount) diff --git a/Unity.Entities/EntityManagerCopyEntitiesFrom.cs b/Unity.Entities/EntityManagerCopyEntitiesFrom.cs index 52e2ffcb..23b63041 100644 --- a/Unity.Entities/EntityManagerCopyEntitiesFrom.cs +++ b/Unity.Entities/EntityManagerCopyEntitiesFrom.cs @@ -79,7 +79,7 @@ public void CopyAndReplaceEntitiesFrom(EntityManager srcEntityManager) archetypeChunkChangesJob.Complete(); EntityDiffer.CopyAndReplaceChunks(srcEntityManager, this, selfAccess->m_UniversalQueryWithChunks, archetypeChunkChanges); - Unity.Entities.EntityComponentStore.AssertSameEntities(srcAccess->EntityComponentStore, selfAccess->EntityComponentStore); + Unity.Entities.EntityComponentStore.AssertAllEntitiesCopied(srcAccess->EntityComponentStore, selfAccess->EntityComponentStore); } } } diff --git a/Unity.Entities/EntityManagerCreateDestroyEntities.cs b/Unity.Entities/EntityManagerCreateDestroyEntities.cs index 80be5997..5d1e50ac 100644 --- a/Unity.Entities/EntityManagerCreateDestroyEntities.cs +++ b/Unity.Entities/EntityManagerCreateDestroyEntities.cs @@ -152,6 +152,31 @@ public void DestroyEntity(EntityQuery entityQuery) DestroyEntity(queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter); } + /// + /// Destroys all entities in the EntityManager and resets the internal entity ID version table. + /// + /// + /// This method can be used to reset an EntityManager for the purpose of creating data that can be written to disk with a deterministic, exact matching file on disk. + /// It resets all chunk and entity version state so that it can be serialized to disk back to a state that is the same as a clean world. + /// Archetypes and EntityQuery are not reset since they are often cached / owned by systems, but these are also not stored on disk. + /// + [NotBurstCompatible] + public void DestroyAndResetAllEntities() + { + DestroyEntity(UniversalQuery); + if (Debug.EntityCount != 0) + throw new System.ArgumentException("Destroying all entities failed. Some entities couldn't be deleted."); + + // FreeAllEntities also resets entity index + var access = GetCheckedEntityDataAccess(); + var ecs = access->EntityComponentStore; + ecs->FreeAllEntities(true); + + access->ManagedComponentStore.ResetManagedComponentStoreForDeserialization(0, ref *ecs); + access->ManagedComponentStore.PrepareForDeserialize(); + } + + /// /// Destroys all entities in an array. /// @@ -325,34 +350,6 @@ public void CopyEntities(NativeArray srcEntities, NativeArray ou access->InstantiateInternal((Entity*)srcEntities.GetUnsafeReadOnlyPtr(), (Entity*)outputEntities.GetUnsafePtr(), srcEntities.Length, outputEntities.Length, false); } - /// - /// Creates a set of chunks containing the specified number of entities having the specified archetype. - /// - /// - /// The EntityManager creates enough chunks to hold the required number of entities. - /// - /// **Important:** This function creates a sync point, which means that the EntityManager waits for all - /// currently running Jobs to complete before creating these chunks and no additional Jobs can start before - /// the function is finished. A sync point can cause a drop in performance because the ECS framework may not - /// be able to make use of the processing power of all available cores. - /// - /// The archetype for the chunk and entities. - /// An empty array to receive the created chunks. - /// The number of entities to create. - [Obsolete("CreateChunk is deprecated. (RemovedAfter 2020-06-05)", false)] - [StructuralChangeMethod] - public void CreateChunk(EntityArchetype archetype, NativeArray chunks, int entityCount) - { - var access = GetCheckedEntityDataAccess(); - var ecs = access->EntityComponentStore; - - Unity.Entities.EntityComponentStore.AssertValidArchetype(ecs, archetype); - BeforeStructuralChange(); - - ecs->CreateChunks(archetype.Archetype, (ArchetypeChunk*)chunks.GetUnsafePtr(), chunks.Length, entityCount); - access->PlaybackManagedChanges(); - } - /// /// Detects the created and destroyed entities compared to last time the method was called with the given state. /// diff --git a/Unity.Entities/EntityManagerDebug.cs b/Unity.Entities/EntityManagerDebug.cs index cf06f30e..0e45bbf0 100644 --- a/Unity.Entities/EntityManagerDebug.cs +++ b/Unity.Entities/EntityManagerDebug.cs @@ -1,6 +1,7 @@ using System; using System.Diagnostics; using Unity.Assertions; +using Unity.Burst; using Unity.Collections; using Unity.Collections.LowLevel.Unsafe; @@ -160,25 +161,56 @@ internal Entity GetMetaChunkEntity(ArchetypeChunk chunk) return chunk.m_Chunk->metaChunkEntity; } - public void LogEntityInfo(Entity entity) + public void LogEntityInfo(Entity entity) => Unity.Debug.Log(GetEntityInfo(entity)); + +#if UNITY_EDITOR + internal string GetAllEntityInfo(bool includeComponentValues=false) { - Unity.Debug.Log(GetEntityInfo(entity)); + var str = new System.Text.StringBuilder(); + using (var arr = m_Manager.UniversalQuery.ToEntityArray(Allocator.Persistent)) + { + for (int i = 0; i < arr.Length; i++) + { + GetEntityInfo(arr[i], includeComponentValues, str); + str.AppendLine(); + } + } + + return str.ToString(); } +#endif public string GetEntityInfo(Entity entity) { - - var entityComponentStore = m_Manager.GetCheckedEntityDataAccess()->EntityComponentStore; if (entity.Index < 0 || entity.Index > entityComponentStore->EntitiesCapacity) { return "Entity.Invalid"; } - - var archetype = entityComponentStore->GetArchetype(entity); #if !NET_DOTS var str = new System.Text.StringBuilder(); + GetEntityInfo(entity, false, str); + return str.ToString(); +#else + // @TODO Tiny really needs a proper string/stringutils implementation + var archetype = entityComponentStore->GetArchetype(entity); + string str = $"Entity {entity.Index}.{entity.Version}"; + for (var i = 0; i < archetype->TypesCount; i++) + { + var componentTypeInArchetype = archetype->Types[i]; + str += " - {0}" + componentTypeInArchetype.ToString(); + } + + return str; +#endif + } + +#if !NET_DOTS + internal void GetEntityInfo(Entity entity, bool includeComponentValues, System.Text.StringBuilder str) + { + var entityComponentStore = m_Manager.GetCheckedEntityDataAccess()->EntityComponentStore; + var archetype = entityComponentStore->GetArchetype(entity); str.Append(entity.ToString()); #if UNITY_EDITOR { @@ -193,19 +225,26 @@ public string GetEntityInfo(Entity entity) str.AppendFormat(" - {0}", componentTypeInArchetype.ToString()); } - return str.ToString(); -#else - // @TODO Tiny really needs a proper string/stringutils implementation - string str = $"Entity {entity.Index}.{entity.Version}"; - for (var i = 0; i < archetype->TypesCount; i++) +#if UNITY_EDITOR + if (includeComponentValues) { - var componentTypeInArchetype = archetype->Types[i]; - str += " - {0}" + componentTypeInArchetype.ToString(); + for (var i = 0; i < archetype->TypesCount; i++) + { + var componentType = archetype->Types[i].ToComponentType(); + if (componentType.IsBuffer || componentType.IsZeroSized || TypeManager.GetTypeInfo(componentType.TypeIndex).Category == TypeManager.TypeCategory.EntityData) + continue; + var comp = GetComponentBoxed(entity, componentType); + if (comp is UnityEngine.Object) + continue; + str.AppendLine(); + str.AppendLine(componentType.ToString()); + var json = UnityEngine.JsonUtility.ToJson(comp, true); + str.AppendLine(json); + } } - - return str; #endif } +#endif #if !UNITY_DOTSRUNTIME public object GetComponentBoxed(Entity entity, ComponentType type) @@ -277,6 +316,86 @@ public object GetComponentBoxed(Entity entity, ComponentType type) #endif + +#if UNITY_EDITOR + /// + /// Returns the Authoring object for the entity. Returns null if the authoring object is not available. + /// For example closed subscenes will always return null. + /// + public UnityEngine.Object GetAuthoringObjectForEntity(Entity entity) + { + if (m_Manager.HasComponent(entity)) + return UnityEditor.EditorUtility.InstanceIDToObject(m_Manager.GetComponentData(entity).OriginatingId); + + return null; + } + + [BurstCompile] + struct BuildInstanceIDToEntityIndex : IJobEntityBatch + { + public UnsafeMultiHashMap.ParallelWriter EntityLookup; + [ReadOnly] + public ComponentTypeHandle GuidType; + [ReadOnly] + public EntityTypeHandle EntityType; + + public void Execute(ArchetypeChunk chunk, int batchIndex) + { + var entities = chunk.GetNativeArray(EntityType); + var guids = chunk.GetNativeArray(GuidType); + + for (int i = 0; i != entities.Length; i++) + EntityLookup.Add(guids[i].OriginatingId, entities[i]); + } + } + + /// + /// Lists all entities in this world that were converted from or are associated with the game object. + /// + public void GetEntitiesForAuthoringObject(UnityEngine.GameObject gameObject, NativeList entities) + { + GetEntitiesForAuthoringObject((UnityEngine.Object)gameObject, entities); + } + + /// + /// Lists all entities in this world that were converted from or are associated with the game object. + /// + public void GetEntitiesForAuthoringObject(UnityEngine.Component component, NativeList entities) + { + GetEntitiesForAuthoringObject((UnityEngine.Object)component.gameObject, entities); + } + /// + /// Lists all entities in this world that were converted from or are associated with the given object. + /// + public void GetEntitiesForAuthoringObject(UnityEngine.Object obj, NativeList entities) + { + var instanceID = obj.GetInstanceID(); + var access = m_Manager.GetCheckedEntityDataAccess(); + var newVersion = m_Manager.GetComponentOrderVersion(); + if (access->m_CachedEntityGUIDToEntityIndexVersion != newVersion) + { + access->CachedEntityGUIDToEntityIndex.Clear(); + var count = access->m_EntityGuidQuery.CalculateEntityCount(); + if (access->CachedEntityGUIDToEntityIndex.Capacity < count) + access->CachedEntityGUIDToEntityIndex.Capacity = count; + + new BuildInstanceIDToEntityIndex + { + EntityLookup = access->CachedEntityGUIDToEntityIndex.AsParallelWriter(), + GuidType = m_Manager.GetComponentTypeHandle(true), + EntityType = m_Manager.GetEntityTypeHandle() + }.ScheduleParallel(access->m_EntityGuidQuery).Complete(); + access->m_CachedEntityGUIDToEntityIndexVersion = newVersion; + } + + var lookup = access->CachedEntityGUIDToEntityIndex; + + entities.Clear(); + foreach (var e in lookup.GetValuesForKey(instanceID)) + entities.Add(e); + } +#endif + [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] public void CheckInternalConsistency() { diff --git a/Unity.Entities/EntityManagerExclusiveEntityTransaction.cs b/Unity.Entities/EntityManagerExclusiveEntityTransaction.cs index b902bd1a..bcdb79f8 100644 --- a/Unity.Entities/EntityManagerExclusiveEntityTransaction.cs +++ b/Unity.Entities/EntityManagerExclusiveEntityTransaction.cs @@ -51,19 +51,19 @@ public ExclusiveEntityTransaction BeginExclusiveEntityTransaction() var access = GetCheckedEntityDataAccess(); #if ENABLE_UNITY_COLLECTIONS_CHECKS - if (m_IsInExclusiveTransaction) + if (IsInExclusiveTransaction) throw new InvalidOperationException("An exclusive transaction is already in process."); if (access->DependencyManager->IsInTransaction) throw new InvalidOperationException("An exclusive transaction is already in process."); #endif access->DependencyManager->BeginExclusiveTransaction(); - access->m_IsInExclusiveTransaction = true; + access->m_IsInExclusiveTransaction = 1; var copy = this; #if ENABLE_UNITY_COLLECTIONS_CHECKS - copy.m_IsInExclusiveTransaction = true; + copy.m_IsInExclusiveTransaction = 1; #endif return new ExclusiveEntityTransaction(copy); } @@ -76,7 +76,7 @@ public ExclusiveEntityTransaction BeginExclusiveEntityTransaction() public void EndExclusiveEntityTransaction() { #if ENABLE_UNITY_COLLECTIONS_CHECKS - if (m_IsInExclusiveTransaction) + if (m_IsInExclusiveTransaction == 1) throw new InvalidOperationException("Transactions can only be ended from the main thread"); AtomicSafetyHandle.CheckExistsAndThrow(m_Safety); #endif @@ -86,7 +86,7 @@ public void EndExclusiveEntityTransaction() AtomicSafetyHandle.CheckWriteAndThrow(m_Safety); #endif m_EntityDataAccess->DependencyManager->EndExclusiveTransaction(); - m_EntityDataAccess->m_IsInExclusiveTransaction = false; + m_EntityDataAccess->m_IsInExclusiveTransaction = 0; } // ---------------------------------------------------------------------------------------------------------- @@ -108,11 +108,10 @@ internal void AllocateConsecutiveEntitiesForLoading(int count) internal void AddSharedComponent(NativeArray chunks, T componentData) where T : struct, ISharedComponentData { - ManagedComponentStore mcs = GetCheckedEntityDataAccess()->ManagedComponentStore; var componentType = ComponentType.ReadWrite(); - int sharedComponentIndex = mcs.InsertSharedComponent(componentData); + int sharedComponentIndex = m_EntityDataAccess->InsertSharedComponent(componentData); m_EntityDataAccess->AddSharedComponentData(chunks, sharedComponentIndex, componentType); - mcs.RemoveReference(sharedComponentIndex); + m_EntityDataAccess->RemoveSharedComponentReference(sharedComponentIndex); } } } diff --git a/Unity.Entities/EntityManagerLocks.cs b/Unity.Entities/EntityManagerLocks.cs deleted file mode 100644 index 762482a6..00000000 --- a/Unity.Entities/EntityManagerLocks.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; - -namespace Unity.Entities -{ - public unsafe partial struct EntityManager - { - [Obsolete("LockChunk has been deprecated, and its usage is a no-op. (RemovedAfter 2020-06-05)")] - public void LockChunk(ArchetypeChunk chunk) - { - } - - [Obsolete("LockChunk has been deprecated, and its usage is a no-op. (RemovedAfter 2020-06-05)")] - public void LockChunk(NativeArray chunks) - { - } - - [Obsolete("UnlockChunk has been deprecated, and its usage is a no-op. (RemovedAfter 2020-06-05)")] - public void UnlockChunk(ArchetypeChunk chunk) - { - } - } -} diff --git a/Unity.Entities/EntityManagerLocks.cs.meta b/Unity.Entities/EntityManagerLocks.cs.meta deleted file mode 100644 index ecb8553a..00000000 --- a/Unity.Entities/EntityManagerLocks.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: ef283440e0d1440709af7f372572ebd4 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities/EntityManagerMoveEntities.cs b/Unity.Entities/EntityManagerMoveEntities.cs index 0a04e991..9d8215e8 100644 --- a/Unity.Entities/EntityManagerMoveEntities.cs +++ b/Unity.Entities/EntityManagerMoveEntities.cs @@ -399,7 +399,7 @@ internal void MoveChunksFromFiltered( srcManagedComponentStore.Playback(ref srcEntityComponentStore->ManagedChangesTracker); k_ProfileMoveSharedComponents.Begin(); - var remapShared = mcs.MoveSharedComponents(srcManagedComponentStore, chunks, Allocator.TempJob); + var remapShared = access->MoveSharedComponents(srcManagedComponentStore, chunks, Allocator.TempJob); k_ProfileMoveSharedComponents.End(); if (managedComponentCount > 0) @@ -508,7 +508,7 @@ internal void MoveChunksFromAll( {srcArchetype = srcArchetype, dstArchetype = dstArchetype}; srcEntityComponentStore->m_ChunkListChangesTracker.TrackArchetype(srcArchetype); - ecs->m_ChunkListChangesTracker.TrackArchetype(srcArchetype); + ecs->m_ChunkListChangesTracker.TrackArchetype(dstArchetype); for (var j = 0; j < srcArchetype->Chunks.Count; ++j) { @@ -528,7 +528,7 @@ internal void MoveChunksFromAll( srcManagedComponentStore.Playback(ref srcEntityComponentStore->ManagedChangesTracker); k_ProfileMoveSharedComponents.Begin(); - var remapShared = mcs.MoveAllSharedComponents(srcManagedComponentStore, Allocator.TempJob); + var remapShared = access->MoveAllSharedComponents(srcManagedComponentStore, Allocator.TempJob); k_ProfileMoveSharedComponents.End(); gatherManagedComponentIndices.Complete(); @@ -620,7 +620,7 @@ public void Execute() for (int i = 0; i < chunkCount; ++i) { var chunk = chunks[i].m_Chunk; - dstEntityComponentStore->AllocateEntitiesForRemapping(chunk, ref entityRemapping); + dstEntityComponentStore->AllocateEntitiesForRemapping(chunk, srcEntityComponentStore, ref entityRemapping); srcEntityComponentStore->FreeEntities(chunk); } } @@ -914,7 +914,7 @@ struct MoveAllChunksJob : IJobBurstSchedulable public void Execute() { dstEntityComponentStore->AllocateEntitiesForRemapping(srcEntityComponentStore, ref entityRemapping); - srcEntityComponentStore->FreeAllEntities(); + srcEntityComponentStore->FreeAllEntities(false); } } } diff --git a/Unity.Entities/EntityManagerQuery.cs b/Unity.Entities/EntityManagerQuery.cs index d5aa9d7b..f7cfbbbc 100644 --- a/Unity.Entities/EntityManagerQuery.cs +++ b/Unity.Entities/EntityManagerQuery.cs @@ -91,29 +91,7 @@ public void GetAllArchetypes(NativeList allArchetypes) public EntityQueryMask GetEntityQueryMask(EntityQuery query) { var access = GetCheckedEntityDataAccess(); - var queryImpl = query._GetImpl(); - - if (queryImpl->_QueryData->EntityQueryMask.IsCreated()) - return queryImpl->_QueryData->EntityQueryMask; - - if (access->EntityQueryManager->m_EntityQueryMasksAllocated >= 1024) - throw new Exception("You have reached the limit of 1024 unique EntityQueryMasks, and cannot generate any more."); - - var mask = new EntityQueryMask( - (byte)(access->EntityQueryManager->m_EntityQueryMasksAllocated / 8), - (byte)(1 << (access->EntityQueryManager->m_EntityQueryMasksAllocated % 8)), - access->EntityComponentStore); - - access->EntityQueryManager->m_EntityQueryMasksAllocated++; - - for (var i = 0; i < queryImpl->_QueryData->MatchingArchetypes.Length; ++i) - { - queryImpl->_QueryData->MatchingArchetypes.Ptr[i]->Archetype->QueryMaskArray[mask.Index] |= mask.Mask; - } - - queryImpl->_QueryData->EntityQueryMask = mask; - - return mask; + return access->EntityQueryManager->GetEntityQueryMask(query.__impl->_QueryData, access->EntityComponentStore); } // ---------------------------------------------------------------------------------------------------------- diff --git a/Unity.Entities/EntityManagerTypes.cs b/Unity.Entities/EntityManagerTypes.cs index fee22769..59b49215 100644 --- a/Unity.Entities/EntityManagerTypes.cs +++ b/Unity.Entities/EntityManagerTypes.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; namespace Unity.Entities { @@ -52,9 +53,20 @@ public DynamicComponentTypeHandle GetDynamicComponentTypeHandle(ComponentType co { #if ENABLE_UNITY_COLLECTIONS_CHECKS var access = GetCheckedEntityDataAccess(); - return new DynamicComponentTypeHandle(componentType, - access->DependencyManager->Safety.GetSafetyHandleForDynamicComponentTypeHandle(componentType.TypeIndex, componentType.AccessModeType == ComponentType.AccessMode.ReadOnly), - GlobalSystemVersion); + if (!componentType.IsBuffer) + { + return new DynamicComponentTypeHandle(componentType, + access->DependencyManager->Safety.GetSafetyHandleForDynamicComponentTypeHandle(componentType.TypeIndex, componentType.AccessModeType == ComponentType.AccessMode.ReadOnly), + default(AtomicSafetyHandle), GlobalSystemVersion); + } + else + { + return new DynamicComponentTypeHandle(componentType, + access->DependencyManager->Safety.GetSafetyHandleForDynamicComponentTypeHandle(componentType.TypeIndex, componentType.AccessModeType == ComponentType.AccessMode.ReadOnly), + access->DependencyManager->Safety.GetBufferHandleForBufferTypeHandle(componentType.TypeIndex), + GlobalSystemVersion); + } + #else return new DynamicComponentTypeHandle(componentType, GlobalSystemVersion); #endif @@ -104,6 +116,30 @@ public SharedComponentTypeHandle GetSharedComponentTypeHandle() #endif } + /// + /// Gets the dynamic type object required to access a shared component of the given type. + /// + /// + /// To access a component stored in a chunk, you must have the type registry information for the component. + /// This function provides that information for shared components. Use the returned + /// object with the functions of an + /// object to get information about the components in that chunk and to access the component values. + /// + /// The component type to get access to. + /// The run-time type information of the shared component. + public DynamicSharedComponentTypeHandle GetDynamicSharedComponentTypeHandle(ComponentType componentType) + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + var access = GetCheckedEntityDataAccess(); + return new DynamicSharedComponentTypeHandle(componentType, + access->DependencyManager->Safety.GetSafetyHandleForDynamicComponentTypeHandle(componentType.TypeIndex, + // Only read only mode supported for DynamicSharedComponentTypeHandle + true)); +#else + return new DynamicSharedComponentTypeHandle(componentType); +#endif + } + /// /// Gets the dynamic type object required to access the component of a chunk. /// diff --git a/Unity.Entities/EntityManagerTypes.deprecated.cs b/Unity.Entities/EntityManagerTypes.deprecated.cs deleted file mode 100644 index 7acdc7f7..00000000 --- a/Unity.Entities/EntityManagerTypes.deprecated.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; -using Unity.Collections; - -namespace Unity.Entities -{ - public unsafe partial struct EntityManager - { - [Obsolete("GetArchetypeChunkComponentType has been renamed to GetComponentTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetComponentTypeHandle(*)", false)] - public ArchetypeChunkComponentType GetArchetypeChunkComponentType(bool isReadOnly) - { -#if ENABLE_UNITY_COLLECTIONS_CHECKS - var access = GetCheckedEntityDataAccess(); - var typeIndex = TypeManager.GetTypeIndex(); - return new ArchetypeChunkComponentType( - access->DependencyManager->Safety.GetSafetyHandleForComponentTypeHandle(typeIndex, isReadOnly), isReadOnly, - GlobalSystemVersion); -#else - return new ArchetypeChunkComponentType(isReadOnly, GlobalSystemVersion); -#endif - } - - [Obsolete("GetArchetypeChunkComponentTypeDynamic has been renamed to GetDynamicComponentTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetDynamicComponentTypeHandle(*)", false)] - public ArchetypeChunkComponentTypeDynamic GetArchetypeChunkComponentTypeDynamic(ComponentType componentType) - { -#if ENABLE_UNITY_COLLECTIONS_CHECKS - var access = GetCheckedEntityDataAccess(); - return new ArchetypeChunkComponentTypeDynamic(componentType, - access->DependencyManager->Safety.GetSafetyHandleForDynamicComponentTypeHandle(componentType.TypeIndex, componentType.AccessModeType == ComponentType.AccessMode.ReadOnly), - GlobalSystemVersion); -#else - return new ArchetypeChunkComponentTypeDynamic(componentType, GlobalSystemVersion); -#endif - } - - [Obsolete("GetArchetypeChunkBufferType has been renamed to GetBufferTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetBufferTypeHandle(*)", false)] - public ArchetypeChunkBufferType GetArchetypeChunkBufferType(bool isReadOnly) - where T : struct, IBufferElementData - { - return GetCheckedEntityDataAccess()->GetArchetypeChunkBufferType(isReadOnly); - } - - [Obsolete("GetArchetypeChunkSharedComponentType has been renamed to GetSharedComponentTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetSharedComponentTypeHandle()", false)] - public ArchetypeChunkSharedComponentType GetArchetypeChunkSharedComponentType() - where T : struct, ISharedComponentData - { -#if ENABLE_UNITY_COLLECTIONS_CHECKS - var typeIndex = TypeManager.GetTypeIndex(); - var access = GetCheckedEntityDataAccess(); - return new ArchetypeChunkSharedComponentType(access->DependencyManager->Safety.GetSafetyHandleForSharedComponentTypeHandle(typeIndex)); -#else - return new ArchetypeChunkSharedComponentType(false); -#endif - } - - [Obsolete("GetArchetypeChunkEntityType has been renamed to GetEntityTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetEntityTypeHandle()", false)] - public ArchetypeChunkEntityType GetArchetypeChunkEntityType() - { -#if ENABLE_UNITY_COLLECTIONS_CHECKS - var access = GetCheckedEntityDataAccess(); - return new ArchetypeChunkEntityType( - access->DependencyManager->Safety.GetSafetyHandleForEntityTypeHandle()); -#else - return new ArchetypeChunkEntityType(false); -#endif - } - } -} diff --git a/Unity.Entities/EntityManagerTypes.deprecated.cs.meta b/Unity.Entities/EntityManagerTypes.deprecated.cs.meta deleted file mode 100644 index 834d74a3..00000000 --- a/Unity.Entities/EntityManagerTypes.deprecated.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 3a59c9cd3c4bd4ee2ae75ded67465aa3 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities/EntityManagerVersions.cs b/Unity.Entities/EntityManagerVersions.cs index f1c42b86..6c2a047c 100644 --- a/Unity.Entities/EntityManagerVersions.cs +++ b/Unity.Entities/EntityManagerVersions.cs @@ -54,8 +54,7 @@ public int GetComponentOrderVersion() public int GetSharedComponentOrderVersion(T sharedComponent) where T : struct, ISharedComponentData { var access = GetCheckedEntityDataAccess(); - var mcs = access->ManagedComponentStore; - return mcs.GetSharedComponentVersion(sharedComponent); + return access->GetSharedComponentVersion(sharedComponent); } // ---------------------------------------------------------------------------------------------------------- diff --git a/Unity.Entities/EntityRemapUtility.cs b/Unity.Entities/EntityRemapUtility.cs index fd4c84b6..e889c15e 100644 --- a/Unity.Entities/EntityRemapUtility.cs +++ b/Unity.Entities/EntityRemapUtility.cs @@ -83,79 +83,96 @@ public struct BufferEntityPatchInfo public int ElementStride; } - public struct ManagedEntityPatchInfo - { - // Type the managed component - public ComponentType Type; - } +#if !UNITY_DOTSRUNTIME -#if UNITY_DOTSRUNTIME - // @TODO TINY -- Need to use UnsafeArray to provide a view of the data in sEntityOffsetArray in the static type manager - public static EntityOffsetInfo[] CalculateEntityOffsets() + public static void CalculateEntityAndBlobOffsetsUnmanaged(Type type, + out bool hasEntityRefs, + out bool hasBlobRefs, + ref NativeList entityOffsets, + ref NativeList blobOffsets) { - return null; - } + int entityOffsetsCount = entityOffsets.Length; + int blobOffsetsCount = blobOffsets.Length; + CalculateOffsetsRecurse(ref entityOffsets, ref blobOffsets, type, 0); -#else - public static EntityOffsetInfo[] CalculateEntityOffsets() - { - return CalculateEntityOffsets(typeof(T)); + hasEntityRefs = entityOffsets.Length != entityOffsetsCount; + hasBlobRefs = blobOffsets.Length != blobOffsetsCount; } - public static bool HasEntityMembers(Type type) + static void CalculateOffsetsRecurse(ref NativeList entityOffsets, ref NativeList blobOffsets, Type type, int baseOffset) { if (type == typeof(Entity)) - return true; - - var fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); - foreach (var field in fields) { - if (field.FieldType.IsValueType && !field.FieldType.IsPrimitive) + entityOffsets.Add(new EntityOffsetInfo { Offset = baseOffset }); + } + else if (type == typeof(BlobAssetReferenceData)) + { + blobOffsets.Add(new EntityOffsetInfo { Offset = baseOffset }); + } + else + { + var fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); + foreach (var field in fields) { - if (HasEntityMembers(field.FieldType)) - return true; + if (field.FieldType.IsValueType && !field.FieldType.IsPrimitive) + CalculateOffsetsRecurse(ref entityOffsets, ref blobOffsets, field.FieldType, baseOffset + UnsafeUtility.GetFieldOffset(field)); } } - - return false; } - public static EntityOffsetInfo[] CalculateEntityOffsets(Type type) + public static void HasEntityReferencesManaged(Type type, out bool hasEntityReferences, out bool hasBlobReferences) { - var offsets = new List(); - CalculateEntityOffsetsRecurse(ref offsets, type, 0); - if (offsets.Count > 0) - return offsets.ToArray(); - else - return null; + hasEntityReferences = false; + hasBlobReferences = false; + + ProcessEntityOrBlobReferencesRecursiveManaged(type, ref hasEntityReferences, ref hasBlobReferences, 0); } - static void CalculateEntityOffsetsRecurse(ref List offsets, Type type, int baseOffset) + + static bool ProcessEntityOrBlobReferencesRecursiveManaged(Type type, ref bool hasEntityReferences, ref bool hasBlobReferences, int depth) { - if (type == typeof(Entity)) - { - offsets.Add(new EntityOffsetInfo { Offset = baseOffset }); - } - else + // Avoid deep / infinite recursion + if (depth > 10) + return true; + + var fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); + foreach (var field in fields) { - var fields = type.GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public); - foreach (var field in fields) + var fieldType = field.FieldType; + if (fieldType.IsArray) + fieldType = fieldType.GetElementType(); + + if (fieldType.IsPrimitive) + { } + else if (typeof(UnityEngine.Object).IsAssignableFrom(fieldType)) + { } + else if (fieldType == typeof(Entity)) { - if (field.FieldType.IsValueType && !field.FieldType.IsPrimitive) - CalculateEntityOffsetsRecurse(ref offsets, field.FieldType, baseOffset + UnsafeUtility.GetFieldOffset(field)); - else if (field.FieldType.IsClass && field.FieldType.IsGenericType) - { - foreach (var ga in field.FieldType.GetGenericArguments()) - { - if (ga == typeof(Entity)) - { - offsets.Add(new EntityOffsetInfo { Offset = baseOffset }); - break; - } - } - } + hasEntityReferences = true; + if (hasBlobReferences && hasEntityReferences) + return true; + } + else if (type == typeof(BlobAssetReferenceData)) + { + hasBlobReferences = true; + if (hasBlobReferences && hasEntityReferences) + return true; + } + else if (fieldType.IsValueType || fieldType.IsSealed) + { + if (ProcessEntityOrBlobReferencesRecursiveManaged(fieldType, ref hasEntityReferences, ref hasBlobReferences, depth + 1)) + return true; + } + // It is not possible to determine if there are entity references in a polymorphic non-sealed class type + else + { + hasEntityReferences = true; + hasBlobReferences = true; + return true; } } + + return false; } #endif @@ -189,27 +206,6 @@ static void CalculateEntityOffsetsRecurse(ref List offsets, Ty return patches + offsetCount; } - public static ManagedEntityPatchInfo* AppendManagedEntityPatches(ManagedEntityPatchInfo* patches, ComponentType type) - { - patches[0] = new ManagedEntityPatchInfo - { - Type = type - }; - - return patches + 1; - } - - public static void PatchEntities(EntityOffsetInfo[] scalarPatches, byte* chunkBuffer, ref NativeArray remapping) - { - // Patch scalars (single components) with entity references. - for (int i = 0; i < scalarPatches.Length; i++) - { - byte* entityData = chunkBuffer + scalarPatches[i].Offset; - Entity* entity = (Entity*)entityData; - *entity = RemapEntity(ref remapping, *entity); - } - } - public static void PatchEntities(EntityPatchInfo* scalarPatches, int scalarPatchCount, BufferEntityPatchInfo* bufferPatches, int bufferPatchCount, byte* chunkBuffer, int entityCount, ref NativeArray remapping) diff --git a/Unity.Entities/IJobChunk.cs b/Unity.Entities/IJobChunk.cs index 7811ba88..140d4412 100644 --- a/Unity.Entities/IJobChunk.cs +++ b/Unity.Entities/IJobChunk.cs @@ -318,10 +318,9 @@ internal static IntPtr InitializeParallel() { #if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME IntPtr result = s_ReflectionData.Data; -#if ENABLE_UNITY_COLLECTIONS_CHECKS - if (result == IntPtr.Zero) - throw new InvalidOperationException("IJobChunk job reflection data has not been automatically computed - this is a bug"); -#endif + + CheckReflectionDataBurst(result == IntPtr.Zero); + return result; #else if (s_JobReflectionDataParallel == IntPtr.Zero) @@ -330,6 +329,23 @@ internal static IntPtr InitializeParallel() #endif } +#if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME + [BurstDiscard] + private static void CheckReflectionData(bool isNull) + { + if (isNull) + throw new InvalidOperationException($"Job reflection data has not been initialized for job `{typeof(T).FullName}`. Generic jobs must either be fully qualified in normal code or be registered with `[assembly:RegisterGenericJobType(typeof(...))]`. See https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/manual/ecs_generic_jobs.html"); + } + + private static void CheckReflectionDataBurst(bool isNull) + { + CheckReflectionData(isNull); + + if (isNull) + throw new InvalidOperationException($"Job reflection data has not been initialized for this job. Generic jobs must either be fully qualified in normal code or be registered with `[assembly:RegisterGenericJobType(typeof(...))]`. See https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/manual/ecs_generic_jobs.html"); + } +#endif + internal delegate void ExecuteJobFunction(ref JobChunkWrapper jobWrapper, System.IntPtr additionalPtr, System.IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex); public static void Execute(ref JobChunkWrapper jobWrapper, System.IntPtr additionalPtr, System.IntPtr bufferRangePatchData, ref JobRanges ranges, int jobIndex) diff --git a/Unity.Entities/IJobEntity.cs b/Unity.Entities/IJobEntity.cs new file mode 100644 index 00000000..da483bf1 --- /dev/null +++ b/Unity.Entities/IJobEntity.cs @@ -0,0 +1,13 @@ +#if ROSLYN_SOURCEGEN_ENABLED +namespace Unity.Entities +{ + /// + /// Any type which implements this interface and also contains an `OnUpdate()` method (with any number of parameters) + /// will trigger source generation of a corresponding IJobEntityBatch type. The generated IJobEntityBatch type in turn + /// invokes the OnUpdate() method on the IJobEntity type with the appropriate arguments. + /// + public interface IJobEntity + { + } +} +#endif diff --git a/Unity.Entities/IJobEntity.cs.meta b/Unity.Entities/IJobEntity.cs.meta new file mode 100644 index 00000000..d99160d6 --- /dev/null +++ b/Unity.Entities/IJobEntity.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a6c3d7813b8e42be8d1faa288c65db6c +timeCreated: 1600872175 \ No newline at end of file diff --git a/Unity.Entities/IJobEntityBatch.cs b/Unity.Entities/IJobEntityBatch.cs index dc5a978a..1256b7b2 100644 --- a/Unity.Entities/IJobEntityBatch.cs +++ b/Unity.Entities/IJobEntityBatch.cs @@ -14,7 +14,7 @@ namespace Unity.Entities /// IJobEntityBatch is a type of [IJob] that iterates over a set of instances, /// where each instance represents a contiguous batch of entities within a [chunk]. /// - /// [IJob]: https://docs.unity3d.com/ScriptReference/Unity.Jobs.IJob.html + /// [IJob]: xref:Unity.Jobs.IJob /// [chunk]: xref:ecs-concepts#chunk /// /// @@ -26,14 +26,14 @@ namespace Unity.Entities /// /// When you schedule or run the job with one of the following methods: /// * , - /// * , + /// * , /// * or /// /// all the entities of each chunk are processed as /// a single batch. The object passed to the `Execute` function of your job struct provides access /// to the components of all the entities in the chunk. /// - /// Use to divide + /// Use to divide /// each chunk selected by your query into (approximately) equal batches of contiguous entities. For example, /// if you use a batch count of two, one batch provides access to the first half of the component arrays in a chunk and the other /// provides access to the second half. When you use batching, the object only @@ -56,9 +56,13 @@ namespace Unity.Entities /// /// /// + /// If you are looking for an interface which provides the firstEntityIndex parameter, + /// /// [Using IJobEntityBatch]: xref:ecs-ijobentitybatch /// [chunks]: xref:ecs-concepts#chunk /// + /// + /// [JobProducerType(typeof(JobEntityBatchExtensions.JobEntityBatchProducer<>))] public interface IJobEntityBatch { @@ -68,11 +72,13 @@ public interface IJobEntityBatch /// /// /// The chunks selected by the used to schedule the job are the input to your `Execute` - /// function. If you use + /// function. If you use /// to schedule the job, the entities in each matching chunk are partitioned into contiguous batches based on the /// `batchesInChunk` parameter, and the `Execute` function is called once for each batch. When you use one of the /// other scheduling or run methods, the `Execute` function is called once per matching chunk (in other words, the /// batch count is one). + /// + /// If you are looking for an interface which provides the firstEntityIndex parameter, /// /// An object providing access to a batch of entities within a chunk. /// The index of the current batch within the list of all batches in all chunks found by the @@ -82,81 +88,7 @@ public interface IJobEntityBatch void Execute(ArchetypeChunk batchInChunk, int batchIndex); } - /// - /// IJobEntityBatchWithIndex is a variant of [IJobEntityBatch] that provides an additional indexOfFirstEntityInQuery parameter, which - /// provides a per-batch index that is the aggregate of all previous batch counts. - /// - /// [IJob]: https://docs.unity3d.com/ScriptReference/Unity.Jobs.IJob.html - /// [chunk]: xref:ecs-concepts#chunk - /// - /// - /// Schedule or run an IJobEntityBatchWithIndex job inside the function of a - /// implementation. When the system schedules or runs an IJobEntityBatchWithIndex job, it uses - /// the specified to select a set of [chunks]. These selected chunks are divided into - /// batches of entities. A batch is a contiguous set of entities, always stored in the same chunk. The job - /// struct's `Execute` function is called for each batch. - /// - /// When you schedule or run the job with one of the following methods: - /// * , - /// * , - /// * or - /// - /// all the entities of each chunk are processed as - /// a single batch. The object passed to the `Execute` function of your job struct provides access - /// to the components of all the entities in the chunk. - /// - /// Use to divide - /// each chunk selected by your query into (approximately) equal batches of contiguous entities. For example, - /// if you use a batch count of two, one batch provides access to the first half of the component arrays in a chunk and the other - /// provides access to the second half. When you use batching, the object only - /// provides access to the components in the current batch of entities -- not those of all entities in a chunk. - /// - /// In general, processing whole chunks at a time (setting batch count to one) is the most efficient. However, in cases - /// where the algorithm itself is relatively expensive for each entity, executing smaller batches in parallel can provide - /// better overall performance, especially when the entities are contained in a small number of chunks. As always, you - /// should profile your job to find the best arrangement for your specific application. - /// - /// To pass data to your Execute function (beyond the `Execute` parameters), add public fields to the IJobEntityBatchWithIndex - /// struct declaration and set those fields immediately before scheduling the job. You must always pass the - /// component type information for any components that the job reads or writes using a field of type, - /// . Get this type information by calling the appropriate - /// function for the type of - /// component. - /// - /// For more information see [Using IJobEntityBatch]. - /// - /// - /// - /// - /// [Using IJobEntityBatch]: xref:ecs-ijobentitybatch - /// [chunks]: xref:ecs-concepts#chunk - /// - [JobProducerType(typeof(JobEntityBatchIndexExtensions.JobEntityBatchIndexProducer<>))] - public interface IJobEntityBatchWithIndex - { - /// - /// Implement the `Execute` function to perform a unit of work on an representing - /// a contiguous batch of entities within a chunk. - /// - /// - /// The chunks selected by the used to schedule the job are the input to your `Execute` - /// function. If you use - /// to schedule the job, the entities in each matching chunk are partitioned into contiguous batches based on the - /// `batchesInChunk` parameter, and the `Execute` function is called once for each batch. When you use one of the - /// other scheduling or run methods, the `Execute` function is called once per matching chunk (in other words, the - /// batch count is one). - /// - /// An object providing access to a batch of entities within a chunk. - /// The index of the current batch within the list of all batches in all chunks found by the - /// job's . If the batch count is one, this list contains one entry for each selected chunk; if - /// the batch count is two, the list contains two entries per chunk; and so on. Note that batches are not processed in - /// index order, except by chance. - /// The index of the first entity in the current chunk within the list of all - /// entities in all the chunks found by the Job's . - void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirstEntityInQuery); - } - - /// + /// /// Extensions for scheduling and running jobs. /// public static class JobEntityBatchExtensions @@ -181,8 +113,12 @@ internal struct JobEntityBatchWrapper where T : struct public UnsafeCachedChunkList CachedChunks; public EntityQueryFilter Filter; + public UnsafeList PrebuiltBatchList; + public UnsafeIntList PrebuiltBatchListMatchingArchetypeIndices; + public int JobsPerChunk; public int IsParallel; + public int UsePrebuiltBatchList; } #if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME @@ -226,27 +162,28 @@ public static unsafe JobHandle Schedule( /// /// Adds an instance to the job scheduler queue for sequential (non-parallel) execution. /// - /// This scheduling variant processes each matching chunk as a single batch. All chunks execute + /// This scheduling variant processes each batch found in the entity array. All batches are processed /// sequentially. /// An instance. /// The query selecting chunks with the necessary components. + /// A list of entities to limit execution to. Only entities in the list will be processed. /// The handle identifying already scheduled jobs that could constrain this job. /// A job that writes to a component cannot run in parallel with other jobs that read or write that component. /// Jobs that only read the same components can run in parallel. /// The specific implementation type. /// A handle that combines the current Job with previous dependencies identified by the `dependsOn` /// parameter. - [Obsolete("ScheduleSingle has been renamed to Schedule. (RemovedAfter 2020-10-09). (UnityUpgradable) -> Schedule(*)", false)] - public static unsafe JobHandle ScheduleSingle( + public static unsafe JobHandle Schedule( this T jobData, EntityQuery query, + NativeArray limitToEntityArray, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobEntityBatch { #if UNITY_2020_2_OR_NEWER - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Single, 1, false); + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Single, 1, false, limitToEntityArray); #else - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, 1, false); + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, 1, false, limitToEntityArray); #endif } @@ -255,7 +192,7 @@ public static unsafe JobHandle ScheduleSingle( /// /// This scheduling variant processes each matching chunk as a single batch. Each /// chunk can execute in parallel. This scheduling method is equivalent to calling - /// + /// /// with the batchesPerChunk parameter set to 1. /// An instance. /// The query selecting chunks with the necessary components. @@ -280,34 +217,30 @@ public static unsafe JobHandle ScheduleParallel( } /// - /// Adds an instance to the job scheduler queue for parallel execution, potentially subdividing - /// chunks into multiple batches. + /// Adds an instance to the job scheduler queue for parallel execution. /// - /// This scheduling variant processes each matching chunk as one or more batches. Each batch, including - /// those from the same chunk, can execute in parallel. + /// This scheduling variant processes each batch found in the entity array. Each + /// batch can execute in parallel. /// An instance. /// The query selecting chunks with the necessary components. - /// The number of batches to use per chunk. The entities in each chunk matching - /// are partitioned into this many contiguous batches of approximately equal size. - /// Multiple batches form the same chunk may be processed concurrently. + /// A list of entities to limit execution to. Only entities in the list will be processed. /// The handle identifying already scheduled jobs that could constrain this job. /// A job that writes to a component cannot run in parallel with other jobs that read or write that component. /// Jobs that only read the same components can run in parallel. /// The specific implementation type. /// A handle that combines the current Job with previous dependencies identified by the `dependsOn` /// parameter. - [Obsolete("ScheduleParallelBatched is being deprecated. Use ScheduleParallel instead. (RemovedAfter 2020-10-09). (UnityUpgradable) -> ScheduleParallel(*)", false)] - public static unsafe JobHandle ScheduleParallelBatched( + public static unsafe JobHandle ScheduleParallel( this T jobData, EntityQuery query, - int batchesPerChunk, + NativeArray limitToEntityArray, JobHandle dependsOn = default(JobHandle)) where T : struct, IJobEntityBatch { #if UNITY_2020_2_OR_NEWER - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Parallel, batchesPerChunk, true); + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Parallel, 1, true, limitToEntityArray); #else - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, batchesPerChunk, true); + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, 1, true, limitToEntityArray); #endif } @@ -325,13 +258,117 @@ public static unsafe void Run(this T jobData, EntityQuery query) ScheduleInternal(ref jobData, query, default(JobHandle), ScheduleMode.Run, 1, false); } + /// + /// Runs the job immediately on the current thread. + /// + /// This scheduling variant processes each batch found in the input array. All + /// batches are processed sequentially on the current thread. + /// An instance. + /// The query selecting chunks with the necessary components. + /// A list of entities to limit execution to. Only entities in the list will be processed. + /// The specific implementation type. + public static unsafe void Run(this T jobData, EntityQuery query, NativeArray limitToEntityArray) + where T : struct, IJobEntityBatch + { + ScheduleInternal(ref jobData, query, default(JobHandle), ScheduleMode.Run, 1, false, limitToEntityArray); + } + + public static void RunWithoutJobsInternal(ref T jobData, ref ArchetypeChunkIterator chunkIterator) + where T : struct, IJobEntityBatch + { + var chunkCount = 0; + while (chunkIterator.MoveNext()) + { + var archetypeChunk = chunkIterator.CurrentArchetypeChunk; + jobData.Execute(archetypeChunk, chunkCount); + chunkCount++; + } + } + + + /// + /// Runs the job without using the jobs API. + /// + /// The job to execute. + /// The EntityQuery to run over. + /// The specific IJobEntityBatch implementation type. + unsafe public static void RunWithoutJobs(ref T jobData, EntityQuery query) + where T : struct, IJobEntityBatch + { + var myIterator = query.GetArchetypeChunkIterator(); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + var access = query._GetImpl()->_Access; + try + { + access->DependencyManager->IsInForEachDisallowStructuralChange++; + RunWithoutJobsInternal(ref jobData, ref myIterator); + } + finally + { + access->DependencyManager->IsInForEachDisallowStructuralChange--; + } +#else + RunWithoutJobsInternal(ref jobData, ref myIterator); +#endif + } + + /// + /// Runs the job without using the jobs API. + /// + /// The job to execute. + /// The EntityQuery to run over. + /// A list of entities to limit execution to. Only entities in the list will be processed. + /// The specific IJobEntityBatch implementation type. + unsafe public static void RunWithoutJobs(ref T jobData, EntityQuery query, NativeArray limitToEntityArray) + where T : struct, IJobEntityBatch + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + var access = query._GetImpl()->_Access; + try + { + access->DependencyManager->IsInForEachDisallowStructuralChange++; + RunWithoutJobsInternal(ref jobData, ref query, (Entity*)limitToEntityArray.GetUnsafeReadOnlyPtr(), limitToEntityArray.Length); + } + finally + { + access->DependencyManager->IsInForEachDisallowStructuralChange--; + } +#else + RunWithoutJobsInternal(ref jobData, ref query, (Entity*)limitToEntityArray.GetUnsafeReadOnlyPtr(), limitToEntityArray.Length); +#endif + } + + public static unsafe void RunWithoutJobsInternal(ref T jobData, ref EntityQuery query, Entity* limitToEntityArray, int limitToEntityArrayLength) + where T : struct, IJobEntityBatch + { + var prebuiltBatchList = new UnsafeList(Allocator.TempJob); + try + { + ChunkIterationUtility.FindFilteredBatchesForEntityArrayWithQuery( + query._GetImpl(), + limitToEntityArray, limitToEntityArrayLength, + ref prebuiltBatchList); + + ArchetypeChunk* chunks = (ArchetypeChunk*)prebuiltBatchList.Ptr; + int chunkCounts = prebuiltBatchList.Length; + for (int i = 0; i != chunkCounts; i++) + jobData.Execute(chunks[i], i); + } + finally + { + prebuiltBatchList.Dispose(); + } + } + internal static unsafe JobHandle ScheduleInternal( ref T jobData, EntityQuery query, JobHandle dependsOn, ScheduleMode mode, int batchesPerChunk, - bool isParallel = true) + bool isParallel = true, + NativeArray limitToEntityArray = default(NativeArray)) where T : struct, IJobEntityBatch { var queryImpl = query._GetImpl(); @@ -342,6 +379,33 @@ internal static unsafe JobHandle ScheduleInternal( // Don't schedule the job if there are no chunks to work on var chunkCount = cachedChunks.Length; + var useEntityArray = limitToEntityArray.IsCreated; + var prebuiltBatchList = default(UnsafeList); + var perBatchMatchingArchetypeIndex = default(UnsafeIntList); + + var batchCount = chunkCount * batchesPerChunk; + + if (useEntityArray) + { + prebuiltBatchList = new UnsafeList(Allocator.TempJob); + perBatchMatchingArchetypeIndex = new UnsafeIntList(0, Allocator.TempJob); + + // Forces the creation of an EntityQueryMask, which is necessary to filter batches. + var access = queryImpl->_Access; + access->EntityQueryManager->GetEntityQueryMask(queryData, access->EntityComponentStore); + + ChunkIterationUtility.FindBatchesForEntityArrayWithQuery( + queryImpl->_Access->EntityComponentStore, + queryData, + ref queryImpl->_Filter, + (Entity*) limitToEntityArray.GetUnsafePtr(), + limitToEntityArray.Length, + ref prebuiltBatchList, + ref perBatchMatchingArchetypeIndex); + + batchCount = prebuiltBatchList.Length; + } + JobEntityBatchWrapper jobEntityBatchWrapper = new JobEntityBatchWrapper { #if ENABLE_UNITY_COLLECTIONS_CHECKS @@ -356,7 +420,11 @@ internal static unsafe JobHandle ScheduleInternal( JobData = jobData, JobsPerChunk = batchesPerChunk, - IsParallel = isParallel ? 1 : 0 + IsParallel = isParallel ? 1 : 0, + + UsePrebuiltBatchList = useEntityArray ? 1: 0, + PrebuiltBatchList = prebuiltBatchList, + PrebuiltBatchListMatchingArchetypeIndices = perBatchMatchingArchetypeIndex }; var scheduleParams = new JobsUtility.JobScheduleParameters( @@ -367,14 +435,23 @@ internal static unsafe JobHandle ScheduleInternal( dependsOn, mode); + var result = default(JobHandle); if (!isParallel) { - return JobsUtility.Schedule(ref scheduleParams); + result = JobsUtility.Schedule(ref scheduleParams); } else { - return JobsUtility.ScheduleParallelFor(ref scheduleParams, chunkCount * batchesPerChunk, 1); + result = JobsUtility.ScheduleParallelFor(ref scheduleParams, batchCount, 1); + } + + if (useEntityArray) + { + result = prebuiltBatchList.Dispose(result); + result = perBatchMatchingArchetypeIndex.Dispose(result); } + + return result; } internal struct JobEntityBatchProducer @@ -409,7 +486,7 @@ internal static IntPtr InitializeParallel() IntPtr result = s_ReflectionData.Data; #if ENABLE_UNITY_COLLECTIONS_CHECKS if (result == IntPtr.Zero) - throw new InvalidOperationException("IJobEntityBatch job reflection data has not been automatically computed - this is a bug"); + throw new InvalidOperationException($"IJobEntityBatch error: job reflection data has not been initialized for this job. Generic jobs must either be fully qualified in normal code or be registered with `[assembly:RegisterGenericJobType(typeof(...))]`. See https://docs.unity3d.com/Packages/com.unity.entities@latest?subfolder=/manual/ecs_generic_jobs.html"); #endif return result; #else @@ -443,13 +520,14 @@ internal unsafe static void ExecuteInternal( int jobIndex) { var chunks = jobWrapper.CachedChunks; + var prebuiltBatches = (ArchetypeChunk*)jobWrapper.PrebuiltBatchList.Ptr; bool isParallel = jobWrapper.IsParallel == 1; bool isFiltering = jobWrapper.Filter.RequiresMatchesFilter; while (true) { int beginBatchIndex = 0; - int endBatchIndex = chunks.Length; + int endBatchIndex = jobWrapper.UsePrebuiltBatchList == 1 ? jobWrapper.PrebuiltBatchList.Length : chunks.Length; // If we are running the job in parallel, steal some work. if (isParallel) @@ -462,615 +540,71 @@ internal unsafe static void ExecuteInternal( } // Do the actual user work. - if (jobWrapper.JobsPerChunk == 1) + if (jobWrapper.UsePrebuiltBatchList == 1) { - // 1 batch per chunk, with/without filtering for (int batchIndex = beginBatchIndex; batchIndex < endBatchIndex; ++batchIndex) { - var chunkIndex = batchIndex; - var chunk = chunks.Ptr[chunkIndex]; + var batch = prebuiltBatches[batchIndex]; - if (isFiltering && !chunk->MatchesFilter(jobWrapper.MatchingArchetypes.Ptr[chunks.PerChunkMatchingArchetypeIndex.Ptr[chunkIndex]], ref jobWrapper.Filter)) + if (isFiltering && !batch.m_Chunk->MatchesFilter(jobWrapper.MatchingArchetypes.Ptr[jobWrapper.PrebuiltBatchListMatchingArchetypeIndices.Ptr[batchIndex]], ref jobWrapper.Filter)) continue; - var batch = new ArchetypeChunk(chunk, chunks.EntityComponentStore); Assert.AreNotEqual(0, batch.Count); jobWrapper.JobData.Execute(batch, batchIndex); } } else { - // 2+ batches per chunk, with/without filtering - // This is the most general case; if only one code path survives, it should be this one. - for (int batchIndex = beginBatchIndex; batchIndex < endBatchIndex; ++batchIndex) + if (jobWrapper.JobsPerChunk == 1) { - var chunkIndex = batchIndex / jobWrapper.JobsPerChunk; - var batchIndexInChunk = batchIndex % jobWrapper.JobsPerChunk; - var chunk = chunks.Ptr[chunkIndex]; - - if (isFiltering && !chunk->MatchesFilter(jobWrapper.MatchingArchetypes.Ptr[chunks.PerChunkMatchingArchetypeIndex.Ptr[chunkIndex]], ref jobWrapper.Filter)) - continue; - - if (ArchetypeChunk.EntityBatchFromChunk(chunk, chunk->Count, jobWrapper.JobsPerChunk, - batchIndexInChunk, chunks.EntityComponentStore, out var batch)) + // 1 batch per chunk, with/without filtering + for (int batchIndex = beginBatchIndex; batchIndex < endBatchIndex; ++batchIndex) { - jobWrapper.JobData.Execute(batch, batchIndex); - } - } - } - - // If we are not running in parallel, our job is done. - if (!isParallel) - break; - } - } - } - } - - /// - /// Extensions for scheduling and running jobs. - /// - public static class JobEntityBatchIndexExtensions - { -#if ENABLE_UNITY_COLLECTIONS_CHECKS - [NativeContainer] - internal struct EntitySafetyHandle - { - internal AtomicSafetyHandle m_Safety; - } -#endif - internal struct JobEntityBatchIndexWrapper where T : struct - { -#if ENABLE_UNITY_COLLECTIONS_CHECKS -#pragma warning disable 414 - [ReadOnly] public EntitySafetyHandle safety; -#pragma warning restore -#endif - public T JobData; - - [DeallocateOnJobCompletion] - [NativeDisableContainerSafetyRestriction] - public NativeArray PrefilterData; - - public int JobsPerChunk; - public int IsParallel; - } + var chunkIndex = batchIndex; + var chunk = chunks.Ptr[chunkIndex]; + if (isFiltering && !chunk->MatchesFilter(jobWrapper.MatchingArchetypes.Ptr[chunks.PerChunkMatchingArchetypeIndex.Ptr[chunkIndex]], ref jobWrapper.Filter)) + continue; -#if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME - /// - /// This method is only to be called by automatically generated setup code. - /// - /// - public static void EarlyJobInit() - where T : struct, IJobEntityBatchWithIndex - { - JobEntityBatchIndexProducer.CreateReflectionData(); - } -#endif - /// - /// Adds an instance to the job scheduler queue for sequential (non-parallel) execution. - /// - /// This scheduling variant processes each matching chunk as a single batch. All chunks execute - /// sequentially. - /// An instance. - /// The query selecting chunks with the necessary components. - /// The handle identifying already scheduled jobs that could constrain this job. - /// A job that writes to a component cannot run in parallel with other jobs that read or write that component. - /// Jobs that only read the same components can run in parallel. - /// The specific implementation type. - /// A handle that combines the current Job with previous dependencies identified by the `dependsOn` - /// parameter. - public static unsafe JobHandle Schedule( - this T jobData, - EntityQuery query, - JobHandle dependsOn = default(JobHandle)) - where T : struct, IJobEntityBatchWithIndex - { -#if UNITY_2020_2_OR_NEWER - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Single, 1, false); -#else - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, 1, false); -#endif - } - - /// - /// Adds an instance to the job scheduler queue for sequential (non-parallel) execution. - /// - /// This scheduling variant processes each matching chunk as a single batch. All chunks execute - /// sequentially. - /// An instance. - /// The query selecting chunks with the necessary components. - /// The handle identifying already scheduled jobs that could constrain this job. - /// A job that writes to a component cannot run in parallel with other jobs that read or write that component. - /// Jobs that only read the same components can run in parallel. - /// The specific implementation type. - /// A handle that combines the current Job with previous dependencies identified by the `dependsOn` - /// parameter. - [Obsolete("ScheduleSingle has been renamed to Schedule. (RemovedAfter 2020-10-09). (UnityUpgradable) -> Schedule(*)", false)] - public static unsafe JobHandle ScheduleSingle( - this T jobData, - EntityQuery query, - JobHandle dependsOn = default(JobHandle)) - where T : struct, IJobEntityBatchWithIndex - { -#if UNITY_2020_2_OR_NEWER - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Single, 1, false); -#else - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, 1, false); -#endif - } - - /// - /// Adds an instance to the job scheduler queue for parallel execution. - /// - /// This scheduling variant processes each matching chunk as a single batch. Each - /// chunk can execute in parallel. This scheduling method is equivalent to calling - /// - /// with the batchesPerChunk parameter set to 1. - /// An instance. - /// The query selecting chunks with the necessary components. - /// The handle identifying already scheduled jobs that could constrain this job. - /// A job that writes to a component cannot run in parallel with other jobs that read or write that component. - /// Jobs that only read the same components can run in parallel. - /// The specific implementation type. - /// A handle that combines the current Job with previous dependencies identified by the `dependsOn` - /// parameter. - public static unsafe JobHandle ScheduleParallel( - this T jobData, - EntityQuery query, - int batchesPerChunk = 1, - JobHandle dependsOn = default(JobHandle)) - where T : struct, IJobEntityBatchWithIndex - { -#if UNITY_2020_2_OR_NEWER - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Parallel, batchesPerChunk, true); -#else - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, batchesPerChunk, true); -#endif - } - - /// - /// Adds an instance to the job scheduler queue for parallel execution, potentially subdividing - /// chunks into multiple batches. - /// - /// This scheduling variant processes each matching chunk as one or more batches. Each batch, including - /// those from the same chunk, can execute in parallel. - /// An instance. - /// The query selecting chunks with the necessary components. - /// The number of batches to use per chunk. The entities in each chunk matching - /// are partitioned into this many contiguous batches of approximately equal size. - /// Multiple batches form the same chunk may be processed concurrently. - /// The handle identifying already scheduled jobs that could constrain this job. - /// A job that writes to a component cannot run in parallel with other jobs that read or write that component. - /// Jobs that only read the same components can run in parallel. - /// The specific implementation type. - /// A handle that combines the current Job with previous dependencies identified by the `dependsOn` - /// parameter. - [Obsolete("ScheduleParallelBatched is being deprecated. Use ScheduleParallel instead. (RemovedAfter 2020-10-09). (UnityUpgradable) -> ScheduleParallel(*)", false)] - public static unsafe JobHandle ScheduleParallelBatched( - this T jobData, - EntityQuery query, - int batchesPerChunk, - JobHandle dependsOn = default(JobHandle)) - where T : struct, IJobEntityBatchWithIndex - { -#if UNITY_2020_2_OR_NEWER - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Parallel, batchesPerChunk, true); -#else - return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, batchesPerChunk, true); -#endif - } - - /// - /// Runs the job immediately on the current thread. - /// - /// This scheduling variant processes each matching chunk as a single batch. All chunks execute - /// sequentially on the current thread. - /// An instance. - /// The query selecting chunks with the necessary components. - /// The specific implementation type. - public static unsafe void Run(this T jobData, EntityQuery query) - where T : struct, IJobEntityBatchWithIndex - { - ScheduleInternal(ref jobData, query, default(JobHandle), ScheduleMode.Run, 1, false); - } - - internal static unsafe JobHandle ScheduleInternal( - ref T jobData, - EntityQuery query, - JobHandle dependsOn, - ScheduleMode mode, - int batchesPerChunk, - bool isParallel = true) - where T : struct, IJobEntityBatchWithIndex - { - var queryImpl = query._GetImpl(); - var filteredChunkCount = query.CalculateChunkCount(); - - // Allocate one buffer for all prefilter data and distribute it - // We keep the full buffer as a "dummy array" so we can deallocate it later with [DeallocateOnJobCompletion] - var sizeofBatchArray = sizeof(ArchetypeChunk) * filteredChunkCount * batchesPerChunk; - var sizeofIndexArray = sizeof(int) * filteredChunkCount * batchesPerChunk; - var prefilterDataSize = sizeofBatchArray + sizeofIndexArray + sizeof(int); - - var prefilterData = (byte*)Memory.Unmanaged.Allocate(prefilterDataSize, 64, Allocator.TempJob); - var prefilterDataArray = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(prefilterData, prefilterDataSize, Allocator.TempJob); - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref prefilterDataArray, AtomicSafetyHandle.Create()); -#endif - - var prefilterHandle = dependsOn; - var prefilterJob = new PrefilterForJobEntityBatchWithIndex() - { - MatchingArchetypes = queryImpl->_QueryData->MatchingArchetypes, - Filter = queryImpl->_Filter, - BatchesPerChunk = batchesPerChunk, - EntityComponentStore = queryImpl->_Access->EntityComponentStore, - PrefilterData = prefilterData, - FilteredChunkCount = filteredChunkCount - }; - - if (mode != ScheduleMode.Run) - prefilterHandle = prefilterJob.Schedule(dependsOn); - else - prefilterJob.Run(); - - JobEntityBatchIndexWrapper jobEntityBatchIndexWrapper = new JobEntityBatchIndexWrapper - { -#if ENABLE_UNITY_COLLECTIONS_CHECKS - // All IJobEntityBatchWithIndex jobs have a EntityManager safety handle to ensure that BeforeStructuralChange throws an error if - // jobs without any other safety handles are still running (haven't been synced). - safety = new EntitySafetyHandle {m_Safety = queryImpl->SafetyHandles->GetEntityManagerSafetyHandle()}, -#endif - - JobData = jobData, - PrefilterData = prefilterDataArray, - - JobsPerChunk = batchesPerChunk, - IsParallel = isParallel ? 1 : 0 - }; - - var scheduleParams = new JobsUtility.JobScheduleParameters( - UnsafeUtility.AddressOf(ref jobEntityBatchIndexWrapper), - isParallel - ? JobEntityBatchIndexProducer.InitializeParallel() - : JobEntityBatchIndexProducer.InitializeSingle(), - prefilterHandle, - mode); - - int batchCount = filteredChunkCount * batchesPerChunk; -#if UNITY_DOTSRUNTIME - // This should just be a call to FinalizeScheduleChecked, but DOTSR requires the JobsUtility calls to be - // in this specific function. -#if ENABLE_UNITY_COLLECTIONS_CHECKS - try - { -#endif - if (!isParallel) - { - return JobsUtility.Schedule(ref scheduleParams); - } - else - { - return JobsUtility.ScheduleParallelFor(ref scheduleParams, batchCount, 1); - } -#if ENABLE_UNITY_COLLECTIONS_CHECKS - } - catch (InvalidOperationException e) - { - prefilterHandle.Complete(); - prefilterDataArray.Dispose(); - throw e; - } -#endif -#else - // We can't use try {} catch {} with 2020.2 as we will be burst compiling the schedule code. - // Burst doesn't support exception handling. - bool executedManaged = false; - JobHandle result = default; - FinalizeScheduleChecked(isParallel, batchCount, prefilterHandle, prefilterDataArray, ref scheduleParams, ref executedManaged, ref result); - - if (executedManaged) - return result; - - return FinalizeScheduleNoExceptions(isParallel, batchCount, ref scheduleParams); -#endif - } - -#if !UNITY_DOTSRUNTIME - // Burst does not support exception handling. - [BurstDiscard] - private static unsafe void FinalizeScheduleChecked(bool isParallel, int batchCount, JobHandle prefilterHandle, NativeArray prefilterDataArray, ref JobsUtility.JobScheduleParameters scheduleParams, ref bool executed, ref JobHandle result) - { - executed = true; - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - try - { -#endif - result = FinalizeScheduleNoExceptions(isParallel, batchCount, ref scheduleParams); -#if ENABLE_UNITY_COLLECTIONS_CHECKS - } - catch (InvalidOperationException e) - { - prefilterHandle.Complete(); - prefilterDataArray.Dispose(); - throw e; - } -#endif - } - - private static unsafe JobHandle FinalizeScheduleNoExceptions(bool isParallel, int batchCount, ref JobsUtility.JobScheduleParameters scheduleParams) - { - if (!isParallel) - { - return JobsUtility.Schedule(ref scheduleParams); - } - else - { - return JobsUtility.ScheduleParallelFor(ref scheduleParams, batchCount, 1); - } - } -#endif - internal struct JobEntityBatchIndexProducer - where T : struct, IJobEntityBatchWithIndex - { -#if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME - internal static readonly SharedStatic s_ReflectionData = SharedStatic.GetOrCreate(); - - internal static void CreateReflectionData() - { - s_ReflectionData.Data = JobsUtility.CreateJobReflectionData(typeof(JobEntityBatchIndexWrapper), typeof(T), (ExecuteJobFunction)Execute); - } -#else - static IntPtr s_JobReflectionDataParallel; - static IntPtr s_JobReflectionDataSingle; -#endif - - internal static IntPtr InitializeSingle() - { -#if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME - return InitializeParallel(); -#else - if (s_JobReflectionDataSingle == IntPtr.Zero) - s_JobReflectionDataSingle = JobsUtility.CreateJobReflectionData(typeof(JobEntityBatchIndexWrapper), typeof(T), JobType.Single, (ExecuteJobFunction)Execute); - return s_JobReflectionDataSingle; -#endif - } - - internal static IntPtr InitializeParallel() - { -#if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME - IntPtr result = s_ReflectionData.Data; -#if ENABLE_UNITY_COLLECTIONS_CHECKS - if (result == IntPtr.Zero) - throw new InvalidOperationException("IJobEntityBatchWithIndex job reflection data has not been automatically computed - this is a bug"); -#endif - return result; -#else - if (s_JobReflectionDataParallel == IntPtr.Zero) - s_JobReflectionDataParallel = JobsUtility.CreateJobReflectionData(typeof(JobEntityBatchIndexWrapper), typeof(T), JobType.ParallelFor, (ExecuteJobFunction)Execute); - return s_JobReflectionDataParallel; -#endif - } - - public delegate void ExecuteJobFunction( - ref JobEntityBatchIndexWrapper jobIndexWrapper, - IntPtr additionalPtr, - IntPtr bufferRangePatchData, - ref JobRanges ranges, - int jobIndex); - - public static void Execute( - ref JobEntityBatchIndexWrapper jobIndexWrapper, - IntPtr additionalPtr, - IntPtr bufferRangePatchData, - ref JobRanges ranges, - int jobIndex) - { - ExecuteInternal(ref jobIndexWrapper, bufferRangePatchData, ref ranges, jobIndex); - } - - internal unsafe static void ExecuteInternal( - ref JobEntityBatchIndexWrapper jobWrapper, - IntPtr bufferRangePatchData, - ref JobRanges ranges, - int jobIndex) - { - ChunkIterationUtility.UnpackPrefilterData(jobWrapper.PrefilterData, out var filteredChunks, out var entityIndices, out var batchCount); - - bool isParallel = jobWrapper.IsParallel == 1; - while (true) - { - int beginBatchIndex = 0; - int endBatchIndex = batchCount; - - // If we are running the job in parallel, steal some work. - if (isParallel) - { - // If we have no range to steal, exit the loop. - if (!JobsUtility.GetWorkStealingRange(ref ranges, jobIndex, out beginBatchIndex, out endBatchIndex)) - break; - } - - // Do the actual user work. - for (int batchIndex = beginBatchIndex; batchIndex < endBatchIndex; ++batchIndex) - { - var batch = filteredChunks[batchIndex]; - Assert.IsTrue(batch.Count > 0); // Empty batches are expected to be skipped by the prefilter job! - var entityOffset = entityIndices[batchIndex]; - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - if(isParallel) - { - JobsUtility.PatchBufferMinMaxRanges(bufferRangePatchData, UnsafeUtility.AddressOf(ref jobWrapper), entityOffset, batch.Count); - } -#endif - jobWrapper.JobData.Execute(batch, batchIndex, entityOffset); - } - - // If we are not running in parallel, our job is done. - if (!isParallel) - break; - } - } - } - } - - [BurstCompile] - unsafe struct PrefilterForJobEntityBatchWithIndex : IJobBurstSchedulable - { - [NativeDisableUnsafePtrRestriction] public UnsafeMatchingArchetypePtrList MatchingArchetypes; - [NativeDisableUnsafePtrRestriction] public EntityComponentStore* EntityComponentStore; - [NativeDisableUnsafePtrRestriction] public void* PrefilterData; - - public int FilteredChunkCount; - public EntityQueryFilter Filter; - public int BatchesPerChunk; - - public void Execute() - { - var batches = (ArchetypeChunk*)PrefilterData; - var entityIndices = (int*)(batches + FilteredChunkCount * BatchesPerChunk); - - var filteredBatchCounter = 0; - var entityIndexAggregate = 0; - - if (BatchesPerChunk == 1) - { - if (Filter.RequiresMatchesFilter) - { - // one batch per chunk, filtering enabled - for (var m = 0; m < MatchingArchetypes.Length; ++m) - { - var match = MatchingArchetypes.Ptr[m]; - if (match->Archetype->EntityCount <= 0) - continue; - - var archetype = match->Archetype; - int chunkCount = archetype->Chunks.Count; - var chunkEntityCountArray = archetype->Chunks.GetChunkEntityCountArray(); - - for (int chunkIndex = 0; chunkIndex < chunkCount; ++chunkIndex) - { - var chunk = archetype->Chunks[chunkIndex]; - if (match->ChunkMatchesFilter(chunkIndex, ref Filter)) - { - var batch = new ArchetypeChunk(chunk, EntityComponentStore); - batches[filteredBatchCounter] = batch; - entityIndices[filteredBatchCounter] = entityIndexAggregate; - - ++filteredBatchCounter; - entityIndexAggregate += chunkEntityCountArray[chunkIndex]; + var batch = new ArchetypeChunk(chunk, chunks.EntityComponentStore); + Assert.AreNotEqual(0, batch.Count); + jobWrapper.JobData.Execute(batch, batchIndex); } } - } - } - else - { - // one batch per chunk, filtering disabled - for (var m = 0; m < MatchingArchetypes.Length; ++m) - { - var match = MatchingArchetypes.Ptr[m]; - if (match->Archetype->EntityCount <= 0) - continue; - - var archetype = match->Archetype; - int chunkCount = archetype->Chunks.Count; - var chunkEntityCountArray = archetype->Chunks.GetChunkEntityCountArray(); - - for (int chunkIndex = 0; chunkIndex < chunkCount; ++chunkIndex) - { - var chunk = archetype->Chunks[chunkIndex]; - var batch = new ArchetypeChunk(chunk, EntityComponentStore); - batches[filteredBatchCounter] = batch; - entityIndices[filteredBatchCounter] = entityIndexAggregate; - - ++filteredBatchCounter; - entityIndexAggregate += chunkEntityCountArray[chunkIndex]; - } - } - } - } - else - { - if (Filter.RequiresMatchesFilter) - { - // 2+ batches per chunk, filtering enabled. - // This is the most general case; if only one code path survives, it should be this one. - for (var m = 0; m < MatchingArchetypes.Length; ++m) - { - var match = MatchingArchetypes.Ptr[m]; - if (match->Archetype->EntityCount <= 0) - continue; - - var archetype = match->Archetype; - int chunkCount = archetype->Chunks.Count; - var chunkEntityCountArray = archetype->Chunks.GetChunkEntityCountArray(); - - for (int chunkIndex = 0; chunkIndex < chunkCount; ++chunkIndex) + else { - if (match->ChunkMatchesFilter(chunkIndex, ref Filter)) + // 2+ batches per chunk, with/without filtering + // This is the most general case; if only one code path survives, it should be this one. + for (int batchIndex = beginBatchIndex; batchIndex < endBatchIndex; ++batchIndex) { - var chunk = archetype->Chunks[chunkIndex]; - var chunkEntityCount = chunkEntityCountArray[chunkIndex]; - for (int batchIndex = 0; batchIndex < BatchesPerChunk; ++batchIndex) + var chunkIndex = batchIndex / jobWrapper.JobsPerChunk; + var batchIndexInChunk = batchIndex % jobWrapper.JobsPerChunk; + var chunk = chunks.Ptr[chunkIndex]; + + if (isFiltering && !chunk->MatchesFilter( + jobWrapper.MatchingArchetypes.Ptr[ + chunks.PerChunkMatchingArchetypeIndex.Ptr[chunkIndex]], + ref jobWrapper.Filter)) + continue; + + if (ArchetypeChunk.EntityBatchFromChunk(chunk, chunk->Count, jobWrapper.JobsPerChunk, + batchIndexInChunk, chunks.EntityComponentStore, out var batch)) { - if (ArchetypeChunk.EntityBatchFromChunk(chunk, chunkEntityCount, BatchesPerChunk, - batchIndex, EntityComponentStore, out var batch)) - { - batches[filteredBatchCounter] = batch; - entityIndices[filteredBatchCounter] = entityIndexAggregate; - - ++filteredBatchCounter; - entityIndexAggregate += batch.Count; - } + jobWrapper.JobData.Execute(batch, batchIndex); } } } } - } - else - { - // 2+ batches per chunk, filtering disabled - for (var m = 0; m < MatchingArchetypes.Length; ++m) - { - var match = MatchingArchetypes.Ptr[m]; - if (match->Archetype->EntityCount <= 0) - continue; - - var archetype = match->Archetype; - int chunkCount = archetype->Chunks.Count; - var chunkEntityCountArray = archetype->Chunks.GetChunkEntityCountArray(); - - for (int chunkIndex = 0; chunkIndex < chunkCount; ++chunkIndex) - { - var chunk = archetype->Chunks[chunkIndex]; - var chunkEntityCount = chunkEntityCountArray[chunkIndex]; - for (int batchIndex = 0; batchIndex < BatchesPerChunk; ++batchIndex) - { - if (ArchetypeChunk.EntityBatchFromChunk(chunk, chunkEntityCount, BatchesPerChunk, - batchIndex, EntityComponentStore, out var batch)) - { - batches[filteredBatchCounter] = batch; - entityIndices[filteredBatchCounter] = entityIndexAggregate; - ++filteredBatchCounter; - entityIndexAggregate += batch.Count; - } - } - } - } + // If we are not running in parallel, our job is done. + if (!isParallel) + break; } } - - var chunkCounter = entityIndices + FilteredChunkCount * BatchesPerChunk; - *chunkCounter = filteredBatchCounter; } } + // Burst-compatibility tests [BurstCompile] struct DummyJobEntityBatch : IJobEntityBatch @@ -1088,22 +622,4 @@ public static void Schedule() new DummyJobEntityBatch().Run(default(EntityQuery)); } } - - [BurstCompile] - struct DummyJobEntityBatchWithIndex : IJobEntityBatchWithIndex - { - public void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirstEntityInQuery) - { - } - } - [BurstCompile] - static class DummyJobEntityBatchWithIndexScheduler - { - [BurstCompatible(RequiredUnityDefine = "UNITY_2020_2_OR_NEWER && !NET_DOTS")] - public static void Schedule() - { - new DummyJobEntityBatch().Run(default(EntityQuery)); - } - } - } diff --git a/Unity.Entities/IJobEntityBatchWithIndex.cs b/Unity.Entities/IJobEntityBatchWithIndex.cs new file mode 100644 index 00000000..f3c2bbe9 --- /dev/null +++ b/Unity.Entities/IJobEntityBatchWithIndex.cs @@ -0,0 +1,816 @@ +using System; +using Unity.Assertions; +using Unity.Burst; +using Unity.Jobs; +using Unity.Jobs.LowLevel.Unsafe; +using Unity.Collections; +using Unity.Collections.LowLevel.Unsafe; +using Unity.Profiling; +using Assert = UnityEngine.Assertions.Assert; + +namespace Unity.Entities +{ + /// + /// IJobEntityBatchWithIndex is a variant of [IJobEntityBatch] that provides an additional indexOfFirstEntityInQuery parameter, which + /// provides a per-batch index that is the aggregate of all previous batch counts. + /// + /// [IJob]: https://docs.unity3d.com/ScriptReference/Unity.Jobs.IJob.html + /// [chunk]: xref:ecs-concepts#chunk + /// + /// + /// Schedule or run an IJobEntityBatchWithIndex job inside the function of a + /// implementation. When the system schedules or runs an IJobEntityBatchWithIndex job, it uses + /// the specified to select a set of [chunks]. These selected chunks are divided into + /// batches of entities. A batch is a contiguous set of entities, always stored in the same chunk. The job + /// struct's `Execute` function is called for each batch. + /// + /// When you schedule or run the job with one of the following methods: + /// * , + /// * , + /// * or + /// + /// all the entities of each chunk are processed as + /// a single batch. The object passed to the `Execute` function of your job struct provides access + /// to the components of all the entities in the chunk. + /// + /// Use to divide + /// each chunk selected by your query into (approximately) equal batches of contiguous entities. For example, + /// if you use a batch count of two, one batch provides access to the first half of the component arrays in a chunk and the other + /// provides access to the second half. When you use batching, the object only + /// provides access to the components in the current batch of entities -- not those of all entities in a chunk. + /// + /// In general, processing whole chunks at a time (setting batch count to one) is the most efficient. However, in cases + /// where the algorithm itself is relatively expensive for each entity, executing smaller batches in parallel can provide + /// better overall performance, especially when the entities are contained in a small number of chunks. As always, you + /// should profile your job to find the best arrangement for your specific application. + /// + /// To pass data to your Execute function (beyond the `Execute` parameters), add public fields to the IJobEntityBatchWithIndex + /// struct declaration and set those fields immediately before scheduling the job. You must always pass the + /// component type information for any components that the job reads or writes using a field of type, + /// . Get this type information by calling the appropriate + /// function for the type of + /// component. + /// + /// For more information see [Using IJobEntityBatch]. + /// + /// + /// + /// + /// [Using IJobEntityBatch]: xref:ecs-ijobentitybatch + /// [chunks]: xref:ecs-concepts#chunk + /// + /// + /// + [JobProducerType(typeof(JobEntityBatchIndexExtensions.JobEntityBatchIndexProducer<>))] + public interface IJobEntityBatchWithIndex + { + /// + /// Implement the `Execute` function to perform a unit of work on an representing + /// a contiguous batch of entities within a chunk. + /// + /// + /// The chunks selected by the used to schedule the job are the input to your `Execute` + /// function. If you use + /// to schedule the job, the entities in each matching chunk are partitioned into contiguous batches based on the + /// `batchesInChunk` parameter, and the `Execute` function is called once for each batch. When you use one of the + /// other scheduling or run methods, the `Execute` function is called once per matching chunk (in other words, the + /// batch count is one). + /// + /// An object providing access to a batch of entities within a chunk. + /// The index of the current batch within the list of all batches in all chunks found by the + /// job's . If the batch count is one, this list contains one entry for each selected chunk; if + /// the batch count is two, the list contains two entries per chunk; and so on. Note that batches are not processed in + /// index order, except by chance. + /// The index of the first entity in the current chunk within the list of all + /// entities in all the chunks found by the Job's . + void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirstEntityInQuery); + } + + /// + /// Extensions for scheduling and running jobs. + /// + public static class JobEntityBatchIndexExtensions + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + [NativeContainer] + internal struct EntitySafetyHandle + { + internal AtomicSafetyHandle m_Safety; + } +#endif + internal struct JobEntityBatchIndexWrapper where T : struct + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS +#pragma warning disable 414 + [ReadOnly] public EntitySafetyHandle safety; +#pragma warning restore +#endif + public T JobData; + + [DeallocateOnJobCompletion] + [NativeDisableContainerSafetyRestriction] + public NativeArray PrefilterData; + + public int JobsPerChunk; + public int IsParallel; + } + + +#if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME + /// + /// This method is only to be called by automatically generated setup code. + /// + /// + public static void EarlyJobInit() + where T : struct, IJobEntityBatchWithIndex + { + JobEntityBatchIndexProducer.CreateReflectionData(); + } +#endif + /// + /// Adds an instance to the job scheduler queue for sequential (non-parallel) execution. + /// + /// This scheduling variant processes each matching chunk as a single batch. All chunks execute + /// sequentially. + /// An instance. + /// The query selecting chunks with the necessary components. + /// The handle identifying already scheduled jobs that could constrain this job. + /// A job that writes to a component cannot run in parallel with other jobs that read or write that component. + /// Jobs that only read the same components can run in parallel. + /// The specific implementation type. + /// A handle that combines the current Job with previous dependencies identified by the `dependsOn` + /// parameter. + public static unsafe JobHandle Schedule( + this T jobData, + EntityQuery query, + JobHandle dependsOn = default(JobHandle)) + where T : struct, IJobEntityBatchWithIndex + { +#if UNITY_2020_2_OR_NEWER + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Single, 1, false); +#else + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, 1, false); +#endif + } + + /// + /// Adds an instance to the job scheduler queue for sequential (non-parallel) execution. + /// + /// This scheduling variant processes each batch found in the entity array. All batches are processed + /// sequentially. + /// An instance. + /// The query selecting chunks with the necessary components. + /// A list of entities to limit execution to. Only entities in the list will be processed. + /// The handle identifying already scheduled jobs that could constrain this job. + /// A job that writes to a component cannot run in parallel with other jobs that read or write that component. + /// Jobs that only read the same components can run in parallel. + /// The specific implementation type. + /// A handle that combines the current Job with previous dependencies identified by the `dependsOn` + /// parameter. + public static unsafe JobHandle Schedule( + this T jobData, + EntityQuery query, + NativeArray limitToEntityArray, + JobHandle dependsOn = default(JobHandle)) + where T : struct, IJobEntityBatchWithIndex + { +#if UNITY_2020_2_OR_NEWER + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Single, 1, false, limitToEntityArray); +#else + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, 1, false, limitToEntityArray); +#endif + } + + /// + /// Adds an instance to the job scheduler queue for parallel execution. + /// + /// This scheduling variant processes each matching chunk as a single batch. Each + /// chunk can execute in parallel. This scheduling method is equivalent to calling + /// + /// with the batchesPerChunk parameter set to 1. + /// An instance. + /// The query selecting chunks with the necessary components. + /// The handle identifying already scheduled jobs that could constrain this job. + /// A job that writes to a component cannot run in parallel with other jobs that read or write that component. + /// Jobs that only read the same components can run in parallel. + /// The specific implementation type. + /// A handle that combines the current Job with previous dependencies identified by the `dependsOn` + /// parameter. + public static unsafe JobHandle ScheduleParallel( + this T jobData, + EntityQuery query, + int batchesPerChunk = 1, + JobHandle dependsOn = default(JobHandle)) + where T : struct, IJobEntityBatchWithIndex + { +#if UNITY_2020_2_OR_NEWER + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Parallel, batchesPerChunk, true); +#else + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, batchesPerChunk, true); +#endif + } + + /// + /// Adds an instance to the job scheduler queue for parallel execution. + /// + /// This scheduling variant processes each batch found in the entity array. Each + /// batch can execute in parallel. + /// An instance. + /// The query selecting chunks with the necessary components. + /// A list of entities to limit execution to. Only entities in the list will be processed. + /// The handle identifying already scheduled jobs that could constrain this job. + /// A job that writes to a component cannot run in parallel with other jobs that read or write that component. + /// Jobs that only read the same components can run in parallel. + /// The specific implementation type. + /// A handle that combines the current Job with previous dependencies identified by the `dependsOn` + /// parameter. + public static unsafe JobHandle ScheduleParallel( + this T jobData, + EntityQuery query, + NativeArray limitToEntityArray, + JobHandle dependsOn = default(JobHandle)) + where T : struct, IJobEntityBatchWithIndex + { +#if UNITY_2020_2_OR_NEWER + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Parallel, 1, true, limitToEntityArray); +#else + return ScheduleInternal(ref jobData, query, dependsOn, ScheduleMode.Batched, 1, true, limitToEntityArray); +#endif + } + + /// + /// Runs the job immediately on the current thread. + /// + /// This scheduling variant processes each matching chunk as a single batch. All chunks execute + /// sequentially on the current thread. + /// An instance. + /// The query selecting chunks with the necessary components. + /// The specific implementation type. + public static unsafe void Run(this T jobData, EntityQuery query) + where T : struct, IJobEntityBatchWithIndex + { + ScheduleInternal(ref jobData, query, default(JobHandle), ScheduleMode.Run, 1, false); + } + + /// + /// Runs the job immediately on the current thread. + /// + /// This scheduling variant processes each batch found in the input array. All + /// batches are processed sequentially on the current thread. + /// An instance. + /// The query selecting chunks with the necessary components. + /// A list of entities to limit execution to. Only entities in the list will be processed. + /// The specific implementation type. + public static unsafe void Run(this T jobData, EntityQuery query, NativeArray limitToEntityArray) + where T : struct, IJobEntityBatchWithIndex + { + ScheduleInternal(ref jobData, query, default(JobHandle), ScheduleMode.Run, 1, false, limitToEntityArray); + } + + public static unsafe void RunWithoutJobsInternal(ref T jobData, ref ArchetypeChunkIterator chunkIterator) + where T : struct, IJobEntityBatchWithIndex + { + var chunkCount = 0; + var entitiesSeen = 0; + while (chunkIterator.MoveNext()) + { + var archetypeChunk = chunkIterator.CurrentArchetypeChunk; + jobData.Execute(archetypeChunk, chunkCount, entitiesSeen); + chunkCount++; + entitiesSeen += archetypeChunk.Count; + } + } + + /// + /// Runs the job without using the jobs API. + /// + /// The job to execute. + /// The query selecting chunks with the necessary components. + /// The specific IJobEntityBatch implementation type. + public static unsafe void RunWithoutJobs(ref T jobData, EntityQuery query) + where T : struct, IJobEntityBatchWithIndex + { + var myIterator = query.GetArchetypeChunkIterator(); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + var access = query._GetImpl()->_Access; + try + { + access->DependencyManager->IsInForEachDisallowStructuralChange++; + RunWithoutJobsInternal(ref jobData, ref myIterator); + } + finally + { + access->DependencyManager->IsInForEachDisallowStructuralChange--; + } +#else + RunWithoutJobsInternal(ref jobData, ref myIterator); +#endif + } + + internal static unsafe JobHandle ScheduleInternal( + ref T jobData, + EntityQuery query, + JobHandle dependsOn, + ScheduleMode mode, + int batchesPerChunk, + bool isParallel = true, + NativeArray limitToEntityArray = default(NativeArray)) + where T : struct, IJobEntityBatchWithIndex + { + var queryImpl = query._GetImpl(); + var queryData = queryImpl->_QueryData; + + var batchCount = 0; + var filteredChunkCount = 0; + var useEntityArray = limitToEntityArray.IsCreated; + var prebuiltBatchList = new UnsafeList(Allocator.TempJob); + var perBatchMatchingArchetypeIndex = new UnsafeIntList(0, Allocator.TempJob); + + if (useEntityArray) + { + // Forces the creation of an EntityQueryMask, which is necessary to filter batches. + var access = queryImpl->_Access; + access->EntityQueryManager->GetEntityQueryMask(queryData, access->EntityComponentStore); + + ChunkIterationUtility.FindBatchesForEntityArrayWithQuery( + queryImpl->_Access->EntityComponentStore, + queryData, + ref queryImpl->_Filter, + (Entity*) limitToEntityArray.GetUnsafePtr(), + limitToEntityArray.Length, + ref prebuiltBatchList, + ref perBatchMatchingArchetypeIndex); + + batchCount = prebuiltBatchList.Length; + } + else + { + filteredChunkCount = query.CalculateChunkCount(); + batchCount = filteredChunkCount * batchesPerChunk; + } + + // Allocate one buffer for all prefilter data and distribute it + // We keep the full buffer as a "dummy array" so we can deallocate it later with [DeallocateOnJobCompletion] + var sizeofBatchArray = sizeof(ArchetypeChunk) * batchCount; + var sizeofIndexArray = sizeof(int) * batchCount; + var prefilterDataSize = sizeofBatchArray + sizeofIndexArray + sizeof(int); + + var prefilterData = (byte*)Memory.Unmanaged.Allocate(prefilterDataSize, 64, Allocator.TempJob); + var prefilterDataArray = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(prefilterData, prefilterDataSize, Allocator.TempJob); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref prefilterDataArray, AtomicSafetyHandle.Create()); +#endif + + var prefilterHandle = dependsOn; + if (useEntityArray) + { + var prefilterJob = new PrefilterForJobEntityBatchWithIndex_EntityArray + { + MatchingArchetypes = queryImpl->_QueryData->MatchingArchetypes, + Filter = queryImpl->_Filter, + EntityComponentStore = queryImpl->_Access->EntityComponentStore, + PrefilterData = prefilterData, + PrebuiltBatches = prebuiltBatchList, + PerBatchMatchingArchetypeIndex = perBatchMatchingArchetypeIndex + }; + + if (mode != ScheduleMode.Run) + prefilterHandle = prefilterJob.Schedule(dependsOn); + else + prefilterJob.Run(); + + prefilterHandle = prebuiltBatchList.Dispose(prefilterHandle); + prefilterHandle = perBatchMatchingArchetypeIndex.Dispose(prefilterHandle); + } + else + { + var prefilterJob = new PrefilterForJobEntityBatchWithIndex + { + MatchingArchetypes = queryImpl->_QueryData->MatchingArchetypes, + Filter = queryImpl->_Filter, + BatchesPerChunk = batchesPerChunk, + EntityComponentStore = queryImpl->_Access->EntityComponentStore, + PrefilterData = prefilterData, + FilteredChunkCount = filteredChunkCount + }; + + if (mode != ScheduleMode.Run) + prefilterHandle = prefilterJob.Schedule(dependsOn); + else + prefilterJob.Run(); + } + + + JobEntityBatchIndexWrapper jobEntityBatchIndexWrapper = new JobEntityBatchIndexWrapper + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + // All IJobEntityBatchWithIndex jobs have a EntityManager safety handle to ensure that BeforeStructuralChange throws an error if + // jobs without any other safety handles are still running (haven't been synced). + safety = new EntitySafetyHandle {m_Safety = queryImpl->SafetyHandles->GetEntityManagerSafetyHandle()}, +#endif + + JobData = jobData, + PrefilterData = prefilterDataArray, + + JobsPerChunk = batchesPerChunk, + IsParallel = isParallel ? 1 : 0 + }; + + var scheduleParams = new JobsUtility.JobScheduleParameters( + UnsafeUtility.AddressOf(ref jobEntityBatchIndexWrapper), + isParallel + ? JobEntityBatchIndexProducer.InitializeParallel() + : JobEntityBatchIndexProducer.InitializeSingle(), + prefilterHandle, + mode); + +#if UNITY_DOTSRUNTIME + // This should just be a call to FinalizeScheduleChecked, but DOTSR requires the JobsUtility calls to be + // in this specific function. +#if ENABLE_UNITY_COLLECTIONS_CHECKS + try + { +#endif + if (!isParallel) + { + return JobsUtility.Schedule(ref scheduleParams); + } + else + { + return JobsUtility.ScheduleParallelFor(ref scheduleParams, batchCount, 1); + } +#if ENABLE_UNITY_COLLECTIONS_CHECKS + } + catch (InvalidOperationException e) + { + prefilterHandle.Complete(); + prefilterDataArray.Dispose(); + throw e; + } +#endif +#else + // We can't use try {} catch {} with 2020.2 as we will be burst compiling the schedule code. + // Burst doesn't support exception handling. + bool executedManaged = false; + JobHandle result = default; + FinalizeScheduleChecked(isParallel, batchCount, prefilterHandle, prefilterDataArray, ref scheduleParams, ref executedManaged, ref result); + + if (executedManaged) + return result; + + return FinalizeScheduleNoExceptions(isParallel, batchCount, ref scheduleParams); +#endif + } + +#if !UNITY_DOTSRUNTIME + // Burst does not support exception handling. + [BurstDiscard] + private static unsafe void FinalizeScheduleChecked(bool isParallel, int batchCount, JobHandle prefilterHandle, NativeArray prefilterDataArray, ref JobsUtility.JobScheduleParameters scheduleParams, ref bool executed, ref JobHandle result) + { + executed = true; + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + try + { +#endif + result = FinalizeScheduleNoExceptions(isParallel, batchCount, ref scheduleParams); +#if ENABLE_UNITY_COLLECTIONS_CHECKS + } + catch (InvalidOperationException e) + { + prefilterHandle.Complete(); + prefilterDataArray.Dispose(); + throw e; + } +#endif + } + + private static unsafe JobHandle FinalizeScheduleNoExceptions(bool isParallel, int batchCount, ref JobsUtility.JobScheduleParameters scheduleParams) + { + if (!isParallel) + { + return JobsUtility.Schedule(ref scheduleParams); + } + else + { + return JobsUtility.ScheduleParallelFor(ref scheduleParams, batchCount, 1); + } + } +#endif + internal struct JobEntityBatchIndexProducer + where T : struct, IJobEntityBatchWithIndex + { +#if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME + internal static readonly SharedStatic s_ReflectionData = SharedStatic.GetOrCreate(); + + internal static void CreateReflectionData() + { + s_ReflectionData.Data = JobsUtility.CreateJobReflectionData(typeof(JobEntityBatchIndexWrapper), typeof(T), (ExecuteJobFunction)Execute); + } +#else + static IntPtr s_JobReflectionDataParallel; + static IntPtr s_JobReflectionDataSingle; +#endif + + internal static IntPtr InitializeSingle() + { +#if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME + return InitializeParallel(); +#else + if (s_JobReflectionDataSingle == IntPtr.Zero) + s_JobReflectionDataSingle = JobsUtility.CreateJobReflectionData(typeof(JobEntityBatchIndexWrapper), typeof(T), JobType.Single, (ExecuteJobFunction)Execute); + return s_JobReflectionDataSingle; +#endif + } + + internal static IntPtr InitializeParallel() + { +#if UNITY_2020_2_OR_NEWER && !UNITY_DOTSRUNTIME + IntPtr result = s_ReflectionData.Data; +#if ENABLE_UNITY_COLLECTIONS_CHECKS + if (result == IntPtr.Zero) + throw new InvalidOperationException("IJobEntityBatchWithIndex job reflection data has not been automatically computed - this is a bug"); +#endif + return result; +#else + if (s_JobReflectionDataParallel == IntPtr.Zero) + s_JobReflectionDataParallel = JobsUtility.CreateJobReflectionData(typeof(JobEntityBatchIndexWrapper), typeof(T), JobType.ParallelFor, (ExecuteJobFunction)Execute); + return s_JobReflectionDataParallel; +#endif + } + + public delegate void ExecuteJobFunction( + ref JobEntityBatchIndexWrapper jobIndexWrapper, + IntPtr additionalPtr, + IntPtr bufferRangePatchData, + ref JobRanges ranges, + int jobIndex); + + public static void Execute( + ref JobEntityBatchIndexWrapper jobIndexWrapper, + IntPtr additionalPtr, + IntPtr bufferRangePatchData, + ref JobRanges ranges, + int jobIndex) + { + ExecuteInternal(ref jobIndexWrapper, bufferRangePatchData, ref ranges, jobIndex); + } + + internal unsafe static void ExecuteInternal( + ref JobEntityBatchIndexWrapper jobWrapper, + IntPtr bufferRangePatchData, + ref JobRanges ranges, + int jobIndex) + { + ChunkIterationUtility.UnpackPrefilterData(jobWrapper.PrefilterData, out var filteredChunks, out var entityIndices, out var batchCount); + + bool isParallel = jobWrapper.IsParallel == 1; + while (true) + { + int beginBatchIndex = 0; + int endBatchIndex = batchCount; + + // If we are running the job in parallel, steal some work. + if (isParallel) + { + // If we have no range to steal, exit the loop. + if (!JobsUtility.GetWorkStealingRange(ref ranges, jobIndex, out beginBatchIndex, out endBatchIndex)) + break; + } + + // Do the actual user work. + for (int batchIndex = beginBatchIndex; batchIndex < endBatchIndex; ++batchIndex) + { + var batch = filteredChunks[batchIndex]; + Assert.IsTrue(batch.Count > 0); // Empty batches are expected to be skipped by the prefilter job! + var entityOffset = entityIndices[batchIndex]; + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + if(isParallel) + { + JobsUtility.PatchBufferMinMaxRanges(bufferRangePatchData, UnsafeUtility.AddressOf(ref jobWrapper), entityOffset, batch.Count); + } +#endif + jobWrapper.JobData.Execute(batch, batchIndex, entityOffset); + } + + // If we are not running in parallel, our job is done. + if (!isParallel) + break; + } + } + } + } + + [BurstCompile] + unsafe struct PrefilterForJobEntityBatchWithIndex : IJobBurstSchedulable + { + [NativeDisableUnsafePtrRestriction] public UnsafeMatchingArchetypePtrList MatchingArchetypes; + [NativeDisableUnsafePtrRestriction] public EntityComponentStore* EntityComponentStore; + [NativeDisableUnsafePtrRestriction] public void* PrefilterData; + + public int FilteredChunkCount; + public EntityQueryFilter Filter; + public int BatchesPerChunk; + + public void Execute() + { + var batches = (ArchetypeChunk*)PrefilterData; + var entityIndices = (int*)(batches + FilteredChunkCount * BatchesPerChunk); + + var filteredBatchCounter = 0; + var entityIndexAggregate = 0; + + if (BatchesPerChunk == 1) + { + if (Filter.RequiresMatchesFilter) + { + // one batch per chunk, filtering enabled + for (var m = 0; m < MatchingArchetypes.Length; ++m) + { + var match = MatchingArchetypes.Ptr[m]; + if (match->Archetype->EntityCount <= 0) + continue; + + var archetype = match->Archetype; + int chunkCount = archetype->Chunks.Count; + var chunkEntityCountArray = archetype->Chunks.GetChunkEntityCountArray(); + + for (int chunkIndex = 0; chunkIndex < chunkCount; ++chunkIndex) + { + var chunk = archetype->Chunks[chunkIndex]; + if (match->ChunkMatchesFilter(chunkIndex, ref Filter)) + { + var batch = new ArchetypeChunk(chunk, EntityComponentStore); + batches[filteredBatchCounter] = batch; + entityIndices[filteredBatchCounter] = entityIndexAggregate; + + ++filteredBatchCounter; + entityIndexAggregate += chunkEntityCountArray[chunkIndex]; + } + } + } + } + else + { + // one batch per chunk, filtering disabled + for (var m = 0; m < MatchingArchetypes.Length; ++m) + { + var match = MatchingArchetypes.Ptr[m]; + if (match->Archetype->EntityCount <= 0) + continue; + + var archetype = match->Archetype; + int chunkCount = archetype->Chunks.Count; + var chunkEntityCountArray = archetype->Chunks.GetChunkEntityCountArray(); + + for (int chunkIndex = 0; chunkIndex < chunkCount; ++chunkIndex) + { + var chunk = archetype->Chunks[chunkIndex]; + var batch = new ArchetypeChunk(chunk, EntityComponentStore); + batches[filteredBatchCounter] = batch; + entityIndices[filteredBatchCounter] = entityIndexAggregate; + + ++filteredBatchCounter; + entityIndexAggregate += chunkEntityCountArray[chunkIndex]; + } + } + } + } + else + { + if (Filter.RequiresMatchesFilter) + { + // 2+ batches per chunk, filtering enabled. + // This is the most general case; if only one code path survives, it should be this one. + for (var m = 0; m < MatchingArchetypes.Length; ++m) + { + var match = MatchingArchetypes.Ptr[m]; + if (match->Archetype->EntityCount <= 0) + continue; + + var archetype = match->Archetype; + int chunkCount = archetype->Chunks.Count; + var chunkEntityCountArray = archetype->Chunks.GetChunkEntityCountArray(); + + for (int chunkIndex = 0; chunkIndex < chunkCount; ++chunkIndex) + { + if (match->ChunkMatchesFilter(chunkIndex, ref Filter)) + { + var chunk = archetype->Chunks[chunkIndex]; + var chunkEntityCount = chunkEntityCountArray[chunkIndex]; + for (int batchIndex = 0; batchIndex < BatchesPerChunk; ++batchIndex) + { + if (ArchetypeChunk.EntityBatchFromChunk(chunk, chunkEntityCount, BatchesPerChunk, + batchIndex, EntityComponentStore, out var batch)) + { + batches[filteredBatchCounter] = batch; + entityIndices[filteredBatchCounter] = entityIndexAggregate; + + ++filteredBatchCounter; + entityIndexAggregate += batch.Count; + } + } + } + } + } + } + else + { + // 2+ batches per chunk, filtering disabled + for (var m = 0; m < MatchingArchetypes.Length; ++m) + { + var match = MatchingArchetypes.Ptr[m]; + if (match->Archetype->EntityCount <= 0) + continue; + + var archetype = match->Archetype; + int chunkCount = archetype->Chunks.Count; + var chunkEntityCountArray = archetype->Chunks.GetChunkEntityCountArray(); + + for (int chunkIndex = 0; chunkIndex < chunkCount; ++chunkIndex) + { + var chunk = archetype->Chunks[chunkIndex]; + var chunkEntityCount = chunkEntityCountArray[chunkIndex]; + for (int batchIndex = 0; batchIndex < BatchesPerChunk; ++batchIndex) + { + if (ArchetypeChunk.EntityBatchFromChunk(chunk, chunkEntityCount, BatchesPerChunk, + batchIndex, EntityComponentStore, out var batch)) + { + batches[filteredBatchCounter] = batch; + entityIndices[filteredBatchCounter] = entityIndexAggregate; + + ++filteredBatchCounter; + entityIndexAggregate += batch.Count; + } + } + } + } + } + } + + var chunkCounter = entityIndices + FilteredChunkCount * BatchesPerChunk; + *chunkCounter = filteredBatchCounter; + } + } + + [BurstCompile] + unsafe struct PrefilterForJobEntityBatchWithIndex_EntityArray : IJobBurstSchedulable + { + [NativeDisableUnsafePtrRestriction] public UnsafeMatchingArchetypePtrList MatchingArchetypes; + [NativeDisableUnsafePtrRestriction] public EntityComponentStore* EntityComponentStore; + [NativeDisableUnsafePtrRestriction] public void* PrefilterData; + + public UnsafeList PrebuiltBatches; + public UnsafeIntList PerBatchMatchingArchetypeIndex; + public EntityQueryFilter Filter; + + public void Execute() + { + var inBatches = (ArchetypeChunk*) PrebuiltBatches.Ptr; + var outBatches = (ArchetypeChunk*) PrefilterData; + var outEntityIndices = (int*) (outBatches + PrebuiltBatches.Length); + + var filteredBatchCounter = 0; + var entityIndexAggregate = 0; + var isFiltering = Filter.RequiresMatchesFilter; + + for (int i = 0; i < PrebuiltBatches.Length; ++i) + { + var batch = inBatches[i]; + + if (!isFiltering || batch.m_Chunk->MatchesFilter(MatchingArchetypes.Ptr[PerBatchMatchingArchetypeIndex.Ptr[i]], ref Filter)) + { + outBatches[filteredBatchCounter] = batch; + outEntityIndices[filteredBatchCounter] = entityIndexAggregate; + + ++filteredBatchCounter; + entityIndexAggregate += batch.Count; + } + } + + var outChunkCounter = outEntityIndices + PrebuiltBatches.Length; + *outChunkCounter = filteredBatchCounter; + } + } + + [BurstCompile] + struct DummyJobEntityBatchWithIndex : IJobEntityBatchWithIndex + { + public void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirstEntityInQuery) + { + } + } + [BurstCompile] + static class DummyJobEntityBatchWithIndexScheduler + { + [BurstCompatible(RequiredUnityDefine = "UNITY_2020_2_OR_NEWER && !NET_DOTS")] + public static void Schedule() + { + new DummyJobEntityBatch().Run(default(EntityQuery)); + } + } + +} diff --git a/Unity.Entities/IJobEntityBatchWithIndex.cs.meta b/Unity.Entities/IJobEntityBatchWithIndex.cs.meta new file mode 100644 index 00000000..7c4697b9 --- /dev/null +++ b/Unity.Entities/IJobEntityBatchWithIndex.cs.meta @@ -0,0 +1,13 @@ +fileFormatVersion: 2 +guid: 5b890319cba3c4b17a4c2fd6e386f598 +timeCreated: 1505652857 +licenseType: Pro +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities/IJobForEach.gen.cs b/Unity.Entities/IJobForEach.gen.cs index 8b5e426c..8c4783b5 100644 --- a/Unity.Entities/IJobForEach.gen.cs +++ b/Unity.Entities/IJobForEach.gen.cs @@ -2709,7 +2709,17 @@ internal static unsafe JobHandle ScheduleInternal_C(ref T jobData, ComponentS var resolvedQuery = JobStruct_ProcessInfer_C.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_C.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_C.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -2807,7 +2817,17 @@ internal static unsafe JobHandle ScheduleInternal_EC(ref T jobData, Component var resolvedQuery = JobStruct_ProcessInfer_EC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -2906,7 +2926,17 @@ internal static unsafe JobHandle ScheduleInternal_B(ref T jobData, ComponentS var resolvedQuery = JobStruct_ProcessInfer_B.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_B.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_B.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -3014,7 +3044,17 @@ internal static unsafe JobHandle ScheduleInternal_EB(ref T jobData, Component var resolvedQuery = JobStruct_ProcessInfer_EB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -3123,7 +3163,17 @@ internal static unsafe JobHandle ScheduleInternal_CC(ref T jobData, Component var resolvedQuery = JobStruct_ProcessInfer_CC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_CC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_CC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -3225,7 +3275,17 @@ internal static unsafe JobHandle ScheduleInternal_ECC(ref T jobData, Componen var resolvedQuery = JobStruct_ProcessInfer_ECC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_ECC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_ECC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -3328,7 +3388,17 @@ internal static unsafe JobHandle ScheduleInternal_BC(ref T jobData, Component var resolvedQuery = JobStruct_ProcessInfer_BC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -3440,7 +3510,17 @@ internal static unsafe JobHandle ScheduleInternal_EBC(ref T jobData, Componen var resolvedQuery = JobStruct_ProcessInfer_EBC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -3553,7 +3633,17 @@ internal static unsafe JobHandle ScheduleInternal_BB(ref T jobData, Component var resolvedQuery = JobStruct_ProcessInfer_BB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -3667,7 +3757,17 @@ internal static unsafe JobHandle ScheduleInternal_EBB(ref T jobData, Componen var resolvedQuery = JobStruct_ProcessInfer_EBB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -3782,7 +3882,17 @@ internal static unsafe JobHandle ScheduleInternal_CCC(ref T jobData, Componen var resolvedQuery = JobStruct_ProcessInfer_CCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_CCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_CCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -3888,7 +3998,17 @@ internal static unsafe JobHandle ScheduleInternal_ECCC(ref T jobData, Compone var resolvedQuery = JobStruct_ProcessInfer_ECCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_ECCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_ECCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -3995,7 +4115,17 @@ internal static unsafe JobHandle ScheduleInternal_BCC(ref T jobData, Componen var resolvedQuery = JobStruct_ProcessInfer_BCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -4111,7 +4241,17 @@ internal static unsafe JobHandle ScheduleInternal_EBCC(ref T jobData, Compone var resolvedQuery = JobStruct_ProcessInfer_EBCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -4228,7 +4368,17 @@ internal static unsafe JobHandle ScheduleInternal_BBC(ref T jobData, Componen var resolvedQuery = JobStruct_ProcessInfer_BBC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -4346,7 +4496,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBC(ref T jobData, Compone var resolvedQuery = JobStruct_ProcessInfer_EBBC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -4465,7 +4625,17 @@ internal static unsafe JobHandle ScheduleInternal_BBB(ref T jobData, Componen var resolvedQuery = JobStruct_ProcessInfer_BBB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -4585,7 +4755,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBB(ref T jobData, Compone var resolvedQuery = JobStruct_ProcessInfer_EBBB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -4706,7 +4886,17 @@ internal static unsafe JobHandle ScheduleInternal_CCCC(ref T jobData, Compone var resolvedQuery = JobStruct_ProcessInfer_CCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_CCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_CCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -4816,7 +5006,17 @@ internal static unsafe JobHandle ScheduleInternal_ECCCC(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_ECCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_ECCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_ECCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -4927,7 +5127,17 @@ internal static unsafe JobHandle ScheduleInternal_BCCC(ref T jobData, Compone var resolvedQuery = JobStruct_ProcessInfer_BCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -5047,7 +5257,17 @@ internal static unsafe JobHandle ScheduleInternal_EBCCC(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_EBCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -5168,7 +5388,17 @@ internal static unsafe JobHandle ScheduleInternal_BBCC(ref T jobData, Compone var resolvedQuery = JobStruct_ProcessInfer_BBCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -5290,7 +5520,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBCC(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_EBBCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -5413,7 +5653,17 @@ internal static unsafe JobHandle ScheduleInternal_BBBC(ref T jobData, Compone var resolvedQuery = JobStruct_ProcessInfer_BBBC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -5537,7 +5787,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBBC(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_EBBBC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -5662,7 +5922,17 @@ internal static unsafe JobHandle ScheduleInternal_BBBB(ref T jobData, Compone var resolvedQuery = JobStruct_ProcessInfer_BBBB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -5788,7 +6058,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBBB(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_EBBBB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -5915,7 +6195,17 @@ internal static unsafe JobHandle ScheduleInternal_CCCCC(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_CCCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_CCCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_CCCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -6029,7 +6319,17 @@ internal static unsafe JobHandle ScheduleInternal_ECCCCC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_ECCCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_ECCCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_ECCCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -6144,7 +6444,17 @@ internal static unsafe JobHandle ScheduleInternal_BCCCC(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_BCCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BCCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BCCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -6268,7 +6578,17 @@ internal static unsafe JobHandle ScheduleInternal_EBCCCC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_EBCCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBCCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBCCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -6393,7 +6713,17 @@ internal static unsafe JobHandle ScheduleInternal_BBCCC(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_BBCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -6519,7 +6849,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBCCC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_EBBCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -6646,7 +6986,17 @@ internal static unsafe JobHandle ScheduleInternal_BBBCC(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_BBBCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -6774,7 +7124,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBBCC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_EBBBCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -6903,7 +7263,17 @@ internal static unsafe JobHandle ScheduleInternal_BBBBC(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_BBBBC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBBC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBBC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -7033,7 +7403,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBBBC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_EBBBBC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBBC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBBC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -7164,7 +7544,17 @@ internal static unsafe JobHandle ScheduleInternal_BBBBB(ref T jobData, Compon var resolvedQuery = JobStruct_ProcessInfer_BBBBB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBBB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBBB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -7296,7 +7686,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBBBB(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_EBBBBB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBBB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBBB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -7429,7 +7829,17 @@ internal static unsafe JobHandle ScheduleInternal_CCCCCC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_CCCCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_CCCCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_CCCCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -7547,7 +7957,17 @@ internal static unsafe JobHandle ScheduleInternal_ECCCCCC(ref T jobData, Comp var resolvedQuery = JobStruct_ProcessInfer_ECCCCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_ECCCCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_ECCCCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -7666,7 +8086,17 @@ internal static unsafe JobHandle ScheduleInternal_BCCCCC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_BCCCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BCCCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BCCCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -7794,7 +8224,17 @@ internal static unsafe JobHandle ScheduleInternal_EBCCCCC(ref T jobData, Comp var resolvedQuery = JobStruct_ProcessInfer_EBCCCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBCCCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBCCCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -7923,7 +8363,17 @@ internal static unsafe JobHandle ScheduleInternal_BBCCCC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_BBCCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBCCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBCCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -8053,7 +8503,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBCCCC(ref T jobData, Comp var resolvedQuery = JobStruct_ProcessInfer_EBBCCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBCCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBCCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -8184,7 +8644,17 @@ internal static unsafe JobHandle ScheduleInternal_BBBCCC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_BBBCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -8316,7 +8786,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBBCCC(ref T jobData, Comp var resolvedQuery = JobStruct_ProcessInfer_EBBBCCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBCCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBCCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -8449,7 +8929,17 @@ internal static unsafe JobHandle ScheduleInternal_BBBBCC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_BBBBCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBBCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBBCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -8583,7 +9073,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBBBCC(ref T jobData, Comp var resolvedQuery = JobStruct_ProcessInfer_EBBBBCC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBBCC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBBCC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -8718,7 +9218,17 @@ internal static unsafe JobHandle ScheduleInternal_BBBBBC(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_BBBBBC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBBBC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBBBC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -8854,7 +9364,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBBBBC(ref T jobData, Comp var resolvedQuery = JobStruct_ProcessInfer_EBBBBBC.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBBBC.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBBBC.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -8991,7 +9511,17 @@ internal static unsafe JobHandle ScheduleInternal_BBBBBB(ref T jobData, Compo var resolvedQuery = JobStruct_ProcessInfer_BBBBBB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBBBB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_BBBBBB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] @@ -9129,7 +9659,17 @@ internal static unsafe JobHandle ScheduleInternal_EBBBBBB(ref T jobData, Comp var resolvedQuery = JobStruct_ProcessInfer_EBBBBBB.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBBBB.Cache, deferredCountData, prefilterHandle, mode); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_EBBBBBB.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] diff --git a/Unity.Entities/IJobForEach.tt b/Unity.Entities/IJobForEach.tt index 84c76930..88dd988b 100644 --- a/Unity.Entities/IJobForEach.tt +++ b/Unity.Entities/IJobForEach.tt @@ -169,8 +169,18 @@ foreach(var combination in combinations) { var unfilteredChunkCount = fullData.Iterator.m_Length; var resolvedQuery = JobStruct_ProcessInfer_<#=comboString#>.Cache.EntityQuery; var queryImpl = resolvedQuery._GetImpl(); - var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkLists(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); - return Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_<#=comboString#>.Cache, deferredCountData, prefilterHandle, mode); + var prefilterHandle = ChunkIterationUtility.PreparePrefilteredChunkListsAsync(unfilteredChunkCount, queryImpl->_QueryData->MatchingArchetypes, queryImpl->_Filter, dependsOn, mode, out fullData.PrefilterData, out var deferredCountData, out var isFiltering); + JobHandle jobHandle = default; + try + { + jobHandle = Schedule(UnsafeUtility.AddressOf(ref fullData), fullData.PrefilterData, fullData.Iterator.m_Length, innerloopBatchCount, isParallelFor, isFiltering, ref JobStruct_ProcessInfer_<#=comboString#>.Cache, deferredCountData, prefilterHandle, mode); + } + catch(Exception) + { + prefilterHandle.Complete(); + throw; + } + return jobHandle; } [System.ComponentModel.EditorBrowsable(System.ComponentModel.EditorBrowsableState.Never)] diff --git a/Unity.Entities/ISystemBase.cs b/Unity.Entities/ISystemBase.cs index 9c2327bb..b6439eda 100644 --- a/Unity.Entities/ISystemBase.cs +++ b/Unity.Entities/ISystemBase.cs @@ -7,18 +7,21 @@ namespace Unity.Entities { - // This is internal for now to prevent users from accessing the functionality. We need to land this first PR as a stop gap to get features into CI and get coverage on stuff. - /// /// Interface implemented by unmanaged component systems. /// - internal interface ISystemBase + public interface ISystemBase { void OnCreate(ref SystemState state); void OnDestroy(ref SystemState state); void OnUpdate(ref SystemState state); } + public static class SystemBaseDelegates + { + public delegate void Function(ref SystemState state); + } + /// /// Optional interface for start/stop notifications on systems. /// diff --git a/Unity.Entities/Iterators/ArchetypeChunkArray.cs b/Unity.Entities/Iterators/ArchetypeChunkArray.cs index 183eef97..6d4c3ef8 100644 --- a/Unity.Entities/Iterators/ArchetypeChunkArray.cs +++ b/Unity.Entities/Iterators/ArchetypeChunkArray.cs @@ -343,25 +343,29 @@ public bool DidChange(SharedComponentTypeHandle chunkSharedComponentData, return ChangeVersionUtility.DidChange(GetChangeVersion(chunkSharedComponentData), version); } - [Obsolete("Use GetChangeVersion instead. GetComponentVersion will be (RemovedAfter 2020-05-19). (UnityUpgradable) -> GetChangeVersion(*)")] - public uint GetComponentVersion(ComponentTypeHandle chunkComponentTypeHandle) - where T : IComponentData - { - return GetChangeVersion(chunkComponentTypeHandle); - } - - [Obsolete("Use GetChangeVersion instead. GetComponentVersion will be (RemovedAfter 2020-05-19). (UnityUpgradable) -> GetChangeVersion(*)")] - public uint GetComponentVersion(BufferTypeHandle chunkBufferTypeHandle) - where T : struct, IBufferElementData - { - return GetChangeVersion(chunkBufferTypeHandle); - } - - [Obsolete("Use GetChangeVersion instead. GetComponentVersion will be (RemovedAfter 2020-05-19). (UnityUpgradable) -> GetChangeVersion(*)")] - public uint GetComponentVersion(SharedComponentTypeHandle chunkSharedComponentData) - where T : struct, ISharedComponentData + /// + /// Reports whether the value of shared components associated with the chunk, of the type identified by + /// , could have changed since the specified version. + /// + /// + /// Shared components behave differently than other types of components in terms of change versioning because + /// changing the value of a shared component can move an entity to a different chunk. If the change results + /// in an entity moving to a different chunk, then only the order version is updated (for both the original and + /// the receiving chunk). If you change the shared component value for all entities in a chunk at once, the + /// change version for that chunk is updated. The order version is unaffected. + /// + /// Note that for efficiency, the change version applies to whole chunks not individual entities. The change + /// version is updated even when another job or system that has declared write access to a component does + /// not actually change the component value. + /// An object containing type and job safety information. Create this + /// object by calling . + /// The version to compare. In a system, this parameter should be set to the + /// current . + /// True, if the version number stored in the chunk for this component is more recent than the version + /// passed to the + public bool DidChange(DynamicSharedComponentTypeHandle chunkSharedComponentData, uint version) { - return GetChangeVersion(chunkSharedComponentData); + return ChangeVersionUtility.DidChange(GetChangeVersion(chunkSharedComponentData), version); } /// @@ -491,6 +495,30 @@ public uint GetChangeVersion(SharedComponentTypeHandle chunkSharedComponen return m_Chunk->GetChangeVersion(typeIndexInArchetype); } + /// + /// Gets the change version number assigned to the specified type of shared component in this chunk. + /// + /// + /// Shared components behave differently than other types of components in terms of change versioning because + /// changing the value of a shared component can move an entity to a different chunk. If the change results + /// in an entity moving to a different chunk, then only the order version is updated (for both the original and + /// the receiving chunk). If you change the shared component value for all entities in a chunk at once, + /// the entities remain in their current chunk. The change version for that chunk is updated and the order + /// version is unaffected. + /// + /// An object containing type and job safety information. Create this + /// object by calling . + /// The current version number of the specified shared component, which is the version set the last time a system + /// accessed a component of that type in this chunk with write privileges. Returns 0 if the chunk does not contain + /// a shared component of the specified type. + public uint GetChangeVersion(DynamicSharedComponentTypeHandle chunkSharedComponentData) + { + ChunkDataUtility.GetIndexInTypeArray(m_Chunk->Archetype, chunkSharedComponentData.m_TypeIndex, ref chunkSharedComponentData.m_TypeLookupCache); + int typeIndexInArchetype = chunkSharedComponentData.m_TypeLookupCache; + if (typeIndexInArchetype == -1) return 0; + return m_Chunk->GetChangeVersion(typeIndexInArchetype); + } + /// /// Reports whether a structural change has occured in this chunk since the specified version. /// @@ -590,6 +618,35 @@ public int GetSharedComponentIndex(SharedComponentTypeHandle chunkSharedCo return sharedComponentIndex; } + /// + /// Gets the index into the array of unique values for the specified shared component. + /// + /// + /// Because shared components can contain managed types, you can only access the value index of a shared component + /// inside a job, not the value itself. The index value indexes the array returned by + /// . If desired, you can create a native + /// array that mirrors your unique value list, but which contains only unmanaged, blittable data and pass that + /// into an job. The unique value list and a specific index is only valid until a + /// structural change occurs. + /// + /// An object containing type and job safety information. Create this + /// object by calling . + /// The index value, or -1 if the chunk does not contain a shared component of the specified type. + public int GetSharedComponentIndex(DynamicSharedComponentTypeHandle chunkSharedComponentData) + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckReadAndThrow(chunkSharedComponentData.m_Safety); +#endif + var archetype = m_Chunk->Archetype; + ChunkDataUtility.GetIndexInTypeArray(archetype, chunkSharedComponentData.m_TypeIndex, ref chunkSharedComponentData.m_TypeLookupCache); + var typeIndexInArchetype = chunkSharedComponentData.m_TypeLookupCache; + if (typeIndexInArchetype == -1) return -1; + + var chunkSharedComponentIndex = typeIndexInArchetype - archetype->FirstSharedComponent; + var sharedComponentIndex = m_Chunk->GetSharedComponentValue(chunkSharedComponentIndex); + return sharedComponentIndex; + } + /// /// Gets the current value of a shared component. /// @@ -606,6 +663,24 @@ public T GetSharedComponentData(SharedComponentTypeHandle chunkSharedCompo return entityManager.GetSharedComponentData(GetSharedComponentIndex(chunkSharedComponentData)); } + /// + /// Gets the current value of a shared component. + /// + /// You cannot call this function inside a job. + /// An object containing type and job safety information. Create this + /// object by calling . + /// An EntityManager instance. + /// The shared component value. + public object GetSharedComponentDataBoxed(DynamicSharedComponentTypeHandle chunkSharedComponentData, EntityManager entityManager) + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckReadAndThrow(chunkSharedComponentData.m_Safety); +#endif + return entityManager.GetSharedComponentDataBoxed( + GetSharedComponentIndex(chunkSharedComponentData), + chunkSharedComponentData.m_TypeIndex); + } + /// /// Reports whether this chunk contains the specified component type. /// @@ -684,6 +759,22 @@ public bool Has(SharedComponentTypeHandle chunkComponentTypeHandle) return (typeIndexInArchetype != -1); } + /// + /// Reports whether this chunk contains a shared component of the specified component type. + /// + /// When an includes optional components used as shared + /// components (with ), some chunks returned by the query may have these shared + /// components and some may not. Use this function to determine whether or not the current chunk contains one of + /// these optional component types as a shared component. + /// An object containing type and job safety information. Create this + /// object by calling . + /// True, if this chunk contains a shared component of the specified type. + public bool Has(DynamicSharedComponentTypeHandle chunkComponentTypeHandle) + { + ChunkDataUtility.GetIndexInTypeArray(m_Chunk->Archetype, chunkComponentTypeHandle.m_TypeIndex, ref chunkComponentTypeHandle.m_TypeLookupCache); + return (chunkComponentTypeHandle.m_TypeLookupCache != -1); + } + /// /// Reports whether this chunk contains a dynamic buffer containing the specified component type. /// @@ -789,7 +880,7 @@ public NativeArray GetDynamicComponentDataArrayReinterpret(DynamicComponen { CheckZeroSizedGetDynamicComponentDataArrayReinterpret(chunkComponentType); #if ENABLE_UNITY_COLLECTIONS_CHECKS - AtomicSafetyHandle.CheckReadAndThrow(chunkComponentType.m_Safety); + AtomicSafetyHandle.CheckReadAndThrow(chunkComponentType.m_Safety0); #endif var archetype = m_Chunk->Archetype; ChunkDataUtility.GetIndexInTypeArray(m_Chunk->Archetype, chunkComponentType.m_TypeIndex, ref chunkComponentType.m_TypeLookupCache); @@ -799,10 +890,14 @@ public NativeArray GetDynamicComponentDataArrayReinterpret(DynamicComponen var emptyResult = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(null, 0, 0); #if ENABLE_UNITY_COLLECTIONS_CHECKS - NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref emptyResult, chunkComponentType.m_Safety); + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref emptyResult, chunkComponentType.m_Safety0); #endif return emptyResult; } +#if ENABLE_UNITY_COLLECTIONS_CHECKS + if (archetype->Types[typeIndexInArchetype].IsBuffer) + throw new ArgumentException($"ArchetypeChunk.GetDynamicComponentDataArrayReinterpret cannot be called for IBufferElementData {TypeManager.GetType(chunkComponentType.m_TypeIndex)}"); +#endif var typeSize = archetype->SizeOfs[typeIndexInArchetype]; var length = Count; @@ -820,7 +915,7 @@ public NativeArray GetDynamicComponentDataArrayReinterpret(DynamicComponen var batchStartOffset = m_BatchStartEntityIndex * archetype->SizeOfs[typeIndexInArchetype]; var result = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(ptr + batchStartOffset, outLength, Allocator.None); #if ENABLE_UNITY_COLLECTIONS_CHECKS - NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref result, chunkComponentType.m_Safety); + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref result, chunkComponentType.m_Safety0); #endif return result; } @@ -862,41 +957,6 @@ public ManagedComponentAccessor GetManagedComponentAccessor(ComponentTypeH return new ManagedComponentAccessor(indexArray, manager); } -#if UNITY_SKIP_UPDATES_WITH_VALIDATION_SUITE - [Obsolete("GetComponentObjects has been renamed to GetManagedComponentAccessor. (RemovedAfter 2020-08-01). -- please remove the UNITY_SKIP_UPDATES_WITH_VALIDATION_SUITE define in the Unity.Entities assembly definition file if this message is unexpected and you want to attempt an automatic upgrade.", false)] -#else - [Obsolete("GetComponentObjects has been renamed to GetManagedComponentAccessor. (RemovedAfter 2020-08-01). (UnityUpgradable) -> GetManagedComponentAccessor(*)", false)] -#endif - public ArchetypeChunkComponentObjects GetComponentObjects(ArchetypeChunkComponentType componentTypeHandle, EntityManager manager) - where T : class - { -#if ENABLE_UNITY_COLLECTIONS_CHECKS - AtomicSafetyHandle.CheckReadAndThrow(componentTypeHandle.m_Safety); -#endif - var archetype = m_Chunk->Archetype; - var typeIndexInArchetype = ChunkDataUtility.GetIndexInTypeArray(m_Chunk->Archetype, componentTypeHandle.m_TypeIndex); - - NativeArray indexArray; - if (typeIndexInArchetype == -1) - { - indexArray = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(null, 0, 0); - } - else - { - - byte* ptr = ChunkDataUtility.GetComponentDataRW(m_Chunk, 0, typeIndexInArchetype, componentTypeHandle.GlobalSystemVersion); - var length = Count; - var batchStartOffset = m_BatchStartEntityIndex * archetype->SizeOfs[typeIndexInArchetype]; - indexArray = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(ptr + batchStartOffset, length, Allocator.None); - } - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref indexArray, componentTypeHandle.m_Safety); -#endif - - return new ArchetypeChunkComponentObjects(indexArray, manager); - } - /// /// /// @@ -938,6 +998,50 @@ public BufferAccessor GetBufferAccessor(BufferTypeHandle bufferComponen #endif } + /// + /// Give unsafe access to the buffers with type in the chunk. + /// + /// + /// + public LowLevel.Unsafe.UnsafeUntypedBufferAccessor GetUntypedBufferAccessor(ref DynamicComponentTypeHandle chunkBufferTypeHandle) + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckReadAndThrow(chunkBufferTypeHandle.m_Safety0); +#endif + var archetype = m_Chunk->Archetype; + short typeIndexInArchetype = chunkBufferTypeHandle.m_TypeLookupCache; + ChunkDataUtility.GetIndexInTypeArray(m_Chunk->Archetype, chunkBufferTypeHandle.m_TypeIndex, ref typeIndexInArchetype); + chunkBufferTypeHandle.m_TypeLookupCache = (short)typeIndexInArchetype; + if (typeIndexInArchetype == -1) + { + return default(LowLevel.Unsafe.UnsafeUntypedBufferAccessor); + } + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + if (!archetype->Types[typeIndexInArchetype].IsBuffer) + throw new ArgumentException($"ArchetypeChunk.GetUntypedBufferAccessor must be called only for IBufferElementData types"); + //Expect the safety to be set and valid + AtomicSafetyHandle.CheckReadAndThrow(chunkBufferTypeHandle.m_Safety1); +#endif + int internalCapacity = archetype->BufferCapacities[typeIndexInArchetype]; + var typeInfo = TypeManager.GetTypeInfo(chunkBufferTypeHandle.m_TypeIndex); + byte* ptr = (chunkBufferTypeHandle.IsReadOnly) + ? ChunkDataUtility.GetComponentDataRO(m_Chunk, 0, typeIndexInArchetype) + : ChunkDataUtility.GetComponentDataRW(m_Chunk, 0, typeIndexInArchetype, chunkBufferTypeHandle.GlobalSystemVersion); + + var length = Count; + int stride = archetype->SizeOfs[typeIndexInArchetype]; + int elementSize = typeInfo.ElementSize; + int elementAlign = typeInfo.AlignmentInBytes; + var batchStartOffset = m_BatchStartEntityIndex * stride; +#if ENABLE_UNITY_COLLECTIONS_CHECKS + return new LowLevel.Unsafe.UnsafeUntypedBufferAccessor(ptr + batchStartOffset, length, stride, elementSize, elementAlign, internalCapacity, + chunkBufferTypeHandle.IsReadOnly, chunkBufferTypeHandle.m_Safety0, chunkBufferTypeHandle.m_Safety1); +#else + return new LowLevel.Unsafe.UnsafeUntypedBufferAccessor(ptr + batchStartOffset, length, stride, elementSize, elementAlign, internalCapacity); +#endif + } + #if ENABLE_DOTS_COMPILER_CHUNKS public ChunkEntitiesDescription Entities => throw new ArgumentException("Using chunk.Entities is only possible inside a entityQuery.Chunks.ForEach() lambda job."); #endif @@ -1063,6 +1167,196 @@ public DynamicBuffer this[int index] } } + namespace LowLevel.Unsafe + { + /// + /// Allow untyped access to buffers data in a chunk. The use of untyped accessor is in general + /// not recommended and should be exploited only in very specific use case scenario. + /// + public unsafe struct UnsafeUntypedBufferAccessor + { + [NativeDisableUnsafePtrRestriction] + private byte* m_Pointer; + private int m_InternalCapacity; + private int m_Stride; + private int m_Length; + private int m_ElementSize; + private int m_ElementAlign; + + #if ENABLE_UNITY_COLLECTIONS_CHECKS + private AtomicSafetyHandle m_Safety0; + private AtomicSafetyHandle m_ArrayInvalidationSafety; + #pragma warning disable 0414 // assigned but its value is never used + private int m_SafetyReadOnlyCount; + private int m_SafetyReadWriteCount; + #pragma warning restore 0414 + + #endif + + /// + /// The number of buffers in the chunk. + /// + public int Length => m_Length; + public int ElementSize => m_ElementSize; + + #if ENABLE_UNITY_COLLECTIONS_CHECKS + internal UnsafeUntypedBufferAccessor(byte* basePointer, int length, int stride, int elementSize, int elementAlign, + int internalCapacity, bool readOnly, AtomicSafetyHandle safety0, AtomicSafetyHandle arrayInvalidationSafety) + { + m_Pointer = basePointer; + m_InternalCapacity = internalCapacity; + m_ElementSize = elementSize; + m_ElementAlign = elementAlign; + m_Stride = stride; + m_Length = length; + m_Safety0 = safety0; + m_ArrayInvalidationSafety = arrayInvalidationSafety; + m_SafetyReadOnlyCount = readOnly ? 2 : 0; + m_SafetyReadWriteCount = readOnly ? 0 : 2; + } + #else + internal UnsafeUntypedBufferAccessor(byte* basePointer, int length, int stride, int elementSize, int elementAlign, int internalCapacity) + { + m_Pointer = basePointer; + m_InternalCapacity = internalCapacity; + m_ElementSize = elementSize; + m_ElementAlign = elementAlign; + m_Stride = stride; + m_Length = length; + } + #endif + [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] + private void CheckReadAccess() + { + #if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckReadAndThrow(m_Safety0); + AtomicSafetyHandle.CheckReadAndThrow(m_ArrayInvalidationSafety); + #endif + } + [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] + private void CheckWriteAccess() + { + #if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckWriteAndThrow(m_Safety0); + AtomicSafetyHandle.CheckWriteAndThrow(m_ArrayInvalidationSafety); + #endif + } + + [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] + private void AssertIndexInRange(int index) + { + if (index < 0 || index >= m_Length) + throw new InvalidOperationException($"index {index} out of range in LowLevelBufferAccessor of length {Length}"); + } + /// + /// The unsafe pointer and length for the buffer at the given in the chunk + /// + /// + /// + /// + public void* GetUnsafePtrAndLength(int index, out int length) + { + CheckWriteAccess(); + AssertIndexInRange(index); + var hdr = (BufferHeader*)(m_Pointer + index * m_Stride); + length = hdr->Length; + return BufferHeader.GetElementPointer(hdr); + } + /// + /// The unsafe pointer and length for the buffer at the given in the chunk + /// + /// + /// + /// + public void* GetUnsafeReadOnlyPtrAndLength(int index, out int length) + { + CheckReadAccess(); + AssertIndexInRange(index); + var hdr = (BufferHeader*)(m_Pointer + index * m_Stride); + length = hdr->Length; + return BufferHeader.GetElementPointer(hdr); + } + /// + /// The unsafe pointer to buffer elements at the given in the chunk + /// + /// + /// + public void* GetUnsafePtr(int index) + { + CheckWriteAccess(); + AssertIndexInRange(index); + var hdr = (BufferHeader*)(m_Pointer + index * m_Stride); + return BufferHeader.GetElementPointer(hdr); + } + + /// + /// The unsafe pointer to buffer elements at the given in the chunk + /// + /// + /// + public void* GetUnsafeReadOnlyPtr(int index) + { + CheckReadAccess(); + AssertIndexInRange(index); + var hdr = (BufferHeader*)(m_Pointer + index * m_Stride); + return BufferHeader.GetElementPointer(hdr); + } + + /// + /// Return the current size of the buffer at the given in the chunk + /// + /// + /// + public int GetBufferLength(int index) + { + CheckReadAccess(); + #if ENABLE_UNITY_COLLECTIONS_CHECKS + if(index >= m_Length) + throw new InvalidOperationException("out of bound exception. Cannot get buffer length at index {index}"); + #endif + var hdr = (BufferHeader*)(m_Pointer + index * m_Stride); + return hdr->Length; + } + /// + /// Return the current capacity of the buffer at the given in the chunk + /// + /// + /// + public int GetBufferCapacity(int index) + { + CheckReadAccess(); + #if ENABLE_UNITY_COLLECTIONS_CHECKS + if(index >= m_Length) + throw new InvalidOperationException("out of bound exception. Cannot get buffer length at index {index}"); + #endif + var hdr = (BufferHeader*)(m_Pointer + index * m_Stride); + return hdr->Capacity; + } + /// + /// Increases the buffer capacity and length of the buffer associated to the entity at the given + /// in the chunk + /// + /// If is less than the current + /// length of the buffer at index , the length of the buffer is reduced while the + /// capacity remains unchanged. + /// + /// the new length of the buffer + /// /// + public void ResizeUninitialized(int index, int length) + { + #if ENABLE_UNITY_COLLECTIONS_CHECKS + AtomicSafetyHandle.CheckWriteAndThrow(m_Safety0); + AtomicSafetyHandle.CheckWriteAndBumpSecondaryVersion(m_ArrayInvalidationSafety); + #endif + AssertIndexInRange(index); + + var headerPtr = (BufferHeader*)(m_Pointer + index * m_Stride); + BufferHeader.EnsureCapacity(headerPtr, length, m_ElementSize , m_ElementAlign, BufferHeader.TrashMode.RetainOldData, false, 0); + headerPtr->Length = length; + } + } + } + /// /// /// @@ -1151,12 +1445,15 @@ public struct DynamicComponentTypeHandle #if ENABLE_UNITY_COLLECTIONS_CHECKS private readonly int m_MinIndex; private readonly int m_MaxIndex; - internal readonly AtomicSafetyHandle m_Safety; + internal readonly AtomicSafetyHandle m_Safety0; + internal readonly AtomicSafetyHandle m_Safety1; + internal readonly int m_SafetyReadOnlyCount; + internal readonly int m_SafetyReadWriteCount; #endif #pragma warning restore 0414 #if ENABLE_UNITY_COLLECTIONS_CHECKS - internal DynamicComponentTypeHandle(ComponentType componentType, AtomicSafetyHandle safety, uint globalSystemVersion) + internal DynamicComponentTypeHandle(ComponentType componentType, AtomicSafetyHandle safety0, AtomicSafetyHandle safety1, uint globalSystemVersion) #else internal DynamicComponentTypeHandle(ComponentType componentType, uint globalSystemVersion) #endif @@ -1171,7 +1468,11 @@ internal DynamicComponentTypeHandle(ComponentType componentType, uint globalSyst #if ENABLE_UNITY_COLLECTIONS_CHECKS m_MinIndex = 0; m_MaxIndex = 0; - m_Safety = safety; + m_Safety0 = safety0; + m_Safety1 = safety1; + var numHandles = componentType.IsBuffer ? 2 : 1; + m_SafetyReadOnlyCount = m_IsReadOnly ? numHandles : 0; + m_SafetyReadWriteCount = m_IsReadOnly ? 0: numHandles; #endif } } @@ -1256,6 +1557,40 @@ internal unsafe SharedComponentTypeHandle(bool unused) m_Length = 1; m_TypeIndex = TypeManager.GetTypeIndex(); +#if ENABLE_UNITY_COLLECTIONS_CHECKS + m_MinIndex = 0; + m_MaxIndex = 0; + m_Safety = safety; +#endif + } + } + + [NativeContainer] + [NativeContainerSupportsMinMaxWriteRestriction] + public struct DynamicSharedComponentTypeHandle + { + internal readonly int m_TypeIndex; + public short m_TypeLookupCache; + +#pragma warning disable 0414 + private readonly int m_Length; +#if ENABLE_UNITY_COLLECTIONS_CHECKS + private readonly int m_MinIndex; + private readonly int m_MaxIndex; + internal readonly AtomicSafetyHandle m_Safety; +#endif +#pragma warning restore 0414 + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + internal DynamicSharedComponentTypeHandle(ComponentType componentType, AtomicSafetyHandle safety) +#else + internal unsafe DynamicSharedComponentTypeHandle(ComponentType componentType) +#endif + { + m_Length = 1; + m_TypeIndex = componentType.TypeIndex; + m_TypeLookupCache = 0; + #if ENABLE_UNITY_COLLECTIONS_CHECKS m_MinIndex = 0; m_MaxIndex = 0; diff --git a/Unity.Entities/Iterators/ArchetypeChunkArray.deprecated.cs b/Unity.Entities/Iterators/ArchetypeChunkArray.deprecated.cs deleted file mode 100644 index 58966a9c..00000000 --- a/Unity.Entities/Iterators/ArchetypeChunkArray.deprecated.cs +++ /dev/null @@ -1,256 +0,0 @@ -using System; -using System.Runtime.InteropServices; -using Unity.Collections; -using Unity.Collections.LowLevel.Unsafe; - -namespace Unity.Entities -{ - [Obsolete("ArchetypeChunkComponentType has been renamed to ComponentTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> ComponentTypeHandle", false)] - [NativeContainer] - [NativeContainerSupportsMinMaxWriteRestriction] - public struct ArchetypeChunkComponentType - { - internal readonly int m_TypeIndex; - internal readonly uint m_GlobalSystemVersion; - internal readonly bool m_IsReadOnly; - internal readonly bool m_IsZeroSized; - - public uint GlobalSystemVersion => m_GlobalSystemVersion; - public bool IsReadOnly => m_IsReadOnly; - -#pragma warning disable 0414 - private readonly int m_Length; -#if ENABLE_UNITY_COLLECTIONS_CHECKS - private readonly int m_MinIndex; - private readonly int m_MaxIndex; - internal readonly AtomicSafetyHandle m_Safety; -#endif -#pragma warning restore 0414 - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - internal ArchetypeChunkComponentType(AtomicSafetyHandle safety, bool isReadOnly, uint globalSystemVersion) -#else - internal ArchetypeChunkComponentType(bool isReadOnly, uint globalSystemVersion) -#endif - { - m_Length = 1; - m_TypeIndex = TypeManager.GetTypeIndex(); - m_IsZeroSized = TypeManager.GetTypeInfo(m_TypeIndex).IsZeroSized; - m_GlobalSystemVersion = globalSystemVersion; - m_IsReadOnly = isReadOnly; - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - m_MinIndex = 0; - m_MaxIndex = 0; - m_Safety = safety; -#endif - } - } - - [Obsolete("ArchetypeChunkComponentTypeDynamic has been renamed to DynamicComponentTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> DynamicComponentTypeHandle", false)] - [NativeContainer] - [NativeContainerSupportsMinMaxWriteRestriction] - public struct ArchetypeChunkComponentTypeDynamic - { - internal readonly int m_TypeIndex; - internal readonly uint m_GlobalSystemVersion; - internal readonly bool m_IsReadOnly; - internal readonly bool m_IsZeroSized; - public short m_TypeLookupCache; - - public uint GlobalSystemVersion => m_GlobalSystemVersion; - public bool IsReadOnly => m_IsReadOnly; - -#pragma warning disable 0414 - private readonly int m_Length; -#if ENABLE_UNITY_COLLECTIONS_CHECKS - private readonly int m_MinIndex; - private readonly int m_MaxIndex; - internal readonly AtomicSafetyHandle m_Safety; -#endif -#pragma warning restore 0414 - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - internal ArchetypeChunkComponentTypeDynamic(ComponentType componentType, AtomicSafetyHandle safety, uint globalSystemVersion) -#else - internal ArchetypeChunkComponentTypeDynamic(ComponentType componentType, uint globalSystemVersion) -#endif - { - m_Length = 1; - m_TypeIndex = componentType.TypeIndex; - m_IsZeroSized = TypeManager.GetTypeInfo(m_TypeIndex).IsZeroSized; - m_GlobalSystemVersion = globalSystemVersion; - m_IsReadOnly = componentType.AccessModeType == ComponentType.AccessMode.ReadOnly; - m_TypeLookupCache = 0; - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - m_MinIndex = 0; - m_MaxIndex = 0; - m_Safety = safety; -#endif - } - } - - [Obsolete("ArchetypeChunkBufferType has been renamed to BufferTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> BufferTypeHandle", false)] - [NativeContainer] - [NativeContainerSupportsMinMaxWriteRestriction] - public struct ArchetypeChunkBufferType - where T : struct, IBufferElementData - { - internal readonly int m_TypeIndex; - internal readonly uint m_GlobalSystemVersion; - internal readonly bool m_IsReadOnly; - - public uint GlobalSystemVersion => m_GlobalSystemVersion; - public bool IsReadOnly => m_IsReadOnly; - -#pragma warning disable 0414 - private readonly int m_Length; -#if ENABLE_UNITY_COLLECTIONS_CHECKS - private readonly int m_MinIndex; - private readonly int m_MaxIndex; - - internal AtomicSafetyHandle m_Safety0; - internal AtomicSafetyHandle m_Safety1; - internal int m_SafetyReadOnlyCount; - internal int m_SafetyReadWriteCount; -#endif -#pragma warning restore 0414 - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - internal ArchetypeChunkBufferType(AtomicSafetyHandle safety, AtomicSafetyHandle arrayInvalidationSafety, bool isReadOnly, uint globalSystemVersion) -#else - internal ArchetypeChunkBufferType(bool isReadOnly, uint globalSystemVersion) -#endif - { - m_Length = 1; - m_TypeIndex = TypeManager.GetTypeIndex(); - m_GlobalSystemVersion = globalSystemVersion; - m_IsReadOnly = isReadOnly; - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - m_MinIndex = 0; - m_MaxIndex = 0; - m_Safety0 = safety; - m_Safety1 = arrayInvalidationSafety; - m_SafetyReadOnlyCount = isReadOnly ? 2 : 0; - m_SafetyReadWriteCount = isReadOnly ? 0 : 2; -#endif - } - } - - [Obsolete("ArchetypeChunkSharedComponentType has been renamed to SharedComponentTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> SharedComponentTypeHandle", false)] - [NativeContainer] - [NativeContainerSupportsMinMaxWriteRestriction] - public struct ArchetypeChunkSharedComponentType - where T : struct, ISharedComponentData - { - internal readonly int m_TypeIndex; - -#pragma warning disable 0414 - private readonly int m_Length; -#if ENABLE_UNITY_COLLECTIONS_CHECKS - private readonly int m_MinIndex; - private readonly int m_MaxIndex; - internal readonly AtomicSafetyHandle m_Safety; -#endif -#pragma warning restore 0414 - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - internal ArchetypeChunkSharedComponentType(AtomicSafetyHandle safety) -#else - internal unsafe ArchetypeChunkSharedComponentType(bool unused) -#endif - { - m_Length = 1; - m_TypeIndex = TypeManager.GetTypeIndex(); - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - m_MinIndex = 0; - m_MaxIndex = 0; - m_Safety = safety; -#endif - } - } - - [Obsolete("ArchetypeChunkEntityType has been renamed to EntityTypeHandle (RemovedAfter 2020-08-01). (UnityUpgradable) -> EntityTypeHandle", false)] - [NativeContainer] - [NativeContainerSupportsMinMaxWriteRestriction] - public struct ArchetypeChunkEntityType - { -#pragma warning disable 0414 - private readonly int m_Length; - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - private readonly int m_MinIndex; - private readonly int m_MaxIndex; - internal readonly AtomicSafetyHandle m_Safety; -#endif -#pragma warning restore 0414 - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - internal ArchetypeChunkEntityType(AtomicSafetyHandle safety) -#else - internal unsafe ArchetypeChunkEntityType(bool unused) -#endif - { - m_Length = 1; -#if ENABLE_UNITY_COLLECTIONS_CHECKS - m_MinIndex = 0; - m_MaxIndex = 0; - m_Safety = safety; -#endif - } - } - -#if UNITY_SKIP_UPDATES_WITH_VALIDATION_SUITE - [Obsolete("ArchetypeChunkComponentObjects has been renamed to ManagedComponentAccessor (RemovedAfter 2020-08-01). -- please remove the UNITY_SKIP_UPDATES_WITH_VALIDATION_SUITE define in the Unity.Entities assembly definition file if this message is unexpected and you want to attempt an automatic upgrade.", false)] -#else - [Obsolete("ArchetypeChunkComponentObjects has been renamed to ManagedComponentAccessor (RemovedAfter 2020-08-01). (UnityUpgradable) -> ManagedComponentAccessor", false)] -#endif - [StructLayout(LayoutKind.Sequential)] - public unsafe struct ArchetypeChunkComponentObjects - where T : class - { - /// - /// - /// - NativeArray m_IndexArray; - EntityComponentStore* m_EntityComponentStore; - ManagedComponentStore m_ManagedComponentStore; - - unsafe internal ArchetypeChunkComponentObjects(NativeArray indexArray, EntityManager entityManager) - { - var access = entityManager.GetCheckedEntityDataAccess(); - var ecs = access->EntityComponentStore; - var mcs = access->ManagedComponentStore; - - m_IndexArray = indexArray; - m_EntityComponentStore = ecs; - m_ManagedComponentStore = mcs; - } - - public unsafe T this[int index] - { - get - { - // Direct access to the m_ManagedComponentData for fast iteration - // we can not cache m_ManagedComponentData directly since it can be reallocated - return (T)m_ManagedComponentStore.m_ManagedComponentData[m_IndexArray[index]]; - } - - set - { - var iManagedComponent = m_IndexArray[index]; -#if ENABLE_UNITY_COLLECTIONS_CHECKS - if (value != null && typeof(T) != value.GetType()) - throw new ArgumentException($"Assigning component value is of type: {value.GetType()} but the expected component type is: {typeof(T)}"); -#endif - m_ManagedComponentStore.UpdateManagedComponentValue(&iManagedComponent, value, ref *m_EntityComponentStore); - m_IndexArray[index] = iManagedComponent; - } - } - - public int Length => m_IndexArray.Length; - } -} diff --git a/Unity.Entities/Iterators/ArchetypeChunkArray.deprecated.cs.meta b/Unity.Entities/Iterators/ArchetypeChunkArray.deprecated.cs.meta deleted file mode 100644 index 89041a23..00000000 --- a/Unity.Entities/Iterators/ArchetypeChunkArray.deprecated.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 4f0fb971124e0476c9d5097a05ce0795 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/Unity.Entities/Iterators/BufferFromEntity.cs b/Unity.Entities/Iterators/BufferFromEntity.cs index c6ab8ec0..80251d92 100644 --- a/Unity.Entities/Iterators/BufferFromEntity.cs +++ b/Unity.Entities/Iterators/BufferFromEntity.cs @@ -60,17 +60,6 @@ internal BufferFromEntity(int typeIndex, EntityComponentStore* entityComponentSt #endif - [Obsolete("Use HasComponent() instead. Exists() will be (RemovedAfter 2020-08-20). (UnityUpgradable) -> HasComponent(*)")] - public bool Exists(Entity entity) - { -#if ENABLE_UNITY_COLLECTIONS_CHECKS - AtomicSafetyHandle.CheckReadAndThrow(m_Safety0); -#endif - //@TODO: out of bounds index checks... - - return m_EntityComponentStore->HasComponent(entity, m_TypeIndex); - } - /// /// Reports whether the specified instance still refers to a valid entity and that it has a /// buffer component of type T. diff --git a/Unity.Entities/Iterators/ChunkDataGatherJobs.cs b/Unity.Entities/Iterators/ChunkDataGatherJobs.cs index a21c7cc1..ef08e79f 100644 --- a/Unity.Entities/Iterators/ChunkDataGatherJobs.cs +++ b/Unity.Entities/Iterators/ChunkDataGatherJobs.cs @@ -166,14 +166,14 @@ public void Execute(int index) } [BurstCompile] - unsafe struct GatherEntitiesJob : IJobChunk + unsafe struct GatherEntitiesJob : IJobEntityBatchWithIndex { - public NativeArray Entities; + [NativeDisableUnsafePtrRestriction] public byte* Entities; [ReadOnly] public EntityTypeHandle EntityTypeHandle; - public void Execute(ArchetypeChunk chunk, int chunkIndex, int entityOffset) + public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) { - var destinationPtr = (Entity*)Entities.GetUnsafePtr() + entityOffset; + var destinationPtr = (Entity*)Entities + firstEntityIndex; var sourcePtr = chunk.GetNativeArray(EntityTypeHandle).GetUnsafeReadOnlyPtr(); var copySizeInBytes = sizeof(Entity) * chunk.Count; @@ -182,42 +182,42 @@ public void Execute(ArchetypeChunk chunk, int chunkIndex, int entityOffset) } [BurstCompile] - unsafe struct GatherComponentDataJob : IJobChunk + unsafe struct GatherComponentDataJob : IJobEntityBatchWithIndex { [NativeDisableUnsafePtrRestriction] public byte* ComponentData; public int TypeIndex; - public void Execute(ArchetypeChunk chunk, int chunkIndex, int entityOffset) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirstEntityInQuery) { - var archetype = chunk.Archetype.Archetype; + var archetype = batchInChunk.Archetype.Archetype; var indexInTypeArray = ChunkDataUtility.GetIndexInTypeArray(archetype, TypeIndex); var typeOffset = archetype->Offsets[indexInTypeArray]; var typeSize = archetype->SizeOfs[indexInTypeArray]; - var src = chunk.m_Chunk->Buffer + typeOffset; - var dst = ComponentData + (entityOffset * typeSize); - var copySize = typeSize * chunk.Count; + var src = batchInChunk.m_Chunk->Buffer + typeOffset; + var dst = ComponentData + (indexOfFirstEntityInQuery * typeSize); + var copySize = typeSize * batchInChunk.Count; UnsafeUtility.MemCpy(dst, src, copySize); } } [BurstCompile] - unsafe struct CopyComponentArrayToChunksJob : IJobChunk + unsafe struct CopyComponentArrayToChunksJob : IJobEntityBatchWithIndex { [NativeDisableUnsafePtrRestriction] public byte* ComponentData; public int TypeIndex; - public void Execute(ArchetypeChunk chunk, int chunkIndex, int entityOffset) + public void Execute(ArchetypeChunk batchInChunk, int batchIndex, int indexOfFirstEntityInQuery) { - var archetype = chunk.Archetype.Archetype; + var archetype = batchInChunk.Archetype.Archetype; var indexInTypeArray = ChunkDataUtility.GetIndexInTypeArray(archetype, TypeIndex); var typeOffset = archetype->Offsets[indexInTypeArray]; var typeSize = archetype->SizeOfs[indexInTypeArray]; - var dst = chunk.m_Chunk->Buffer + typeOffset; - var src = ComponentData + (entityOffset * typeSize); - var copySize = typeSize * chunk.Count; + var dst = batchInChunk.m_Chunk->Buffer + typeOffset; + var src = ComponentData + (indexOfFirstEntityInQuery * typeSize); + var copySize = typeSize * batchInChunk.Count; UnsafeUtility.MemCpy(dst, src, copySize); } diff --git a/Unity.Entities/Iterators/ChunkIterationUtility.cs b/Unity.Entities/Iterators/ChunkIterationUtility.cs index 389dfc20..eff6ab82 100644 --- a/Unity.Entities/Iterators/ChunkIterationUtility.cs +++ b/Unity.Entities/Iterators/ChunkIterationUtility.cs @@ -262,6 +262,38 @@ private static void _GatherEntities(Entity* entities,ref EntityQuery entityQuery } } + /// + /// Creates a NativeArray containing the entities in a given EntityQuery and immediately completes the job. + /// Meant only for internal use only e.g. when passing temp memory into a job when being able to assure + /// that it will complete that frame + /// + /// List of matching archetypes. + /// Allocator to use for the array. + /// An atomic safety handle required by GatherEntitiesJob so it can call GetNativeArray() on chunks. + /// EntityQuery to gather entities from. + /// number of entities to reserve for the returned NativeArray. + /// EntityQueryFilter for calculating the length of the output array. + /// Handle to a job this GatherEntitiesJob must wait on. + /// NativeArray of the entities in a given EntityQuery. + public static NativeArray CreateEntityArrayAsyncComplete(UnsafeMatchingArchetypePtrList matchingArchetypes, + Allocator allocator, + EntityTypeHandle typeHandle, + EntityQuery entityQuery, + int entityCount, + JobHandle dependsOn) + { + var entities = new NativeArray(entityCount, allocator, NativeArrayOptions.UninitializedMemory); + var job = new GatherEntitiesJob + { + EntityTypeHandle = typeHandle, + Entities = (byte*)entities.GetUnsafePtr() + }; + var jobHandle = job.Schedule(entityQuery, dependsOn); + jobHandle.Complete(); + + return entities; + } + /// /// Creates a NativeArray containing the entities in a given EntityQuery. /// @@ -286,6 +318,151 @@ public static NativeArray CreateEntityArray(UnsafeMatchingArchetypePtrLi return entities; } + + [BurstMonoInteropMethod(MakePublic = true)] + private static Entity* _CreateEntityArrayFromEntityArray( + Entity* entities, + int entityCount, + Allocator allocator, + EntityQueryData* queryData, + EntityComponentStore* ecs, + ref EntityQueryMask mask, + ref EntityTypeHandle typeHandle, + ref EntityQueryFilter filter, + out int outEntityArrayLength) + { + Entity* res = null; + if (filter.RequiresMatchesFilter) + { + var batches = new UnsafeList(Allocator.TempJob); + var matchingArchetypeIndices = new UnsafeIntList(0, Allocator.TempJob); + FindBatchesForEntityArrayWithQuery(ecs, queryData, ref filter, entities, entityCount,ref batches, ref matchingArchetypeIndices); + + outEntityArrayLength = 0; + for (int i = 0; i < batches.Length; ++i) + { + var batch = ((ArchetypeChunk*)batches.Ptr)[i]; + var match = queryData->MatchingArchetypes.Ptr[matchingArchetypeIndices.Ptr[i]]; + if (batch.m_Chunk->MatchesFilter(match, ref filter)) + outEntityArrayLength += batch.Count; + } + + res = (Entity*)Memory.Unmanaged.Allocate(UnsafeUtility.SizeOf() * outEntityArrayLength, UnsafeUtility.AlignOf(), allocator); + var entityCounter = 0; + for (int i = 0; i < batches.Length; ++i) + { + var batch = ((ArchetypeChunk*)batches.Ptr)[i]; + var match = queryData->MatchingArchetypes.Ptr[matchingArchetypeIndices.Ptr[i]]; + if (!batch.m_Chunk->MatchesFilter(match, ref filter)) + continue; + + var destinationPtr = res + entityCounter; + var sourcePtr = batch.GetNativeArray(typeHandle).GetUnsafeReadOnlyPtr(); + var copySizeInBytes = sizeof(Entity) * batch.Count; + + UnsafeUtility.MemCpy(destinationPtr, sourcePtr, copySizeInBytes); + + entityCounter += batch.Count; + } + + batches.Dispose(); + matchingArchetypeIndices.Dispose(); + } + else + { + outEntityArrayLength = CalculateEntityCountInEntityArray(entities, entityCount, queryData, ecs, ref mask, ref filter); + res = (Entity*)Memory.Unmanaged.Allocate(UnsafeUtility.SizeOf() * outEntityArrayLength, UnsafeUtility.AlignOf(), allocator); + + var entityCounter = 0; + for (int i = 0; i < entityCount; ++i) + { + var entity = entities[i]; + if (mask.Matches(entity)) + res[entityCounter++] = entity; + } + } + + return res; + } + + [BurstMonoInteropMethod(MakePublic = true)] + private static byte* _CreateComponentDataArrayFromEntityArray( + Entity* entities, + int entityCount, + Allocator allocator, + EntityQueryData* queryData, + EntityComponentStore* ecs, + int typeIndex, + int typeSizeInChunk, + int typeAlign, + ref EntityQueryMask mask, + ref EntityQueryFilter filter, + out int outEntityArrayLength) + { + byte* res = null; + if (filter.RequiresMatchesFilter) + { + var batches = new UnsafeList(Allocator.TempJob); + var matchingArchetypeIndices = new UnsafeIntList(0, Allocator.TempJob); + FindBatchesForEntityArrayWithQuery(ecs, queryData, ref filter, entities, entityCount,ref batches, ref matchingArchetypeIndices); + + outEntityArrayLength = 0; + for (int i = 0; i < batches.Length; ++i) + { + var batch = ((ArchetypeChunk*)batches.Ptr)[i]; + var match = queryData->MatchingArchetypes.Ptr[matchingArchetypeIndices.Ptr[i]]; + if (batch.m_Chunk->MatchesFilter(match, ref filter)) + outEntityArrayLength += batch.Count; + } + + res = (byte*)Memory.Unmanaged.Allocate(typeSizeInChunk * outEntityArrayLength, typeAlign, allocator); + var outDataOffsetInBytes = 0; + for (int i = 0; i < batches.Length; ++i) + { + var batch = ((ArchetypeChunk*)batches.Ptr)[i]; + var match = queryData->MatchingArchetypes.Ptr[matchingArchetypeIndices.Ptr[i]]; + if (!batch.m_Chunk->MatchesFilter(match, ref filter)) + continue; + + var archetype = batch.Archetype.Archetype; + var indexInTypeArray = ChunkDataUtility.GetIndexInTypeArray(archetype, typeIndex); + var typeOffset = archetype->Offsets[indexInTypeArray]; + + var src = batch.m_Chunk->Buffer + typeOffset; + var dst = res + (outDataOffsetInBytes * typeSizeInChunk); + var copySize = typeSizeInChunk * batch.Count; + + UnsafeUtility.MemCpy(dst, src, copySize); + outDataOffsetInBytes += copySize; + } + + batches.Dispose(); + matchingArchetypeIndices.Dispose(); + } + else + { + outEntityArrayLength = CalculateEntityCountInEntityArray(entities, entityCount, queryData, ecs, ref mask, ref filter); + res = (byte*)Memory.Unmanaged.Allocate(typeSizeInChunk * outEntityArrayLength, typeAlign, allocator); + + var outDataOffsetInBytes = 0; + for (int i = 0; i < entityCount; ++i) + { + var entity = entities[i]; + if (mask.Matches(entity)) + { + var src = ecs->GetComponentDataWithTypeRO(entity, typeIndex); + var dst = res + outDataOffsetInBytes; + var copySize = typeSizeInChunk; + + UnsafeUtility.MemCpy(dst, src, copySize); + outDataOffsetInBytes += copySize; + } + } + } + + return res; + } + /// /// Creates a NativeArray containing the entities in a given EntityQuery. /// @@ -306,14 +483,15 @@ public static NativeArray CreateEntityArrayAsync(UnsafeMatchingArchetype out JobHandle jobHandle, JobHandle dependsOn) { + var entities = new NativeArray(entityCount, allocator, NativeArrayOptions.UninitializedMemory); var job = new GatherEntitiesJob { EntityTypeHandle = typeHandle, - Entities = new NativeArray(entityCount, allocator, NativeArrayOptions.UninitializedMemory) + Entities = (byte*)entities.GetUnsafePtr() }; - jobHandle = job.Schedule(entityQuery, dependsOn); + jobHandle = job.ScheduleParallel(entityQuery, 1, dependsOn); - return job.Entities; + return entities; } [BurstMonoInteropMethod(MakePublic = false)] @@ -337,6 +515,41 @@ private static void _GatherComponentData(byte* componentData,int typeIndex, ref } } + /// + /// Creates a NativeArray with the value of a single component for all entities matching the provided query. + /// The array will be populated by a job scheduled by this function. + /// This function will not sync the needed types in the EntityQueryFilter so they have to be synced manually before calling this function. + /// Meant only for internal use only e.g. when passing temp memory into a job when being able to assure + /// that it will complete that frame + /// + /// Allocator to use for the array. + /// Type handle for the component whose values should be extracted. + /// Number of entities that match the query. Used as the output array size. + /// Entities that match this query will be included in the output. + /// Input job dependencies for the array-populating job. + /// NativeArray of all the chunks in the matchingArchetypes list. + [BurstCompatible(GenericTypeArguments = new[] { typeof(BurstCompatibleComponentData) }, RequiredUnityDefine = "UNITY_2020_2_OR_NEWER && !NET_DOTS")] + public static NativeArray CreateComponentDataArrayAsyncComplete( + Allocator allocator, + ComponentTypeHandle typeHandle, + int entityCount, + EntityQuery entityQuery, + JobHandle dependsOn) + where T : struct, IComponentData + { + var componentData = new NativeArray(entityCount, allocator, NativeArrayOptions.UninitializedMemory); + + var job = new GatherComponentDataJob + { + ComponentData = (byte*)componentData.GetUnsafePtr(), + TypeIndex = typeHandle.m_TypeIndex + }; + var jobHandle = job.Schedule(entityQuery, dependsOn); + jobHandle.Complete(); + + return componentData; + } + /// /// Creates a NativeArray with the value of a single component for all entities matching the provided query. /// The array will be populated by a job scheduled by this function. @@ -366,7 +579,7 @@ public static NativeArray CreateComponentDataArrayAsync( ComponentData = (byte*)componentData.GetUnsafePtr(), TypeIndex = typeHandle.m_TypeIndex }; - jobHandle = job.Schedule(entityQuery, dependsOn); + jobHandle = job.ScheduleParallel(entityQuery, 1, dependsOn); return componentData; } @@ -498,6 +711,26 @@ private static void _CopyComponentArrayToChunks(byte* componentData,int typeInde UnsafeUtility.MemCpy(dst, src, copySize); } } + ///Meant only for internal use only e.g. when passing temp memory into a job when being able to assure + ///that it will complete that frame + [BurstCompatible(GenericTypeArguments = new[] { typeof(BurstCompatibleComponentData) }, RequiredUnityDefine = "UNITY_2020_2_OR_NEWER && !NET_DOTS")] + public static void CopyFromComponentDataArrayAsyncComplete(UnsafeMatchingArchetypePtrList matchingArchetypes, + NativeArray componentDataArray, + ComponentTypeHandle typeHandle, + EntityQuery entityQuery, + ref EntityQueryFilter filter, + JobHandle dependsOn) + where T : struct, IComponentData + { + var job = new CopyComponentArrayToChunksJob + { + ComponentData = (byte*)componentDataArray.GetUnsafePtr(), + TypeIndex = typeHandle.m_TypeIndex + }; + var jobHandle = job.Schedule(entityQuery, dependsOn); + jobHandle.Complete(); + } + [BurstCompatible(GenericTypeArguments = new[] { typeof(BurstCompatibleComponentData) }, RequiredUnityDefine = "UNITY_2020_2_OR_NEWER && !NET_DOTS")] public static void CopyFromComponentDataArrayAsync(UnsafeMatchingArchetypePtrList matchingArchetypes, @@ -664,6 +897,88 @@ private static int _CalculateEntityCount(ref UnsafeMatchingArchetypePtrList matc return length; } + [BurstMonoInteropMethod(MakePublic = true)] + private static int _CalculateEntityCountInEntityArray( + Entity* entities, + int entityCount, + EntityQueryData* queryData, + EntityComponentStore* ecs, + ref EntityQueryMask mask, + ref EntityQueryFilter filter) + { + var length = 0; + if (filter.RequiresMatchesFilter) + { + var batches = new UnsafeList(Allocator.TempJob); + var matchingArchetypeIndices = new UnsafeIntList(0, Allocator.TempJob); + FindBatchesForEntityArrayWithQuery(ecs, queryData, ref filter, entities, entityCount,ref batches, ref matchingArchetypeIndices); + + for (int i = 0; i < batches.Length; ++i) + { + var batch = ((ArchetypeChunk*)batches.Ptr)[i]; + var match = queryData->MatchingArchetypes.Ptr[matchingArchetypeIndices.Ptr[i]]; + if (batch.m_Chunk->MatchesFilter(match, ref filter)) + length += batch.Count; + } + + batches.Dispose(); + matchingArchetypeIndices.Dispose(); + } + else + { + for (int i = 0; i < entityCount; ++i) + { + if (mask.Matches(entities[i])) + length++; + } + } + + return length; + } + + [BurstMonoInteropMethod(MakePublic = true)] + private static bool _MatchesAnyInEntityArray( + Entity* entities, + int entityCount, + EntityQueryData* queryData, + EntityComponentStore* ecs, + ref EntityQueryMask mask, + ref EntityQueryFilter filter) + { + if (filter.RequiresMatchesFilter) + { + var batches = new UnsafeList(Allocator.TempJob); + var matchingArchetypeIndices = new UnsafeIntList(0, Allocator.TempJob); + FindBatchesForEntityArrayWithQuery(ecs, queryData, ref filter, entities, entityCount,ref batches, ref matchingArchetypeIndices); + + var ret = false; + for (int i = 0; i < batches.Length; ++i) + { + var batch = ((ArchetypeChunk*)batches.Ptr)[i]; + var match = queryData->MatchingArchetypes.Ptr[matchingArchetypeIndices.Ptr[i]]; + if (batch.m_Chunk->MatchesFilter(match, ref filter)) + { + ret = true; + break; + } + } + + batches.Dispose(); + matchingArchetypeIndices.Dispose(); + return ret; + } + else + { + for (int i = 0; i < entityCount; ++i) + { + if (mask.Matches(entities[i])) + return true; + } + } + + return false; + } + [BurstMonoInteropMethod(MakePublic = true)] static void _RebuildChunkListCache(EntityQueryData* queryData) { @@ -784,5 +1099,115 @@ internal static void UnpackPrefilterData(NativeArray prefilterData, out Ar Assert.IsTrue(filteredChunkCount >= 0); entityOffsets = (int*)(chunks + filteredChunkCount); } + + private static bool FindNextMatchingBatchStart(EntityQueryMask mask, Entity* entities, int totalEntityCount, ref int currentIndexInEntityArray) + { + for (; currentIndexInEntityArray < totalEntityCount; ++currentIndexInEntityArray) + { + var currentEntity = entities[currentIndexInEntityArray]; + + if (mask.Matches(currentEntity)) + return true; + } + + return false; + } + + [BurstMonoInteropMethod(MakePublic = true)] + static void _FindFilteredBatchesForEntityArrayWithQuery( + EntityQueryImpl* query, + Entity* entities, int entityCount, + ref UnsafeList batches) + { + var queryImpl = query->_Access; + + var data = query->_QueryData; + var ecs = query->_Access->EntityComponentStore; + var queryMask = queryImpl->EntityQueryManager->GetEntityQueryMask(query->_QueryData, ecs); + + ref var filter = ref query->_Filter; + var isFiltering = filter.RequiresMatchesFilter; + + // Start first batch + var currentIndexInEntityArray = 0; + while (FindNextMatchingBatchStart(queryMask, entities, entityCount, ref currentIndexInEntityArray)) + { + var batchStartEntityInChunk = ecs->GetEntityInChunk(entities[currentIndexInEntityArray++]); + + var currentBatchChunk = batchStartEntityInChunk.Chunk; + var currentBatchStartIndex = batchStartEntityInChunk.IndexInChunk; + var currentBatchCounter = 1; + + for (; currentIndexInEntityArray < entityCount; ++currentIndexInEntityArray, currentBatchCounter++) + { + var currentEntityInChunk = ecs->GetEntityInChunk(entities[currentIndexInEntityArray]); + + // Check if we're looking at the next entity in the same chunk + if (currentEntityInChunk.Chunk != currentBatchChunk || currentEntityInChunk.IndexInChunk != currentBatchStartIndex + currentBatchCounter) + break; + } + + if (isFiltering) + { + var matchingArchetypeIndex = EntityQueryManager.FindMatchingArchetypeIndexForArchetype(ref data->MatchingArchetypes, currentBatchChunk->Archetype); + if (currentBatchChunk->MatchesFilter(data->MatchingArchetypes.Ptr[matchingArchetypeIndex], ref filter)) + continue; + } + + // Finish the batch + batches.Add(new ArchetypeChunk + { + m_Chunk = currentBatchChunk, + m_EntityComponentStore = ecs, + m_BatchStartEntityIndex = currentBatchStartIndex, + m_BatchEntityCount = currentBatchCounter + }); + } + } + + [BurstMonoInteropMethod(MakePublic = true)] + static void _FindBatchesForEntityArrayWithQuery( + EntityComponentStore* ecs, + EntityQueryData* data, + ref EntityQueryFilter filter, + Entity* entities, + int entityCount, + ref UnsafeList batches, + ref UnsafeIntList perBatchMatchingArchetypeIndex) + { + var isFiltering = filter.RequiresMatchesFilter; + + // Start first batch + var currentIndexInEntityArray = 0; + while (FindNextMatchingBatchStart(data->EntityQueryMask, entities, entityCount, ref currentIndexInEntityArray)) + { + var batchStartEntityInChunk = ecs->GetEntityInChunk(entities[currentIndexInEntityArray++]); + + var currentBatchChunk = batchStartEntityInChunk.Chunk; + var currentBatchStartIndex = batchStartEntityInChunk.IndexInChunk; + var currentBatchCounter = 1; + + for (; currentIndexInEntityArray < entityCount; ++currentIndexInEntityArray, currentBatchCounter++) + { + var currentEntityInChunk = ecs->GetEntityInChunk(entities[currentIndexInEntityArray]); + + // Check if we're looking at the next entity in the same chunk + if (currentEntityInChunk.Chunk != currentBatchChunk || currentEntityInChunk.IndexInChunk != currentBatchStartIndex + currentBatchCounter) + break; + } + + // Finish the batch + batches.Add(new ArchetypeChunk + { + m_Chunk = currentBatchChunk, + m_EntityComponentStore = ecs, + m_BatchStartEntityIndex = currentBatchStartIndex, + m_BatchEntityCount = currentBatchCounter + }); + + if(isFiltering) + perBatchMatchingArchetypeIndex.Add(EntityQueryManager.FindMatchingArchetypeIndexForArchetype(ref data->MatchingArchetypes, currentBatchChunk->Archetype)); + } + } } } diff --git a/Unity.Entities/Iterators/ChunkIterationUtility.interop.gen.cs b/Unity.Entities/Iterators/ChunkIterationUtility.interop.gen.cs index 4a379c7a..e4ae2c38 100644 --- a/Unity.Entities/Iterators/ChunkIterationUtility.interop.gen.cs +++ b/Unity.Entities/Iterators/ChunkIterationUtility.interop.gen.cs @@ -22,7 +22,7 @@ namespace Unity.Entities unsafe partial struct ChunkIterationUtility { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstDiscard] private static void CheckDelegate(ref bool useDelegate) @@ -50,6 +50,10 @@ static class Managed public static _dlg_JoinChunks _bfp_JoinChunks; public delegate void _dlg_GatherEntities(IntPtr entities, ref EntityQuery entityQuery, ref EntityTypeHandle entityTypeHandle); public static _dlg_GatherEntities _bfp_GatherEntities; + public delegate Entity* _dlg_CreateEntityArrayFromEntityArray(IntPtr entities, int entityCount, Allocator allocator, IntPtr queryData, IntPtr ecs, ref EntityQueryMask mask, ref EntityTypeHandle typeHandle, ref EntityQueryFilter filter, out int outEntityArrayLength); + public static _dlg_CreateEntityArrayFromEntityArray _bfp_CreateEntityArrayFromEntityArray; + public delegate byte* _dlg_CreateComponentDataArrayFromEntityArray(IntPtr entities, int entityCount, Allocator allocator, IntPtr queryData, IntPtr ecs, int typeIndex, int typeSizeInChunk, int typeAlign, ref EntityQueryMask mask, ref EntityQueryFilter filter, out int outEntityArrayLength); + public static _dlg_CreateComponentDataArrayFromEntityArray _bfp_CreateComponentDataArrayFromEntityArray; public delegate void _dlg_GatherComponentData(IntPtr componentData, int typeIndex, ref ArchetypeChunkIterator chunkIter); public static _dlg_GatherComponentData _bfp_GatherComponentData; public delegate void _dlg_CopyComponentArrayToChunks(IntPtr componentData, int typeIndex, ref ArchetypeChunkIterator chunkIter); @@ -60,8 +64,16 @@ static class Managed public static _dlg_CalculateChunkCount _bfp_CalculateChunkCount; public delegate int _dlg_CalculateEntityCount(ref UnsafeMatchingArchetypePtrList matchingArchetypes, ref EntityQueryFilter filter); public static _dlg_CalculateEntityCount _bfp_CalculateEntityCount; + public delegate int _dlg_CalculateEntityCountInEntityArray(IntPtr entities, int entityCount, IntPtr queryData, IntPtr ecs, ref EntityQueryMask mask, ref EntityQueryFilter filter); + public static _dlg_CalculateEntityCountInEntityArray _bfp_CalculateEntityCountInEntityArray; + public delegate bool _dlg_MatchesAnyInEntityArray(IntPtr entities, int entityCount, IntPtr queryData, IntPtr ecs, ref EntityQueryMask mask, ref EntityQueryFilter filter); + public static _dlg_MatchesAnyInEntityArray _bfp_MatchesAnyInEntityArray; public delegate void _dlg_RebuildChunkListCache(IntPtr queryData); public static _dlg_RebuildChunkListCache _bfp_RebuildChunkListCache; + public delegate void _dlg_FindFilteredBatchesForEntityArrayWithQuery(IntPtr query, IntPtr entities, int entityCount, ref Unity.Collections.LowLevel.Unsafe.UnsafeList batches); + public static _dlg_FindFilteredBatchesForEntityArrayWithQuery _bfp_FindFilteredBatchesForEntityArrayWithQuery; + public delegate void _dlg_FindBatchesForEntityArrayWithQuery(IntPtr ecs, IntPtr data, ref EntityQueryFilter filter, IntPtr entities, int entityCount, ref Unity.Collections.LowLevel.Unsafe.UnsafeList batches, ref UnsafeIntList perBatchMatchingArchetypeIndex); + public static _dlg_FindBatchesForEntityArrayWithQuery _bfp_FindBatchesForEntityArrayWithQuery; } @@ -70,7 +82,7 @@ static class Managed [NotBurstCompatible] internal static void Initialize() { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (Managed._initialized) return; Managed._initialized = true; @@ -78,19 +90,25 @@ internal static void Initialize() Managed._bfp_GatherChunksWithFilter = BurstCompiler.CompileFunctionPointer(_mono_to_burst_GatherChunksWithFilter).Invoke; Managed._bfp_JoinChunks = BurstCompiler.CompileFunctionPointer(_mono_to_burst_JoinChunks).Invoke; Managed._bfp_GatherEntities = BurstCompiler.CompileFunctionPointer(_mono_to_burst_GatherEntities).Invoke; + Managed._bfp_CreateEntityArrayFromEntityArray = BurstCompiler.CompileFunctionPointer(_mono_to_burst_CreateEntityArrayFromEntityArray).Invoke; + Managed._bfp_CreateComponentDataArrayFromEntityArray = BurstCompiler.CompileFunctionPointer(_mono_to_burst_CreateComponentDataArrayFromEntityArray).Invoke; Managed._bfp_GatherComponentData = BurstCompiler.CompileFunctionPointer(_mono_to_burst_GatherComponentData).Invoke; Managed._bfp_CopyComponentArrayToChunks = BurstCompiler.CompileFunctionPointer(_mono_to_burst_CopyComponentArrayToChunks).Invoke; Managed._bfp_CalculateChunkAndEntityCount = BurstCompiler.CompileFunctionPointer(_mono_to_burst_CalculateChunkAndEntityCount).Invoke; Managed._bfp_CalculateChunkCount = BurstCompiler.CompileFunctionPointer(_mono_to_burst_CalculateChunkCount).Invoke; Managed._bfp_CalculateEntityCount = BurstCompiler.CompileFunctionPointer(_mono_to_burst_CalculateEntityCount).Invoke; + Managed._bfp_CalculateEntityCountInEntityArray = BurstCompiler.CompileFunctionPointer(_mono_to_burst_CalculateEntityCountInEntityArray).Invoke; + Managed._bfp_MatchesAnyInEntityArray = BurstCompiler.CompileFunctionPointer(_mono_to_burst_MatchesAnyInEntityArray).Invoke; Managed._bfp_RebuildChunkListCache = BurstCompiler.CompileFunctionPointer(_mono_to_burst_RebuildChunkListCache).Invoke; + Managed._bfp_FindFilteredBatchesForEntityArrayWithQuery = BurstCompiler.CompileFunctionPointer(_mono_to_burst_FindFilteredBatchesForEntityArrayWithQuery).Invoke; + Managed._bfp_FindBatchesForEntityArrayWithQuery = BurstCompiler.CompileFunctionPointer(_mono_to_burst_FindBatchesForEntityArrayWithQuery).Invoke; #endif } private static void GatherChunks (in UnsafeMatchingArchetypePtrList matchingArchetypesList, int* offsets, ArchetypeChunk* chunks) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_GatherChunks(in matchingArchetypesList, offsets, chunks); @@ -101,7 +119,7 @@ private static void GatherChunks (in UnsafeMatchingArchetypePtrList matchingArc _GatherChunks(in matchingArchetypesList, offsets, chunks); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_GatherChunks))] private static void _mono_to_burst_GatherChunks(in UnsafeMatchingArchetypePtrList matchingArchetypesList, IntPtr offsets, IntPtr chunks) @@ -118,7 +136,7 @@ private static void _forward_mono_GatherChunks(in UnsafeMatchingArchetypePtrList private static void GatherChunksWithFilter (in UnsafeMatchingArchetypePtrList matchingArchetypePtrList, ref EntityQueryFilter filter, int* offsets, int* filteredCounts, ArchetypeChunk* sparseChunks) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_GatherChunksWithFilter(in matchingArchetypePtrList, ref filter, offsets, filteredCounts, sparseChunks); @@ -129,7 +147,7 @@ private static void GatherChunksWithFilter (in UnsafeMatchingArchetypePtrList m _GatherChunksWithFilter(in matchingArchetypePtrList, ref filter, offsets, filteredCounts, sparseChunks); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_GatherChunksWithFilter))] private static void _mono_to_burst_GatherChunksWithFilter(in UnsafeMatchingArchetypePtrList matchingArchetypePtrList, ref EntityQueryFilter filter, IntPtr offsets, IntPtr filteredCounts, IntPtr sparseChunks) @@ -146,7 +164,7 @@ private static void _forward_mono_GatherChunksWithFilter(in UnsafeMatchingArchet private static void JoinChunks (int* DestinationOffsets, ArchetypeChunk* SparseChunks, int* Offsets, ArchetypeChunk* JoinedChunks, int archetypeCount) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_JoinChunks(DestinationOffsets, SparseChunks, Offsets, JoinedChunks, archetypeCount); @@ -157,7 +175,7 @@ private static void JoinChunks (int* DestinationOffsets, ArchetypeChunk* Sparse _JoinChunks(DestinationOffsets, SparseChunks, Offsets, JoinedChunks, archetypeCount); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_JoinChunks))] private static void _mono_to_burst_JoinChunks(IntPtr DestinationOffsets, IntPtr SparseChunks, IntPtr Offsets, IntPtr JoinedChunks, int archetypeCount) @@ -174,7 +192,7 @@ private static void _forward_mono_JoinChunks(int* DestinationOffsets, ArchetypeC private static void GatherEntities (Entity* entities, ref EntityQuery entityQuery, ref EntityTypeHandle entityTypeHandle) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_GatherEntities(entities, ref entityQuery, ref entityTypeHandle); @@ -185,7 +203,7 @@ private static void GatherEntities (Entity* entities, ref EntityQuery entityQue _GatherEntities(entities, ref entityQuery, ref entityTypeHandle); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_GatherEntities))] private static void _mono_to_burst_GatherEntities(IntPtr entities, ref EntityQuery entityQuery, ref EntityTypeHandle entityTypeHandle) @@ -200,9 +218,67 @@ private static void _forward_mono_GatherEntities(Entity* entities, ref EntityQue } #endif + public static Entity* CreateEntityArrayFromEntityArray (Entity* entities, int entityCount, Allocator allocator, EntityQueryData* queryData, EntityComponentStore* ecs, ref EntityQueryMask mask, ref EntityTypeHandle typeHandle, ref EntityQueryFilter filter, out int outEntityArrayLength) + { +#if !UNITY_IOS + if (UseDelegate()) + { + var _retval = default(Entity*); + _forward_mono_CreateEntityArrayFromEntityArray(ref _retval, entities, entityCount, allocator, queryData, ecs, ref mask, ref typeHandle, ref filter, out outEntityArrayLength); + return _retval; + } +#endif + + return _CreateEntityArrayFromEntityArray(entities, entityCount, allocator, queryData, ecs, ref mask, ref typeHandle, ref filter, out outEntityArrayLength); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_CreateEntityArrayFromEntityArray))] + private static Entity* _mono_to_burst_CreateEntityArrayFromEntityArray(IntPtr entities, int entityCount, Allocator allocator, IntPtr queryData, IntPtr ecs, ref EntityQueryMask mask, ref EntityTypeHandle typeHandle, ref EntityQueryFilter filter, out int outEntityArrayLength) + { + return _CreateEntityArrayFromEntityArray((Entity*)entities, entityCount, allocator, (EntityQueryData*)queryData, (EntityComponentStore*)ecs, ref mask, ref typeHandle, ref filter, out outEntityArrayLength); + } + + [BurstDiscard] + private static void _forward_mono_CreateEntityArrayFromEntityArray(ref Entity* _retval, Entity* entities, int entityCount, Allocator allocator, EntityQueryData* queryData, EntityComponentStore* ecs, ref EntityQueryMask mask, ref EntityTypeHandle typeHandle, ref EntityQueryFilter filter, out int outEntityArrayLength) + { + _retval = Managed._bfp_CreateEntityArrayFromEntityArray((IntPtr) entities, entityCount, allocator, (IntPtr) queryData, (IntPtr) ecs, ref mask, ref typeHandle, ref filter, out outEntityArrayLength); + } +#endif + + public static byte* CreateComponentDataArrayFromEntityArray (Entity* entities, int entityCount, Allocator allocator, EntityQueryData* queryData, EntityComponentStore* ecs, int typeIndex, int typeSizeInChunk, int typeAlign, ref EntityQueryMask mask, ref EntityQueryFilter filter, out int outEntityArrayLength) + { +#if !UNITY_IOS + if (UseDelegate()) + { + var _retval = default(byte*); + _forward_mono_CreateComponentDataArrayFromEntityArray(ref _retval, entities, entityCount, allocator, queryData, ecs, typeIndex, typeSizeInChunk, typeAlign, ref mask, ref filter, out outEntityArrayLength); + return _retval; + } +#endif + + return _CreateComponentDataArrayFromEntityArray(entities, entityCount, allocator, queryData, ecs, typeIndex, typeSizeInChunk, typeAlign, ref mask, ref filter, out outEntityArrayLength); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_CreateComponentDataArrayFromEntityArray))] + private static byte* _mono_to_burst_CreateComponentDataArrayFromEntityArray(IntPtr entities, int entityCount, Allocator allocator, IntPtr queryData, IntPtr ecs, int typeIndex, int typeSizeInChunk, int typeAlign, ref EntityQueryMask mask, ref EntityQueryFilter filter, out int outEntityArrayLength) + { + return _CreateComponentDataArrayFromEntityArray((Entity*)entities, entityCount, allocator, (EntityQueryData*)queryData, (EntityComponentStore*)ecs, typeIndex, typeSizeInChunk, typeAlign, ref mask, ref filter, out outEntityArrayLength); + } + + [BurstDiscard] + private static void _forward_mono_CreateComponentDataArrayFromEntityArray(ref byte* _retval, Entity* entities, int entityCount, Allocator allocator, EntityQueryData* queryData, EntityComponentStore* ecs, int typeIndex, int typeSizeInChunk, int typeAlign, ref EntityQueryMask mask, ref EntityQueryFilter filter, out int outEntityArrayLength) + { + _retval = Managed._bfp_CreateComponentDataArrayFromEntityArray((IntPtr) entities, entityCount, allocator, (IntPtr) queryData, (IntPtr) ecs, typeIndex, typeSizeInChunk, typeAlign, ref mask, ref filter, out outEntityArrayLength); + } +#endif + private static void GatherComponentData (byte* componentData, int typeIndex, ref ArchetypeChunkIterator chunkIter) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_GatherComponentData(componentData, typeIndex, ref chunkIter); @@ -213,7 +289,7 @@ private static void GatherComponentData (byte* componentData, int typeIndex, re _GatherComponentData(componentData, typeIndex, ref chunkIter); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_GatherComponentData))] private static void _mono_to_burst_GatherComponentData(IntPtr componentData, int typeIndex, ref ArchetypeChunkIterator chunkIter) @@ -230,7 +306,7 @@ private static void _forward_mono_GatherComponentData(byte* componentData, int t public static void CopyComponentArrayToChunks (byte* componentData, int typeIndex, ref ArchetypeChunkIterator chunkIter) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_CopyComponentArrayToChunks(componentData, typeIndex, ref chunkIter); @@ -241,7 +317,7 @@ public static void CopyComponentArrayToChunks (byte* componentData, int typeInd _CopyComponentArrayToChunks(componentData, typeIndex, ref chunkIter); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_CopyComponentArrayToChunks))] private static void _mono_to_burst_CopyComponentArrayToChunks(IntPtr componentData, int typeIndex, ref ArchetypeChunkIterator chunkIter) @@ -258,7 +334,7 @@ private static void _forward_mono_CopyComponentArrayToChunks(byte* componentData public static int CalculateChunkAndEntityCount (ref UnsafeMatchingArchetypePtrList matchingArchetypes, ref EntityQueryFilter filter, out int chunkCount) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { var _retval = default(int); @@ -270,7 +346,7 @@ public static int CalculateChunkAndEntityCount (ref UnsafeMatchingArchetypePtrL return _CalculateChunkAndEntityCount(ref matchingArchetypes, ref filter, out chunkCount); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_CalculateChunkAndEntityCount))] private static int _mono_to_burst_CalculateChunkAndEntityCount(ref UnsafeMatchingArchetypePtrList matchingArchetypes, ref EntityQueryFilter filter, out int chunkCount) @@ -287,7 +363,7 @@ private static void _forward_mono_CalculateChunkAndEntityCount(ref int _retval, public static int CalculateChunkCount (ref UnsafeMatchingArchetypePtrList matchingArchetypes, ref EntityQueryFilter filter) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { var _retval = default(int); @@ -299,7 +375,7 @@ public static int CalculateChunkCount (ref UnsafeMatchingArchetypePtrList match return _CalculateChunkCount(ref matchingArchetypes, ref filter); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_CalculateChunkCount))] private static int _mono_to_burst_CalculateChunkCount(ref UnsafeMatchingArchetypePtrList matchingArchetypes, ref EntityQueryFilter filter) @@ -316,7 +392,7 @@ private static void _forward_mono_CalculateChunkCount(ref int _retval, ref Unsaf public static int CalculateEntityCount (ref UnsafeMatchingArchetypePtrList matchingArchetypes, ref EntityQueryFilter filter) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { var _retval = default(int); @@ -328,7 +404,7 @@ public static int CalculateEntityCount (ref UnsafeMatchingArchetypePtrList matc return _CalculateEntityCount(ref matchingArchetypes, ref filter); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_CalculateEntityCount))] private static int _mono_to_burst_CalculateEntityCount(ref UnsafeMatchingArchetypePtrList matchingArchetypes, ref EntityQueryFilter filter) @@ -343,9 +419,67 @@ private static void _forward_mono_CalculateEntityCount(ref int _retval, ref Unsa } #endif + public static int CalculateEntityCountInEntityArray (Entity* entities, int entityCount, EntityQueryData* queryData, EntityComponentStore* ecs, ref EntityQueryMask mask, ref EntityQueryFilter filter) + { +#if !UNITY_IOS + if (UseDelegate()) + { + var _retval = default(int); + _forward_mono_CalculateEntityCountInEntityArray(ref _retval, entities, entityCount, queryData, ecs, ref mask, ref filter); + return _retval; + } +#endif + + return _CalculateEntityCountInEntityArray(entities, entityCount, queryData, ecs, ref mask, ref filter); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_CalculateEntityCountInEntityArray))] + private static int _mono_to_burst_CalculateEntityCountInEntityArray(IntPtr entities, int entityCount, IntPtr queryData, IntPtr ecs, ref EntityQueryMask mask, ref EntityQueryFilter filter) + { + return _CalculateEntityCountInEntityArray((Entity*)entities, entityCount, (EntityQueryData*)queryData, (EntityComponentStore*)ecs, ref mask, ref filter); + } + + [BurstDiscard] + private static void _forward_mono_CalculateEntityCountInEntityArray(ref int _retval, Entity* entities, int entityCount, EntityQueryData* queryData, EntityComponentStore* ecs, ref EntityQueryMask mask, ref EntityQueryFilter filter) + { + _retval = Managed._bfp_CalculateEntityCountInEntityArray((IntPtr) entities, entityCount, (IntPtr) queryData, (IntPtr) ecs, ref mask, ref filter); + } +#endif + + public static bool MatchesAnyInEntityArray (Entity* entities, int entityCount, EntityQueryData* queryData, EntityComponentStore* ecs, ref EntityQueryMask mask, ref EntityQueryFilter filter) + { +#if !UNITY_IOS + if (UseDelegate()) + { + var _retval = default(bool); + _forward_mono_MatchesAnyInEntityArray(ref _retval, entities, entityCount, queryData, ecs, ref mask, ref filter); + return _retval; + } +#endif + + return _MatchesAnyInEntityArray(entities, entityCount, queryData, ecs, ref mask, ref filter); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_MatchesAnyInEntityArray))] + private static bool _mono_to_burst_MatchesAnyInEntityArray(IntPtr entities, int entityCount, IntPtr queryData, IntPtr ecs, ref EntityQueryMask mask, ref EntityQueryFilter filter) + { + return _MatchesAnyInEntityArray((Entity*)entities, entityCount, (EntityQueryData*)queryData, (EntityComponentStore*)ecs, ref mask, ref filter); + } + + [BurstDiscard] + private static void _forward_mono_MatchesAnyInEntityArray(ref bool _retval, Entity* entities, int entityCount, EntityQueryData* queryData, EntityComponentStore* ecs, ref EntityQueryMask mask, ref EntityQueryFilter filter) + { + _retval = Managed._bfp_MatchesAnyInEntityArray((IntPtr) entities, entityCount, (IntPtr) queryData, (IntPtr) ecs, ref mask, ref filter); + } +#endif + public static void RebuildChunkListCache (EntityQueryData* queryData) { -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS if (UseDelegate()) { _forward_mono_RebuildChunkListCache(queryData); @@ -356,7 +490,7 @@ public static void RebuildChunkListCache (EntityQueryData* queryData) _RebuildChunkListCache(queryData); } -#if !(UNITY_2020_1_OR_NEWER && UNITY_IOS) +#if !UNITY_IOS [BurstCompile] [MonoPInvokeCallback(typeof(Managed._dlg_RebuildChunkListCache))] private static void _mono_to_burst_RebuildChunkListCache(IntPtr queryData) @@ -371,6 +505,62 @@ private static void _forward_mono_RebuildChunkListCache(EntityQueryData* queryDa } #endif + public static void FindFilteredBatchesForEntityArrayWithQuery (EntityQueryImpl* query, Entity* entities, int entityCount, ref Unity.Collections.LowLevel.Unsafe.UnsafeList batches) + { +#if !UNITY_IOS + if (UseDelegate()) + { + _forward_mono_FindFilteredBatchesForEntityArrayWithQuery(query, entities, entityCount, ref batches); + return; + } +#endif + + _FindFilteredBatchesForEntityArrayWithQuery(query, entities, entityCount, ref batches); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_FindFilteredBatchesForEntityArrayWithQuery))] + private static void _mono_to_burst_FindFilteredBatchesForEntityArrayWithQuery(IntPtr query, IntPtr entities, int entityCount, ref Unity.Collections.LowLevel.Unsafe.UnsafeList batches) + { + _FindFilteredBatchesForEntityArrayWithQuery((EntityQueryImpl*)query, (Entity*)entities, entityCount, ref batches); + } + + [BurstDiscard] + private static void _forward_mono_FindFilteredBatchesForEntityArrayWithQuery(EntityQueryImpl* query, Entity* entities, int entityCount, ref Unity.Collections.LowLevel.Unsafe.UnsafeList batches) + { + Managed._bfp_FindFilteredBatchesForEntityArrayWithQuery((IntPtr) query, (IntPtr) entities, entityCount, ref batches); + } +#endif + + public static void FindBatchesForEntityArrayWithQuery (EntityComponentStore* ecs, EntityQueryData* data, ref EntityQueryFilter filter, Entity* entities, int entityCount, ref Unity.Collections.LowLevel.Unsafe.UnsafeList batches, ref UnsafeIntList perBatchMatchingArchetypeIndex) + { +#if !UNITY_IOS + if (UseDelegate()) + { + _forward_mono_FindBatchesForEntityArrayWithQuery(ecs, data, ref filter, entities, entityCount, ref batches, ref perBatchMatchingArchetypeIndex); + return; + } +#endif + + _FindBatchesForEntityArrayWithQuery(ecs, data, ref filter, entities, entityCount, ref batches, ref perBatchMatchingArchetypeIndex); + } + +#if !UNITY_IOS + [BurstCompile] + [MonoPInvokeCallback(typeof(Managed._dlg_FindBatchesForEntityArrayWithQuery))] + private static void _mono_to_burst_FindBatchesForEntityArrayWithQuery(IntPtr ecs, IntPtr data, ref EntityQueryFilter filter, IntPtr entities, int entityCount, ref Unity.Collections.LowLevel.Unsafe.UnsafeList batches, ref UnsafeIntList perBatchMatchingArchetypeIndex) + { + _FindBatchesForEntityArrayWithQuery((EntityComponentStore*)ecs, (EntityQueryData*)data, ref filter, (Entity*)entities, entityCount, ref batches, ref perBatchMatchingArchetypeIndex); + } + + [BurstDiscard] + private static void _forward_mono_FindBatchesForEntityArrayWithQuery(EntityComponentStore* ecs, EntityQueryData* data, ref EntityQueryFilter filter, Entity* entities, int entityCount, ref Unity.Collections.LowLevel.Unsafe.UnsafeList batches, ref UnsafeIntList perBatchMatchingArchetypeIndex) + { + Managed._bfp_FindBatchesForEntityArrayWithQuery((IntPtr) ecs, (IntPtr) data, ref filter, (IntPtr) entities, entityCount, ref batches, ref perBatchMatchingArchetypeIndex); + } +#endif + diff --git a/Unity.Entities/Iterators/ComponentDataFromEntity.cs b/Unity.Entities/Iterators/ComponentDataFromEntity.cs index 323be29a..3d64ec1c 100644 --- a/Unity.Entities/Iterators/ComponentDataFromEntity.cs +++ b/Unity.Entities/Iterators/ComponentDataFromEntity.cs @@ -70,26 +70,6 @@ internal ComponentDataFromEntity(int typeIndex, EntityComponentStore* entityComp #endif - - /// - /// Reports whether the specified instance still refers to a valid entity and that it has a - /// component of type T. - /// - /// The entity. - /// True if the entity has a component of type T, and false if it does not. Also returns false if - /// the Entity instance refers to an entity that has been destroyed. - /// To report if the provided entity has a component of type T, this function confirms - /// whether the of the provided entity includes components of type T. - /// - [Obsolete("Use HasComponent() instead. Exists() will be (RemovedAfter 2020-08-20). (UnityUpgradable) -> HasComponent(*)")] - public bool Exists(Entity entity) - { -#if ENABLE_UNITY_COLLECTIONS_CHECKS - AtomicSafetyHandle.CheckReadAndThrow(m_Safety); -#endif - return m_EntityComponentStore->HasComponent(entity, m_TypeIndex); - } - /// /// Reports whether the specified instance still refers to a valid entity and that it has a /// component of type T. diff --git a/Unity.Entities/Iterators/DynamicBuffer.cs b/Unity.Entities/Iterators/DynamicBuffer.cs index 9c158d2c..51f02cd2 100644 --- a/Unity.Entities/Iterators/DynamicBuffer.cs +++ b/Unity.Entities/Iterators/DynamicBuffer.cs @@ -442,9 +442,8 @@ public void RemoveAtSwapBack(int index) int newLength = l; if (index != newLength) { - int elemSize = UnsafeUtility.SizeOf(); byte* basePtr = BufferHeader.GetElementPointer(m_Buffer); - *(basePtr + index * elemSize) = *(basePtr + newLength * elemSize); + UnsafeUtility.WriteArrayElement(basePtr, index, UnsafeUtility.ReadArrayElement(basePtr, newLength)); } } diff --git a/Unity.Entities/Iterators/EntityQuery.cs b/Unity.Entities/Iterators/EntityQuery.cs index e9d4ceda..872225ac 100644 --- a/Unity.Entities/Iterators/EntityQuery.cs +++ b/Unity.Entities/Iterators/EntityQuery.cs @@ -393,12 +393,28 @@ public int CalculateEntityCount() return ChunkIterationUtility.CalculateEntityCount(ref _QueryData->MatchingArchetypes, ref _Filter); } + public int CalculateEntityCount(NativeArray entityArray) + { + SyncFilterTypes(); + var ecs = _Access->EntityComponentStore; + var mask = _Access->EntityQueryManager->GetEntityQueryMask(_QueryData, ecs); + return ChunkIterationUtility.CalculateEntityCountInEntityArray((Entity*)entityArray.GetUnsafeReadOnlyPtr(), entityArray.Length, _QueryData, ecs, ref mask, ref _Filter); + } + public int CalculateEntityCountWithoutFiltering() { var dummyFilter = default(EntityQueryFilter); return ChunkIterationUtility.CalculateEntityCount(ref _QueryData->MatchingArchetypes, ref dummyFilter); } + public int CalculateEntityCountWithoutFiltering(NativeArray entityArray) + { + var dummyFilter = default(EntityQueryFilter); + var ecs = _Access->EntityComponentStore; + var mask = _Access->EntityQueryManager->GetEntityQueryMask(_QueryData, ecs); + return ChunkIterationUtility.CalculateEntityCountInEntityArray((Entity*) entityArray.GetUnsafeReadOnlyPtr(), entityArray.Length, _QueryData, ecs, ref mask, ref dummyFilter); + } + public int CalculateChunkCount() { SyncFilterTypes(); @@ -417,6 +433,21 @@ void CalculateChunkAndEntityCount(out int entityCount, out int chunkCount) entityCount = ChunkIterationUtility.CalculateChunkAndEntityCount(ref _QueryData->MatchingArchetypes, ref _Filter, out chunkCount); } + public bool MatchesInEntityArray(NativeArray entityArray) + { + var ecs = _Access->EntityComponentStore; + var mask = _Access->EntityQueryManager->GetEntityQueryMask(_QueryData, ecs); + return ChunkIterationUtility.MatchesAnyInEntityArray((Entity*) entityArray.GetUnsafeReadOnlyPtr(), entityArray.Length, _QueryData, ecs, ref mask, ref _Filter); + } + + public bool MatchesInEntityArrayIgnoreFilter(NativeArray entityArray) + { + var dummyFilter = default(EntityQueryFilter); + var ecs = _Access->EntityComponentStore; + var mask = _Access->EntityQueryManager->GetEntityQueryMask(_QueryData, ecs); + return ChunkIterationUtility.MatchesAnyInEntityArray((Entity*) entityArray.GetUnsafeReadOnlyPtr(), entityArray.Length, _QueryData, ecs, ref mask, ref dummyFilter); + } + public ArchetypeChunkIterator GetArchetypeChunkIterator() { return new ArchetypeChunkIterator(_QueryData->MatchingArchetypes, _Access->DependencyManager, _Access->EntityComponentStore->GlobalSystemVersion, ref _Filter); @@ -463,6 +494,9 @@ public NativeArray CreateArchetypeChunkArray(Allocator allocator public NativeArray ToEntityArrayAsync(Allocator allocator, out JobHandle jobhandle, EntityQuery outer) { #if ENABLE_UNITY_COLLECTIONS_CHECKS + if (allocator == Allocator.Temp) + throw new ArgumentException("Allocator.Temp containers cannot be used when scheduling a job, use TempJob instead."); + var entityType = new EntityTypeHandle(SafetyHandles->GetSafetyHandleForEntityTypeHandle()); #else var entityType = new EntityTypeHandle(); @@ -492,13 +526,32 @@ public NativeArray ToEntityArray(Allocator allocator, EntityQuery outer) } else { - res = ChunkIterationUtility.CreateEntityArrayAsync(_QueryData->MatchingArchetypes, allocator, entityType, - outer, entityCount, out var job, GetDependency()); - job.Complete(); + res = ChunkIterationUtility.CreateEntityArrayAsyncComplete(_QueryData->MatchingArchetypes, allocator, entityType, + outer, entityCount, GetDependency()); } return res; } + public NativeArray ToEntityArray(NativeArray entityArray, Allocator allocator) + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + var entityType = new EntityTypeHandle(SafetyHandles->GetSafetyHandleForEntityTypeHandle()); +#else + var entityType = new EntityTypeHandle(); +#endif + var ecs = _Access->EntityComponentStore; + var mask = _Access->EntityQueryManager->GetEntityQueryMask(_QueryData, ecs); + + var arrayPtr = ChunkIterationUtility.CreateEntityArrayFromEntityArray((Entity*)entityArray.GetUnsafeReadOnlyPtr(), entityArray.Length, allocator,_QueryData, ecs, ref mask, ref entityType, ref _Filter, out var arrayLength); + var res = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(arrayPtr, arrayLength, allocator); + +#if ENABLE_UNITY_COLLECTIONS_CHECKS + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref res, AtomicSafetyHandle.Create()); +#endif + + return res; + } + internal void GatherEntitiesToArray(out EntityQuery.GatherEntitiesResult result, EntityQuery outer) { ChunkIterationUtility.GatherEntitiesToArray(_QueryData, ref _Filter, out result); @@ -511,13 +564,15 @@ internal void GatherEntitiesToArray(out EntityQuery.GatherEntitiesResult result, #else var entityType = new EntityTypeHandle(); #endif + var entities = new NativeArray(entityCount, Allocator.TempJob,NativeArrayOptions.UninitializedMemory); + var job = new GatherEntitiesJob { EntityTypeHandle = entityType, - Entities = new NativeArray(entityCount, Allocator.TempJob) + Entities = (byte*)entities.GetUnsafePtr() }; job.Run(outer); - result.EntityArray = job.Entities; + result.EntityArray = entities; result.EntityBuffer = (Entity*)result.EntityArray.GetUnsafeReadOnlyPtr(); result.EntityCount = result.EntityArray.Length; } @@ -536,6 +591,9 @@ public NativeArray ToComponentDataArrayAsync(Allocator allocator, out JobH where T : struct, IComponentData { #if ENABLE_UNITY_COLLECTIONS_CHECKS + if (allocator == Allocator.Temp) + throw new ArgumentException("Allocator.Temp containers cannot be used when scheduling a job, use TempJob instead."); + var componentType = new ComponentTypeHandle(SafetyHandles->GetSafetyHandleForComponentTypeHandle(TypeManager.GetTypeIndex(), true), true, _Access->EntityComponentStore->GlobalSystemVersion); #else var componentType = new ComponentTypeHandle(true, _Access->EntityComponentStore->GlobalSystemVersion); @@ -551,6 +609,45 @@ public NativeArray ToComponentDataArrayAsync(Allocator allocator, out JobH return ChunkIterationUtility.CreateComponentDataArrayAsync(allocator, componentType,CalculateEntityCount(), outer, out jobhandle, GetDependency()); } + public NativeArray ToComponentDataArray(NativeArray entityArray, Allocator allocator) + where T : struct, IComponentData + { +#if ENABLE_UNITY_COLLECTIONS_CHECKS + var componentType = new ComponentTypeHandle(SafetyHandles->GetSafetyHandleForComponentTypeHandle(TypeManager.GetTypeIndex(), true), true, _Access->EntityComponentStore->GlobalSystemVersion); +#else + var componentType = new ComponentTypeHandle(true, _Access->EntityComponentStore->GlobalSystemVersion); +#endif + + var typeIndex = TypeManager.GetTypeIndex(); +#if ENABLE_UNITY_COLLECTIONS_CHECKS + int indexInEntityQuery = GetIndexInEntityQuery(typeIndex); + if (indexInEntityQuery == -1) + throw new InvalidOperationException($"Trying ToComponentDataArray of {TypeManager.GetType(typeIndex)} but the required component type was not declared in the EntityQuery."); +#endif + + var ecs = _Access->EntityComponentStore; + var typeInfo = ecs->GetTypeInfo(typeIndex); + var mask = _Access->EntityQueryManager->GetEntityQueryMask(_QueryData, ecs); + + var arrayPtr = ChunkIterationUtility.CreateComponentDataArrayFromEntityArray( + (Entity*)entityArray.GetUnsafeReadOnlyPtr(), + entityArray.Length, + allocator,_QueryData, + ecs, + typeIndex, + typeInfo.SizeInChunk, + typeInfo.AlignmentInBytes, + ref mask, + ref _Filter, + out var arrayLength); + var res = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(arrayPtr, arrayLength, allocator); +#if ENABLE_UNITY_COLLECTIONS_CHECKS + NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref res, AtomicSafetyHandle.Create()); +#endif + + return res; + } + public NativeArray ToComponentDataArray(Allocator allocator, EntityQuery outer) where T : struct, IComponentData { @@ -579,8 +676,7 @@ public NativeArray ToComponentDataArray(Allocator allocator, EntityQuery o } else { - res = ChunkIterationUtility.CreateComponentDataArrayAsync(allocator, componentType, entityCount,outer, out var job, GetDependency()); - job.Complete(); + res = ChunkIterationUtility.CreateComponentDataArrayAsyncComplete(allocator, componentType, entityCount,outer, GetDependency()); } return res; } @@ -660,8 +756,8 @@ public void CopyFromComponentDataArray(NativeArray componentDataArray, Ent } else { - ChunkIterationUtility.CopyFromComponentDataArrayAsync(_QueryData->MatchingArchetypes, componentDataArray, componentType, outer, ref _Filter, out var job, GetDependency()); - job.Complete(); + ChunkIterationUtility.CopyFromComponentDataArrayAsyncComplete(_QueryData->MatchingArchetypes, + componentDataArray, componentType, outer, ref _Filter, GetDependency()); } } @@ -669,6 +765,13 @@ public void CopyFromComponentDataArrayAsync(NativeArray componentDataArray where T : struct, IComponentData { #if ENABLE_UNITY_COLLECTIONS_CHECKS + if (componentDataArray.m_AllocatorLabel == Allocator.Temp) + { + throw new ArgumentException( + $"The NativeContainer is allocated with Allocator.Temp." + + $", use TempJob instead.",nameof (componentDataArray)); + } + var entityCount = CalculateEntityCount(); if (entityCount != componentDataArray.Length) throw new ArgumentException($"Length of input array ({componentDataArray.Length}) does not match length of EntityQuery ({entityCount})"); @@ -690,6 +793,7 @@ public void CopyFromComponentDataArrayAsync(NativeArray componentDataArray ChunkIterationUtility.CopyFromComponentDataArrayAsync(_QueryData->MatchingArchetypes, componentDataArray, componentType, outer, ref _Filter, out jobhandle, GetDependency()); } + public Entity GetSingletonEntity() { // Fast path with no filter @@ -815,9 +919,8 @@ public bool CompareQuery(EntityQueryDesc[] queryDesc) public void ResetFilter() { var sharedCount = _Filter.Shared.Count; - var sm = _Access->ManagedComponentStore; for (var i = 0; i < sharedCount; ++i) - sm.RemoveReference(_Filter.Shared.SharedComponentIndex[i]); + _Access->RemoveSharedComponentReference(_Filter.Shared.SharedComponentIndex[i]); _Filter.Changed.Count = 0; _Filter.Shared.Count = 0; @@ -888,15 +991,13 @@ public void AddChangedVersionFilter(ComponentType componentType) public void AddSharedComponentFilter(SharedComponent sharedComponent) where SharedComponent : struct, ISharedComponentData { - var sm = _Access->ManagedComponentStore; - var newFilterIndex = _Filter.Shared.Count; if (newFilterIndex >= EntityQueryFilter.SharedComponentData.Capacity) throw new ArgumentException($"EntityQuery accepts a maximum of {EntityQueryFilter.SharedComponentData.Capacity} shared component filters."); _Filter.Shared.Count = newFilterIndex + 1; _Filter.Shared.IndexInEntityQuery[newFilterIndex] = GetIndexInEntityQuery(TypeManager.GetTypeIndex()); - _Filter.Shared.SharedComponentIndex[newFilterIndex] = sm.InsertSharedComponent(sharedComponent); + _Filter.Shared.SharedComponentIndex[newFilterIndex] = _Access->InsertSharedComponent(sharedComponent); #if ENABLE_UNITY_COLLECTIONS_CHECKS _Filter.AssertValid(); @@ -980,6 +1081,36 @@ public bool HasFilter() return _Filter.RequiresMatchesFilter; } + + public EntityQueryMask GetEntityQueryMask() + { + var ecs = _Access->EntityComponentStore; + var mask = _Access->EntityQueryManager->GetEntityQueryMask(_QueryData, ecs); + return mask; + } + + public bool Matches(Entity e) + { + var ecs = _Access->EntityComponentStore; + var mask = _Access->EntityQueryManager->GetEntityQueryMask(_QueryData, ecs); + if (mask.Matches(e)) + { + var chunk = ecs->GetChunk(e); + var match = _QueryData->MatchingArchetypes.Ptr[ + EntityQueryManager.FindMatchingArchetypeIndexForArchetype(ref _QueryData->MatchingArchetypes, chunk->Archetype)]; + return chunk->MatchesFilter(match, ref _Filter); + } + + return false; + } + + public bool MatchesNoFilter(Entity e) + { + var ecs = _Access->EntityComponentStore; + var mask = _Access->EntityQueryManager->GetEntityQueryMask(_QueryData, ecs); + return mask.Matches(e); + } + internal bool CheckChunkListCacheConsistency() { return UnsafeCachedChunkList.CheckCacheConsistency(ref _QueryData->MatchingChunkCache, _QueryData); @@ -998,11 +1129,6 @@ internal static void Free(EntityQueryImpl* impl) } } - [EditorBrowsable(EditorBrowsableState.Never)] - public struct EntityQueryNullShim - { - } - /// /// Use an EntityQuery object to select entities with components that meet specific requirements. /// @@ -1033,7 +1159,7 @@ public struct EntityQueryNullShim /// * `None` = None of the component types in this array can exist in the archetype /// /// For example, the following query includes archetypes containing Rotation and - /// RotationSpeed components, but excludes any archetypes containing a Frozen component: + /// RotationSpeed components, but excludes any archetypes containing a Static component: /// /// /// @@ -1097,7 +1223,7 @@ static internal unsafe EntityQuery Construct(EntityQueryData* queryData, EntityD { EntityQuery _result = default; var _ptr = EntityQueryImpl.Allocate(); - _result.__seqno = World.ms_NextSequenceNumber.Data++; + _result.__seqno = WorldUnmanaged.ms_NextSequenceNumber.Data++; _ptr->Construct(queryData, access, _result.__seqno); _result.__impl = _ptr; _CreateSafetyHandle(ref _result); @@ -1200,6 +1326,15 @@ internal IDisposable _CachedState /// The number of entities based on the current EntityQuery properties. public int CalculateEntityCount() => _GetImpl()->CalculateEntityCount(); /// + /// Calculates the number of entities in the input entity list which match this EntityQuery. + /// + /// + /// The EntityQuery must execute and apply any filters to calculate the entity count. If you are checking for whether the entity count equals zero, consider the more efficient IsEmpty property. + /// + /// A list of entities to limit execution to. Only entities in the list will be considered. + /// The number of entities based on the current EntityQuery properties. + public int CalculateEntityCount(NativeArray entityArray) => _GetImpl()->CalculateEntityCount(entityArray); + /// /// Calculates the number of entities selected by this EntityQuery, ignoring any set filters. /// /// @@ -1208,6 +1343,15 @@ internal IDisposable _CachedState /// The number of entities based on the current EntityQuery properties. public int CalculateEntityCountWithoutFiltering() => _GetImpl()->CalculateEntityCountWithoutFiltering(); /// + /// Calculates the number of entities in the input entity list which match this EntityQuery, ignoring any filters. + /// + /// + /// The EntityQuery must execute and apply any filters to calculate the entity count. If you are checking for whether the entity count equals zero, consider the more efficient IsEmpty property. + /// + /// A list of entities to limit execution to. Only entities in the list will be considered. + /// The number of entities based on the current EntityQuery properties. + public int CalculateEntityCountWithoutFiltering(NativeArray entityArray) => _GetImpl()->CalculateEntityCountWithoutFiltering(entityArray); + /// /// Calculates the number of chunks that match this EntityQuery. /// /// @@ -1224,6 +1368,18 @@ internal IDisposable _CachedState /// The number of chunks based on the current EntityQuery properties. public int CalculateChunkCountWithoutFiltering() => _GetImpl()->CalculateChunkCountWithoutFiltering(); /// + /// Fast path to determine if any entities in the input entity list match this EntityQuery. + /// + /// A list of entities to limit execution to. Only entities in the list will be considered. + /// True if any entity in the list matches the query, false if no entities match the query + public bool MatchesAny(NativeArray entityArray) => _GetImpl()->MatchesInEntityArray(entityArray); + /// + /// Fast path to determine if any entities in the input entity list match this EntityQuery, ignoring any filters. + /// + /// A list of entities to limit execution to. Only entities in the list will be considered. + /// True if any entity in the list matches the query, false if no entities match the query + public bool MatchesAnyIgnoreFilter(NativeArray entityArray) => _GetImpl()->MatchesInEntityArrayIgnoreFilter(entityArray); + /// /// Gets an ArchetypeChunkIterator which can be used to iterate over every chunk returned by this EntityQuery. /// /// ArchetypeChunkIterator for this EntityQuery @@ -1274,6 +1430,8 @@ internal IDisposable _CachedState /// that uses the NativeArray. /// An array containing all the entities selected by the EntityQuery. public NativeArray ToEntityArrayAsync(Allocator allocator, out JobHandle jobhandle) => _GetImpl()->ToEntityArrayAsync(allocator, out jobhandle, this); + + /// /// Creates a NativeArray containing the selected entities. /// @@ -1282,7 +1440,21 @@ internal IDisposable _CachedState /// An array containing all the entities selected by the EntityQuery. public NativeArray ToEntityArray(Allocator allocator) => _GetImpl()->ToEntityArray(allocator, this); - internal struct GatherEntitiesResult + /// + /// Creates a NativeArray containing the selected entities, given an input entity list to limit the search. + /// + /// This version of the function blocks until the Job used to fill the array is complete. + /// The list of entities to be considered. Only entities in this list will be considered as output. + /// The type of memory to allocate. + /// An array containing all the entities selected by the EntityQuery. + public NativeArray ToEntityArray(NativeArrayentityArray, Allocator allocator) => _GetImpl()->ToEntityArray(entityArray, allocator); + + #if ROSLYN_SOURCEGEN_ENABLED + public +#else + internal +#endif + struct GatherEntitiesResult { public int StartingOffset; public int EntityCount; @@ -1303,6 +1475,7 @@ internal struct GatherEntitiesResult /// by the EntityQuery. public NativeArray ToComponentDataArrayAsync(Allocator allocator, out JobHandle jobhandle) where T : struct, IComponentData => _GetImpl()->ToComponentDataArrayAsync(allocator, out jobhandle, this); + /// /// Creates a NativeArray containing the components of type T for the selected entities. /// @@ -1314,6 +1487,15 @@ public NativeArray ToComponentDataArrayAsync(Allocator allocator, out JobH /// the group. public NativeArray ToComponentDataArray(Allocator allocator) where T : struct, IComponentData => _GetImpl()->ToComponentDataArray(allocator, this); + /// + /// Creates a NativeArray containing the components of type T for the selected entities, given an input entity list to limit the search. + /// + /// This version of the function blocks until the Job used to fill the array is complete. + /// The list of entities to be considered. Only entities in this list will be considered as output. + /// The type of memory to allocate. + /// An array containing all the entities selected by the EntityQuery. + public NativeArray ToComponentDataArray(NativeArrayentityArray, Allocator allocator) where T : struct, IComponentData + => _GetImpl()->ToComponentDataArray(entityArray, allocator); #if !UNITY_DISABLE_MANAGED_COMPONENTS public T[] ToComponentDataArray() where T : class, IComponentData => _GetImpl()->ToComponentDataArray(); @@ -1536,6 +1718,23 @@ public void AddSharedComponentFilter(SharedComponent sharedComp /// /// Returns true if the query has a filter, returns false if the query does not have a filter. public bool HasFilter() => _GetImpl()->HasFilter(); + /// + /// Returns an EntityQueryMask, which can be used to quickly determine if an entity matches the query. + /// + /// A maximum of 1024 EntityQueryMasks can be allocated per World. + public EntityQueryMask GetEntityQueryMask() => _GetImpl()->GetEntityQueryMask(); + /// + /// Returns true if the entity matches the query, false if it does not. Applies any filters + /// + /// The entity to check for match + /// This function creates an EntityQueryMask, if one does not exist for this query already. A maximum of 1024 EntityQueryMasks can be allocated per World. + public bool Matches(Entity e) => _GetImpl()->Matches(e); + /// + /// Returns true if the entity matches the query, false if it does not. Applies any filters + /// + /// The entity to check for match + /// This function creates an EntityQueryMask, if one does not exist for this query already. A maximum of 1024 EntityQueryMasks can be allocated per World. + public bool MatchesNoFilter(Entity e) => _GetImpl()->MatchesNoFilter(e); internal void UpdateCache() => ChunkIterationUtility.RebuildChunkListCache(_GetImpl()->_QueryData); internal bool CheckChunkListCacheConsistency() => _GetImpl()->CheckChunkListCacheConsistency(); @@ -1574,11 +1773,6 @@ private static void _CreateSafetyHandle(ref EntityQuery _s) internal EntityQueryImpl* __impl; internal ulong __seqno; - // Temporarily allow conversion from null reference to allow existing packages to compile. - [EditorBrowsable(EditorBrowsableState.Never)] - [Obsolete("EntityQuery is a struct. Please use `default` instead of `null`. (RemovedAfter 2020-07-01)")] - public static implicit operator EntityQuery(EntityQueryNullShim? shim) => default(EntityQuery); - public static bool operator==(EntityQuery lhs, EntityQuery rhs) { return lhs.__seqno == rhs.__seqno; diff --git a/Unity.Entities/Iterators/EntityQueryManager.cs b/Unity.Entities/Iterators/EntityQueryManager.cs index f38f2559..04a436a0 100644 --- a/Unity.Entities/Iterators/EntityQueryManager.cs +++ b/Unity.Entities/Iterators/EntityQueryManager.cs @@ -126,7 +126,7 @@ private static ComponentType GetWriteGroupReadOnlyComponentType(NativeArray { // Need to get "Clean" TypeIndex from Type. Since TypeInfo.TypeIndex is not actually the index of the // type. (It includes other flags.) What is stored in WriteGroups is the actual index of the type. - var excludedType = TypeManager.GetTypeInfo(writeGroupTypes[i]); + ref readonly var excludedType = ref TypeManager.GetTypeInfo(writeGroupTypes[i]); var excludedComponentType = ComponentType.ReadOnly(excludedType.TypeIndex); return excludedComponentType; } @@ -390,7 +390,7 @@ private int IntersectSortedComponentIndexArrays(int* arrayA, byte* accessArrayA, return outRequiredComponents; } - public EntityQuery CreateEntityQuery(EntityDataAccess* access, EntityQueryDesc[] queryDesc) + public EntityQuery CreateEntityQuery(EntityDataAccess* access, params EntityQueryDesc[] queryDesc) { //@TODO: Support for CreateEntityQuery with queryDesc but using ComponentDataArray etc var buffer = stackalloc byte[1024]; @@ -693,8 +693,44 @@ static bool TestMatchingArchetypeAll(Archetype* archetype, int* allTypes, int al return foundCount == allCount; } - } + public static int FindMatchingArchetypeIndexForArchetype(ref UnsafeMatchingArchetypePtrList matchingArchetypes, + Archetype* archetype) + { + for (int i = 0; i < matchingArchetypes.Length; ++i) + { + if (archetype == matchingArchetypes.Ptr[i]->Archetype) + return i; + } + + return -1; + } + + public EntityQueryMask GetEntityQueryMask(EntityQueryData* query, EntityComponentStore* ecStore) + { + if (query->EntityQueryMask.IsCreated()) + return query->EntityQueryMask; + + if (m_EntityQueryMasksAllocated >= 1024) + throw new Exception("You have reached the limit of 1024 unique EntityQueryMasks, and cannot generate any more."); + + var mask = new EntityQueryMask( + (byte)(m_EntityQueryMasksAllocated / 8), + (byte)(1 << (m_EntityQueryMasksAllocated % 8)), + ecStore); + + m_EntityQueryMasksAllocated++; + + for (var i = 0; i < query->MatchingArchetypes.Length; ++i) + { + query->MatchingArchetypes.Ptr[i]->Archetype->QueryMaskArray[mask.Index] |= mask.Mask; + } + + query->EntityQueryMask = mask; + + return mask; + } + } [StructLayout(LayoutKind.Sequential)] unsafe struct MatchingArchetype @@ -880,9 +916,8 @@ public static bool CheckCacheConsistency(ref UnsafeCachedChunkList cache, Entity var archetype = data->MatchingArchetypes.Ptr[archetypeIndex]->Archetype; for (int chunkIndex = 0; chunkIndex < archetype->Chunks.Count; ++chunkIndex) { - if (chunkCounter < cache.MatchingChunks.Length - 1) + if (chunkCounter >= cache.MatchingChunks.Length) return false; - if(cache.MatchingChunks.Ptr[chunkCounter++] != archetype->Chunks[chunkIndex]) return false; } diff --git a/Unity.Entities/JobComponentSystem.cs b/Unity.Entities/JobComponentSystem.cs index cd8cfa3a..58dcb6fe 100644 --- a/Unity.Entities/JobComponentSystem.cs +++ b/Unity.Entities/JobComponentSystem.cs @@ -114,36 +114,37 @@ public sealed override void Update() { if (Enabled && ShouldRunSystem()) { - if (!state->m_PreviouslyEnabled) + if (!state->PreviouslyEnabled) { - state->m_PreviouslyEnabled = true; + state->PreviouslyEnabled = true; OnStartRunning(); } var inputJob = BeforeOnUpdate(); JobHandle outputJob = new JobHandle(); - var oldExecutingSystem = ms_ExecutingSystem; - ms_ExecutingSystem = this; + var world = World.Unmanaged; + var oldExecutingSystem = world.ExecutingSystem; + world.ExecutingSystem = state->m_Handle; try { outputJob = OnUpdate(inputJob); } catch { - ms_ExecutingSystem = oldExecutingSystem; - AfterOnUpdate(outputJob, false); throw; } - - ms_ExecutingSystem = oldExecutingSystem; + finally + { + world.ExecutingSystem = oldExecutingSystem; + } AfterOnUpdate(outputJob, true); } - else if (state->m_PreviouslyEnabled) + else if (state->PreviouslyEnabled) { - state->m_PreviouslyEnabled = false; + state->PreviouslyEnabled = false; OnStopRunning(); } } diff --git a/Unity.Entities/ManagedComponentStore.cs b/Unity.Entities/ManagedComponentStore.cs index 8bcdd570..0040d258 100644 --- a/Unity.Entities/ManagedComponentStore.cs +++ b/Unity.Entities/ManagedComponentStore.cs @@ -84,7 +84,7 @@ public void Dispose() (m_SharedComponentData[i] as IRefCounted)?.Release(); for (var i = 0; i != m_ManagedComponentData.Length; i++) - DisposeManagedObject(m_ManagedComponentData[i]); + DisposeManagedComponentData(m_ManagedComponentData[i]); m_SharedComponentInfo.Dispose(); m_SharedComponentData.Clear(); @@ -103,7 +103,7 @@ void ResetSharedComponentData() m_FreeListIndex = -1; } - public void GetAllUniqueSharedComponents(List sharedComponentValues) + public void GetAllUniqueSharedComponents_Managed(List sharedComponentValues) where T : struct, ISharedComponentData { sharedComponentValues.Add(default(T)); @@ -115,7 +115,7 @@ public void GetAllUniqueSharedComponents(List sharedComponentValues) } } - public void GetAllUniqueSharedComponents(List sharedComponentValues, List sharedComponentIndices) + public void GetAllUniqueSharedComponents_Managed(List sharedComponentValues, List sharedComponentIndices) where T : struct, ISharedComponentData { sharedComponentValues.Add(default(T)); @@ -136,7 +136,7 @@ public int GetSharedComponentCount() return m_SharedComponentData.Count; } - public int InsertSharedComponent(T newData) where T : struct + public int InsertSharedComponent_Managed(T newData) where T : struct { var typeIndex = TypeManager.GetTypeIndex(); var index = FindSharedComponentIndex(TypeManager.GetTypeIndex(), newData); @@ -277,19 +277,19 @@ private int Add(int typeIndex, int hashCode, object newData) } } - public void IncrementSharedComponentVersion(int index) + public void IncrementSharedComponentVersion_Managed(int index) { m_SharedComponentVersion++; SharedComponentInfoPtr[index].Version = m_SharedComponentVersion; } - public int GetSharedComponentVersion(T sharedData) where T : struct + public int GetSharedComponentVersion_Managed(T sharedData) where T : struct { var index = FindSharedComponentIndex(TypeManager.GetTypeIndex(), sharedData); return SharedComponentInfoPtr[index == -1 ? 0 : index].Version; } - public T GetSharedComponentData(int index) where T : struct + public T GetSharedComponentData_Managed(int index) where T : struct { if (index == 0) return default(T); @@ -315,7 +315,7 @@ public object GetSharedComponentDataNonDefaultBoxed(int index) return m_SharedComponentData[index]; } - public void AddReference(int index, int numRefs = 1) + public void AddSharedComponentReference_Managed(int index, int numRefs = 1) { if (index == 0) return; @@ -323,7 +323,7 @@ public void AddReference(int index, int numRefs = 1) SharedComponentInfoPtr[index].RefCount += numRefs; } - public void RemoveReference(int index, int numRefs = 1) + public void RemoveSharedComponentReference_Managed(int index, int numRefs = 1) { if (index == 0) return; @@ -339,7 +339,7 @@ public void RemoveReference(int index, int numRefs = 1) // Bump default version when a shared component is removed completely. // This ensures that when asking for a shared component that previously existed and now longer exists // It will always return a change value. - IncrementSharedComponentVersion(0); + IncrementSharedComponentVersion_Managed(0); var hashCode = infos[index].HashCode; @@ -477,7 +477,7 @@ public bool AllSharedComponentReferencesAreFromChunks(EntityComponentStore* enti } } - public NativeArray MoveAllSharedComponents(ManagedComponentStore srcManagedComponents, Allocator allocator) + public NativeArray MoveAllSharedComponents_Managed(ManagedComponentStore srcManagedComponents, Allocator allocator) { var remap = new NativeArray(srcManagedComponents.GetSharedComponentCount(), allocator); remap[0] = 0; @@ -493,7 +493,7 @@ public NativeArray MoveAllSharedComponents(ManagedComponentStore srcManaged var dstIndex = InsertSharedComponentAssumeNonDefaultMove(typeIndex, hashCode, srcData); SharedComponentInfoPtr[dstIndex].RefCount += srcInfos[srcIndex].RefCount - 1; - IncrementSharedComponentVersion(dstIndex); + IncrementSharedComponentVersion_Managed(dstIndex); remap[srcIndex] = dstIndex; } @@ -503,7 +503,7 @@ public NativeArray MoveAllSharedComponents(ManagedComponentStore srcManaged return remap; } - public NativeArray MoveSharedComponents(ManagedComponentStore srcManagedComponents, NativeArray chunks, Allocator allocator) + public NativeArray MoveSharedComponents_Managed(ManagedComponentStore srcManagedComponents, NativeArray chunks, Allocator allocator) { var remap = new NativeArray(srcManagedComponents.GetSharedComponentCount(), allocator); var remapPtr = (int*)remap.GetUnsafePtr(); @@ -538,8 +538,8 @@ public NativeArray MoveSharedComponents(ManagedComponentStore srcManagedCom // * -1 because InsertSharedComponentAssumeNonDefault above adds 1 refcount int srcRefCount = remapPtr[srcIndex]; SharedComponentInfoPtr[dstIndex].RefCount += srcRefCount - 1; - srcManagedComponents.RemoveReference(srcIndex, srcRefCount); - IncrementSharedComponentVersion(dstIndex); + srcManagedComponents.RemoveSharedComponentReference_Managed(srcIndex, srcRefCount); + IncrementSharedComponentVersion_Managed(dstIndex); remapPtr[srcIndex] = dstIndex; } @@ -568,8 +568,7 @@ public void PrepareForDeserialize() ResetSharedComponentData(); } - public void PatchEntities(Archetype* archetype, Chunk* chunk, int entityCount, - EntityRemapUtility.EntityRemapInfo* remapping) + public void PatchEntities(Archetype* archetype, Chunk* chunk, int entityCount, EntityRemapUtility.EntityRemapInfo* remapping) { #if !UNITY_DOTSRUNTIME var firstManagedComponent = archetype->FirstManagedComponent; @@ -579,17 +578,17 @@ public void PatchEntities(Archetype* archetype, Chunk* chunk, int entityCount, for (int i = 0; i < numManagedComponents; ++i) { - int type = i + firstManagedComponent; - if (!hasHybridComponents || TypeManager.GetTypeInfo(types[type].TypeIndex).Category != TypeManager.TypeCategory.UnityEngineObject) + int indexInArchetype = i + firstManagedComponent; + if (!archetype->Types[indexInArchetype].HasEntityReferences) + continue; + + var a = (int*)ChunkDataUtility.GetComponentDataRO(chunk, 0, indexInArchetype); + for (int ei = 0; ei < entityCount; ++ei) { - var a = (int*) ChunkDataUtility.GetComponentDataRO(chunk, 0, type); - for (int ei = 0; ei < entityCount; ++ei) + if (a[ei] != 0) { - if (a[ei] != 0) - { - var obj = m_ManagedComponentData[a[ei]]; - m_ManagedObjectRemap.RemapEntityReferences(ref obj, remapping); - } + var obj = m_ManagedComponentData[a[ei]]; + m_ManagedObjectRemap.RemapEntityReferences(ref obj, remapping); } } } @@ -627,7 +626,7 @@ public void Playback(ref ManagedDeferredCommands managedDeferredCommands) case (ManagedDeferredCommands.Command.IncrementSharedComponentVersion): { var sharedIndex = reader.ReadNext(); - IncrementSharedComponentVersion(sharedIndex); + IncrementSharedComponentVersion_Managed(sharedIndex); } break; @@ -635,7 +634,7 @@ public void Playback(ref ManagedDeferredCommands managedDeferredCommands) { var index = reader.ReadNext(); var numRefs = reader.ReadNext(); - AddReference(index, numRefs); + AddSharedComponentReference_Managed(index, numRefs); } break; @@ -643,7 +642,7 @@ public void Playback(ref ManagedDeferredCommands managedDeferredCommands) { var index = reader.ReadNext(); var numRefs = reader.ReadNext(); - RemoveReference(index, numRefs); + RemoveSharedComponentReference_Managed(index, numRefs); } break; @@ -716,7 +715,7 @@ public void Playback(ref ManagedDeferredCommands managedDeferredCommands) for (int i = 0; i < count; ++i) { var managedComponentIndex = reader.ReadNext(); - (m_ManagedComponentData[managedComponentIndex] as IDisposable)?.Dispose(); + DisposeManagedComponentData(m_ManagedComponentData[managedComponentIndex]); m_ManagedComponentData[managedComponentIndex] = null; } } @@ -798,7 +797,7 @@ public void CloneManagedComponentsFromDifferentWorld(int* indices, int count, Ma var clone = m_ManagedObjectClone.Clone(obj); int dstIndex = dstEntityComponentStore.AllocateManagedComponentIndex(); indices[i] = dstIndex; - (m_ManagedComponentData[dstIndex] as IDisposable)?.Dispose(); + DisposeManagedComponentData(m_ManagedComponentData[dstIndex]); m_ManagedComponentData[dstIndex] = clone; } } @@ -816,10 +815,18 @@ public void ResetManagedComponentStoreForDeserialization(int managedComponentCou } } - public static void DisposeManagedObject(object obj) + public static void DisposeManagedComponentData(object obj) { if (obj is IDisposable disposable) disposable.Dispose(); } + + public bool HasBlobReferences(int sharedComponentIndex) + { + if (sharedComponentIndex == 0) + return false; + + return TypeManager.GetTypeInfo(SharedComponentInfoPtr[sharedComponentIndex].ComponentType).HasBlobAssetRefs; + } } } diff --git a/Unity.Entities/Properties/ManagedObjectRemap.cs b/Unity.Entities/Properties/ManagedObjectRemap.cs index e3980ec0..05480c1e 100644 --- a/Unity.Entities/Properties/ManagedObjectRemap.cs +++ b/Unity.Entities/Properties/ManagedObjectRemap.cs @@ -35,7 +35,7 @@ IPropertyBag GetPropertyBag(object obj) } var type = obj.GetType(); - var typeInfo = TypeManager.GetTypeInfo(TypeManager.GetTypeIndex(type)); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(TypeManager.GetTypeIndex(type)); if (typeInfo.Category == TypeManager.TypeCategory.UnityEngineObject) { diff --git a/Unity.Entities/Serialization/SerializeUtility.cs b/Unity.Entities/Serialization/SerializeUtility.cs index dac22a53..ec251aa6 100644 --- a/Unity.Entities/Serialization/SerializeUtility.cs +++ b/Unity.Entities/Serialization/SerializeUtility.cs @@ -16,6 +16,17 @@ namespace Unity.Entities.Serialization { + struct StableArchetypeCompare : IComparer + { + unsafe public int Compare(IntPtr x, IntPtr y) + { + var hashX = ((Archetype*)x)->GetStableHash(); + var hashY = ((Archetype*)y)->GetStableHash(); + + return hashX.CompareTo(hashY); + } + } + public static partial class SerializeUtility { #if !UNITY_DOTSRUNTIME @@ -26,6 +37,8 @@ unsafe class ManagedObjectWriterAdapter : Unity.Serialization.Binary.Adapters.IBinaryAdapter, Unity.Serialization.Binary.Adapters.IBinaryAdapter { + public bool SerializeEntityReferences { get; set; } + /// /// Entity remapping which is applied during serialization. /// @@ -46,6 +59,7 @@ public ManagedObjectWriterAdapter( NativeHashMap blobAssetMap, NativeArray blobAssetOffsets) { + SerializeEntityReferences = true; m_EntityRemapInfo = entityRemapInfo; m_BlobAssetMap = blobAssetMap; m_BlobAssetOffsets = blobAssetOffsets; @@ -53,9 +67,14 @@ public ManagedObjectWriterAdapter( void Unity.Serialization.Binary.Adapters.IBinaryAdapter.Serialize(UnsafeAppendBuffer* writer, Entity value) { - value = EntityRemapUtility.RemapEntity(m_EntityRemapInfo, value); - writer->Add(value.Index); - writer->Add(value.Version); + if (SerializeEntityReferences) + { + value = EntityRemapUtility.RemapEntity(m_EntityRemapInfo, value); + writer->Add(value.Index); + writer->Add(value.Version); + } + else + throw new ArgumentException("Tried to serialized an Entity reference however entity reference serialization has been explicitly disabled."); } void Unity.Serialization.Binary.Adapters.IBinaryAdapter.Serialize(UnsafeAppendBuffer* writer, BlobAssetReferenceData value) @@ -136,7 +155,7 @@ internal struct SharedComponentRecord public int ComponentSize; } - public static int CurrentFileFormatVersion = 50; + public static int CurrentFileFormatVersion = 57; public static unsafe void DeserializeWorld(ExclusiveEntityTransaction manager, BinaryReader reader, object[] unityObjects = null) { @@ -258,7 +277,7 @@ public static unsafe void DeserializeWorld(ExclusiveEntityTransaction manager, B bufferPatches.Dispose(); } - if (totalBlobAssetSize != 0 && archetype->ContainsBlobAssetRefs) + if (totalBlobAssetSize != 0 && archetype->HasBlobAssetRefs) { blobAssetRefChunks.Add(new ArchetypeChunk(chunk, s)); PatchBlobAssetsInChunkAfterLoad(chunk, allBlobAssetData); @@ -266,6 +285,7 @@ public static unsafe void DeserializeWorld(ExclusiveEntityTransaction manager, B ChunkDataUtility.AddExistingChunk(chunk, remapedSharedComponentValues); mcs.Playback(ref s->ManagedChangesTracker); + s->InvalidateChunkListCacheForChangedArchetypes(); // TODO: hoist this & Playback out of loop? if (chunk->metaChunkEntity != Entity.Null) { @@ -298,7 +318,7 @@ public static unsafe void DeserializeWorld(ExclusiveEntityTransaction manager, B // so remove the ref that was added on deserialization for (int i = 0; i < numSharedComponents; ++i) { - mcs.RemoveReference(i + 1); + access->RemoveSharedComponentReference(i + 1); } } @@ -375,6 +395,8 @@ unsafe internal static UnsafeArchetypePtrList GetAllArchetypes(EntityComponentSt archetypes.Ptr[count++] = entityComponentStore->m_Archetypes.Ptr[i]; } + NativeSortExtension.Sort((IntPtr*)archetypes.Ptr, archetypes.Length, default(StableArchetypeCompare)); + return archetypes; } @@ -456,7 +478,7 @@ internal static unsafe void SerializeWorldInternal(EntityManager entityManager, for (int iType = 0; iType < archetype->TypesCount; ++iType) { var typeIndex = archetype->Types[iType].TypeIndex; - var typeInfo = TypeManager.GetTypeInfo(typeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(typeIndex); var hash = typeInfo.StableTypeHash; #if !UNITY_DOTSRUNTIME ValidateTypeForSerialization(typeInfo); @@ -526,6 +548,7 @@ internal static unsafe void SerializeWorldInternal(EntityManager entityManager, //TODO: ensure chunks are defragged? var bufferPatches = new NativeList(128, Allocator.Temp); + var bufferPtrs = new NativeList(128, Allocator.Temp); var totalChunkCount = GenerateRemapInfo(entityManager, archetypeArray, entityRemapInfos); referencedObjects = null; @@ -554,6 +577,7 @@ internal static unsafe void SerializeWorldInternal(EntityManager entityManager, { var chunk = archetype->Chunks[ci]; bufferPatches.Clear(); + bufferPtrs.Clear(); UnsafeUtility.MemCpy(tempChunk, chunk, Chunk.kChunkSize); tempChunk->metaChunkEntity = EntityRemapUtility.RemapEntity(ref entityRemapInfos, tempChunk->metaChunkEntity); @@ -564,19 +588,18 @@ internal static unsafe void SerializeWorldInternal(EntityManager entityManager, byte* tempChunkBuffer = tempChunk->Buffer; EntityRemapUtility.PatchEntities(archetype->ScalarEntityPatches, archetype->ScalarEntityPatchCount, archetype->BufferEntityPatches, archetype->BufferEntityPatchCount, tempChunkBuffer, tempChunk->Count, ref entityRemapInfos); - if (archetype->ContainsBlobAssetRefs) + if (archetype->HasBlobAssetRefs) PatchBlobAssetsInChunkBeforeSave(tempChunk, chunk, blobAssetOffsets, blobAssetMap); - FillPatchRecordsForChunk(chunk, bufferPatches); ClearChunkHeaderComponents(tempChunk); ChunkDataUtility.MemsetUnusedChunkData(tempChunk, 0); + FillBufferPatchRecordsAndClearBufferPointer(tempChunk, bufferPatches, bufferPtrs); tempChunk->Archetype = (Archetype*)a; writer.WriteBytes(tempChunk, Chunk.kChunkSize); writer.Write(bufferPatches.Length); - if (bufferPatches.Length > 0) { writer.WriteList(bufferPatches); @@ -586,9 +609,9 @@ internal static unsafe void SerializeWorldInternal(EntityManager entityManager, for (int i = 0; i < bufferPatches.Length; ++i) { var patch = bufferPatches[i]; - var header = (BufferHeader*)OffsetFromPointer(tempChunk->Buffer, patch.ChunkOffset); - writer.WriteBytes(header->Pointer, patch.AllocSizeBytes); - BufferHeader.Destroy(header); + var bufferPtr = (void*)bufferPtrs[i]; + writer.WriteBytes(bufferPtr, patch.AllocSizeBytes); + BufferHeader.FreeBufferPtr(bufferPtr); } } } @@ -599,6 +622,7 @@ internal static unsafe void SerializeWorldInternal(EntityManager entityManager, blobAssetMap.Dispose(); bufferPatches.Dispose(); + bufferPtrs.Dispose(); typeHashToIndexMap.Dispose(); } @@ -656,15 +680,18 @@ static unsafe void WriteSharedAndManagedComponents( var propertiesWriter = new ManagedObjectBinaryWriter(&allManagedObjectsBuffer); // Custom handling for blob asset fields. This adapter will take care of writing out the byte offset for each blob asset encountered. - propertiesWriter.AddAdapter(new ManagedObjectWriterAdapter(remapping, blobAssetMap, blobAssetOffsets)); + var adapter = new ManagedObjectWriterAdapter(remapping, blobAssetMap, blobAssetOffsets); + propertiesWriter.AddAdapter(adapter); + // Do not allow shared components to serialize entity references + adapter.SerializeEntityReferences = false; for (int i = 0; i < sharedComponentIndicies.Length; ++i) { var index = sharedComponentIndicies[i]; var sharedData = mcs.GetSharedComponentDataNonDefaultBoxed(index); var type = sharedData.GetType(); var typeIndex = TypeManager.GetTypeIndex(type); - var typeInfo = TypeManager.GetTypeInfo(typeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(typeIndex); var managedObject = Convert.ChangeType(sharedData, type); propertiesWriter.WriteObject(managedObject); @@ -676,6 +703,8 @@ static unsafe void WriteSharedAndManagedComponents( }; } + // Ensure we allow non-shared components to have their entity references serialized + adapter.SerializeEntityReferences = true; for (int a = 0; a < archetypeArray.Length; ++a) { var archetype = archetypeArray.Ptr[a]; @@ -690,7 +719,7 @@ static unsafe void WriteSharedAndManagedComponents( { var index = archetype->TypeMemoryOrder[i + archetype->FirstManagedComponent]; var managedComponentIndices = (int*)ChunkDataUtility.GetComponentDataRO(chunk, 0, index); - var cType = TypeManager.GetTypeInfo(archetype->Types[index].TypeIndex); + ref readonly var cType = ref TypeManager.GetTypeInfo(archetype->Types[index].TypeIndex); for (int ei = 0; ei < chunk->Count; ++ei) { @@ -724,7 +753,7 @@ static unsafe void WriteSharedAndManagedComponents( Type type = obj.GetType(); var typeIndex = TypeManager.GetTypeIndex(type); - var typeInfo = TypeManager.GetTypeInfo(typeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(typeIndex); int size = UnsafeUtility.SizeOf(type); Assert.IsTrue(size >= 0); @@ -737,7 +766,7 @@ static unsafe void WriteSharedAndManagedComponents( var dataPtr = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(obj, out ulong handle); dataPtr += TypeManager.ObjectOffset; - if (typeInfo.HasEntities) + if (typeInfo.EntityOffsetCount != 0) { var offsets = TypeManager.GetEntityOffsets(typeInfo); for (var offsetIndex = 0; offsetIndex < typeInfo.EntityOffsetCount; offsetIndex++) @@ -822,7 +851,7 @@ static unsafe void ReadSharedComponents(ExclusiveEntityTransaction manager, Mana { var record = sharedComponentRecordArray[i]; var typeIndex = TypeManager.GetTypeIndexFromStableTypeHash(record.StableTypeHash); - var typeInfo = TypeManager.GetTypeInfo(typeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(typeIndex); var managedObject = managedDataReader.ReadObject(typeInfo.Type); var currentHash = TypeManager.GetHashCode(managedObject, typeInfo.TypeIndex); var sharedComponentIndex = mcs.InsertSharedComponentAssumeNonDefault(typeIndex, currentHash, managedObject); @@ -863,15 +892,15 @@ private static bool IsTypeValidForSerialization(Type type) return true; } - private static void ValidateTypeForSerialization(TypeManager.TypeInfo typeInfo) + private static void ValidateTypeForSerialization(in TypeManager.TypeInfo typeInfo) { // Shared Components are expected to be handled specially and are not required to be blittable if (typeInfo.Category == TypeManager.TypeCategory.ISharedComponentData) { - if (typeInfo.HasEntities) + if (TypeManager.HasEntityReferences(typeInfo.TypeIndex)) { throw new ArgumentException( - $"Shared component type '{TypeManager.GetType(typeInfo.TypeIndex)}' contains an (potentially nested) Entity field. " + + $"Shared component type '{TypeManager.GetType(typeInfo.TypeIndex)}' might contain a (potentially nested) Entity field. " + $"Serializing of shared components with Entity fields is not supported"); } return; @@ -915,7 +944,7 @@ static unsafe void GatherAllUsedBlobAssets( for (int a = 0; a < archetypeArray.Length; ++a) { var archetype = archetypeArray.Ptr[a]; - if (!archetype->ContainsBlobAssetRefs) + if (!archetype->HasBlobAssetRefs) continue; var typeCount = archetype->TypesCount; @@ -930,7 +959,7 @@ static unsafe void GatherAllUsedBlobAssets( if (type.IsZeroSized || type.IsManagedComponent) continue; - var ct = TypeManager.GetTypeInfo(type.TypeIndex); + ref readonly var ct = ref TypeManager.GetTypeInfo(type.TypeIndex); var blobAssetRefCount = ct.BlobAssetRefOffsetCount; if (blobAssetRefCount == 0) continue; @@ -985,6 +1014,8 @@ static unsafe void GatherAllUsedBlobAssets( for (var i = 0; i < sharedComponentIndices.Length; i++) { var sharedComponentIndex = sharedComponentIndices[i]; + if (!mcs.HasBlobReferences(sharedComponentIndex)) + continue; var sharedComponentValue = mcs.GetSharedComponentDataNonDefaultBoxed(sharedComponentIndex); managedObjectBlobs.GatherBlobAssetReferences(sharedComponentValue, blobAssets, blobAssetMap); } @@ -1004,7 +1035,7 @@ static unsafe void GatherAllUsedBlobAssets( { var typeIndexInArchetype = archetype->TypeMemoryOrder[archetype->FirstManagedComponent + unorderedTypeIndexInArchetype]; var managedComponentIndices = (int*)ChunkDataUtility.GetComponentDataRO(chunk, 0, typeIndexInArchetype); - var typeInfo = TypeManager.GetTypeInfo(archetype->Types[typeIndexInArchetype].TypeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(archetype->Types[typeIndexInArchetype].TypeIndex); for (var entityIndex = 0; entityIndex < chunk->Count; entityIndex++) { @@ -1021,7 +1052,8 @@ static unsafe void GatherAllUsedBlobAssets( throw new InvalidOperationException($"Managed object type {managedComponentValue.GetType()} doesn't match component type in archetype {typeInfo.Type}"); } - managedObjectBlobs.GatherBlobAssetReferences(managedComponentValue, blobAssets, blobAssetMap); + if (typeInfo.HasBlobAssetRefs) + managedObjectBlobs.GatherBlobAssetReferences(managedComponentValue, blobAssets, blobAssetMap); } } } @@ -1032,27 +1064,11 @@ static unsafe void GatherAllUsedBlobAssets( for (var i = 0; i < sharedComponentIndices.Length; i++) { var sharedComponentIndex = sharedComponentIndices[i]; - var sharedComponentValue = mcs.GetSharedComponentDataNonDefaultBoxed(sharedComponentIndex); - managedObjectBlobs.GatherBlobAssetReferences(sharedComponentValue, blobAssets, blobAssetMap); - } - - for (var i = 0; i < sharedComponentIndices.Length; i++) - { - var sharedComponentIndex = sharedComponentIndices[i]; - var sharedComponentValue = mcs.GetSharedComponentDataNonDefaultBoxed(sharedComponentIndex); - - var type = sharedComponentValue.GetType(); - var typeIndex = TypeManager.GetTypeIndex(type); - var typeInfo = TypeManager.GetTypeInfo(typeIndex); - - var ptr = (byte*)UnsafeUtility.PinGCObjectAndGetAddress(sharedComponentValue, out var handle); - ptr += TypeManager.ObjectOffset; - - var blobAssetRefOffsets = TypeManager.GetBlobAssetRefOffsets(typeInfo); - var blobAssetRefCount = typeInfo.BlobAssetRefOffsetCount; - AddBlobAssetRefInfo(ptr, blobAssetRefOffsets, blobAssetRefCount, ref blobAssetMap, ref blobAssets); - - UnsafeUtility.ReleaseGCObject(handle); + if (mcs.HasBlobReferences(sharedComponentIndex)) + { + var sharedComponentValue = mcs.GetSharedComponentDataNonDefaultBoxed(sharedComponentIndex); + managedObjectBlobs.GatherBlobAssetReferences(sharedComponentValue, blobAssets, blobAssetMap); + } } } #endif @@ -1091,7 +1107,7 @@ private static unsafe void PatchBlobAssetsInChunkBeforeSave(Chunk* tempChunk, Ch if (type.IsZeroSized || type.IsManagedComponent) continue; - var ct = TypeManager.GetTypeInfo(type.TypeIndex); + ref readonly var ct = ref TypeManager.GetTypeInfo(type.TypeIndex); var blobAssetRefCount = ct.BlobAssetRefOffsetCount; if (blobAssetRefCount == 0) continue; @@ -1160,7 +1176,7 @@ private static unsafe void PatchBlobAssetsInChunkAfterLoad(Chunk* chunk, byte* a if (type.IsZeroSized) continue; - var ct = TypeManager.GetTypeInfo(type.TypeIndex); + ref readonly var ct = ref TypeManager.GetTypeInfo(type.TypeIndex); var blobAssetRefCount = ct.BlobAssetRefOffsetCount; if (blobAssetRefCount == 0) continue; @@ -1222,30 +1238,29 @@ private static unsafe void PatchBlobAssetsInChunkAfterLoad(Chunk* chunk, byte* a } } - private static unsafe void FillPatchRecordsForChunk(Chunk* chunk, NativeList bufferPatches) + private static unsafe void FillBufferPatchRecordsAndClearBufferPointer(Chunk* chunk, NativeList bufferPatches, NativeList bufferPtrs) { - var archetype = chunk->Archetype; byte* tempChunkBuffer = chunk->Buffer; int entityCount = chunk->Count; + Archetype* archetype = chunk->Archetype; // Find all buffer pointer locations and work out how much memory the deserializer must allocate on load. for (int ti = 0; ti < archetype->TypesCount; ++ti) { int index = archetype->TypeMemoryOrder[ti]; var type = archetype->Types[index]; - if (type.IsZeroSized) - continue; if (type.IsBuffer) { - var ct = TypeManager.GetTypeInfo(type.TypeIndex); - int subArrayOffset = archetype->Offsets[index]; - BufferHeader* header = (BufferHeader*)OffsetFromPointer(tempChunkBuffer, subArrayOffset); - int stride = archetype->SizeOfs[index]; + Assert.IsFalse(type.IsZeroSized); + + ref readonly var ct = ref TypeManager.GetTypeInfo(type.TypeIndex); var elementSize = ct.ElementSize; for (int bi = 0; bi < entityCount; ++bi) { + var header = (BufferHeader*)ChunkDataUtility.GetComponentDataRO(chunk, bi, index); + if (header->Pointer != null) { int capacityInBytes = elementSize * header->Capacity; @@ -1254,9 +1269,9 @@ private static unsafe void FillPatchRecordsForChunk(Chunk* chunk, NativeListPointer); + header->Pointer = null; } - - header = (BufferHeader*)OffsetFromPointer(header, stride); } } } diff --git a/Unity.Entities/Serialization/SerializeUtilityToYaml.cs b/Unity.Entities/Serialization/SerializeUtilityToYaml.cs index a4619cf0..43d26c2a 100644 --- a/Unity.Entities/Serialization/SerializeUtilityToYaml.cs +++ b/Unity.Entities/Serialization/SerializeUtilityToYaml.cs @@ -7,7 +7,9 @@ using System.IO; using System.Linq; using System.Runtime.InteropServices; +using Unity.Assertions; using Unity.Collections.LowLevel.Unsafe; +using Unity.Serialization.Json; namespace Unity.Entities.Serialization { @@ -43,8 +45,10 @@ public static unsafe void SerializeWorldIntoYAML(EntityManager entityManager, St var entityComponentStore = access->EntityComponentStore; using (var archetypeArray = GetAllArchetypes(entityComponentStore, Allocator.Temp)) + using (var entityRemapInfos = new NativeArray(entityManager.EntityCapacity, Allocator.Temp)) using (yaml.WriteCollection(k_ChunksDataCollectionTag)) { + GenerateRemapInfo(entityManager, archetypeArray, entityRemapInfos); for (int a = 0; a < archetypeArray.Length; ++a) { var archetype = archetypeArray.Ptr[a]; @@ -55,7 +59,7 @@ public static unsafe void SerializeWorldIntoYAML(EntityManager entityManager, St for (var ci = 0; ci < archetype->Chunks.Count; ++ci) { var chunk = archetype->Chunks[ci]; - WriteChunkData(yaml, entityManager, chunk, archetype, dumpChunkRawData); + WriteChunkData(yaml, entityManager, entityRemapInfos, chunk, archetype, a, dumpChunkRawData); } } } @@ -182,26 +186,42 @@ static unsafe void WriteArchetypes(YamlWriter writer, EntityManager entityManage if (a->Prefab) props.Add(nameof(Archetype.Prefab)); if (a->HasChunkComponents) props.Add(nameof(Archetype.HasChunkComponents)); if (a->HasChunkHeader) props.Add(nameof(Archetype.HasChunkHeader)); - if (a->ContainsBlobAssetRefs) props.Add(nameof(Archetype.ContainsBlobAssetRefs)); + if (a->HasBlobAssetRefs) props.Add(nameof(Archetype.HasBlobAssetRefs)); writer.WriteInlineSequence("properties", props); } } } } - static unsafe void WriteChunkData(YamlWriter writer, EntityManager entityManager, Chunk* initialChunk, Archetype* archetype, bool dumpChunkRawData) + static unsafe void WriteChunkData(YamlWriter writer, EntityManager entityManager, NativeArray entityRemapInfos, Chunk* initialChunk, Archetype* archetype, int archetypeIndex, bool dumpChunkRawData) { + var tempChunkMem = stackalloc byte[Chunk.kChunkSize]; + Chunk* tempChunk = (Chunk*)tempChunkMem; + if (dumpChunkRawData) + { + UnsafeUtility.MemCpy(tempChunk, initialChunk, Chunk.kChunkSize); + + byte* tempChunkBuffer = tempChunk->Buffer; + + BufferHeader.PatchAfterCloningChunk(tempChunk); + EntityRemapUtility.PatchEntities(archetype->ScalarEntityPatches, archetype->ScalarEntityPatchCount, archetype->BufferEntityPatches, archetype->BufferEntityPatchCount, tempChunkBuffer, tempChunk->Count, ref entityRemapInfos); + ClearChunkHeaderComponents(tempChunk); + ChunkDataUtility.MemsetUnusedChunkData(tempChunk, 0); + + tempChunk->Archetype = (Archetype*)archetypeIndex; + } + using (writer.WriteCollection(k_ChunkDataCollectionTag)) { using (writer.WriteCollection("Header")) { WriteEntity(writer, nameof(Chunk.metaChunkEntity), initialChunk->metaChunkEntity); - writer.WriteKeyValue(nameof(Chunk.Capacity), initialChunk->Capacity) - .WriteKeyValue(nameof(Chunk.Count), initialChunk->Count); + writer.WriteKeyValue(nameof(Chunk.Capacity), initialChunk->Capacity); + writer.WriteKeyValue(nameof(Chunk.Count), initialChunk->Count); if (dumpChunkRawData) { - writer.WriteFormattedBinaryData("RawData", initialChunk, Chunk.kBufferOffset); + writer.WriteFormattedBinaryData("Header-RawData", tempChunk, Chunk.kBufferOffset); } } @@ -214,7 +234,7 @@ static unsafe void WriteChunkData(YamlWriter writer, EntityManager entityManager { var componentType = &chunkTypes[typeI]; var type = TypeManager.GetType(componentType->TypeIndex); - var typeInfo = TypeManager.GetTypeInfo(componentType->TypeIndex); + ref readonly var typeInfo = ref TypeManager.GetTypeInfo(componentType->TypeIndex); if (componentType->IsChunkComponent) { @@ -232,12 +252,11 @@ static unsafe void WriteChunkData(YamlWriter writer, EntityManager entityManager for (int i = 0; i < initialChunk->Count;) { - var entity = (Entity)Marshal.PtrToStructure((IntPtr)initialChunk->Buffer + archetype->SizeOfs[0] * i, type); - if (entityManager.Exists(entity)) - { - entitiesByChunkIndex.Add(i, entity); - i++; - } + var entity = *(Entity*)(initialChunk->Buffer + archetype->SizeOfs[0] * i); + Assert.IsTrue(entityManager.Exists(entity)); + + entitiesByChunkIndex.Add(i, entity); + i++; } } else @@ -250,12 +269,16 @@ static unsafe void WriteChunkData(YamlWriter writer, EntityManager entityManager // Parse the Component Data for this chunk and store them using (writer.WriteCollection(k_ComponentDataCollectionTag)) { + var access = entityManager.GetCheckedEntityDataAccess(); foreach (var typeI in componentDataList) { var componentTypeInArchetype = &chunkTypes[typeI]; var componentType = TypeManager.GetType(componentTypeInArchetype->TypeIndex); - var componentTypeInfo = TypeManager.GetTypeInfo(componentTypeInArchetype->TypeIndex); - var componentExtractedInfo = TypeDataExtractor.GetTypeExtractedInfo(componentType); + + ref readonly var componentTypeInfo = ref TypeManager.GetTypeInfo(componentTypeInArchetype->TypeIndex); + TypeDataExtractor.TypeExtractedInfo componentExtractedInfo = null; + if (UnsafeUtility.IsUnmanaged(componentType)) + componentExtractedInfo = TypeDataExtractor.GetTypeExtractedInfo(componentType); using (writer.WriteCollection(k_ComponentDataTag)) { @@ -287,10 +310,12 @@ static unsafe void WriteChunkData(YamlWriter writer, EntityManager entityManager { var header = (BufferHeader*)compData; var begin = BufferHeader.GetElementPointer(header); - var size = Marshal.SizeOf(componentType); + var size = componentTypeInfo.ElementSize; using (writer.WriteCollection(entity.ToString())) { + writer.WriteLine($"Length: {header->Length} Capacity: {header->Capacity}"); + for (var it = 0; it < header->Length; it++) { var item = begin + (size * it); @@ -305,27 +330,74 @@ static unsafe void WriteChunkData(YamlWriter writer, EntityManager entityManager writer.WriteInlineMap($"{it:0000}", entityData); } } + + if (dumpChunkRawData) + { + if (componentSize > 0) + writer.WriteFormattedBinaryData("ComponentRawData", begin, size * header->Length, 0); + } } - // If it's a Component Data else { - // Dump each field of the current entity's component data - foreach (var componentFieldInfo in componentExtractedInfo.Fields) + // If it's a Component Data + if (componentTypeInfo.Category == TypeManager.TypeCategory.ComponentData && !componentTypeInfo.Type.IsClass || componentTypeInfo.Category == TypeManager.TypeCategory.EntityData) + { + // Dump each field of the current entity's component data + foreach (var componentFieldInfo in componentExtractedInfo.Fields) + { + var compDataObject = Marshal.PtrToStructure((IntPtr)compData + componentFieldInfo.Offset, componentFieldInfo.Type); + entityData.Add(componentFieldInfo.Name, compDataObject.ToString()); + } + writer.WriteInlineMap(entity.ToString(), entityData); + } + else if (componentTypeInfo.Category == TypeManager.TypeCategory.ComponentData && componentTypeInfo.Type.IsClass) { - var compDataObject = Marshal.PtrToStructure((IntPtr)compData + componentFieldInfo.Offset, componentFieldInfo.Type); - entityData.Add(componentFieldInfo.Name, compDataObject.ToString()); + var obj = access->ManagedComponentStore.GetManagedComponent(*(int*)(compData)); + if (obj == null) + writer.WriteLine("null"); + else + writer.WriteLine(JsonSerialization.ToJson(obj)); + } + //@Todo: Shared components + + if (dumpChunkRawData) + { + if (componentSize > 0) + writer.WriteFormattedBinaryData("ComponentRawData", compData, componentSize, 0); } - writer.WriteInlineMap(entity.ToString(), entityData); } } - if (dumpChunkRawData) - { - var csize = EntityComponentStore.GetComponentArraySize(componentSize, archetype->ChunkCapacity); - writer.WriteFormattedBinaryData("RawData", componentsBuffer, csize, componentOffsetInChunk + Chunk.kBufferOffset); - } } } } + + if (dumpChunkRawData) + { + writer.WriteLine("Archetype: " + initialChunk->Archetype->ToString()); + + using (var bufferPatches = new NativeList(128, Allocator.Temp)) + using (var bufferPtrs = new NativeList(128, Allocator.Temp)) + { + tempChunk->Archetype = archetype; + FillBufferPatchRecordsAndClearBufferPointer(tempChunk, bufferPatches, bufferPtrs); + for (int i = 0; i < bufferPtrs.Length; ++i) + { + var ptr = (void*)bufferPtrs[i]; + BufferHeader.FreeBufferPtr(ptr); + } + } + + for (int i = 0; i != tempChunk->Archetype->TypesCount; i++) + { + var begin = archetype->Offsets[i]; + var end = i == tempChunk->Archetype->TypesCount -1 ? Chunk.GetChunkBufferSize() : archetype->Offsets[i+1]; + writer.WriteLine("Type: " + tempChunk->Archetype->Types[i]); + writer.WriteFormattedBinaryData("Chunk Row", tempChunk->Buffer + begin, end - begin, 0); + } + + //writer.WriteLine("Archetype: " + initialChunk->Archetype->ToString()); + //writer.WriteFormattedBinaryData("Complete chunk", tempChunk, Chunk.kChunkSize, 0); + } } } } diff --git a/Unity.Entities/SortingUtilities.cs b/Unity.Entities/SortingUtilities.cs index 174a5e38..84ca1c19 100644 --- a/Unity.Entities/SortingUtilities.cs +++ b/Unity.Entities/SortingUtilities.cs @@ -169,211 +169,7 @@ public void Execute() } } } - - /// - /// Merge sort index list referencing NativeArray values. - /// Provide list of shared values, indices to shared values, and lists of source i - /// value indices with identical shared value. - /// As an example: - /// Given Source NativeArray: [A,A,A,B,B,C,C,A,B] - /// Provides: - /// Shared value indices: [0,0,0,1,1,2,2,0,1] - /// Shared value counts: [4,3,2] (number of occurrences of a shared value) - /// Shared values: [A,B,C] (not stored in this structure) - /// Sorted indices: [0,1,2,7,3,4,8,5,6] (using these indices to look up values in the source array would give you [A,A,A,A,B,B,B,C,C]) - /// Shared value start offsets (into sorted indices): [0,4,7] - /// - /// - [Obsolete("NativeArraySharedValues is deprecated. Non-generic type for available as NativeArraySharedInt (RemovedAfter 2020-06-04)", false)] - public struct NativeArraySharedValues : IDisposable - where S : struct, IComparable - { - [ReadOnly] private readonly NativeArray m_SourceBuffer; - - // Sorted indices into m_SourceBuffer - private NativeArray m_SourceIndexBySortedSourceIndex; - - // For each unique value found in m_SourceBuffer, what is the index into m_SortedSourceIndices - private NativeList m_SortedSourceIndexBySharedIndex; - - // For each index of m_SharedValueIndices, how many values in m_SortedSourceIndices share same value? - private NativeList m_SharedIndexCountsBySharedIndex; - - // For each index of m_SourceBuffer, what is the index into m_SharedValue - private NativeArray m_SharedIndicesBySourceIndex; - - /// - /// Original Source Values (passed into constructor) - /// - public NativeArray SourceBuffer => m_SourceBuffer; - - public NativeArraySharedValues(NativeArray sourceBuffer, Allocator allocator) - { - m_SourceBuffer = sourceBuffer; - m_SourceIndexBySortedSourceIndex = new NativeArray(sourceBuffer.Length, allocator); - m_SortedSourceIndexBySharedIndex = new NativeList(allocator); - m_SharedIndexCountsBySharedIndex = new NativeList(allocator); - m_SharedIndicesBySourceIndex = new NativeArray(sourceBuffer.Length, allocator); - } - - public void Dispose() - { - m_SourceIndexBySortedSourceIndex.Dispose(); - m_SortedSourceIndexBySharedIndex.Dispose(); - m_SharedIndexCountsBySharedIndex.Dispose(); - m_SharedIndicesBySourceIndex.Dispose(); - } - - /// - /// Schedule jobs to collect and sort shared values. - /// - /// Dependent JobHandle - /// JobHandle - public JobHandle Schedule(JobHandle inputDeps) - { - var length = m_SourceBuffer.Length; - if (length == 0) - return inputDeps; - - var segmentCount = (length + 1023) / 1024; - var copyIndexedValues = new NativeArray>(length, Allocator.TempJob); - var copyIndexedValuesJob = new CopyIndexedValues - { - Src = m_SourceBuffer, - Dst = copyIndexedValues - }; - var copyIndexValuesJobHandle = copyIndexedValuesJob.Schedule(length, 1024, inputDeps); - - var workerSegmentCount = segmentCount / JobsUtility.MaxJobThreadCount; // .JobsWorkerCount - var segmentSortJob = new SegmentSort - { - Data = copyIndexedValues, - SegmentWidth = 1024 - }; - var segmentSortJobHandle = - segmentSortJob.Schedule(segmentCount, workerSegmentCount, copyIndexValuesJobHandle); - var segmentSortMergeJob = new SegmentSortMerge - { - IndexedSourceBuffer = copyIndexedValues, - SourceIndexBySortedSourceIndex = m_SourceIndexBySortedSourceIndex, - SortedSourceIndexBySharedIndex = m_SortedSourceIndexBySharedIndex, - SharedIndexCountsBySharedIndex = m_SharedIndexCountsBySharedIndex, - SharedIndicesBySourceIndex = m_SharedIndicesBySourceIndex, - SegmentWidth = 1024 - }; - var segmentSortMergeJobHandle = segmentSortMergeJob.Schedule(segmentSortJobHandle); - - return copyIndexedValues.Dispose(segmentSortMergeJobHandle); - } - - /// - /// Indices into source NativeArray sorted by value - /// - /// Index NativeArray where each element refers to an element in the source NativeArray - public NativeArray GetSortedIndices() => m_SourceIndexBySortedSourceIndex; - - /// - /// Number of shared (unique) values in source NativeArray - /// - public int SharedValueCount => m_SortedSourceIndexBySharedIndex.Length; - - /// - /// Index of shared value associated with an element in the source buffer. - /// For example, given source array: [A,A,A,B,B,C,C,A,B] - /// shared values are: [A,B,C] - /// Given the index 2 into the source array (A), the return value would be 0 (A in shared values). - /// - /// Index of source value - /// Index into the list of shared values - public int GetSharedIndexBySourceIndex(int indexIntoSourceBuffer) => - m_SharedIndicesBySourceIndex[indexIntoSourceBuffer]; - - /// - /// Indices into shared values. - /// For example, given source array: [A,A,A,B,B,C,C,A,B] - /// shared values are: [A,B,C] - /// shared index array would contain: [0,0,0,1,1,2,2,0,1] - /// - /// Index NativeArray where each element refers to the index of a shared value in a list of shared (unique) values. - public NativeArray GetSharedIndexArray() => m_SharedIndicesBySourceIndex; - - /// - /// Array of indices into shared value indices NativeArray which share the same source value - /// For example, given Source NativeArray: [A,A,A,B,B,C,C,A,B] - /// shared values are: [A,B,C] - /// Shared value indices: [0,0,0,1,1,2,2,0,1] - /// Given the index 2 into the source array (A), - /// the returned array would contain: [0,1,2,7] (indices in SharedValueIndices that have a value of 0, i.e. where A is in the shared values) - /// - /// Index of source value - /// Index NativeArray where each element refers to an index into the shared value indices array. - public NativeArray GetSharedValueIndicesBySourceIndex(int indexIntoSourceBuffer) - { - var sharedIndex = m_SharedIndicesBySourceIndex[indexIntoSourceBuffer]; - return GetSharedValueIndicesBySharedIndex(sharedIndex); - } - - /// - /// Number of occurrences of a shared (unique) value shared by a given a source index. - /// For example, given source array: [A,A,A,B,B,C,C,A,B] - /// shared values are: [A,B,C] - /// Shared value counts: [4,3,2] (number of occurrences of a shared value) - /// Given the index 2 into the source array (A), the return value would be 4 (for 4 occurrences of A in the source buffer). - /// - /// Index of source value. - /// Count of total occurrences of the shared value at a source buffer index in the source buffer. - public int GetSharedValueIndexCountBySourceIndex(int indexIntoSourceBuffer) - { - var sharedIndex = m_SharedIndicesBySourceIndex[indexIntoSourceBuffer]; - return m_SharedIndexCountsBySharedIndex[sharedIndex]; - } - - /// - /// Array of number of occurrences of all shared values. - /// For example, given source array: [A,A,A,B,B,C,C,A,B] - /// shared values are: [A,B,C] - /// Shared value counts: [4,3,2] (number of occurrences of a shared value) - /// - /// Count NativeArray where each element refers to the number of occurrences of each shared value. - public unsafe NativeArray GetSharedValueIndexCountArray() => m_SharedIndexCountsBySharedIndex; - - /// - /// Array of indices into source NativeArray which share the same shared value - /// For example, given source array: [A,A,A,B,B,C,C,A,B] - /// shared values are: [A,B,C] - /// Shared value counts: [4,3,2] (number of occurrences of a shared value) - /// Shared value start offsets (into sorted indices): [0,4,7] - /// Given the index 0 into the shared value array (A), the returned array would contain [0,1,2,7] (indices into the source array which point to the shared value A). - /// - /// Index of shared value - /// Index NativeArray where each element refers to an index into the source array. - public unsafe NativeArray GetSharedValueIndicesBySharedIndex(int sharedValueIndex) - { - var sortedSourceIndex = m_SortedSourceIndexBySharedIndex[sharedValueIndex]; - var sharedValueIndexCount = m_SharedIndexCountsBySharedIndex[sharedValueIndex]; - - // Capacity cannot be changed, so offset is valid. - var rawIndices = - ((int*)NativeArrayUnsafeUtility.GetUnsafeBufferPointerWithoutChecks( - m_SourceIndexBySortedSourceIndex)) + sortedSourceIndex; - var arr = NativeArrayUnsafeUtility.ConvertExistingDataToNativeArray(rawIndices, sharedValueIndexCount, Allocator.None); -#if ENABLE_UNITY_COLLECTIONS_CHECKS - SharedValueIndicesSetSafetyHandle(ref arr); -#endif - return arr; - } - -#if ENABLE_UNITY_COLLECTIONS_CHECKS - // Uncomment when NativeArrayUnsafeUtility includes these conditional checks - // [Conditional("ENABLE_UNITY_COLLECTIONS_CHECKS")] - private void SharedValueIndicesSetSafetyHandle(ref NativeArray arr) - { - NativeArrayUnsafeUtility.SetAtomicSafetyHandle(ref arr, - NativeArrayUnsafeUtility.GetAtomicSafetyHandle(m_SourceIndexBySortedSourceIndex)); - } - -#endif - } + // @macton This version simply fixes the sorting issues in the most expidient way. // - Next version will need to reimplement the merge sort with lookaside buffers. struct IndexedInt : IComparable diff --git a/Unity.Entities/SourceGenerators.meta b/Unity.Entities/SourceGenerators.meta new file mode 100644 index 00000000..d78e03a6 --- /dev/null +++ b/Unity.Entities/SourceGenerators.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96cf031de4c681a4fbe66b4fc5bc65f2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.dll b/Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.dll new file mode 100644 index 0000000000000000000000000000000000000000..2fa0c2557e41972fe97d24c5b7ce31fc39ed440f GIT binary patch literal 25088 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 literal 0 HcmV?d00001 diff --git a/Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.dll.meta b/Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.dll.meta new file mode 100644 index 00000000..6bac548b --- /dev/null +++ b/Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.dll.meta @@ -0,0 +1,72 @@ +fileFormatVersion: 2 +guid: 337e0351b6ad38e43b8caf34c2a24600 +labels: +- RunOnlyOnAssembliesWithReference +- SourceGenerator +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 1 + validateReferences: 0 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.pdb b/Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.pdb new file mode 100644 index 0000000000000000000000000000000000000000..c742370b19fc2a2cba06584c494eb7a10c578e81 GIT binary patch literal 5104 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 EZ~0oyga7~l literal 0 HcmV?d00001 diff --git a/Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.pdb.meta b/Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.pdb.meta new file mode 100644 index 00000000..570484ff --- /dev/null +++ b/Unity.Entities/SourceGenerators/AuthoringComponentSourceGenerator.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f4d8c67c9698afb44b92a4d9ff785ccd +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities/SourceGenerators/Common.dll b/Unity.Entities/SourceGenerators/Common.dll new file mode 100644 index 0000000000000000000000000000000000000000..5e8f80043f524ceb858aa237411f484314efea74 GIT binary patch literal 23040 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

%v3 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 literal 0 HcmV?d00001 diff --git a/Unity.Entities/SourceGenerators/Common.dll.meta b/Unity.Entities/SourceGenerators/Common.dll.meta new file mode 100644 index 00000000..8f1c5a23 --- /dev/null +++ b/Unity.Entities/SourceGenerators/Common.dll.meta @@ -0,0 +1,72 @@ +fileFormatVersion: 2 +guid: 862418bf24d54cd2a59391036e0ee672 +labels: +- RunOnlyOnAssembliesWithReference +- SourceGenerator +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 1 + validateReferences: 0 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities/SourceGenerators/Common.pdb b/Unity.Entities/SourceGenerators/Common.pdb new file mode 100644 index 0000000000000000000000000000000000000000..ba2b0a09293fbaaedd35e7297efb6313536965ca GIT binary patch literal 6752 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 EA6OY6TmS$7 literal 0 HcmV?d00001 diff --git a/Unity.Entities/SourceGenerators/Common.pdb.meta b/Unity.Entities/SourceGenerators/Common.pdb.meta new file mode 100644 index 00000000..3a44344f --- /dev/null +++ b/Unity.Entities/SourceGenerators/Common.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e296109918bb4a840aa5821b42b67f58 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities/SourceGenerators/JobEntitySourceGenerator.dll b/Unity.Entities/SourceGenerators/JobEntitySourceGenerator.dll new file mode 100644 index 0000000000000000000000000000000000000000..fcbf9a73c2b528b8c035070ccd337d23739d7fc6 GIT binary patch literal 31232 zcmeHw4SZZxweLD-X3k7zCezHBe70#jg$Adc5c*9Er8G@ii1dr5r4(AzX)H7aBoEv@rnv^)p9}MTJKXI_2YN(gL{PwB3@DaKp&tY_5Ih{=ggcW zEztUYzxRH>cT;Acy*~EZYp=cb+Ux9dW>|B@t>hyjKR$o`E74bQ<-g@pzHw0mIX3;F z7(G~VY{pl#)yHOR+?~rO2W)GXo#{(CFh%U;ds!2|WM# zX!#Ay%Kw$G4#+6{T?@JExN?~27fw3{OMj0NMFDKTm1tuL`4%ckqL7Cz1o&bP+)~J1 zTLApMJt#nvv5xB>=s@cU5k(BZ#mHl z4=B~ovR(1Vy6F_4=JSXaTt=h`_SB0r^i+Z4?}k#CfnZ=#1wrv0L1owdIjmE*=j_(mSpa8r>f zDTqs_Y60KX)M!uESoT!aG6kC%4r!X*r88-Ig+qgABULBOribnK`an$80}LCr)pe-` z)C!nKEt00-Y>Xi>$46;gp<OkqQuytPoP+c~}EGp@TS0(o$zZu5P^zWv!Lsx~UznfjP8bY8Jo( z#;b+%lOVjwup+n+u9(oUh1m>Sm5hm|Da3v&R%ac+=jSWt08=A#k1)U?DNepYD5iyt z>f^phu=yN}1Ji3nL&MFGS6R_KnN)jUX!vYk@-5uWIVd0?z1}wng|&n~?r(01`>i>^ zCk)d_%|*p-WkbzFt=aUY<};=f7;6D)X{|O9hzFV{K{{*Yv#<G>t7k8lTi9swad!j^CiLsPJx zABWdKew^6&=Yyqyp7pR{RiT3vTBd7{tMM81)Lmd!l>M-_QfD?Q$Bj!^oeR*ssmPQR z`bqDH1-(40ndd^`Vak4((@TaI80<9=!IV@KA|e#DRsfXuLnS1~y(q}8Ti@GzUgjGN5{Ek3}VMB>qS%$JA7jKrk)q+wob`{5woVXft1b)a!m zktwN43@ed{Cz_*Ve*}{AFkSdMv-)@qEUuf?@kt{o@NtD#v@rs=_s6RfRr_HOKRQ7u z@W-pH)o4cXDjx?qcI0r~<%w`S9Itp^?!x28kpeuuBvC^?+ZUh#y9PzP#)65%@nCtN z7L*HH*fzuVEO4aOvrG@3tr)c~ zbp_No?~1>QQR|M^BILV9rKc}W%z)%HPuCKjt{EcP35nK~XqhrG+&AxNcI!Ua0e_F- zlfX_Z zk^d>Iu>FX6-ihD9v$hQbXeu%#^$t`CMo-KM5;k~3?21#W3)s3_TA^c8txvbkLZj4n z;OuSeni?quD3p|CBkADNPwl38JTq?`traHUM7>}#B&mWJoc7og90<_)D zG!FZSpsC$J*I7A~5uJA+!@3Ifgx~b5pq>M>?0(S`kyBT*)Dll+up-sVqWqy?st*;a z2+FiJxXBau%{mXtwcZ}$YpvA}-ju}+96LP+`-UgjNgw9upbvAz7{)C4Pj0cglUnS= zmT-h(di>?_L_FAWLydY(S2;<;$YsExic=mi?}1GiZv^AzfFT(c_D?_gjN=BPgOML# z`yeKzWuq(Y^(}cDgd#^u-tQ~<%DIPBfQY#WsQ>|YRvc0RqRK@`1qg%~#UT|SOcx;) zAmBKPLn_caF(*J>FdWpt9$shVSy|+^lGdif`7}n*?e=v<2fZUD8C}#|(<-l3Sz-=nA>ZATGRF1>-^9XOO5l`%GwfFG!UY)-||T*P=L( zL=fUlB%SaFEkq;(dCYYnm?39B45fwvCMwK|6aowO;$R-})@X_cQX_yz7GV4UR5FV+ z#@`flpj0#XMv$fWtr@JPY+*qQJsQK@$~3I~kieQ^>uR1s_OGF-hrw z8ijlZekZEd^=0^74Bvnvtf$U_;E1UQEk+)ITy1{`giBg}F)GK6UEs*y2x?Q2DZEXl zQ||_BxY3ORiE)?p9^hP5P`73RY25@|C9*|ugzXRV;4#bpV0!%OrtuQgJVwr;3+JYhDe9*2{cM`1Y4-ChLvH@Y4W%+o72*Si zoR45d^H?_VSd8X8O?8L!n@TktN2_}KkAlD*Eqg8N9g2zG`Y=29{?%iZyNZ>&70NUf znZoxW>6B8g(JpXHrCfUPl(*jFXFTmFi2DRTVbKzTP@L>9fLNNeX_&My->h;Ry%0Ru zzA;Xjd%mGC)OHbI&EGy&^W9~$GNpXq+mgq~jbb&Bbn zzIePXeZyw}&t4Il#HMTT4MP>Nr74IhzTu=G8toN~5EG?W{Vj6#mgLO7%DL&mUVsRS zTcCrOo)IifUMo`&I}nWdzCNxGGd*lff4zlmShuBak)Dpy(?LCT9xU*aG&W=ni$JG3 z(i`|TjobUF7V#d|aoR_MD}5lq@N&*mfonRNjxR2vviJcMwc)3Jj*DI+>Y$4j+anKy1$?>0NX)Qt3M(ZSIP76_krB~n^tAf~dewc)2jdTKFDMnA!^ z3AHj3L*c(DY{j3D0?BsFpd>a&9mxhH6K~@@fZ3Dt9|C-x3v#?a7wv0GHlKcce!V`- zQ!0}?Kcd%)@_INOtaT4+hH>KJA7NAT;Y4Z~^y9OdfW)?1mgSt)_$(McEU8Oa_xV$; z;2dF(#p%p#pp3Aa>-K{%pJ6{#vUL*J(xN^Jv>c2nPp`KpSBdNEj;BwylZ;To0CUVD z&-Mk=5ql=^L3PG5L;Becgi&i@m4#Ecqd1VkA~))+k1*n+tPf8*?96K(qk?y0&6jcu z8Oz(irVdrGGmbk}*#U9Z$5mSe)t|`o7diHFe6-5(d4@~0G@%6C75@VLhyhj-2h^6ea8M;6p#Ke8`(Vd(*DFLo| ze5S6FpHS-KkjFdnK3tp5_McUq4p?`gj>Do@&>q0N)TTZGm``-n=KDEkS6BzxvSqDB z<+#xYP4aiMlp<5u(CM;fr4$yrxw(w8*Qe0LwU<5&pZB{4yMhh27>Kf%^L*8{);(y! zxnbHH_Ra&J6ZV#J6ZFGz5ANl}J!X)&7ed@?XmO)n7dnxs2M>|BSA&$c9QR^6ao&Zv z$L$gKc##8FihGy`O2^Z+i;tnQn0J)Lcc4H3`~fal`Jz}Jb7G9NqM1Id$_r5+;n8yR zy8u^7klfK>MWshpFuOj?m;Fmnh_Tro$Bir5*q;_-GbM$kl^%gVGrwGGb>br!-|b^bG;kDSk>I?=W+{8U3(cUmlm><}#N9P`hBxYQXebEU}S z(siHDLLTJfaB;l+dRP7t7|XE@ExsLqYyvFAlGaWySe$9=K2~oP_kulxt(jg6Wf)<7 zj!9UOVnn`Lp9exp=!h+yG`;$7~s2fb;9-vmWj8Mh< zZA_XF@BQ!x{&?fP%(^Ja@m`cQAYbA=o7#={^Ymc`4>WUlffaadU;=4M$>&tuXP+*| zeUUD4e=9UXxEn@H^pCI`p}w5!>|e46bb|xYXD2Sji-9aJre(h5Cz3>|`=J;|nIAgI zO`Ux=mc2?~?BAm*`)s<#{__dYP?~c!IJNvK5ob?T*^d48_*g;jLsw}h74i~`;FIKh z_B-rPOB-YnVc+l~&2@K0D#8H&tj#BEv{*lcBwqFfghN7fBsAswGQyx} zH$IqS2{hCjK52GcKW#f)ex7jRoz)_(8q-5fe_aph0GY;HR**( zVTy@_nZOwIZj>esH@uQC>6Q?eRwb9iD8uwkaE9sAC{6lJ^c5UnzgBsBG)(_Fnel5H z8NWjKZ>wVJSER>Zi9UVMCrqyh=UkK~RmNEIk0V?*naqF47Y>+o5BmK_nk?hJ5g3E6 zoWyMhrS~5-)>Xx5am@>pOxg-P!}P4^Gq)iMJ6taoxXyQel}XP-2a}>G!?aWStrHEW z%2>WFm{&#S4N`wpwEA8>^KS#*pa;dyUksg(9?y~3B1Vg&|cxJq(&-2=6a!3)7j*kQAI|8Xe#bT=93S!PJ!x>E$e8v zAKFf(X|&wKc_tnwm)o61tFWA^=$9DL4=6<)9@=b%KsyJ+oC^7!A~O+TXaQ{!T944q zrOlppi)o9{nnaiLXsd^IF=d5@EgJo;p{qT#wSdkdtKyl^S@d#<%YgA5%I{VG3gzWB ze?U13>I}Lh_*w`S4*nJ8J%+zx27N6NMERaXRmFU|B9W}n=s9CH$|j=)<@De@l&aOB zu?Y2cNY?16ael=jy3fD7q83(fNBL=AJE-SJ)}Z`&{WIYCc!2AB(L4MIrA9aE>w%f? zySxHgiMDq%`cbcu`cGo4c_jQyh$U}@%uj0DQ8xPerLTRcw`;`;A5~6$FUtQJexKk! z0Q^;S8_MPSr&0QR|AI2_e-7op`d&mC^uLO7g+CmIo-{RV&`S-kL8~vKUxQ{!`BLK< zz+Z?u_dXw-Tl90oywyry0QLd#7~X3 zjDdOtx{ZENc?{C$%wWzB($BRg!aD7Cpnub!2>a;W0{y(Az2T=}Kiw)2%lt1u*PX%b zMrn`!hj57A<3RuE`*XO0ZWHLn(7H-35~jabv`|-N5YRmitq+<;=<^P3Bpi!G=qm!< zMo(2HB2kLV2BgLiqsanYAL>msMq+e^1KpMQDfX&nfqt&t7;278qHhXxknRu8i&Rnd zOx9CLF=>H7Ki4jgE{~Y>o)pu5uH7766-m&80v)774QnFR^pjakJ4i<7N?dSd* z0WEN73t|T%Q)#I~>x>-)v{E2757TIkLtEdlJTi?gbK30+b7Q7SCE{FC| z;Oy7+M zLG>J_eGqXj0H{l#gJRD#T`iEZb(#tSUC)slockQ;eqU9znWoQWDa@%s$)y54tNjM6 zqlNZ4(5v;efF7R5oTKy&ooP=B^lZg~`eT5eRgm_>8m9fiq3x}20`xnF_F%j=+CuYj zhfDOV_Q&{Q(3T3sy-x!zw18;`X;Z~n(K)n1K{BFw^bUd4i008Qfv%^|X)V!tG~_@{ zz9rH5bfc%;0{Vcb-2%G9;asD&M;Fjz9?pey%)_~me&}%K>5}L|dd`75^edu^=vNLD z_3eqCOMh^neg5}Hm(Xzs`mXO#^gQC1iSRs1yVk7AszQ{UPwV4 z6tiaC`nRGNQmsJB3zpLYfs_}tQo(`P3tH*3i@BZhf>!#LK+jg(RQH2uD}7%<;sq<{ z#}19XUy?fMN}z}l6eu;3UodFks_6x<7@N;?htqfEti=PZY60Y zN*^7lbs6o5gY@=3`26A3*HB&g} z3Qsf2Yp6m0Zp{eI(3gfkhVrQYV>p(2sOD~D-8GXw1KqgoliG`+V>DOaRPlXUqU*+w z=m`DR{3+Vr68;rpyOQ&djTPEbskckHT1u9d)$XTQ}X1y0x)EF9^>*>8nAXS-Vo-C~XTU4eF8de)?3^alJvmr_t|wm&18&W3%so)Ia24 zzSQ_Z-yN{eFMW5zRu%rw(t8?{^jX>-P5HNqZd*mSx%z(v&-Op)w7RG90{<5MW^<$e zVYe}YO68!;lUf?F}yA`d03jLm% zHGz+4FIHa(>NhH~DECGC8I!msa8Q3eI2!nfez*Svfg`lE;r772V%wXv?}zS&gejqW z1NY;VurCJUdaU-J14r;a>o)@b%Ngk}!oLhWjJko@e}Bzc#uEKE6^o3&h-LmFmid~2w?l!z_qB$YWjv`@R1F%BX-$>yH0J6buXvB~FkKaWzrnt7yRio& z+UOtEnkRk3xL5yD{dbHZ?d$bV7!~@f)lZ=wsCmwa%BVHi`88l(tTuwPH1>*7t*fdE z^((9DPzGv}!JD*1&AcE>UL2gEp8>C~mbNeGHwN|w8#P`jGc{fdFF~3?f6~{6?+7l@ z?`XUWt$tel>0pJgt@b|D|2g^q%ExNH9E|(eOB;NT$Nn`q!#6qccyN}lqvq-0QjI;N zUCIuOF&TPN`%t(!G*`dfJlnro`fbqv61~9xePV5o(4Woqp^bvyDrFDK?`RGBg4#e} zuJ7@xPlS3!!-8n|C+)Qw%lMP#ueFR;Ur+F8s7K>9(xdSjX+f5~ud)Rv(Kn!+LU&iT z;fdURD8nebrQR*|qSSAqVR~=uFy7#Opz^R_9+mQ0r_9r6j5L;@IVEF!+V#LB1vA4b z8NXcWE45)d65cNL4C?QVbxXY{<@HkDAUubq{&A;d36DwrF^%hAm-KUhG%=J?Lgp^;G@~CcNT+d0}=VSS2N?DZh zu#}HV`HYn0XP%^#%ca~dWl_p^`PmMKrT(at&qzrDX(eSQ!1gHy(li|<<3|Paag?8r zEjJi*x4}G*p*#{kD)ncKtAYQS)G5eye~@{$OFe`7k#JG!hoyW}%4ejU8DeU?lt-of znUtdyjDJ?jVuWQLmXe}ePfEF5%I#7XrOeTn@Wk(%bhY*|?QQzy`n15~fgc4l;~$JK z8nc4SgR6skg4YH22R{(}aPX_a-vtw)ouRLV0@y!s@{K*wk3Ej}z)E=RBNR9XoFXWg~DJ&Sff5p9U>) z=7CbDBUE$07e&l<_ zSL0vk-{OCt|FHi7|Bw97`G4#GX<((X-FVTsH2ALI&A}fAe-V5o7z)h|r)?f&cODE94m;Jb7n@EmX#(j4Q6 zd=}|{pq%j>y^Ldl9l=jR#wFT{(1n!2r!Ulodu&VUcZN1=cLH~>GQiShOS-z|;MRBP zMcMwWohf8j*;e1O9S(9?cUMQTkR{`xGm8AZ=Q@3zp4t1wu<1aW0$h=ROfS&-C^V0Xp$uVPkiCTJ2rvhaGcH*E}`Od0ZJY1c$JM2_BsRu_Aq0 z*lF29jGdO^%UzjXkF(_+d}-XYYOue1`#icV(>s{mI5>de&7+QsY-?};&W8FW*&(5= z&*W@??YVAt+KfHKd>Epm%bc$H<3`7`%Sbf~sEio`V2|d2_KsT_mMyxL1S}XQ0Ps~O zTUGEw3?Ce-?}g)<0xmTzts*o4UNu-Wt^r{70$dPgoaM+poJ+h^H*H+Cm|N1)HCE4H zZ+00ee{bnnS8|ON2snLx8R0LjsP;@DLwQITiz(?Q^rg$XU3qO*Z*Nx2pKlRI%5~Gy zx4u@F^?>`-91u--gl&Vi4WC?->Cf!K;@yo1+tUGQ%X+)Iaw_JPkgYwc&06?jegL5| z&%U|TtFxJWVQm({phw32W;_TYZ^p88jO~_P-PN@s(|t8uSHcx7eUtVR8?3W) zyLh>lW0t!#)dn!JMMqvO9>lbXM78#y4~M*obkt~Dg9O~O)oq*`Z zS69D|{=Hc3vZYKggKT%#7AEx2k-sF@-vbBZz$I0l?>Do7Ox~L^EnPOhtIHa*dlF(3 zHc{%&7V?Eme^18lp^pCD*c1xlCLJ8&cfx6Ct!4MgPP%z_uAm%=;98y5pbhHgTw%Af z*{;s@XWMf&uZz9ejh5@*E@x>mxmHrMxEA)N5{>6ZFmQ70;Mu&ghoIK=UzW?~3LZ>e zj3q=imZEI5vsv#ZK^>f$Sb5$ss1x*32Qwr`-M;`&Ts_eN_Kauiu*?5Z@zUserb z*SK^LcG#KA_6U7NrqI1x+(N*T_q&OOV8!yK(TyQNhp|#+>=SwxF(pMyy-4q+7LcWU zvxF%zmN4rxc0Mc8S_^okV+WEe-XA$8ln_G39@(=d+qWZYm;IQhS%{u&z{vvy?QXnI zbZzbLS)09v9l{fLT?|hZYej>S&0(*0a}vQa*|U(v!@cmjoh3G2OBsYcwWek2#>|?u z9g8VhvZG|7k|}93{2v;NJ}n-%X;B`OC43{kC&wu$jbHL`mmPzZVo@`Ia+T`ZNC8f$FC60Y|JkHZanS}ixd5>jFr)x6ZyJ7k=)z$6d z9QyAsAjJoJwI2JA-b`g@1UZ8i*I9rtCq zDcE=9dXe>)sZJgu6DN_IHrhk*WmVtHi4bkdV|q(r1u@D^>}jVvQ)fy>p zOTD&4or62_@&XecNV8{+3G?C~V=?G`ETXlymrAapf?mmNEj=K1sFkOr%Lc*WMR^@3 zqP%5LhiCr~PA|-fhZpW(2X`CtBuJL-AWAOiWy0D98+^cFVu_p*Iu;_OH|}J1xAyL` z5aW0ELCNx+9BqPGhgw{xZYhnE+A{s!+1_56>y6gc*?wn-QgycI%4-MgERr#+pU1u0 z+4y9Tt~@v5m*a_8{td`kC;XqFCHMK(@5w|DkLL=kCP&6Z{ol`93xah^^OVQGc?I_I{#{qQU zC6?URi@eHB*}ceJ9DEqEu`tFB^qeo!wbz zKCPA;a=UgHW-Y^w2yXP{*7y{Zbv8Q{E#HC+&p^j@IMxN(bS1wVzm0G&_h=V%v?wqveGQ0Y5XOrvBQ=uo%399T~a@*rFIhzqXvm8ftX6?N> z+!i@|H}(xq{`2tDTyGC&l}yQZXOSKE7Zl9FN6i=CjW<=I3HVjUD@*EA_ z2zRoB7Xow1N*vIY#4#vDV3l*^sVjFf3hU)|hJLXVc$>M=bOOaCc$i^1*>dwIS>80z z%U0)=$0k{MEe`KE_=6u{uLo9KvZLb5u}QNDN8>6($$EW*LGhTf5;q`7)|} zE_HFXcK`=u&bABZbrC#Gr2v*cS!By2Yn*Vy=4sZ7EjbVWR~ouIiPEr?Tybs>SGM|L zJc2#@a9OwGD%_nRCFjEncU5={R|;bg-m)Q!EJ7TdLz7e_(vXd(mai&KJrcjvTCOrWe&v`ELxV<^slEc;$sVU(g*X>pJ|60^_ zPGsJyn&aZ_8?<&KEziXpu>HSe3wG~QRCSy^-b8}eCSKO1%jR`;b*r;6_N)z-r975T zx_KqY>Ma3I1m|>Ch%CxoMuHIMML^q|U7N+Pd^t*Pv@V4M_4pfTr(es%Q`#|PGab*6ms6aQ4sN?{ekOy#?mgLX zRVa6I8La(299Q#(t1L_91kZz1H!QqyjJv6G8~?N1 z#Zw%1?x3_sIJklGZK0Tbyn5~~J3g2@&G}x=`^Z8L7xqM+06xF4cR=EUJNU1=V)Jp5QOgu8ip{3Lr2o`UeM#^*kHu9r_8sI`BH)ZT{kac)(9L{i#nB}q~b z9)_N_u@Ub zZaiy89*QU8gQyn(QStLhIuDgi)DMON4dJESm8cg4%HgXJd0;x|?Rez9!$TRuE1el| zb>oXsm3Tayd`tg^Pl4B!I97e?NKzO6DSg^ShYVf=cs@u)TY0T}Zv>Cw{ zL%Sv@PVw>Kfa2o^NApiTd{FL0K_yx8|2!tX55^n9)q*j5rPeL=0`R;Fc)evn8H9n) zF11WzEpp)Mh4DFfY4J{cld}V^vl5Oqhw!C_#Kdq$cx8$Cm}3s%D+_1xn6AdhqHClt zUeVoYY;V1D&{wd9BS7dPP1*bfp(dUM+gB2LE1sdV%3qZlqG9a|8Z~WzbY_ zKNGy5!u3lEa0sAC3++NL-ROgScsw)I|H;cC4Y3tQ~1jmw>F4u;A>H#*LIC2jkg>{{0A|J3MQiB$aZ z>8A&-5Wb$uKIUzw>LXYf=bwU!uoD*F|7PoP?CyRlImqc)nKqreA=&3S*s0{OAKuR) z(CcwjeD|q~JstJkIhmL$DTU~Q=2Ms-SDJgJ(cq~M<8)lA1zWgE(|Zv0c(dR@ZsVi2 z;9kU+H;$2<3aJJD>NvfEa0Lc}>WO&T}TSD&hdPJfzd;i>jDg5^m8 zj?J|Bjgk)Uy{R|4t9!ze?@W-6bcH=1dH6ZA(U13@LhV>aW|p?!h1Kv8(o-`!e~HnildUNeiG7k8^3x z0;~sW%nP)bKZ%$00X70`(qf?`F*<=}WG;~=mvT8ZHi_{y@!~<lwy{g^Va6BO;`a2_t5oV(c>)FpLYn!V-%?S)W-PjSrgj z0T^#|2A9SALP_1+gR34PkbjN(w)h}hH&Yu7nlp4UDQtQOpO5JA;++*GjL*Q-7zs^b z%x&hjAk3P;?_tAk#hV=K1I;s(AoPdk&;`nvY@g!2x?(ho&zsx0>Or85o*>K@1c3-c z7Y~(s4q)WPLu#0;S(S!)6I(fRs2A@Jo?$kMNDOYOatx?4)!bG>n%j7E_d~LW0hoUp ziy1>MOA7ITVXh2*Mt*sGP}k$j&Ek==M0Dhe0w21N&bif0v-k*D@t;h=4PiKj@@EGoTY0j)@>J>BngoN_I&ZzSF#75}CQHxvf z!f>v7GRzzkB$s8FB_o%5#!pS4em^EPp_x(}V^~H0rxJPGByb$ig5=Z9OiWj+xL%KA z-p6RD^OC6NkP?G)usg+<8%g+2d{BITF1}W+#kXKFn4@!JQP_Q|YejCkt%3(AvlYb3 z;aQ7&jddanrqwK4LpXqnl*Z3>*U3~}jSQV}EJI)@-p7%_)k9qSJ}3>sQu(U^4#zHzm znmO8vdWqHw=ksG~DHhYE>tg{za99&TSSWrUmH6nTeuT6bzVyZjsKSdphDt?JpNhB` zAKij4>~Vw)2mP!c)52J<7mI@1)MRbbYcW~w5=BsR7wXJll$XOy@e_3My!`h9LQ#CV z9v_SspViHoP*(|4Iz9p$l=-*CN+IcandMBFU2Qan;lB`aD>AqjWWl`@B_HH+*n3Gi zM)BA9bsXsZYeYkMU{ylHcL3ofu>{6(Id?7HshuUxlY#|&C_buTR#0cN79Zgm;=sBm z#D;$a6@cJTAXnIzz{P{WC5$;{(WuIFJi=22Jpf~$gNQ?@ITbVx`r_N+wgK5-I`I8S z)-M);%~!K?fZZQNX!S%5*#~2#u%JNRsD^y_p+H|y3k8BcJ)|3A+Xc8>pqUGpVGcya zut{Pxqv#Kt2-cJ@1V`}sP>bP*k6@n0#vrzoJ@G-sd5|4i%$^H6*Ak}B!Sn@!JU*wo>#Ii5g}&;{TQcmo|h|y zRD4-Ro#TaGeA$G`+#sj(YCQ-P=MdsEe-bm?DfQRE#VeMtuvPJOHrC}>8a%D>(NBgR zA5Q%B*x65A8k+mH#h2Z;XzfDXhy|5>*ErXD=eodW#JBhjY{|NzhrlBn-6T~}N??Pj zU|8aq&oK9($#Ps*bF)KSJOZeh8$WvqKJ9VAmXtt2kMOA~u#Q=O zP;g^RiE<|~YItT1^qKgq=YDyzUUm$g12V@V|HKqEeSlsEdaE)6CQ+YJ4Y{dzR!8>j^<%OC;&X_JV(z_!i!f>dhQq7MOkP zUByuq??G3VN-z^UvjX8}nx3P3~QJyptNgT3f7Kvr`Ei4vIvWu$t7JOA% zLte6_3ZatCur0ntU9t8x&hHSNAZ`zr`l(ZKn*rV3IOI~-2>1vD#PDgXM5D4|_}RG-T$qs9kwzQ!+Rb)mV6D|( zdQlp0`{NrH8u)@5^ZB{#)o9mAUtTUfrl0seY5Fw2hesKWww|;z^{x=V(BOHo8r{hE zJm1O}d6)HIAC!?{Tr<^z4)Loa{JNz%_MJIK5iQpU9!qb;^hPxN#;WSYSa~hKG#FOz zMJU;jiyu|H^><$-ZOwX)EqCJc;H~)BOi_QVEr03#ZTMVz5FeaRc>m-}@*c#7&i2l& z|1zua;oVQHJ89+b>2IcDu?%S;6CTFX9>8bRRQ+{j7A;wW!26}c-=f$n_7A_)3 zzjIbQ`oRXv{(0HsvwvLs&3CG>Q{f~5KX`{-^KV`ewgS0Pq6cMK<6J= zyNo( zZTO(914m~3q5}WT6o1|bDj%ffLFcD<&a+_Q_=5jMbg4ln^~{!^AWoF@P2o{bnz>wn z!#&u5nxT2#D)U|jO>JmY)@2S3Ez2LGEASf`nv6z0kL2f{ zy|9;h3Q8w%7;@UcY>5__Queq&kmUJagIB9#xv25=Onwh?|)TH3V2etaC+ jCr7RPsN~Jsq3M7Boy-Ea;&-<}dmOJ@{P*Age-`-PkTLP^ literal 0 HcmV?d00001 diff --git a/Unity.Entities/SourceGenerators/JobEntitySourceGenerator.dll.meta b/Unity.Entities/SourceGenerators/JobEntitySourceGenerator.dll.meta new file mode 100644 index 00000000..8c6e2087 --- /dev/null +++ b/Unity.Entities/SourceGenerators/JobEntitySourceGenerator.dll.meta @@ -0,0 +1,70 @@ +fileFormatVersion: 2 +guid: b50d3bb4b581fb540b7fd14510e02eb5 +labels: +- RunOnlyOnAssembliesWithReference +- SourceGenerator +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 1 + validateReferences: 0 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities/SourceGenerators/JobEntitySourceGenerator.pdb b/Unity.Entities/SourceGenerators/JobEntitySourceGenerator.pdb new file mode 100644 index 0000000000000000000000000000000000000000..693b90dae25949b986039ea021955efbda60f4cb GIT binary patch literal 7316 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 literal 0 HcmV?d00001 diff --git a/Unity.Entities/SourceGenerators/JobEntitySourceGenerator.pdb.meta b/Unity.Entities/SourceGenerators/JobEntitySourceGenerator.pdb.meta new file mode 100644 index 00000000..c685c744 --- /dev/null +++ b/Unity.Entities/SourceGenerators/JobEntitySourceGenerator.pdb.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d5aa30f78d1de0e4f8dfde286b674f26 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.dll b/Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.dll new file mode 100644 index 0000000000000000000000000000000000000000..99c549476499d6a493907f6c32d9a2df67f2d7d5 GIT binary patch literal 100352 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%0DOer^%Xjc;#n+4$!n~$Lz#9 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 literal 0 HcmV?d00001 diff --git a/Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.dll.meta b/Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.dll.meta new file mode 100644 index 00000000..3881d5da --- /dev/null +++ b/Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.dll.meta @@ -0,0 +1,70 @@ +fileFormatVersion: 2 +guid: e14698d11041654489e87f85e1137d60 +labels: +- RunOnlyOnAssembliesWithReference +- SourceGenerator +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 1 + validateReferences: 0 + platformData: + - first: + : Any + second: + enabled: 0 + settings: + Exclude Editor: 1 + Exclude Linux64: 1 + Exclude OSXUniversal: 1 + Exclude Win: 1 + Exclude Win64: 1 + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Standalone: Linux64 + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: OSXUniversal + second: + enabled: 0 + settings: + CPU: x86 + - first: + Standalone: Win + second: + enabled: 0 + settings: + CPU: None + - first: + Standalone: Win64 + second: + enabled: 0 + settings: + CPU: None + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.pdb b/Unity.Entities/SourceGenerators/LambdaJobsSourceGenerator.pdb new file mode 100644 index 0000000000000000000000000000000000000000..aa2220ad3dd46b4420cf838bb93a36bb34dd586a GIT binary patch literal 27280 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 FieldDescriptions; + public readonly IEnumerable NamespacesFromMostToLeastNested; + public readonly IEnumerable AttributesToPreserve; + public readonly AuthoringComponentInterface Interface; + public readonly string FullyQualifiedTypeName; + + public bool ImplementIDeclareReferencedPrefabs => + FieldDescriptions.Any(d => + d.FieldType == FieldType.EntityArray + || d.FieldType == FieldType.SingleEntity); + + public AuthoringComponent(SyntaxNode node, ISymbol symbol, GeneratorExecutionContext context) + { + INamedTypeSymbol name = (INamedTypeSymbol)symbol; + + DeclaringType = (name.Name, name.IsValueType); + FullyQualifiedTypeName = name.GetFullyQualifiedTypeName(); + FromValueType = name.IsValueType; + NamespacesFromMostToLeastNested = node.GetNamespacesFromMostToLeastNested(); + + static bool PreserveAttribute(AttributeData attributeData) + { + if (attributeData.AttributeClass.Name == "GenerateAuthoringComponentAttribute") + return false; + + if (attributeData.AttributeClass.Name == "StructLayoutAttribute") + { + return false; + } + + // Check if this attribute can be placed on a class (authoring component), this can be only true if one the following is true: + // 1. It has no attribute usage attributes + // 2. It has an attribute usage attribute and at least one targets class types + AttributeData[] attributeUsages = + attributeData.AttributeClass.GetAttributes().Where( + a => a.AttributeClass.Name == "AttributeUsageAttribute").ToArray(); + + if (!attributeUsages.Any()) + { + return true; + } + + // See: https://stackoverflow.com/questions/64497819/checking-the-argument-passed-to-the-attributeusageattribute-constructor + return + attributeUsages.Any( + attributeUsage => + attributeUsage.ConstructorArguments.Any( + arg => + arg.Kind == TypedConstantKind.Enum + && arg.Type.Name == nameof(AttributeTargets) + && Enum.TryParse(arg.Value.ToString(), ignoreCase: false, out AttributeTargets parsedValue) + && parsedValue == AttributeTargets.Class | parsedValue.ToString().Split(',').Contains("Class") + )); + } + + AttributesToPreserve = symbol.GetAttributes().Where(PreserveAttribute); + + FieldDescriptions = + node.ChildNodes() + .OfType() + .SelectMany(f => f.Declaration.Variables) + .Select(v => AuthoringComponentFieldDescription.From(v, context)); + + var typeSymbol = (ITypeSymbol)symbol; + + Interface = + typeSymbol.ImplementsInterface("Unity.Entities.IComponentData") + ? AuthoringComponentInterface.IComponentData + : typeSymbol.ImplementsInterface("Unity.Entities.IBufferElementData") + ? AuthoringComponentInterface.IBufferElementData + : AuthoringComponentInterface.None; + } + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentFactory.cs b/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentFactory.cs new file mode 100644 index 00000000..78cee135 --- /dev/null +++ b/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentFactory.cs @@ -0,0 +1,233 @@ +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using System; +using System.Linq; +using System.Text; +using Unity.Entities.SourceGen.Common; + +namespace Unity.Entities.SourceGen +{ + static class AuthoringComponentFactory + { + internal static ClassDeclarationSyntax GenerateBufferingElementDataAuthoring(AuthoringComponent authoringComponent) + { + bool exactlyOneField = authoringComponent.FieldDescriptions.Count() == 1; + + if (exactlyOneField) + { + return GenerateBufferingElementDataAuthoringClass(authoringComponent, authoringComponent.FieldDescriptions.Single().FieldSymbol.Type.ToString()); + } + + string generatedStructName = $"___{authoringComponent.DeclaringType.Name}GeneratedStruct___"; + return GenerateBufferingElementDataAuthoringClass(authoringComponent, generatedStructName, hasNestedGeneratedClass: true); + } + + internal static ClassDeclarationSyntax GenerateComponentDataAuthoring(AuthoringComponent authoringComponent) + { + string generatedClass = CreateComponentDataAuthoringClass(authoringComponent); + return (ClassDeclarationSyntax)SyntaxFactory.ParseMemberDeclaration(generatedClass); + } + + static ClassDeclarationSyntax GenerateBufferingElementDataAuthoringClass( + AuthoringComponent authoringComponent, string storedType, bool hasNestedGeneratedClass = false) + { + const string placeholder = "___HasNestedGeneratedClassPlaceholder___"; + + string generatedClass = + $@"[UnityEngine.DisallowMultipleComponent] + [System.Runtime.CompilerServices.CompilerGenerated] + {authoringComponent.AttributesToPreserve.Select(a => $"[{a}]").SeparateByNewLine()} + public class {authoringComponent.DeclaringType.Name}Authoring : UnityEngine.MonoBehaviour, Unity.Entities.IConvertGameObjectToEntity + {{ + {placeholder} + + public {storedType}[] Values; + + public void Convert(Unity.Entities.Entity __entity, + Unity.Entities.EntityManager __dstManager, + GameObjectConversionSystem _) + {{ + Unity.Entities.DynamicBuffer<{authoringComponent.FullyQualifiedTypeName}> dynamicBuffer = + __dstManager.AddBuffer<{authoringComponent.FullyQualifiedTypeName}>(__entity); + + dynamicBuffer.ResizeUninitialized(Values.Length); + + for (int i = 0; i < dynamicBuffer.Length; i++) + {{ + dynamicBuffer[i] = new {authoringComponent.FullyQualifiedTypeName} + {{ + {GenerateBufferElementDataFieldAssignments(authoringComponent)} + }}; + }} + }} + }}"; + + if (!hasNestedGeneratedClass) + { + return (ClassDeclarationSyntax)SyntaxFactory.ParseMemberDeclaration(generatedClass.Replace(placeholder, String.Empty)); + } + + string withNestedType = + generatedClass.Replace( + placeholder, + $@"[System.Serializable] + [System.Runtime.CompilerServices.CompilerGenerated] + public struct {storedType} + {{ + {CreateBufferElementDataClassFields(authoringComponent)} + }}"); + + return (ClassDeclarationSyntax)SyntaxFactory.ParseMemberDeclaration(withNestedType); + } + + static string GenerateBufferElementDataFieldAssignments(AuthoringComponent authoringComponent) + { + if (authoringComponent.FieldDescriptions.Count() > 1) + { + return authoringComponent.FieldDescriptions.Select(description => + { + string fieldName = description.FieldSymbol.Name; + return $"{fieldName} = Values[i].{fieldName}"; + }).SeparateByCommaAndNewLine(); + } + return $"{authoringComponent.FieldDescriptions.Single().FieldSymbol.Name} = Values[i]"; + } + + static string CreateBufferElementDataClassFields(AuthoringComponent authoringComponent) + { + return authoringComponent.FieldDescriptions + .Select(description => $"public {description.FieldSymbol.Type} {description.FieldSymbol.Name};") + .SeparateByNewLine(); + } + + static string CreateComponentDataAuthoringClass(AuthoringComponent authoringComponent) + { + string declareReferencedPrefabsInterface = + authoringComponent.ImplementIDeclareReferencedPrefabs ? ", Unity.Entities.IDeclareReferencedPrefabs" : string.Empty; + + const string placeholder = "$$$InsertDeclareReferencedPrefabsMethodHere$$$"; + + string generatedClass = + $@"[UnityEngine.DisallowMultipleComponent] + [System.Runtime.CompilerServices.CompilerGenerated] + {authoringComponent.AttributesToPreserve.Select(a => $"[{a}]").SeparateByNewLine()} + public class {authoringComponent.DeclaringType.Name}Authoring : UnityEngine.MonoBehaviour, Unity.Entities.IConvertGameObjectToEntity{declareReferencedPrefabsInterface} + {{ + {CreateAuthoringClassFieldDeclarations(authoringComponent)} + + public void Convert(Unity.Entities.Entity __entity, + Unity.Entities.EntityManager __dstManager, + GameObjectConversionSystem __conversionSystem) + {{ + {CreateConversionMethodBody(authoringComponent)} + }} + + {placeholder} + }}"; + + if (!authoringComponent.ImplementIDeclareReferencedPrefabs) + { + return generatedClass.Replace(oldValue: placeholder, newValue: string.Empty); + } + + string declareReferencedPrefabsMethod = + $@"public void DeclareReferencedPrefabs(System.Collections.Generic.List __referencedPrefabs) + {{ + {CreateDeclareReferencedPrefabsMethodBody(authoringComponent)} + }}"; + + return generatedClass.Replace(oldValue: placeholder, newValue: declareReferencedPrefabsMethod); + } + + private static string CreateDeclareReferencedPrefabsMethodBody(AuthoringComponent authoringComponent) + { + var methodBody = new StringBuilder(); + + foreach (AuthoringComponentFieldDescription description in authoringComponent.FieldDescriptions) + { + switch (description.FieldType) + { + case FieldType.SingleEntity: + methodBody.AppendLine( + $@"Unity.Entities.Hybrid.Internal.GeneratedAuthoringComponentImplementation.AddReferencedPrefab( + __referencedPrefabs, + {description.FieldSymbol.Name});"); + break; + case FieldType.EntityArray: + methodBody.AppendLine( + $@"Unity.Entities.Hybrid.Internal.GeneratedAuthoringComponentImplementation.AddReferencedPrefabs( + __referencedPrefabs, + {description.FieldSymbol.Name});"); + break; + } + } + + return methodBody.ToString(); + } + + private static string CreateConversionMethodBody(AuthoringComponent authoringComponent) + { + StringBuilder methodBody = new StringBuilder(); + + if (authoringComponent.DeclaringType.IsValueType) + { + methodBody.AppendLine( + $"{authoringComponent.FullyQualifiedTypeName} component = default({authoringComponent.FullyQualifiedTypeName});"); + } + else + { + methodBody.AppendLine( + $"{authoringComponent.FullyQualifiedTypeName} component = new {authoringComponent.FullyQualifiedTypeName}();"); + } + + foreach (var fieldDescription in authoringComponent.FieldDescriptions) + { + switch (fieldDescription.FieldType) + { + case FieldType.SingleEntity: + methodBody.AppendLine( + $"component.{fieldDescription.FieldSymbol.Name} = __conversionSystem.GetPrimaryEntity({fieldDescription.FieldSymbol.Name});"); + break; + case FieldType.EntityArray: + methodBody.AppendLine( + $@"Unity.Entities.GameObjectConversionUtility.ConvertGameObjectsToEntitiesField( + __conversionSystem, + {fieldDescription.FieldSymbol.Name}, + out component.{fieldDescription.FieldSymbol.Name});"); + break; + default: + methodBody.AppendLine($"component.{fieldDescription.FieldSymbol.Name} = {fieldDescription.FieldSymbol.Name};"); + break; + } + } + + methodBody.AppendLine(authoringComponent.FromValueType + ? "__dstManager.AddComponentData(__entity, component);" + : "Unity.Entities.EntityManagerManagedComponentExtensions.AddComponentData(__dstManager, __entity, component);"); + + return methodBody.ToString(); + } + + private static string CreateAuthoringClassFieldDeclarations(AuthoringComponent authoringComponent) + { + var fieldDeclarations = new StringBuilder(); + + foreach (var fieldDescription in authoringComponent.FieldDescriptions) + { + switch (fieldDescription.FieldType) + { + case FieldType.SingleEntity: + fieldDeclarations.AppendLine($"public UnityEngine.GameObject {fieldDescription.FieldSymbol.Name};"); + break; + case FieldType.EntityArray: + fieldDeclarations.AppendLine($"public UnityEngine.GameObject[] {fieldDescription.FieldSymbol.Name};"); + break; + default: + fieldDeclarations.AppendLine($"public {fieldDescription.FieldSymbol.Type} {fieldDescription.FieldSymbol.Name};"); + break; + } + } + return fieldDeclarations.ToString(); + } + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentGenerator.cs b/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentGenerator.cs new file mode 100644 index 00000000..957539cf --- /dev/null +++ b/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentGenerator.cs @@ -0,0 +1,138 @@ +using System; +using System.Diagnostics; +using System.Linq; +using System.Text; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory; +using System.IO; +using Unity.Entities.SourceGen.Common; +using static Unity.Entities.SourceGen.Common.SourceGenHelpers; + +namespace Unity.Entities.SourceGen +{ + [Generator] + public class AuthoringComponentGenerator : ISourceGenerator + { + public void Execute(GeneratorExecutionContext context) + { + bool IsGeneratedAuthoringComponentAttribute(AttributeData data) + { + return data.AttributeClass.ContainingAssembly.Name == "Unity.Entities" + && data.AttributeClass.Name == "GenerateAuthoringComponentAttribute"; + } + + try + { + if (context.Compilation.Assembly.Name.Contains("CodeGen.Tests")) + { + return; + } + + var authoringComponentReceiver = (AuthoringComponentReceiver)context.SyntaxReceiver; + + if (!authoringComponentReceiver.CandidateSyntaxes.Any() || !context.Compilation.ReferencedAssemblyNames.Any(n => n.Name == "Unity.Entities.Hybrid")) + { + // TODO: I believe it is valid to have GenerateAuthoringComponent but not reference entities (DocCodeSamples.Tests currently does this). + // We should probably throw a warning here though. + //throw new ArgumentException("Using the [GenerateAuthoringComponent] attribute requires a reference to the Unity.Entities.Hybrid assembly."); + return; + } + + SourceGenHelpers.LogInfo($"Source generating assembly {context.Compilation.Assembly.Name} for authoring components..."); + var stopwatch = Stopwatch.StartNew();; + + foreach (var candidateSyntax in authoringComponentReceiver.CandidateSyntaxes) + { + var semanticModel = context.Compilation.GetSemanticModel(candidateSyntax.SyntaxTree); + var candidateSymbol = semanticModel.GetDeclaredSymbol(candidateSyntax); + LogInfo($"Parsing authoring component {candidateSymbol.Name}"); + + if (!candidateSymbol.GetAttributes().Any(IsGeneratedAuthoringComponentAttribute)) + { + continue; + } + + var authoringComponent = new AuthoringComponent(candidateSyntax, candidateSymbol, context); + + CheckValidity(authoringComponent); + + var compilationUnit = + CompilationUnit().AddMembers(GenerateAuthoringTypeFrom(authoringComponent)) + .NormalizeWhitespace(); + + var generatedSourceHint = candidateSyntax.SyntaxTree.GetGeneratedSourceFileName(context.Compilation.Assembly); + var generatedSourceFullPath = candidateSyntax.SyntaxTree.GetGeneratedSourceFilePath(context.Compilation.Assembly); + var sourceTextForNewClass = compilationUnit.GetText(Encoding.UTF8); + sourceTextForNewClass = sourceTextForNewClass.WithInitialLineDirectiveToGeneratedSource(generatedSourceFullPath); + context.AddSource(generatedSourceHint, sourceTextForNewClass); + + File.WriteAllLines( + generatedSourceFullPath, + sourceTextForNewClass.ToString().Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None)); + } + + stopwatch.Stop(); + SourceGenHelpers.LogInfo($"TIME : AuthoringComponent : {context.Compilation.Assembly.Name} : {stopwatch.ElapsedMilliseconds}ms"); + } + catch (Exception exception) + { + //context.WaitForDebuggerInAssembly(); + context.LogError("SGICE002", "Authoring Component", exception.ToString(), context.Compilation.SyntaxTrees.First().GetRoot().GetLocation()); + } + } + + static MemberDeclarationSyntax GenerateAuthoringTypeFrom(AuthoringComponent authoringComponent) + { + switch (authoringComponent.Interface) + { + case AuthoringComponentInterface.IComponentData: + return AuthoringComponentFactory.GenerateComponentDataAuthoring(authoringComponent) + .AddNamespaces(authoringComponent.NamespacesFromMostToLeastNested); + case AuthoringComponentInterface.IBufferElementData: + return AuthoringComponentFactory.GenerateBufferingElementDataAuthoring(authoringComponent) + .AddNamespaces(authoringComponent.NamespacesFromMostToLeastNested); + default: + return default; + } + } + + static void CheckValidity(AuthoringComponent authoringComponent) + { + switch (authoringComponent.Interface) + { + case AuthoringComponentInterface.IComponentData: + if (authoringComponent.FromValueType && + authoringComponent.FieldDescriptions.Any(d => d.FieldType == FieldType.EntityArray)) + { + throw new ArgumentException( + "Invalid use of Entity[] in a struct: IComponentData structs cannot contain managed types." + + "Either use an array that works in IComponentData structs (DynamicBuffer) or a IComponentData class."); + } + break; + + case AuthoringComponentInterface.IBufferElementData: + if (!authoringComponent.FromValueType) + { + throw new ArgumentException("IBufferElementData types must be structs."); + } + + if (authoringComponent.FieldDescriptions.Any(d => d.FieldType == FieldType.NonEntityReferenceType || d.FieldType == FieldType.EntityArray)) + { + throw new ArgumentException("IBufferElementData types may only contain blittable or primitive fields."); + } + break; + + default: + throw new ArgumentOutOfRangeException( + "The [GenerateAuthoringComponent] attribute may only be used with types " + + "that implement either IBufferElementData or IComponentData."); + } + } + + public void Initialize(GeneratorInitializationContext context) + { + context.RegisterForSyntaxNotifications(() => new AuthoringComponentReceiver()); + } + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentReceiver.cs b/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentReceiver.cs new file mode 100644 index 00000000..30a2e9c6 --- /dev/null +++ b/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/AuthoringComponentReceiver.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using System.Linq; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Unity.Entities.SourceGen.Common; + +namespace Unity.Entities.SourceGen +{ + public class AuthoringComponentReceiver : ISyntaxReceiver + { + private readonly List _candidateSyntaxes = new List(); + + public IEnumerable CandidateSyntaxes => _candidateSyntaxes; + + public void OnVisitSyntaxNode(SyntaxNode syntaxNode) + { + if (syntaxNode is TypeDeclarationSyntax typeDeclarationSyntax && IsCandidate(typeDeclarationSyntax)) + { + _candidateSyntaxes.Add(syntaxNode); + } + } + + private static bool IsCandidate(TypeDeclarationSyntax typeDeclarationSyntax) + { + return typeDeclarationSyntax.HasAttribute("GenerateAuthoringComponent"); + } + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/Enums.cs b/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/Enums.cs new file mode 100644 index 00000000..bc45ccfd --- /dev/null +++ b/Unity.Entities/SourceGenerators/Source~/AuthoringComponent/Enums.cs @@ -0,0 +1,17 @@ +namespace Unity.Entities.SourceGen +{ + internal enum AuthoringComponentInterface + { + IComponentData, + IBufferElementData, + None + } + + internal enum FieldType + { + SingleEntity, + EntityArray, + NonEntityValueType, + NonEntityReferenceType + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/Build.bee.cs b/Unity.Entities/SourceGenerators/Source~/Build.bee.cs new file mode 100644 index 00000000..869ceb4c --- /dev/null +++ b/Unity.Entities/SourceGenerators/Source~/Build.bee.cs @@ -0,0 +1,55 @@ +using System; +using Bee; +using Bee.CSharpSupport; +using Bee.DotNet; +using Bee.Tools; +using Bee.VisualStudioSolution; +using NiceIO; + +class Build +{ + static void Main() + { + CSharpProgram.DefaultConfig = new CSharpProgramConfiguration(CSharpCodeGen.Debug, Csc.Latest); + + CSharpProgram commonLib = SetUp("Common", isSourceGenerator: false); + + new VisualStudioSolution + { + Path = "SourceGenerators.gen.sln", + Projects = + { + SetUp("AuthoringComponent", isSourceGenerator: true, commonLib), + SetUp("JobEntity", isSourceGenerator: true, commonLib), + SetUp("LambdaJobs", isSourceGenerator: true, commonLib), + StandaloneBeeDriver.BuildProgramProjectFile + } + }.Setup(); + } + + static CSharpProgram SetUp(string directoryName, bool isSourceGenerator = true, params CSharpProgram[] extraReferences) + { + var csharpProgram = new CSharpProgram + { + Path = isSourceGenerator ? $"../{directoryName}SourceGenerator.dll" : $"../{directoryName}.dll", + Sources = {directoryName}, + References = {new NPath("Infrastructure").Files("*.dll"), Framework.NetStandard20.ReferenceAssemblies}, + CopyReferencesNextToTarget = false, + Framework = {Framework.FrameworkNone}, + WarningsAsErrors = false + }; + + csharpProgram.References.Add(extraReferences); + csharpProgram.SetupDefault(); + csharpProgram.ProjectFile.RedirectMSBuildBuildTargetToBee = true; + + var bee = new NPath(typeof(Bee.Core.Architecture).Assembly.Location); + var isWin = Environment.OSVersion.Platform == PlatformID.Win32Windows || Environment.OSVersion.Platform == PlatformID.Win32NT; + csharpProgram.ProjectFile.BuildCommand.Set(new Shell.ExecuteArgs() + { + Arguments = isWin ? "-no-colors" : "bee.exe -no-colors", Executable = isWin ? bee : "mono", WorkingDirectory = bee.Parent + }); + + return csharpProgram; + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/Common/EnumerableHelpers.cs b/Unity.Entities/SourceGenerators/Source~/Common/EnumerableHelpers.cs new file mode 100644 index 00000000..f6506431 --- /dev/null +++ b/Unity.Entities/SourceGenerators/Source~/Common/EnumerableHelpers.cs @@ -0,0 +1,17 @@ +using System.Collections.Generic; +using System.Linq; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; + +namespace Unity.Entities.SourceGen.Common +{ + public static class EnumerableHelpers + { + public static string SeparateByDot(this IEnumerable lines) => string.Join(".", lines.Where(s => s != null)); + public static string SeparateByComma(this IEnumerable lines) => string.Join(",", lines.Where(s => s != null)); + public static string SeparateByBinaryOr(this IEnumerable lines) => string.Join("|", lines.Where(s => s != null)); + public static string SeparateByCommaAndNewLine(this IEnumerable lines) => string.Join(",\r\n", lines.Where(s => s != null)); + public static string SeparateByNewLine(this IEnumerable lines) => string.Join("\r\n", lines.Where(s => s != null)); + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/Common/ISourceGenerationDescription.cs b/Unity.Entities/SourceGenerators/Source~/Common/ISourceGenerationDescription.cs new file mode 100644 index 00000000..9d11701a --- /dev/null +++ b/Unity.Entities/SourceGenerators/Source~/Common/ISourceGenerationDescription.cs @@ -0,0 +1,9 @@ +using Microsoft.CodeAnalysis; + +namespace Unity.Entities.SourceGen.Common +{ + public interface ISourceGenerationDescription + { + GeneratorExecutionContext Context { get; } + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/Common/SourceGenHelpers.cs b/Unity.Entities/SourceGenerators/Source~/Common/SourceGenHelpers.cs new file mode 100644 index 00000000..36a5f61a --- /dev/null +++ b/Unity.Entities/SourceGenerators/Source~/Common/SourceGenHelpers.cs @@ -0,0 +1,114 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory; +using System.Threading; +using System.Threading.Tasks; +using Microsoft.CodeAnalysis.Text; + +namespace Unity.Entities.SourceGen.Common +{ + public static class SourceGenHelpers + { + static string s_ProjectPath = Environment.CurrentDirectory; + public static void SetProjectPath(string projectPath) => s_ProjectPath = projectPath; + public static string GetProjectPath() => s_ProjectPath; + + public static string GetAccessModifiers(this ISourceGenerationDescription sourceGenerationDescription) + { + // Access must be protected unless this assembly has InternalsVisibleTo access to Unity.Entities, + // in which case it should be `protected internal` + IAssemblySymbol currentAssembly = + sourceGenerationDescription.Context.Compilation.Assembly; + IAssemblySymbol entitiesAssembly = + currentAssembly + .Modules + .First() + .ReferencedAssemblySymbols + .First(asm => asm.Name == "Unity.Entities"); + + return entitiesAssembly.GivesAccessTo(currentAssembly) ? "protected internal" : "protected"; + } + + public static string GetTempGeneratedPathToFile(string fileNameWithExtension) + { + var tempFileDirectory = Path.Combine(s_ProjectPath, "Temp", "GeneratedCode"); + Directory.CreateDirectory(tempFileDirectory); + return Path.Combine(tempFileDirectory, fileNameWithExtension); + } + + public static void WaitForDebugger(this GeneratorExecutionContext context, string inAssembly = null) + { + if (inAssembly != null && !context.Compilation.Assembly.Name.Contains(inAssembly)) + return; + + // Debugger.Launch only works on Windows and not in Rider + while (!Debugger.IsAttached) + Task.Delay(500).Wait(); + + LogInfo($"Debugger attached to assembly: {context.Compilation.Assembly.Name}"); + } + + public static SyntaxList AttributeListFromAttributeName(string attributeName) => + new SyntaxList(SyntaxFactory.AttributeList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Attribute(SyntaxFactory.IdentifierName(attributeName))))); + + public static void LogInfo(string message) + { + // Ignore IO exceptions in case there is already a lock, could use a named mutex but don't want to eat the performance cost + try + { + using (StreamWriter w = File.AppendText(GetTempGeneratedPathToFile("SourceGen.log"))) + { + w.WriteLine(message); + } + } + catch (IOException) { } + } + + public static void LogError(this GeneratorExecutionContext context, string errorCode, string title, string errorMessage, Location location, string description = "") + { + LogInfo($"Error: {errorCode}, {title}, {errorMessage}"); + var message = errorMessage; + if (errorCode.Contains("ICE")) + errorMessage = $"Seeing this error indicates a bug in the dots compiler. We'd appreciate a bug report (About->Report a Bug...). Thnx! <3 {message}"; + + var rule = new DiagnosticDescriptor(errorCode, title, message, "Source Generator", DiagnosticSeverity.Error, true, description); + context.ReportDiagnostic(Diagnostic.Create(rule, location)); + } + + public static bool ContainsId(this ImmutableArray diags, string id) + => diags.Any(diag => diag.Id == id); + + public static bool TryParseQualifiedEnumValue(string value, out TEnum result) where TEnum : struct + { + string parseString = value; + int loc = value.LastIndexOf('.'); + if (loc > 0) + parseString = value.Substring(loc + 1); + return Enum.TryParse(parseString, out result); + } + + public static IEnumerable GetFlags(this Enum e) + { + return Enum.GetValues(e.GetType()).Cast().Where(e.HasFlag); + } + + public static SourceText WithInitialLineDirectiveToGeneratedSource(this SourceText sourceText, string generatedSourceFilePath) + { + var firstLine = sourceText.Lines.FirstOrDefault(); + return sourceText.WithChanges(new TextChange(firstLine.Span, $"#line 1 \"{generatedSourceFilePath}\"" + Environment.NewLine + firstLine)); + } + public static SourceText WithIgnoreUnassignedVariableWarning(this SourceText sourceText) + { + var firstLine = sourceText.Lines.FirstOrDefault(); + return sourceText.WithChanges(new TextChange(firstLine.Span, $"#pragma warning disable 0219" + Environment.NewLine + firstLine)); + } + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/Common/SymbolExtensions.cs b/Unity.Entities/SourceGenerators/Source~/Common/SymbolExtensions.cs new file mode 100644 index 00000000..7c99327e --- /dev/null +++ b/Unity.Entities/SourceGenerators/Source~/Common/SymbolExtensions.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.CodeAnalysis; + +namespace Unity.Entities.SourceGen.Common +{ + public static class SymbolExtensions + { + static SymbolDisplayFormat QualifiedFormat { get; } = + new SymbolDisplayFormat( + typeQualificationStyle: SymbolDisplayTypeQualificationStyle.NameAndContainingTypesAndNamespaces, + genericsOptions: SymbolDisplayGenericsOptions.IncludeTypeParameters, + miscellaneousOptions: + SymbolDisplayMiscellaneousOptions.EscapeKeywordIdentifiers | + SymbolDisplayMiscellaneousOptions.UseSpecialTypes); + + public static bool Is(this ITypeSymbol symbol, string fullyQualifiedName, bool exact = false) + { + if (symbol is null) + return false; + + if (symbol.ToDisplayString(QualifiedFormat) == fullyQualifiedName) + return true; + + return !exact && symbol.BaseType.Is(fullyQualifiedName); + } + + public static bool IsInt(this ITypeSymbol symbol) => symbol.SpecialType == SpecialType.System_Int32; + public static bool IsDynamicBuffer(this ITypeSymbol symbol) => + (symbol.Name == "DynamicBuffer" && symbol.ContainingNamespace.ToDisplayString(QualifiedFormat) == "Unity.Entities"); + + public static string ToFullName(this ITypeSymbol symbol) => symbol.ToDisplayString(QualifiedFormat); + public static string ToValidVariableName(this ITypeSymbol symbol) => symbol.ToDisplayString(QualifiedFormat).Replace('.', '_'); + + public static string GetFullyQualifiedTypeName(this ITypeSymbol typeSymbol) + { + var typeNameComponents = new List {typeSymbol.Name}; + + INamespaceSymbol namespaceSymbol = typeSymbol.ContainingNamespace; + while (namespaceSymbol != null && !namespaceSymbol.IsGlobalNamespace) + { + typeNameComponents.Add(namespaceSymbol.Name); + namespaceSymbol = namespaceSymbol.ContainingNamespace; + } + + typeNameComponents.Reverse(); + return typeNameComponents.SeparateByDot(); + } + + public static bool ImplementsInterface(this ISymbol symbol, string interfaceName) + { + return symbol is ITypeSymbol typeSymbol + && typeSymbol.AllInterfaces.Any(i => i.ToFullName() == interfaceName || i.InheritsFromInterface(interfaceName)); + } + + public static bool Is(this ITypeSymbol symbol, string nameSpace, string typeName, bool checkBaseType = true) + { + if (symbol is null) + return false; + + if (symbol.Name == typeName && symbol.ContainingNamespace?.Name == nameSpace) + return true; + + return checkBaseType && symbol.BaseType.Is(nameSpace, typeName); + } + + public static string GetSymbolTypeName(this ISymbol symbol) + { + if (symbol is ILocalSymbol localSymbol) + return localSymbol.Type.ToString(); + if (symbol is IParameterSymbol parameterSymbol) + return parameterSymbol.Type.ToString(); + if (symbol is INamedTypeSymbol namedTypeSymbol) + return namedTypeSymbol.ToString(); + throw new InvalidOperationException($"Unknown symbol type {symbol.GetType().Name}"); + } + + public static bool InheritsFromInterface(this ITypeSymbol symbol, string interfaceName, bool exact = false) + { + if (symbol is null) + return false; + + foreach (var @interface in symbol.Interfaces) + { + if (@interface.ToDisplayString(QualifiedFormat) == interfaceName) + return true; + + if (!exact) + { + foreach (var baseInterface in @interface.AllInterfaces) + { + if (baseInterface.ToDisplayString(QualifiedFormat) == interfaceName) + return true; + if (baseInterface.InheritsFromInterface(interfaceName, false)) + return true; + } + } + } + + if (!exact && symbol.BaseType != null) + { + if (symbol.BaseType.InheritsFromInterface(interfaceName, false)) + return true; + } + + return false; + } + + public static bool InheritsFromType(this ITypeSymbol symbol, string typeName, bool exact = false) + { + if (symbol is null) + return false; + + if (symbol.ToDisplayString(QualifiedFormat) == typeName) + return true; + + if (!exact && symbol.BaseType != null) + { + if (symbol.BaseType.InheritsFromType(typeName, false)) + return true; + } + + return false; + } + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/Common/SyntaxExtensions.cs b/Unity.Entities/SourceGenerators/Source~/Common/SyntaxExtensions.cs new file mode 100644 index 00000000..ca5185ac --- /dev/null +++ b/Unity.Entities/SourceGenerators/Source~/Common/SyntaxExtensions.cs @@ -0,0 +1,279 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory; + +namespace Unity.Entities.SourceGen.Common +{ + public static class SyntaxExtensions + { + private static readonly Dictionary FileNameToDuplicateCount = new Dictionary(); + + public static bool HasAttribute(this TypeDeclarationSyntax typeDeclarationSyntax, string attributeName) + { + return typeDeclarationSyntax.AttributeLists + .SelectMany(list => list.Attributes.Select(a => a.Name.ToString())) + .SingleOrDefault(a => a == attributeName) != null; + } + + public static SyntaxList AddUsingStatements( + this SyntaxList currentUsings, params string[] newUsings) + { + return currentUsings.AddRange(newUsings.Where(n => currentUsings.All(c => c.Name.ToFullString() != n)) + .Select(u => SyntaxFactory.UsingDirective(SyntaxFactory.ParseName(u)))); + } + + public static MemberDeclarationSyntax AddNamespaces( + this TypeDeclarationSyntax typeDeclarationSyntax, + IEnumerable namespacesFromMostToLeastNested) + { + NamespaceDeclarationSyntax[] namespaces = namespacesFromMostToLeastNested.ToArray(); + + if (!namespaces.Any()) + { + return typeDeclarationSyntax; + } + + return + namespaces.Aggregate( + typeDeclarationSyntax, + (current, nds) => + NamespaceDeclaration(nds.Name).AddMembers(current)); + } + + public static (bool Success, InvocationExpressionSyntax invocationExpressionSyntax) + FindMemberInvocationWithName(this SyntaxNode node, string memberName) + { + InvocationExpressionSyntax memberInvocation = + node.Ancestors() + .OfType() + .SingleOrDefault(i => i.Expression is MemberAccessExpressionSyntax m + && m.Name.Identifier.ValueText == memberName); + + return (memberInvocation != null, memberInvocation); + } + + public static bool IsReadOnly(this ParameterSyntax parameter) => parameter.Modifiers.Any(mod => mod.IsKind(SyntaxKind.InKeyword)); + + public static IEnumerable GetNamespacesFromMostToLeastNested(this SyntaxNode syntaxNode) + { + var namespaces = new List(); + + SyntaxNode current = syntaxNode; + while (current.Parent != null && current.Parent is NamespaceDeclarationSyntax nds) + { + namespaces.Add(nds); + current = current.Parent; + } + return namespaces; + } + + public static string GetGeneratedSourceFileName(this SyntaxTree syntaxTree, IAssemblySymbol assembly) + { + var (isSuccess, fileName) = TryGetFileNameWithExtension(syntaxTree); + + return + isSuccess + ? Path.ChangeExtension(fileName, ".g.cs") + : Path.Combine(Path.GetRandomFileName(), ".g.cs"); + } + + public static string GetGeneratedSourceFilePath(this SyntaxTree syntaxTree, IAssemblySymbol assembly) + { + var fileName = GetGeneratedSourceFileName(syntaxTree, assembly); + + var saveToDirectory = Path.Combine(SourceGenHelpers.GetProjectPath(), "Temp", "GeneratedCode", assembly.Name); + Directory.CreateDirectory(saveToDirectory); + + return Path.Combine(saveToDirectory, fileName); + } + + static (bool IsSuccess, string FileName) TryGetFileNameWithExtension(SyntaxTree syntaxTree) + { + var fileName = Path.GetFileNameWithoutExtension(syntaxTree.FilePath); + return (IsSuccess: true, $"{fileName}{Path.GetExtension(syntaxTree.FilePath)}"); + + // This is a good idea but doesn't quite work yet as we don't flush Temp/GeneratedCode between Unity runs + /* + string fileName = Path.GetFileNameWithoutExtension(syntaxTree.FilePath); + + if (string.IsNullOrEmpty(fileName)) + { + return (IsSuccess: false, fileName); + } + + if (FileNameToDuplicateCount.TryGetValue(fileName, out int count)) + { + int nextCount = count + 1; + fileName = $"{fileName}_{nextCount}"; + + FileNameToDuplicateCount[fileName] = nextCount; + } + else + { + FileNameToDuplicateCount.Add(fileName, 0); + } + + return (IsSuccess: true, $"{fileName}{Path.GetExtension(syntaxTree.FilePath)}"); + */ + } + + public class PreprocessorTriviaRemover : CSharpSyntaxRewriter + { + public override SyntaxTrivia VisitTrivia(SyntaxTrivia trivia) + { + if (trivia.Kind() == SyntaxKind.DisabledTextTrivia || + trivia.Kind() == SyntaxKind.PreprocessingMessageTrivia || + trivia.Kind() == SyntaxKind.IfDirectiveTrivia || + trivia.Kind() == SyntaxKind.ElifDirectiveTrivia || + trivia.Kind() == SyntaxKind.ElseDirectiveTrivia || + trivia.Kind() == SyntaxKind.EndIfDirectiveTrivia || + trivia.Kind() == SyntaxKind.RegionDirectiveTrivia || + trivia.Kind() == SyntaxKind.EndRegionDirectiveTrivia || + trivia.Kind() == SyntaxKind.DefineDirectiveTrivia || + trivia.Kind() == SyntaxKind.UndefDirectiveTrivia || + trivia.Kind() == SyntaxKind.ErrorDirectiveTrivia || + trivia.Kind() == SyntaxKind.WarningDirectiveTrivia || + trivia.Kind() == SyntaxKind.PragmaWarningDirectiveTrivia || + trivia.Kind() == SyntaxKind.PragmaChecksumDirectiveTrivia || + trivia.Kind() == SyntaxKind.ReferenceDirectiveTrivia || + trivia.Kind() == SyntaxKind.BadDirectiveTrivia) + return default; + return trivia; + } + } + + public static T WithoutPreprocessorTrivia(this T node) where T : SyntaxNode + { + var preprocessorTriviaRemover = new PreprocessorTriviaRemover(); + return (T) preprocessorTriviaRemover.Visit(node); + } + + // Lambda body can exist as block, statement or just expression (create BodyBlock in the last two cases) + public static BlockSyntax ToBlockSyntax(this ParenthesizedLambdaExpressionSyntax node) + { + if (node.Block != null) + return (BlockSyntax)node.Block; + else if (node.Body is StatementSyntax lambdaBodyStatement) + return SyntaxFactory.Block(lambdaBodyStatement); + else if (node.Body is ExpressionSyntax lambdaBodyExpression) + return SyntaxFactory.Block(SyntaxFactory.ExpressionStatement(lambdaBodyExpression)); + throw new InvalidOperationException($"Invalid lambda body: {node.Body}"); + } + + public static ITypeSymbol GetDerivedReturnType(this PropertyDeclarationSyntax prop, SemanticModel model, CancellationToken cancel = default) + { + var expr = prop.ExpressionBody?.Expression; + if (expr is null) + { + var getter = prop.AccessorList?.Accessors.FirstOrDefault(acc => acc.Kind() == SyntaxKind.GetAccessorDeclaration); + if (getter == null) + return null; + + expr = getter.ExpressionBody?.Expression; + if (expr is null) + { + expr = getter.Body?.Statements.OfType().FirstOrDefault()?.Expression; + if (expr is null) + return null; + } + } + return model.GetTypeInfo(expr, cancel).Type; + } + + public static InvocationExpressionSyntax WithArgs(this InvocationExpressionSyntax invoke, ExpressionSyntax arg) + => invoke.WithArgumentList(SyntaxFactory.ArgumentList(SyntaxFactory.SingletonSeparatedList(SyntaxFactory.Argument(arg)))); + + public static InvocationExpressionSyntax WithArgs(this InvocationExpressionSyntax invoke, IEnumerable args) + => invoke.WithArgumentList(SyntaxFactory.ArgumentList(SyntaxFactory.SeparatedList(args.Select(SyntaxFactory.Argument)))); + + public static bool HasModifier(this ClassDeclarationSyntax cls, SyntaxKind modifier) + => cls.Modifiers.Any(m => m.IsKind(modifier)); + + public static SyntaxNode WithLineTrivia(this SyntaxNode node) + { + return WithLineTrivia(node, node); + } + + public static IEnumerable AncestorsOfKind(this SyntaxNode node) + { + void AncestorsOfKindRecurse(SyntaxNode currentNode, List currentParentList) + { + var parent = currentNode.Parent; + if (parent is TResult1 || parent is TResult2) + { + currentParentList.Add(parent); + AncestorsOfKindRecurse(parent, currentParentList); + } + } + + var ancestorsList = new List(); + AncestorsOfKindRecurse(node, ancestorsList); + return ancestorsList; + } + + public static SyntaxNode AddMemberToClassOrNamespace(this SyntaxNode node, SyntaxNode newNode) + { + if (node is ClassDeclarationSyntax classNode) + return classNode.AddMembers((MemberDeclarationSyntax)newNode); + else if (node is NamespaceDeclarationSyntax namespaceNode) + return namespaceNode.AddMembers((MemberDeclarationSyntax)newNode); + + throw new InvalidOperationException("Node must be class or namespace declaration syntax"); + } + + public static SyntaxNode NodeAfter(this SyntaxNode node, Func predicate) + { + bool nodeFound = false; + var descendents = node.DescendantNodesAndTokens().ToArray(); + for (var i = 0; i < descendents.Count(); ++i) + { + if (nodeFound && descendents[i].IsNode) + return descendents[i].AsNode(); + if (predicate(descendents[i])) + nodeFound = true; + } + + return null; + } + + public static SyntaxNode WithLineTrivia(this SyntaxNode node, SyntaxNode originalLineNode) + { + var nodeLocation = originalLineNode.GetLocation(); + if (string.IsNullOrEmpty(nodeLocation.SourceTree.FilePath)) + return node; + + var lineTrivia = SyntaxFactory.Comment($"#line {nodeLocation.GetLineSpan().StartLinePosition.Line + 1} \"{nodeLocation.SourceTree.FilePath}\""); + return node.WithLeadingTrivia(new []{ lineTrivia, SyntaxFactory.CarriageReturnLineFeed }); + } + + public static Dictionary> GetMethodInvocations(this SyntaxNode node) + { + var result = new Dictionary>(); + var invocationExpressions = node.Ancestors().OfType(); + foreach (var invocation in invocationExpressions) + { + if (invocation.Expression is MemberAccessExpressionSyntax memberAccess) + { + var memberName = memberAccess.Name.Identifier.ValueText; + if (result.ContainsKey(memberName)) + result[memberName].Add(invocation); + else + result[memberName] = new List() { invocation }; + } + } + return result; + } + + public static int GetSymbolHashCode(this SemanticModel model, SyntaxNode node) + { + var nodeSymbol = model.GetDeclaredSymbol(node); + return SymbolEqualityComparer.Default.GetHashCode(nodeSymbol); + } + } +} diff --git a/Unity.Entities/SourceGenerators/Source~/Infrastructure/Microsoft.CodeAnalysis.CSharp.dll b/Unity.Entities/SourceGenerators/Source~/Infrastructure/Microsoft.CodeAnalysis.CSharp.dll new file mode 100644 index 0000000000000000000000000000000000000000..df605061dfb856b1fd970e63853123d4c811f9ba GIT binary patch literal 5985664 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�f|>aw*vE9)kWdz*@1l5$9(K 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

xW$K>xH>{; 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≶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

9e9<7BE9&0N5N9QDSdiWagix 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 z%0A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∋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

76D+=E;u6B#}I zOZmUlmw#@*`D>ZSQ2)(6o- z@Ax&#Hht?yA#(+Fy{%W5Ip`BTVO!>0mU&1sD%3h`U!vWM?IYTK?4Q^?c@J}^V9A|b zPJ2IV=9!rG>s$NI;4|5wu-Un~bQ*ejX&lW`X3B9J8eR`F-|rZOZC{ z--zRs!g}yWb`JM;`Wty23X|LvJQ;Bm=3(VKR+7v32Z%)4W%vuBb}Pnpj-!~12WuqZ ztWd&q9Gu)nT0GY)C8gvjrSpE1N0sc}Z69B8GlQSP=9Yix0U4Z$5}E!F!y}h@%?Pq*%5hd#7v;O&{!g~Ev&`r=A!+U0S=hN>b5fquQ!BX@mHQs@%K!Z01v-BWTgZF@On;l1Sh$*y8v zx}QWvi_@syX0k#yly_{A+1NTN)Np4ID&uWw1YIcG&Q{O}+Y7?5IC1#-fV|l7GES(- z8>RI`lbgGGm``G?F~^jPe+o9Dm-%FUn>^_V=EC36S8(GBbeZ+--~`K&0$f?ztc2Nt zWfiZ6sYAWK0xwsAl27%Or?4gEDd2(1J2#6yjRTmF6va`t*11Xa_VhWqCp&isfGy%B zH-P|uJzFM4E{J
26;J!Nc@>VBX&?3Bz#{GU$$9?M9k=)pD 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
ip6UnnF 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ᵱK*zr zrbbB{4KIq*Lq|hnj0SmTDReX-WEYEM^8QypU8|5h5ED9gr~bM zwjfPo>jyWsnz*rbOxB|^wzj2@tzI&G{)M2?vDI0I&_1EU^D(S`_P4jh*!sms4`b_B zlsgeOeC_vlRKN@K{_U`FzCZGCgM@c&#OQlJ7=4FD*3PGv(f1chll2{WXreXEnq{rA zMpy%q^&T<>l}{mge~_YUe^}n^Bx4L_`2+Qvymdmfz?#3S{VZ>d5G`=RQT9Jm-WnlV z;J_o=FG}7TAzIY$(e^K1-Wn12R31s`n6r;KKPQ6)zOEs0l6DT+z66VVb4+PkURojp zCNwV&jVUYo;Qe`rC%2Pd3KkKv<-7Eu9saZ<4;oCQrTHO<@+D*TVly) zc<#dky{VPSZTF#f*C18CBKp$bHL5L?`?EtcRa$$NiTsJ7?K#nsptk36cL7*c%T2x| zW1+X@;?1S6ipE+w$+PL!f8-y#_Z9cM#^m3%$$z*4P$&7jS@OTQ9~S$&$iMt+L?axQ zOrKo^1N+(wP06JCLesz`_CizYqQ20S8tCWS5?Ozd+EUwydvNg&ZN~k%_>FfY;J>)z z4gbXz;QSV`A~Z2a)=@=hoZg;`R_X1zXpUxVv_msC8bBHQpDtrJMaIUxt!qW=7iszW zj4`rNQuDDgIxJ-mlgwPsrvb>@j{7B+3NA&;KF%-K7J0iO%C$twuH^6V zaHDQzUn~!I>sImi=9Dihk9G?-X_k`O@!r$&Wxak834VQ$;7<@?U27bhb)Iwu|HDZN z^vC*P&9|moi>;y7NNbxl$y(x7hsMgMkUl@(!!G}C`mB-CR+#typ?%zG(F#}nPyJ9@AgNOK5L|CMG*cD{}!*$8Yx;4%SRP2N2AXgDOxckju3xG zug@AOS~0RBrD@AKrA zid%B!y>Uu-I?KpvX^djH;bOU@VO|GduF80iXH%>Rw+Qo=lavOO3B^Kp=*TH zQgXj)=phXz_t&I_)$MyUsX}t&VCaecIXQRZ zW#d7QY;F#kVJ{n}8vMCA7M!#2>p4EZsnnB)dTQdGMewE0wx~d7TWHqV7Ak4B-R)-E zQ{3@UPSz6X$M&@Ow%}HI&apsZ#U|V9$ zptZ}IV@TKccfolum1`v>8_YeeLX7yiPNKk1W8;C&{z;w1%!~fm$_efXrMGO^^8yiFCB+NFeL@50z zRfXhMy3nIk2)!vnC#D=n{@KkpjZchM@6kS65C@PrV8lTr{)>Z1eOVqXnVfj=vb><# zIr_GXphb2LE~t#=oerW*=eM9f91P;%4+n(!FAfMX0iimbfKZW6K&U|{AgHDZ=tnmJ zHPZur@F~475*bLz78~aD~rDlI$ z-?;xxpUeEdzVW`kVsd{n(A{~))Mtli;CK^M8+?m|P|PuprwyRv9UO_QmJGpJKjb*1 z8FIed&-eRszDmi>Ud88pEhTp$Mdtjsqa%*+u@{)qce%E{C6*%;CpmO%{ba(sTHga!&3+2@T7}7fF_$z{LHYKOEK?uG zuRNTqo8lMA!3n!Z1e>H?UP(lx?2m$!JwwFgTp3*(k@YK@W=*n|#5^>>Dz}QQK5sgt zv92L`m!Gvue^}lcA#H&r{y_cQ3DNSq+t2dW2+;!LA7%eD<*gB-1&%wS{i5Wp5uyeD zF2?@F%UdJlWjUfmXWFOnL$66h-b<;G0$(4Kl_xPBk@LJ~RFlO-@z-Fq^0bV%M#d9o zJpaVSsmOD3BE0x(Fj`6u;6w8oQq;SmKY0x%RkaM*$ZNxEMJRcv1o{IL2KP$LN3i(!N<8P2-Yc;{ z(C(FZ-ru43N-PxQdnIm;NGBVDbn>!@*u4^{GUlPGn1>qV9Xk3KO1+olj}-G$#nBYA zUP$B@ug!{C%~Ck3QZ8mHrEq53GK-l?`N#sgfJN#G{IIx)96M?jl(Fw`B%gV;j^J9L7<_#5$GFb{w0lg`863EDjTy}v`};eQD7JUk*Il0OL|d9R4rJd7&kr5E}a zHOPxQ^e>cpd*lz#!$(uhdLgrA@!G7I)hvahD&=CPQVM6bEwh-Zj9V8l=>Cnq9AV6< zSx~09IaQ64HXt^L(?bVD3k-<1M;Z`X>fB-m#K)pPeL$$tdBqHfjUtpB5Evhy2%g|= zLJ%Z#Pk%Q)+LxAJxW5LcLh+AJkNT%Z(aGen!Ku-pO?F5fRA<8|s4qDj#I7Z>E*9-N zCjB~bIu!qKXzfmsy3?bmQV*?BnT|8mqT>weX`KD+##u`@&Pr$9B^tj;A7>q8oc$NU zt#d$YnF9{_RDfga-vs4gT6P@vcT~Z#wR|@bUm=lW>k{&-Nkcx7b4SFO`!pDH$B0m) z7jf?js<&#bHmk`hFy&q;E9}oIXyefpHuX{q`f()9+!hf*hohUpg-yMPz$jsD&Ma)| zMFiGM?O;@4Qy;g&7{tfHEXB{8YG#aKI}S}>@5nQjc>k8Ev{9V;y_A+1u@_)irN2UE zlSEvuor(%xYEB#dca>n9KCAbO3rbls$;!mNtK?gaNv|^OU@H-+tcsAntK_bTP}*#v zq)*eMu$Kp8$jDYjal^E{^r^HYG%uZwUS1TDmqN}XYWa>*KI6Nj5mWePsX3Xkq~96$ zN2tC|VfsR5cYooaQkS6BAukQX8PU(A*5oTiTfyY1l9xg<e`WB;m0F-- zb~MwP7xU06Ymqf1=Ar&%wGBh${q%?K{b6})gtX-k*3X>~EwJeCYCp?cBSZ@vag_bf zl($BRmZP#?l)N=Uw5Z#o?O(jSH6re*JaY7D>d0b`ZTwiVYbg8d{cPxr9=yt-L5|l< z)ky9*(!JVRF=cY(fh{tyl6mhej3sRQyKGB-_fubxZEL|`U0*8h-gyIQIz9~qX^itZ zjO6>%Ag03_0yM1myJ0OyFaEcI@V@!)Z5}vXdg`^oAjI;c6$o#;)|aS_i5PfWXfjZV zvtcew2GADw6rB(LA@wBpsC~~7?Oq!Q1nc4Cu_AQ&ClI`IP=-t^?oFJJZTQh4*x3$0 zZ*w<$x5nJk6}dKj2HmPI&@VG#Mf$m5HSh1}il3-e_zDQ8zD!bYCKH>XPoeK>3v^p% z4wNTd0ohnqZPB6Y&)g>d$tQ@a;~+zh`?qtPEa2fd99Lg1@;_KUK2LgW^EbYUe6f&z z6S)(9;4$pP1+IX5)OKuyH@609w42D-qqa~O^PnxMsjKaZB~Y;p+o)aE7P)Gx^{W)d zWe*m&GNwcBYr!t_bE+%Pge$v;xpJGjGW8WxTDk{Hhb#($B@>DIOD1g7CDQ?Cb2%I` zo7?-L{+VubobUUSv>We-B1`N0q3(;Y^XGw`|BNo{xg01-YPi-mIt!ax-3SBr=e<^W z+|#{braKF!yDHsuew^#>p4c67Lul~wxc@kFv@>&P3?p~!PPa#Dz~TK&_eWS^TVRF3 z=n__x*3|?MT^(ZElZNngyLD2(_1r=R?-$~+wC@3*jV||!=#$@bEp>H7l<4@zb1y$? z&Kj{@YROA^&ZKlKt43-0E@7TMXCeo{w9Hf8*Fbm3GE#MOzIV@A`(3fjL3M_|FEja^ zHN-S+K!DQ5LFcpfzR$9=Zje6hQJ;B3#khrMNci3=KP-VXmX+EtpH9R)@K@mZqCu8s zvUj-K8+^6qfe8P8Vg9`fhnlFuRGY@6qT6M2qq`(wqb*Vlbw?L4HBt<13e&*#NHJ|| zN)=qd)Wkh4pgzGl@^@?vfEslEkt47i?=B&pe-L+HBJT9FUYJ652<4_tA#D(beIo)4 zLSKncaBLFCe2_dRf!hgi9t7t}P(#t$^;l z7kmzX`{%pRC_3L2)MPObRAn&`RKqcFUPfK+To+=%o##STdY%iFXh1-_1_abnKpb)b zAqVd^KW1n36HR+Q>v z4C~>DDA^HA8#6^f(uX)3HJE18YRbGBR=_`gL)Fm*OpRzmyTUYZJyHzqO|60pm>T(F z5ZZvrYz}_7wQ%UQ7VVF%@8BIPqxQ1Cg(vL?kzz@xZ&&w~D3#Udz`PUZZnhT*qF8=FZ$a;(AkLE&D zC4m^V%W9VbnNqgPMB}DV`$2IBArlRYyQOGDM%KkDB6u|C1O26+N)1MJAqRKC0Rq+SA0S|x9v~ccF(BswlQGakV&G?sf#qTy zivheJ>ouW5d_ro4zggdp^}0iMVD?xgwvMzpJZzdS>Fxv>DBGY^j;7TBUd)i(}Rj9PWRC@=9N7C6yK@+G1F@*V+-SIvs~K zcyS5Yi7iqSpn>sNJ?t2<#iweEXQ7YK7SGunqm<{7)Av!mV6GcmT$NypKRLD_GiBoW z!r*0G5L>WOsG9uaittt+B`B|@MOroO3&S{DY))GoS85At`L8l$7E;U*%g#lMWnL4t zRT=$ZXIikV?=t_l>hCp3s`}%*%wI=N?hjm@pr7|uKXQM7#Qt0ON4A8>D6QF2UqeFW z9p`I)M-FAa#;FtIYov~&I7VfELx+R#ZfEwC*FF+$@eSY$cQM!gj%&d;?CQ+5f8bgW z(P2-?S?l5KueW3=4Ux3g+sn*1a!lC7^^q8lk~uM6D3nfYp+GvZg~FJLjdA`aW$l<* z&BS+XM&dg*AX6MU%M?eJ&J^bvNbJhaQuj5fBKUu%nD`?s;_rr{E-oP7We%HVxh^gs z-(wCheaLmm0`gDHV(%tcK)%l`W5I9%`GW)`{aKMD0Un!B*0{$mX<_tNBoP53&Oid= zjcq3rsH7lE;-Cb|24v+;xCF{3?TZX1uKOJN3B-|DY7cbW{~M*G4mIBTkJ7M9LW8ZU zoc~djCW!smAEA-&K>j^S^Izq|&Ik>5d2;?gNHgAR^*i@{EbyeoSXl3Ea^=SA^@LfK2I8anvfqY$|JzG2l ziK2XZ;R=kBO!4{o5H(wzodOzu|8_3hnaLJ6K;})VCsj3stDrHd33F08WFeE6>cQ`s zSO|N?mEfPtU zXD}&V&f=IEEJ}4UsbcmQqf{$M6%%BHJ8Nk((69*?#1Z?V&tE{lK;RcpulinokMc{K zV=%GG<|LT-%4E$1c3r}-`il;$1zb0gqjJJ+aWbgJ$FXDrW6L05BXLDq6$ItAT(0;jah3P;dvSxk8#=@ zr*?0D820CfcQ+UE5yt9#!WdpMECR_q#llDah2R~Rz7e`SpCdQb=IFp#bgpvCa368wLCn^dt2Pq&6=3H?9Ro2y9&P z8Lo|1I*CCn^K;2O=B)?n*SV9V-)s}f&jWGUP>OvY66$d*EHQZAq82H}FFOZ+O~J2; zW#%AX*fCIf5YKEHQHXwnH0-d(H(_UWV1*qu1B>wu*H<#GtQ>3O3jY}A@Yn2RaTQzW z@|Mu@@;W10L;@eSEP)T3lmW@MoB>&51|)7Eh(FGyegbZ*WITr7k)E{z7jbWGEU=(o zTRRp*ax!x=To2^_mXB=Dp4{4+VhgtA@rMp(C48FAb6f>xC4TDS@rO=kC1M)Gml}21 zy7CFqZjn&isShrMGsk# z=lbP5?KiNglm7A~?i~3dpUz%`ytKn`MKn)e`dUFQS9#z_3s=@#A9<;8;7E`p*`Qy% zR5)-X&dTjM0A4B_I1;KZHU`W~g#*VBXRFCeg-iPuvvVM8*%`hOxERLUGE|7~%_6k1 z-(A-sApVl~k%DyqVIcfu9k7A0u{6OtfQA(sSqIFH(gZO+O(irE<8MfsX+cQ4HR328 z&v~@V|DvCo4__yUH(5&Wo!Qg|#@jF&JD<}?>6Y#1@Q>~OKj=WfoAbdG{C>sw-&^`0 z6zWRZ%qXV?_eF>4eNo(Cb=Jz#%7tttCMFi%-QX=gUe85n+!czT(}UBh-WjD_@n!wna|%@3!M*+}9000l&SWG9mYE3GVlw z>V6k6LoA{%&kF z4hh>52^W4?cQ{N^}m3C5B%z~;D5-q`=2eBl$o`Ry>Iuk03`VlnjdptdES! zyBFlGA-^T;UFXjFYdH8d)!17oOv9JPGDy|e7MG)b=Xm`so=Ij0gIPm!n!5_Qw0|VX zI=$Ks)Tl$U>!+=;z}%j|ysQ+MqC@pb8Or1>{Xz`ue$!97inAKQcS{eV?k%8&?d4<} z6U~Pks3F(zn|{0|8>oYfS#gV)@4(bOlC0YF81z`N&ig^svwsN4pc3HS$xhww!rB;XjzFKT=EIuI!-7yUu4=t(3Ie?W`-w79Ew4wx^| zKYzIyFsnqb|2EmLkPSBT0~>6KU-8{rq>*y>Ipyqv<)$%z$WDh=$S)W#z;2c7|3rD# zfw#F+N0t)JlbMV+a&g96&KTxU8YYl)Bm53h+Yp*P{KVEu9vFDhnTAU>EvvIxg+s@b%Lk0-%AQBnvd%7ilDO2 zbp9~yJbl$n^gXA2=SYp#N53~LpK%YzE$%2g<5t*S)9bhmxrXDG*F;10Mni{_wHdeds-KID zTI5@t7c+MR$Yk7JV#;*fKAfPl|2R+~1Kh@E#VhcSK!r^JD&-e(kbp%>X~u1X=t)Xs z+~U2CIsYp1a@5ZK1P}dlH#`LQW%o{Zrd_Us0!`>P8lghA!-JpH_a_GKQjWY@R7$Pu z6Vz@|NeN{AZ$I_OE28rTqw^zOoj0n^e}LZTy#xBnYnYSeG}qAAnw;wV#|b+BucLD^ z2rAx$r0ASYKytZKi#9Ot`WzR@jfvzY*qk|%yvhV6pxldQ z8wn_Un4{ofj?#xYc0qIOz4Vp-dJM28I4wQ{g3eY?ev3pi^yg!;&EdnNY*@Ny85=L@*t!*&+qK~H6c9?e^Y~N zbMPyBg0z;iCm3o+_XI=rXnYXrN8^LA*KT~U54cBVSsPc(Umenn72w(An%NhmD6%g| zA!J{WtxF`qW+jqfdrlU z6mPd#zU*8^NY8HA7cAa|f}U;p*1H!-(t@VCX7jD9_t_dMz_9<53(ApLYh5|A&iG*G#FlstMO2V|EA$JWYd6G zk-XZG^JP4cSCiqT{e4FEGX?n4-=V1C3&2U-66vq*$qK-PR`z5CR3-6AEvAr|IDEC^ zlie7f+{1Z3X3N6H5kmDNQYFMEgCL$0pX88r;*&aLW8)Ly`vCbS#3%Kr85^HS&4*aC zuknf0co;SQAH*lLmJ^?Z+R^wVRFB3dp?)+z346Wz@d-td_=G}8e8ScxK4G&GpRheA zJ{fG{6P$*1;*+NT|KgLU65^9D!}w%UFdm&40^V}0_+!Re{hsI7B14XJU){o*j881@ zj%3~gjZZA^&fa+UKR&U%yZgqwKk

+0HZ9z}QCK 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�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 *K20Cksl$Lh?%CWJ5u!XZ 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

XzE!7(c);H5Jg?bzL)G+v>sZrA17m~$&N*9 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

Hg?}4Pb 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�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 z u7jtOMK9j8jIRM8FvR#m$e$tJ_hW~m|`#apR7RSeSku)m@2W+Rj~sp6tk!i$dS2{qn{( zr;9Qu*?w~!P7?7Xecy{<#mB=thL9-Ud7mb16#WjXdWEK$H`Yf?&1$;Xj4|gzwbSY1 z42h{HOc#;M)b^YU9gXRtf|k(peY$9Za+;a?;dIfJQkkPMLwuoQ0;aAtLkuAq4P$B4 z(U>8|k(e*kW{Als-dOY*Vl|2RLT!d{DV3?=&k!3?^tDd_OAI7Q3&|W5Z`Hyqv7BO5jp)t8D%AxPT_e)ca;47M)C#gh zR}yo+vcwlC-qo8WhUl2kdCwBlbWEs@oh4RND)U}2Pi&wVQ;y9OS5drcb)L9^qR&@T zIL`A#f$#r)oWB)CQM@|;x1x%c(Dr;Qno^9}i*LpIDBfOtD?ZZVuQ)z}g~Kcd---bg zQ?;6(-7Dy03q%UVT!dKxpMaPJVwOo&7iuXW3≦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 z�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 Oc^9-+3N9z3=4D)B8?40p;)7Z{$8N&zbM= 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
10Hg6McH#i8;SoN5 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'L|QSVwL@A$qz%D%!US7D-YZ;Tl{!$jaE#>W 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 z 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�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

`@l8@qg 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%0DTAz0dRwB7RPZxeri3tHj&~kQO^X zyTsfFwEqqgb02UTOht@|*a6WpeE+)ASm&(fk+O_SP7y~q{um8R5zE`1%ZBl@xWoRZ zjnlxkatYwN!A&jVh2L7#geVE}mNOJY8^~RKY=8TSoBSrwaYtz2iO4#27DQ@*r=Cyw z0ey?OhbwDs{9GA1U1dD|MwW%1k^l3a#A(3*xq?TwX3zEQJYwWm!C>aY`*HgBz2Sd=Z3`m+QmkUMh2<%7}*ieP4+9G%A&55CKj7{wZ661tJoZQ z8{*sZQ*}tA~!CpLd>SZL!C5_dxj%a)=%yAbx{1>*32P^C_aVCo^6H ztKHao*&?O78@r7cZh$D{^&Fz*Ud_DceBN5BD!bwsWNtRMYsQW~?G2LkxP8_l zvpu`_Y32<6_ubx}C8^;_pO2e`iF8v%p}T6Sb@p>dQ}F-KJ5RH=6ON^CS>caP8N07= z&b7PZvsq`*z0ZsUUdRBy)kC@5wwa@{h`ef9_858QUe-`ihMiO2y_YxMd2LM(iD$d( z+FRx0q+{NzbWDDg!q>b{?`CDk(6PQt^Zk=vQH7(bHmtV(7<9Pb49$AJaJ;rwR7(#& zzJFbX%oKN^NVikBa?hlj+uZDNekJE*$8BJbQzyO0*YEP&D#_~PzAb*+bz2QJl$=J< zzCfdnh50_Fh1!pHWL|*V4AM@68k?#ToO!)M4?4!Ct!-@hPZfT7b{}}$Pq}Bl2EGTD zaC?86Ll38Qb!$;`z}g?!-nMlq)FdsQH4OiB|Gv#$#z}|exmrr{JL&Q)9xF>%e@VXJIrxQb@^O}NLJl15f}5G;}oBKMc?-$+d=j-sc?EI{?Ki`-`P9AS*xwZ zLZ(4SNF7nYGPi6SD=lC4kP1UaX1rV%HMi&*d@d+Bt=QfBG_oeV@7?>eKYUvYoCqH3 zy1A1EEKud1-uFq4+Q1$0E#c;dVa#^`+_0Pc6Ar&M?xM!uTV$O)ZCY7{SK|>GMFg_K zKPwxr*nI!lTH?jG)ljknbVdv6Fb?VNgGp%!%_hxBN{!B^iX-ai0M)8~k^(B34#(1x zT1YC~#`-Vm%5}ThT%V3dLWk6T$sQvv+*OE{q>7AcO?;ml`#>4@r0K+1-jwR`#rfzd zspjuSn2?;}{3mqt&}5;$ACc$t)oXc1y`NTNjE>|b^w>w*ZFj>e;(hA%(Fo8iyJ;sT z?~dmk>3HO6eLIgd1vhs>T{?|`Z7c6&4xv$bRFJo}No$c!Z;xSu!a1v;+pMrE+I}|v zN8_GuWui~+7=+^Z+)qiUcC@A2Gof*A!y-2EXoHQLqgQ+rR$E$~z~=FNz7wO@cyFO^`{o?=S@#hoK=oKJXj->|vUfWNF>tK|nM=<)k`cZC z=+SeeCe}D|q&?##YoL|k?Fyif`h=Z(&fpiF%sG^h?_oWOuH^-bpCy^`V1Rag)-$qQ zyI@CmPXD3M30P8nbY{DbKSrbBuDCaP{PA2ec|0z^w0v@7HZVtpIJN-xNpgz#&}o=2 z+#pSmE}SIS8M*xO&hh#;utZD{3(9wT%lrZV?tPj$<8F`=I!MQydNc~<10cb z?cw^9nYs}W|FS<6F1k>Mm>ZCtl&;(YHkJ*BJiYA*@+nJ$c1M8^_){lukPzA#iI892 zgTEykR>pDP7%l2<;QYo|dx{h4lPs&fa5TwMkIRK8;fGm|cgI{I3mYAOeM98WB;q+Nbbn=N0tbd6P#9a?H9U@~Ti{$~!s=@<7{^srJlD3tX z9Py{^qt({wY@F|$HCy{yGStU*e(;zKjJP@a52n&r27~N23<~W|fBrB3e@xr3%`c+?~SMC^0f)plob(zKl4u(w7RK#Lu3Xz<# zQ(5HIWBbG5>t|cjTmV9fa1=^!4pRSryuA&Koz->sd**n?=ZrtbbDpum4r4O}oI(S^ zB+!tA5Yw6#Zb<_Tt(;qE;f+bm`;wF-b{lSp?#%g^Ii5Lo;hkg5IOM)Yb#947BqLGD zk>HBzI+7zf5=cfe5|JFqmTZYiMk11{>qz(aUu*CEJZEMMPC^UEbM~{J{jv7i>uayQ z_C9H`=!_HVM?=izcO)(etF*L9S85i`#y_K9cg1_K-q#m3N`$TA63WGebO&N0L6keW zdY5QXl+AZ|R+W#t$L=(a<_gN^EF4|I33^Kn}FW<^><=%VHG59A_`2 zPHW!*c3+~E9{jLd?149h7QH_vE)MTJ%%;$y52w8zSd(h$H9Vq`qJ@(j^^t2OCI1?F z$ggC-m9V5ug^TZcom5eos9x`=@)>d&lDnXNft4Rxj=ZEc?#BL$KLF9&Uheu_XfPCc zOv@q}C{D+V$jHBsv{95;?|(GdrKwc7UwNfP*+NrYN>O8Q%T`V}3wQh-?B(C5zn*N%hh-| zetx^9JLcCH4z-zj$t_&OwVwCn`dRWy>&R$PpdZt=Xs?_TCCDW$4W})De=ICX)K=~) zUq~|%levAB_n2SN`IlftJpZVzYI_6mmr+;a{b5au0?xlW&Y;jg0|A-1VvY`Tavmw{hPog z-=gaV_3mqK*6FsZ>M%jngW)I9?i9A1lX0hZ@*;}#iFr5sOcW?#r`vD;-s(#5 z$I&m0`}J8WSgUD?6z8ZI>07j;^Yc-@_x)8cF0~{#ut%#)#0&q$-`WHl>360yHmC4! z8sv9UR&ng?Yh7eV$azhp@!m8--KMG?_U|mfPX7C!zg;~y2fk@sr?i~XelM%;u+u`n z^l(&bA6CnvGAXd=Vk><-itAol%dwj;cS{%9({oAU^RHic&;nmk0=|EiyTdNF5B4P> zn&)1-C{&vHODpRXH?QnPeo;Eo;JnfoaR7+xwdjx3E^e4#GtOI%Z#S88T8u8aDC3=* z@*O}e9U|4{2CeEZvT<}r>@TXieBB!NbX8Mki{eqfolcEMcW3S{ncu=+GE(um{|?Nh zv=FiBQ65^U%GGhV$qYY-_ZX5{bf{JfQE_RzV(}JyMqN%yO676D7cakPKNpGZU97C` z7Wi+a{|=mzhI!mcI60Pnt7Ney;QfqHzw6}^QriKV$34)3CErV~85UKZa-_Wr5iLo~9DeQL=)VW)VqDCe*|7Vy&B5ng*a zrO;kl;#_)ry(NAAd+d|K#))KMap8BdvA!RSJ#DAk0(+tOZSnYbU|RAy|6S-n$H_H+ z>FvKi>=)^0y1(-k5`vOD#qac34O>`c%;YP%1=i~t4cc-x31@pDnC8wIP}ty zYZOVW_Vv7dp4O3^@#tOIInHJI@AYZnz3`VC;+Whir4e7MX8Yi>5s%U_f5E*Wi_fa$ zhV-0krxg`2w$4D(_V@5%19!v~FE}lQw0=?I^`t+>4GK_XyL| z-$iQr;GR6n(#vT*bxG|%ap~*q+Ch?nGc=31JB$c-D zthM3?_nq_M#d{W&6eEZwf25DUlWflq?uRiZH`fQ3z602!C&T?3-vNgY+c;%g#W~D> zz2M@|Yj)&Txob`*h;ufpctD;QlAi1j3+AHx$ul|Xv@7`7SV$|r| zR@lEvt7`XYT)a*m0O8tl@jjh5T&79V6ndH$sknIkJHWbo2;@&-+d5hJQDW!yw1Qs{ z3YC5%rMH~Z@q*InTwrhM*jJQW(xH)`v`)%@W9L%+CYmqJ=;Ovoxo0R^{P`VO`Prpj zm@dJGlIF5EesUp<`R`~HJqlX4KVlre4XSfq&*h`|UHUQNMzgC?Ez)|T(uJ+ZF-422 zmttk@6|+0XJWbym#pvi|Xqe@Sbd=uY(z_I(nVl&h62kRr;cHZ#>r^ zpI|(Dmh*+I3dz$b74+M6vSge><8S>S$8K;dA>X;p*Ri?n6)hA$?eP9Sw!BC6m4_iN z9B1kCAB@r1n&9h|MtL}5asDHgH1-{fP>rOu@T>J*x_KvUFD#@ol^4Fhxxl;DOH;XB zR)nUwcdlCii?bZ1fz!pw5c?e&L6Nv>7G`-iA~rVz!gJ|8hT;r;_roy$bu z8k9^-AwB;i()41rq`!LQfX{&J*l!zu?*MxqPSd;U)wndHqLQy#89XO<#J=Wh>0+sc zR32dkPszKwaJ8iz3*ku~b}u6+ZUs}*Dkm#c*_MB_|g{@0sMLu-S5rs&eMJW{h zac%)c4$U>5=2Fq@lLoS_M9CtA= z(SM1`DR=&6Tv6`F87O+X-tYXDc))$gqF>Ehlv|SbqQd#TK`)O)io0})tr5OoU$RxT z;uf`u-smOq(C^br@5aBM)n25pkH-deix(mXm8)a+GvrvNq!^MRq#Uo3*Z;2k$RKmFJF$lExvOz-zHsvorKlc zn^tSGA@XpiMWOssq_#_=pgYYX5LHS(L^&s2q4f}!c!7E)izP#}*R^Qhe;)f5EnQq{ z=C4$m%3>GH^v|)ai%aOnu#k|m$R)@oHzV-X}UR)I|)c%4+ zk~aF(O5gk4dUOlf<&tRcQ8-BdzFx4RBTk&3g_+zlZELpV7x>+AEt^XEQ~aylMb$#g)P$lr(T- z=?_b#C4;3>%?}>Mwee?5rIp{~xXEXslABB4FO>$riu@A~mIftPrHM^yO)(tysEt4ODDpfX@t|@)AR2tZ9 zf8}2*4SZdHEArAj4rGcWkUd-)6dg#nlvdqVD*j)psNUzOqndnEM|DXpkF}MK^+_-J zF8$nCx{*5iJH|}}x0PCgI0rd}(E_!|CU8mpO6lDsPlnlRhY7r!=yK7GxDaLB883r8PyXCgpC_ zezry?+WT{A<<#f1AiR{WSXe6IyrwY<64#83=>}N=q9WJtl6Jyse&ABEEwXw3QJB8v zYgSW|>poI0k#wtsG`#ck!=z*#Xb;J~x}`5D5=h)9+w-X%8g82qHpRhHZDCeT{ z`+tgB)#sSi5Orz{-zi;Bj(mEuax`|eDT+|OL!~>Gzr&MOuiNm9l=q?WJ$ZU@e5BBaan^+;)*EJEQ> zlF~;i96(uD<=i9Q%qcrrz-y#&B~^-XW2IGEM~Mq16_B0l{QDmAL~(cWM)V=R5N*5U zc2837uPa^dma68_@5FSTlT;IpOa5uz#l_lrb_@jTb-i?y`VvN51L)X}*C>5F=O5|( zs2f!xu5;oDBvrh(*bjIa|4|gqBG_CwN8~ARP|W9K`!yRtBq=9+CsT?19h6$Qr95V! ziU~Z3ZOjIkpWz&%ro{add~4ApwsBD(8TJ#1Mxkzp2xib#fKqbXTHaL}kXT%TKe|8M zU=<@?%ksxqAPm<&_3?4eT`#yXWro+=@!zO#GC;y_?b^if@Cn$TGfc z6A7u+CxBO{<;6g;#oJ3dG5dG+M#4!a_)8UkTe|Xguood+cui4hjUc$mN~mXFqLpq^ z?mt+ri^^{>Ud@)=5r1ucD2P=Cm>3Lb{y;UpYc+hPwS_Ims9zf9X9j@FX5^EhoG8PE z8BB-(yd7E@8i?<<{x>MIxG#`roYR@HSPp0 z)g(rwpdc10o^V`<6#CZzw89>s%Z3a-E3dK0C54a|HS zO8HaX$gBdtSH!U9C@2c=Fr&O&>1t70ZqT~vDpji=1P>I1!6-A1HZd(_>T3kIL&K#j z1BY1op(@LSb(>#R7r0w20#`CcL|}qa9gc(xnR13dTs>96F;RZqWBYJk`DPr z+NJe(1D{$e!mf5i8>Mx=s9vPaD^OuO(b%*Fcp_Qd8i@GBpq3FWqc_f+= zpQmmxb*^}%Kov64q>iQD;i>_dM5P;DLaEOukYxFl#Nw&AsprO%=C-s>Bh&ZLz!E#K$sTp7|j9$GxTD?FCgNpDF5dI`DSWeD?T zy%uR&rrj2>8pnPkvsW7Uo6>{Gm%p*4ZK-m-e-AuVdI%ZOYg+d#rPxN)C`7~JV*UF% za7pXzD1AQkXa4{3FSx+0_4~je64m?^_CeWu+@BN3FpJtcKw8RB3PwDp4CseZu~i#+T$0 zz2$C&u_RTY;@Vj0Zb?%gdz5y<@Fpl)Sp6)iTT5HPQOx_~B6*+c$@@d}Smi|V>kA9_d>&b)u= zFG+n6Pke%!l3{{KGpl)!PSW?M!ne0v`qH`o=l{+AeZ!Z2{G})UztQq#$4X1aN`3uf zeSOsd{?yheIW#aBEFW1}K^+Q8zvSzKE?cKhnHvUrIP?g7D z^kwz)B-%&&vWbpze$`i-J3$NOk&+(Y?aSs)Sr=sd}Uv1y<>R4aa`m0*&D@%bpYdyGf ztdBAelYE#=YyMG&&rs;-5&QcM`}?g3Mb+0+vQ+3baE_Pwk-ob5Z7b*szC zoM1%vWZlh5?+R(vVj#`XU`VLJi0{^uq2<<7gKM%~C#m@2C{46~R?fO5y7AXp>t*4l z)_x;CzorDl(mF>%#L^Pg2*&3giY;v%HH7Y3PsVdkYWn+>8n+akOl~dLp6g`KJw=-L zd3rogPc}(EmpylY)}afApu#VQ%vezclvYKh>4wH*hc8=7#Qv+kHMQps*`uJ)9OU&VJf~$gU$8jTI(0gL?I(<4m%&I4`V3xQ9lo0%`N58 zthtMBg|_jDiUCsFsqcsTYCA<(yY5q4zwpMh@mI6%acC6Ai9A@FuKEB%f{N2s$M&1v z&`1f&n}%)mb*+8wOBB~vMPKy6H-C*ohhpxocd1RaC3MDDttlF% zH4^?}rM?dIt)x%-q8g7c`ZvY=`Q`9^fN!r=^{-`oQAw&zeoIXE^<{g8HH?*gwLQiMzaX)Lod5Y6 zWMI55!nirqn!TAp{qr_}SBBnfif@$I^>&FDeMJ&Zf;gKQ=qb9!+NzP4%RoITdj@7UVK~zlz-!e446Ryfu$7A6K=I|F zpMl!UEox)>QE#I*^BDm$ZDMrh^9JA@R^TV0x9NW+F}5a~xo=R?=9ya&I3|K5D!^|x z`&!nL2p67ODyBo#hqKuive_52S<1hh%^u2TUr{5wKa57^K8!}5|1cW)@rTjKPk!G< ze12;)FZpbe5UPLr`!=gaTEA~20tqGb&nJ{XKkYL%Ch^Y~s=+v^!jafZaNm0SdzJm& zXn(IuEHm>n=nzA}Ijo%L|2z=t^lwNchD>}o{U{C9X1?V}qP8PR39;+bR@<#47Xf>% zbDW9Z8h ziFm0wXnjn`UlBn4C-K>wGssr#&$G)raq&EL@As4A;q%E zpQCJ@Xh~be$=?KEs6ZD0Gxfz(CiG_fH6fs~@pse9@pmobm;9|w7)>;Ooxe;F7J;4m zO)4;9>SFwjZ0a{+l!=Ymc&frvD!0pUG4-I>U}EEXO09vJCpNl<sh91T{6xC=}AE>IA$)CqwCVxJ^m(<|+FY{_Q40ho`6~=?UizDuoDv|YU(#+oztm<=7UTs zy!6(JO?`bEnE%c%`NF_rS+o~}v5(h7S>sJ{wj=I&p6vbjkC8TS*2b2k7oKC&yUx)2 z8~vU7qW+GbO?{4^Rgsy0vzIDTYkfvDF#ZP9q68q?T5YJ-dXp}O1A=O;=RITPSpQHq z{$m~l!RoR80t6v5AjKIK6m&~i_AGO1&mM$lSWNBi8_1qLAsfb*RL*r^?b){jSwH)> z4Cr6o+sUyY7c2CO57W6cAtwXNaV2!*GYSRf*_EiwK)Xax=mD(9zqb!}xS?eg?A zw9f3?>%gp2JG|7?j%+hjQ9^K%WHGj z+OV?=4lt4k#@mqr8$q1P#Y`z>GI1jSC?(UeP?DJjFT_0rNtt^l5zlSY^m5D`efGrafYYpN>O45~@NJCTC>4D+tS=^rw-6b?M z2|Trlm-1I8<9~U1U=^`$aSZnM>>B0-=9^b@briniZ{^JyWXQAFvr+uSo3#n@3bQv_ z8T3I?cj8SxqK8S|`#USs&UkcXfQ9lzQ%wxUnusOdY)Us2BZPx$mSn~i((d>iXc z_}lKu0Dt%729pwRW%aLwiqH4p=p&UlX#q$12$?Pb2(=2>rwZacFNclhg|J4ko$ziq z-qrH8egjzO3xL!IL@smJ=hXt8H;2m_aC6u+!UWDlE0Tn=UhY}B7Ebq0_N?rI-)m6? z?3nDz>Vw(Txapkwn`9Q~!358nJ*4L}9qOWg&~vU->+9$a%?*J|@tC5muhU>GQ_9gu zxQygBa(p;{Mm@=b9Dl>xohZAc20Z)JZwO$O*V){}{3571tJt(8!jzd72-DPAq-NZ- zS-WHM5K1q$WO=)KC*75r_bdFAO_EKll}?_>W{#DEiy!xI{XRZULuW(Jzgi%2Oa0lz zquy&M^E_KL2ItgPP2kj4X}1}fgFfcxYxTbpw;M%!&9V#IGUkz)9#9w%zFM}2ptj3q zAH0~gx1%`$8k@v&PDuIBUbwPSAqR^gYaGfNk7bRw4Tz*WBU4n(+LZ|=o6Y97IczpF zdFE~1bBo?31&(3r?70jh*pefqjg=K%6)O+Cf#K(&`TGP(5lMwRg*m8`Ihb2pbW+q`CIp1gpJ@wdk4&G3(s3E#bNxv?pusLF_DH`tXDvGc>Yp)+JCaSjyCIfNeBIOPT4oZH$Vt4|-MUzB!D8fU z=(PL+1mae8E;9pB53Hvs%s9m-!l?)BkA7#%mG%&FxtABC17qN6K^F_nxnXG#HGI~*NzGfN(Hds~wKl#BVXW>Z)=9(E&zEa^?_qNIi`BM-k+aS( zW3ymD)#k!tvwJelO7~<|308CWq*LkMLji|-4^ek0Ywr43WjVg8O+ouKQ7Uc}*6N!z zG+2M~y;|eU@=bkdIWM4rQ=qefZOW2?2j2?~@$n%~9u8xlJbY`VW?k&a8jokqQz*f# z@p{&H3Ng=$;jyfFG;3_mnp?A}VQ*0~2f_d3U`bLI4fLuIBl9q8?o`kASk*ds_C1Q! z&(|8iR^IG;_V-*6T$ly3=W3H<(Klr4h?e$tH7n&CD=RfdN|_$kkoO%cCnU_>t5sql zX8>?UM_IMY2>jQ+GQ-#=Tb-taYQ88jIH+A!y}qil%oFUnsVIODGEyx5$;$9x*6iqI zz-5qiT52nkfAgx~5!1^RCE#?muZ?MZRptm{Z%?0P@_XF2o(`*^P;_70v$IkuTaLZl zY{@MZwEkw{njOMM2V`kF7&Nws41#ec#V3@tes=+gjOC@i>fcr__qhyB(N3|E=276a zl7fvUY1mp#NVk`y}y$LBtij9Fy)Hv_2&3Y1WKp5*A;9$Qy!hhlYl5v&IQsZ$g?@gP~35v3(?r zf=CzvVrOC<3^@uc2i<2Uw9j80#9s1}}l9C`}s!D7Rj58~;hG~{41Cyd-4mj~4|L_dF2 zS&`L`rfwv(m}YBgNNm&`z_qLu4-?dRn-AM2+nCXqV~%bLX@L_8Z@?ub{FuC^v`A?h zF-GD7Y(0WnnBF{;)vu2L*LLEj(VAB!jqfSR+?k536Oa;-YNX;B+Fz+3zos%&t)_XZ zR@Z}u^+@w>l|;x7iyksmr>Pw}Hjz=0M`ptM@&%`r#$}Rl@m1*3sBasl56)er&{_bKuiAW>jxEWve!&|g`)MPo)5^q!#5@=} ztp!n{R<&vr7R7ck<0F@pW4Cy`ZTlr>CrX8h=$@bqRtTO=Oq^ z=qW63QdAw?>ehA`LO$%Z1?rG zoyasszIzkXM9JFRj?nAwYrGRO*UPpJcnlEHnfUiiK#`^U*;1>n4<0(INf4_V$!b;4 zyEmC9!{<_hbgsiDynEJoA3Vs~rcIhvl8jeUJ2?$pBhSyPcnTN~RAk<3Ckjk%yzcvs zsmu6M3Cq6>TC1ZLT?j$Is!2fr8J{2~08gP?&T0d4_79v|-+o(VC6Z@*Y|^ojtIF7e zy+?(DUDKaxLdw&SH+5zdtw;{!8^+>Kf|s^=iGkci)Z3T+J*6tmLzK{``7-5db?v{s zgf%>%-L~Y46{70f|9fSPHz%&KVj8aI&N$3?&hjanvPhyArkzPxhxp{q$S8*i@Pk?M zB{zJ*nCdpi!?0Mk#BwA=6*I%`FE%aII4iW%JSd(Vivy<-8P!8Ww^wQ|Cm2x9z%=bd z5(X~ujtu87F>U9Av5QerHhbbi_RJP7$~03uASfbeR=D6?L2{)hS5}aI&8x~~3}Z@; zl3r6;HL#>IxO}jGX?0n3C9#^d<_*$ud{J?LisTKDT;j>_Rq>}mUM%?gU@ zli^EYRLeXkd;=ytc4(w@HSVWS%qvE+^mQ)`vHSH;Ab^Y-ks1^-+ow?YrxIEAEM{?0 zWO+hqw{%lwRW|n&Alqt!$^zF#CEvBVaXwXL3cCk|VSthTX4&JS_%HgTwOd!8k0elw%R|1D}=@19_9^=7TlqpXN<+K=2{2 ztk@U}=fNcbzfQe%J^N$RU43TO>Tgq?5u`rKZCWH|$pEoIWf_6^rn_?g%pvhlBNI9L zL4;4^G<%hUNIJ;>9e`m0^Pi}tC;Dw<%_lP3aYHbVlkjeCG6d=KzM zm<1Z2JW=!wsLO;1mrqvaCYD4724n-BLLA+j6Iu+pKqFo2T9o9~#Nkl3gW}XMR7USQ zVob_*M)?FHwuHabHsLd?v%Sw{Q%6NP?nnfw<=|%p2o|J`ZSu3mG@^nzmg}JTfcNI^ zw#MoIy|PxNnkTcyQEksOj>sfwo)JlOo-4D+GX8>~@tKW|x-ju3nB8cEn3%NDXWbQ^ zTOW|xHb{VybPd-V%nR8fDC?`Gd+cpLs%mGovP3HrTmZ&^!prorZ2Ab)9x?f~N)}so zv{60*a!EwzSdCbAM04WHT6N#Wg(Qu!mXAD)pM`{V5(-0z z>VUQB&KfQCz8qvRsYT3486(aR*;{uASsmFICL9{7a*RvtID`o@q#b$0DO3^7Im8>o z5IK5&UZS^`uN>jsNcHEJ(>m6+exXF=MN0#{O*$X#T zhNNTh_-Q1pVDL)h&I-9xoIm)>fN?P?@OXS8#j&#WZLTU`A!V(9lkqZhAuIzt7sX6} z5qu?$qTqe_(%9;}7R&jZTqX?T_P;)jncaCJBVoC@Tg9JXjJfFcv%D*pE4D?!AuKT? zqfh}Oe;%%6VgQ}OdFxs#kY~n{pzV%gN2&-pHdw$z6*t}mQVB9kYsFv<#bKxwMq)LK zdCl>1`4)uguGf8(G`j0`M3~CQ)nVc(B-kNr2Ys3w6|oTJC;;uWDJwVRLoEiqYyv)V zpKGaHo7`MpI)pG9%BF9v?PT96db41pnc>w)YIeSzDsNycTf!QI6x#PYxHY6>Fs^4DqjuSJ=(R?o1uD%(8ji_iIS=ZVS=i&aY$Mf zKSa{t@!C+rO3~{4KK2A=Pey5(O+OUHo$7&JycN?AxnP{`@{E9k3r$)F4HO@JE?}-$ zi-Z)@boURSkeOSR4_8Pu=c~NgleO_Ve^DQ}ikY6db&+BLruu+65~LCv+cwA)_4cVz z0Ly{ z%WP33yqdQNCNq0>dEs%y6n-It(l~9AMLsl%O}Qqo`kTsSa2)oNc-2IjE1k2}e6Q=& zc{#v-HrxF`wtE!(NL0p&);DZn&)RX#p1I9r(a|84O=iHBU#hH;I*s+9T>PEQyX|jL zix8J7n#NHgAfZ|(B&Tz-tpU)E%M=oMi~8t7MalRg4k^=Ip|LW)#x~O&PD|{rnC3VG zi(Uu2PITggMK$LH1_q6weSTL{5(1i5W8|PpNw|W+T`kjF91my4aoM*k-~cMV45YA` zQZ}`50NM0wwqep-ULl5GC1?@hLy~T;i3=_1Az+}q|xQ$xsjFB zoNO?kJ)gB+n3@Oi2m4rNFC=4#DsBvsfKa_@R^54!ratGb>p;rcP#l_%n@&9&%mfm z4NUu;Jeud}s!^?XjaJE5@U1KW6BaVwS>j@Rh=^VFowjxC#Dzb!097M}KpS`k0H%jH zv?sUk_}?Nv;AxyNcv&ZJ!=j4iQcc_6o>vvbV`$`f6I0^!5Kusyn>8uYO{*+(7h^K0 zGMt}8!Da|T!Jk@nj}`1J++r(ePP9t9;0d#2`hJsq6CgM&@-Ub<1VM>N$4&%BneMU) zM9OGo1knpP+jsn9Aj#Hh2D5d+rd|jPF^3P-Ss%E$veJSr*d%A0^zGWj3B(u(j}($@ zS??CFM}2cOod{~)!tOX)y*RAcE7OTdA$!keU5JyliDOCDuc!t>##=5+E2~UMf0dv>uMPuha2QqcUXprxG`ubHoO8mx-h3vGjfNM zdD0!;z+n$a)90}uttJUzA;xA$1+^{F)E!Q99@|fidS!uBTqTBQLkzJMM`=PeOnkT; z1wJ*aT5KyssAZXjF3~=cMBU+ADywR9gcTUEKt9FM^JE#cqBROew($)KVO;jXFbR=! zznyld{KQ92y@`0NXLZ-p-VWrJdVCb?%tp=+MYNq*R{l6JTY}X*9CQeK6PIpCn(}#QnBTSR&KHftPlebYyAWn4os2|8=;zF9F$yeAsV|4bX z);;1nIh%YX%=_dkxW{<;(^Mjs%qE_)d@Avgrfxncp*?vd>#WUoKLxQ6L)Ke2XngMm zw=jt@c6n7$#M5|6Y(*Q-ykot9>}8w!qMTESXWqGi-RS}d+5U$Jgs|=#ZyA~ns{z4* znbaqL$<$WI3<>k5HaG+Tw9i~CTzsK2l6b`=gc!{%(3vxIgC#q2h7U$eHgitx=<@;` zTOHz(jGYFH6#^*Ptutp(j!UYr8D)m9m-kkj7-XlDT%d>i!8PKLorKd=m^zH};x8i} z{YeW+05KEJk%53i98FpKMcEIB1=1mvHF1qUq;?wHhB6psqA40#L$DkiM+LzG2p zEyyAuLaY`srM(A+k*hfe8pl1RQjibKY0Ukkl(r+xvvL&BYH^VmC~DvFD}q&ti6IN% zv|OUJut9MVzQLknl!A8yyK6SLVY*i250rM5OymG|6`$t8Z&pS@u>&Kyfx%`lX+WNu zC-KN8Ut-vhh1H)m*#?#WM7~I^<1`QT?Md#bATb(s?Hq_2ttxAB<}hovy&2|_dAkWb zMxhjNlJ{PuS4!z4@4NXhWmUL!>j<^&1m@F|H02+ffP zg$^@j&|uA*T;>!uM>TjGxfv34h^mZ`=qaxew$y;lB6Zl|i(+KivQ*_`Ajjsy+gN}K z8_Mhj#aw~{EuJwX2&}}{K@9})%rNdC?KbYL?PLc|3!tpNg)zj}aFMl5y`qz@zL`a} zWQtZb+4No6^owPCyjLcNmfyK=>~r^1N>U4TUmzd z-v}Ehk@ezkDGRG3)!^|KS`ep+g44vru zeaEh0iGVTBgc!r&#BANeuX>BU!79mYNY6sgUPM7`gsHnuZ;?Vw)W;|f# zQD16#4Otm*fT#_m(4^FXfVY9^47Sjvw!Ae-f>83W*>Eso)H*>#sUctQO%(t7I1L|; z8Yx&2tE=1aLf}|3KpQuzdm@YECiQ|cWLR4?uM#-)%_gO`MM<)bL@rz6&+PKqS$MI-p!E1(ZMZ*mF3cd6BN)}XH{pCpT z(JWxFwfeJ|Mx58S*&X9;P?{E2OaE} zZK>gQ04_>yaWnH$qD_MmT&@@c;AI^XM3JDXa%dTif)&Y@5x@r#QUtlN?YhbeLrDRE zXR%_{1LM}mK%k7IrJ<3@gyi@O&p6T$T0X;&6Us#ht8f1py0LyB7GY3)oDpP(z=1rg zwB?a@;Yfl_;H>^yUh$QAwO%RIV#(r7y<#z_Q`P1jHr?3grfkHv10ShWWj3*_(G+31cFgWM z$sqx)0Whj|a_|M9dg)6bsfHj`h&_Xq!3dvI0|Y51`w*D|i@-7d>70(?)k$!fz?|Ov z*~)4m*&tQ#k4x3kC?P_DEUXLI>9l~M9X1#`5Qbl6*!mA407{!2yWY>I#7$2%)!eAI zds?HW91F(!yIvOz5;->yXnN^~aAQZ9W5gSFilNlgkqi~ycTW>fh z%%`yxuFwgf?s1Xw%*)x#;cVvhZ05CW=9O&bcs6q~n>m%uoXBS0rlL+X+wxx!fIXwz z>1VU)7o4<&wySNd5nO1{TwP$OeZuc+V45!1?sgJ`u}u3!VaLR7IAHUq@%W%rH$o0K zgB)!)<>&?E}|Uh9nIp*u@024%KUPdV!jSC)AcYMJVQ20I;E@iTeUGB(z{J6LW8bqA z8KdlWkWE>3Sif9ZTbp}PmbI<#jh5go&Pa$`y*C13-Ulaaxf<=Y+muFBv=0z2HXo^R zfWj}{@R>uxKNHh#i!ZTH_8q?pL$UpkpHuLD^U!uk3PA@mir&J85M&LnNWpRs>rR~m zSSbXMfg@hAVePhE1tZM09UfzHo<#paU+z1m^J+6YH1N62TtaLZ*hWH=Ex(I)XtSAT zM|)%7PD+949<5}@ktnNUW2Td*%31+oXr5oQalWtpyG6`-)Kzi zimsb6let_L&zs|7zTHa%S1hxVB!1qRC)u*4JZ82_b6 z5jAWfqQ*dicxo#%krvd`RpoW$vVZ_}b=8xUkdq+_Uc$QI1FA#I`;H6CEQLGGth32F zM=p9^d6#jakE$*$UcnI5>eXEwi*XcLXEq zaeboaj<9-wn}VXZ;q7H|5Eo_;)Vgm|nfdCh)?NnpR_+L-)A>(U54tel?D`5?oDukyXfAyZ14mO2MY57xq!1wjD z<}G9}x48I8ihryI(P>~KKGUQIZ^f=)%D7d)LLlZB8etgo^VY~~wIDZnDgdi~RIqp7 z7J)yrS~r9+p%AA`A(`$^(mj$|n$B_~Qm}90U^s`taDBwWhin~-5zxd3E;6b%QW+ey zqmJC9!10E|c1*L$Rtz&NY?8@3g~T%t=uR@KE!G5GUlg z1VF55suaUqG`1?@Qhp<*cj^q^;)d%LETJo?0f4U;+JCD3899aCSwyNLfJbitISqm%$*mr&LJkaVg#cLu?m8W zuzL`u6*I?O4Pjyuw|HR~g5G$wyOiy|E8G2Kw)?THV{vc$p4E+nK1@WiVdO{v=Lpe@ z1yW8}Fb_fVaZw6#6d|~KRQ#a`7vZgbJ{U2!NgR;bJ$|i-$;=Vk6O!JK_F=Bu5QYj` zlx4{$L>()^qoN`(k>+lN0CwoQIeIF}bfh7a3E_Bc@Jm8rrbdtgYycdTdrzQ#T>gDb zO2Ykzkp|iH798CmU1$%(VM#TfO?N!#vV8(OfEG0@h-LaAlaC^ID0KGZmnt$y5la{IvK;}+V!iNq& zZ>%iij4w{#>lNA&$&pvyHi*!vBI1;=bm>q+x%q?`Q0pSmH_e%J*MyBv088<4EqdWi zw-t)ns~U#}aKFMK%+jdsR9vw^7eO<3u7}}H4oeaXbA}}8N(JxTFSfCC z52X!+Fp=)C5zXt2iaD3;Ah4x5VV;1ATJ!rde#;zqK#IwXQ~|J&3N+p|d#wNCx-3!W zdvH3M({t`g9vA@vlfW0F?k>gk>wYEdy&-UOjlsdAy5arBQIk@(*s62;#Hv z*hbf@90mBnt=>p-?nM>WS{plRt(7+gHDme``DyN!E@wF7uxz=6 z>*C1gE30CYp_8z5jZZe4v*2 zL}fKTMQ5k<knAxH~IwH7)T>0;u#e36==)6T$i+x-N2RcNF@S`ReE8 zYdd4q({TA3UAndFhqXO#)b_kt+w)d!&o66xepTCZy0+(RZO^~g_Pkr$^XmWt;vfY8 zlD1$Mu9ty+u+3p&!cikekFIywkf^V>TVi(s7` zTB^-}lS8Z#t!1v2UQ#Lz5#PCB`;M&(J6VA&Tx779x7%!tZom71LxmFizx_f( z*q=oUHpAxZK)D)rUMv5qs3-c8yN;qALz0n7oXfdSML-5~fl_mlfKn0(3F z`pXg(?H4ZZVKTG!?2klTzR<85+r{Ie$Fnkbnj00ETTt?f_ZPj(+MRw<($<2>Rs7%! z=ndg-dMh-$7G|HmmpMn&OIRj_AoNd%SaJwFT&v!E+Av?Dxd$uIfffz9KPbpb8sjrL z%n>mHS+kBx(t_r~M+PQlX66f0M32C*RT(QiWw)F_YOumrLJJ6`>r3oGWt3AOY zTJc3kv~~If?k?5l z-u5D_rtOYsDG>Dk+;KiB^r)*YG-yj`e{S}@uus1eO~OQl*C#OtW6_f&WG+9`uZ|n{ zO1I3tqj=@Uy`jw9J1#t$GNi#%d(4TlJx0={Sk~k|1M7S49pz9;Ii?i6jMcLn8s;}^ zM!l$L?wnPqHOJzRNP4rDP-`TZ{MsDuKJ9We@fNGS#(x0&7KsGQBu8UvY{8A6wY#{+ zv-Y!D`?;)rFl!&m+Al)Sw^p>!vY>AZqL7UA5uD4~t7$fCkLqvZ-Y|>!G~J(YI6Vqp9G{#9d7nz0 z!CPY8_Gj%CS>vANWBo`69iImqXdVyckWXxpOz+p0pV(j+vqTdmsWQh49yg zzg#hTyw`AaxFnYJeEt3%!$f<@Sz~t!^l|;&u%Cl9y5jbH>&yyLIHNF1PQ--qECbrk z^xJ%zgnK}z+En!#Vc$LlXt@#^W<)vI9}W^p-D`&vWhIF_1JPJmaC1;vtGO|XDh!I0 z)FpX_s=bFqPQQ`!2KhdswL*Hz_C1?5xXi(_1pP|1c>Y=e#TafF94v-yO$gmY{nhm; zwz%%liM$MWFFP83M^UI*$KbGhiCp<5I;r`ddzd(E%WX1aOVDL3jM%-hpI$Ry9^E-jngEA^vOEja!-qH1}n1q_K zh{K*i6bJ83PrMFvvIHhxU#TN3K6kPh@+StVb*Q;f0nox}WJOH8F5o5*>E418mTxNp z`BF~Y5IrR3zn4+B8r*W@&%`MwO641_<>J-yIJ!-H%CO|?t(4h%xu=Yr78?1s*l^Z) zh&?^W20qh8=2Qxq<=FnU(6pwC%Ld{l3*-N@^6~Tz2i#gzph~d^mQCRf-Nq$V^21~B zaUEO=8bMIOCG2&m(aGDafLohfM8%R80C9M`zZ;l%zFuZN3#~y%RN2=Q9@R}cdMm|j#4e%@$}1;+T6tQ` zp%3o;d3=zHM?OdyIUl5~o59@FR;a-sqfgO@(JDQ}Byh1+6whULPZ}dD6kAqpYtVl2 zfX-}a;S0Ls&9=%KpUak0Zf&CJmFjl^^l9#Kn`o0k^#4TD-;u1}#fLQ$?w_o+GHcbW z3Hio2P>)~c=B)Et@ilS;bkSP?XrifvwMk$K`SFlI{jTt$e%A`zKrNizKc)w+L*xfJ z`GLaP5bNv!m4y(pAmuz87qI=)I>aUgMwX1AfKTH9mwV_32fRnp7Ea0dNA&BuENbx) zw^oi|I-J%eGe44Hr5gn&+EqW@^H1xc0y=xxzU=0j4Sg$?70S)4H&lEnIH?1ghKh%U z!UXt5I2-zK6{v&}VeBb%XkVd`iKd(iV1H;wWi5!4ZhS3#zaonvxREqJhG@-QYmJQt z-*&8#b&g^u_;QB1BaqOw>ua>eq7oO8t$}S?DCiDE(+;6a;Zl7Qx)r*S?818*8v@?Y z?TX{f5xRO!WJh|eEx zK*d6CHXVY`?6X&(36krAkch4nUAPtsMiPN^LOCQPtP@pB)9KbE}jq}J*+KVH9XNKz8{Wh6IE*jpuq&3k|dV{$y!hvxrhSv5}jdL z(jEB38`UxWgiF_btMdtqy#>5@a$${aG>di-@OwJ-!_2W6?CsopL{dtAKNqSVhD(RR z8UiVklLZA{x9FF83I9ff*uVvBK5~PL4JYhA%e@vc(S1kqzjcoqCGy>(!&ijya#qHF zwD>pL{yDGXsJ3_J%K#x^fTUXdzqcra3IHs0J77p4m~VhWpVIN0=1*xSUpg3sJX==t z-@?1*tCk=W&B^blnHcwq8Fn*dVv*zi)n`9RM-^XniKV={FWdgj@|7D}w?*ar^$QxF z8RD}cI;s^O*&UW2T`X*^#;Ar-dFiL!23D48~HdttME#Ab<_Rx?l z7q#CQ`vTk9z}Ojf^MYPvW-KV|S!RJ)5w$vTgufc^1e(Y0oMD-;u&R+MYb9MiET9`J z0)XuRbUW*`0on$jghAhyVWffE(;{ohj=-Ehb{leBI~)juJ&<({2*$>+dJ!HEs2436 z4|p_$Q1?P;?gj0OYfuL@Q=+~F$PngOCsL@>WQ{;z1wV?^8RG&r+Lw7b&lU^0TH~7_ z+Iz?}>!FmQ-L1A9^4}=%e7Pmfyx55;JyOzv zyYL$Zngf)xA4=bU8`LImK>d1=9Ug}I^@FZ<-|e$)GG*Nw3*Gv+l`Crd@4|a03jlW~ zEAt1aXWmc7wjM8-dq=0vWmE6@2Y>SvM{O2+eLlETL+SG@Ip(z`DgZT&2ZTCrUWIV` z$}Jmm5;%VwuR1iSROnuV)JoEq{C;^Z4oP4GUO|dm{Q=73-JMq@W>A`=@`dWD(czwK z%CYGNdeVCbUEN1Ow;)Pt`|nvE6%Vf@8X8-4wJ>W_B6o4`*F^t4_Jj@>jKAt(|AUoM zKYNtyQsPo+UbSLqr6PP+EDx$r1B-6H4JC}f0^|}cL`bL$DM@H-ZFI7MtGM z$Zadbg0MZxO9`VY+v#S|crBJ18KqKp+*3hYX?181im7HMU@#de&HJ<)KdW#Rx56aM z0*1R)d6aeV%XZn#^fI6*$ww?I55;B)Q*%|24w?Io-JsxcEtul&lb!tW3?|4z4%Dnp z>G>%+O8`w68ZEQFp@gt*&1-*b*K1T+r>GP`5YzVNXm~n7*t^fFCA|0v2?BG8&|7!TRJ0Z_7Q9b&Fxct!PJYM3|P)=DH>PukMVqN5{UU zcW}_9SSF=K(TX$$)7uIBv5}DERJ?aQb%t*SWm~ko5D7PqdUe5=6Fg+5bqaOOduP?1 z`VVmM%^NE^mOp#1x2TbH5$LBZ5`iMtyM|Bg%ysa^#8tpt6RUdDfyZ*t$sv zG)2ldDD?BpmcsP%i_Uw9K_NM%a)}>k(#3ZUSio8HDh)J}b-H#W`1b%XA_}=I)NKgd zs5eGxg%Z3Lth0pCo^%P|Xb}y}p42O2T7&);lmT9}TRt96K&GBzd!WW^!}LnDK4Zs` zx+?%y*AsEEx$ZWPx0?GTBK?q;J0Zydc1oo+<&iU3kQ@>ox=Yre;BOj07)an^dIPf0 zgce72gw=*bhRL1q!ko9-7t@v*A6(X9fM(Un&Y%lpn0zk1C@paNoJ%CJj!*EuV@6g+>Um@)_m5}$@szM)r{OXJH>9Md>m6<3+8e5I3tqOr9W!(v zq|uP$g@InQ*J78N+Wp4l`=8S3&HbFtgiQ4DK@OU%(`YqZyK$Rk`u^vjTKnB6{SJ6p z>u|D0N~be)5y{uaOoNUDvXczmrG<@pk^ixvm zjS6byAdOfr2U9OE^z@=9|0P*qjop)=sqmK_I*>#{1qV7~nHc*$)EUhSj zbaODOcn}}dH;WrZ%MuNc^XH&X-S3ftC^nP!D^6@i!Yv@VLdGVxZt<_Eyzgg|RS*~q5Jb7MduY_zMCY%IzCn#;15PNZVJpVB^oZmm z2gmGZAtImqkU;)H7_4xMvL?k?H%gZ7iny;$S;*PtD{1?ngSVsQWNXw9a?mBFbs(9m zK!>w=9{l2rCKD{f9X47IB6);OsJg&S4k(x1A$CM~;8WWo?uj!2Z{& zs-gP1!ra;%iw5ars9Jrdwr;UlgNPkY?F8wo@1jizSafD$mRD~2Esnr7LHikXi(w)1 z4afk^Pk6WtiClaR*{ebjfju%eY0e4qF2348P@czchl=5gTXGCrqR$`$BwWA^|3L$w z%V4pKfAqUT5>8ZFTN#M2L=lGV?l>>(;;vSU-&zbP?~V`W%}_R!sWrdC#}sGtE78eP z>yD?UTA#Ob6y81cAbDwNX2P!4mF_mK%ArO;riZZBO3yW0k)bY9j&C45Z(>lTpP%=x z)|8AM>EqshQiXaVvg7`VH~qLwLiN?^Z~`IA6j6dwe_mOZCN$tuZPl7TE40ZYYncR^ z;ULwraoZ%gm-c4~tYQ-av)G0KbD~y1p=)}qLm5}3@N>nPqh&YWp-N-L;;hOZbhC&` zI-(kD@yMI_RM^iom5x&c?dY=xGjfA!h_Oa##{Bu;Dp#%kAC+s3dzs`Y+U?t~Hx42i zI1M}co>z|bi^b>qU#8-m4+>ym?&3SoR}LS7@T-dc1P0Hkic|ohibz#1|M72) z)VoMt4b7fJL`eE_{&ezi`8Mr?nf~J)H`L~)rIJ>uxy|CZ862C>O>7HUNlnf-ZF82f zM92*H+t^TZJ66`DEp+SKIT*;XLDa^4`#nIxq}bF79sB?_`?(&#>-wZfzw!mU z=+1B-csSaz+)!(%fd%8YVcl6WX2si<5U2GDtX5m*G3xC-ze>zCFZvWb~hj@8kEKoGGw*fk^C|2@j3L6)5Jr zFBlx&G=|h$efuACeV$DcL#(ccz-1KMUkTFM{?`gQ#kb)H=44Z@L<@&kaD({B>kyyM zVOIk6je$g%L@)a*QEn_ozX)1WK=Q4q#UUBW(;VplV$<}}?u4foA8nQVY~j5$H{wt( z#{(qHFL_|8Lhjd(CSL%j?GSd&jVu^+4alxr=mS4EzSukavZobF>Wg(k-!6Cc?r6odY#@W-r!zA%iV z-~$z7K%KC^ug5F)ysSvT$fr9VGP>hw%u-}N_37QbjQV!JPkn?Rf`W*w2bZvd%(gz` z$WBI>PReolOF4!yGL0#<*%i~5m-HsQmNw!^KQWgMd*?DC!70a)EN-Zi$VG=W>yA1y z{MK}*)KNRBK+HgRWDTCuI)q|MJunmvgm?7;4!_G~t2qAJ{*zuiheJ*^=^LRw&kf~; zlKm%iajh7$@IIDjsbfF+^bQxMRtDC?Il-4g|5Y=`LesWrKyP)q+sXWMCg?boiAVR;oKH*v(twk~OucJe@VVG5OHW{JC zVQI+-w(IXi)G;b5#EDOJ5fKa`w4+0%^!}*u%LlZ3`jfccS~tZft1Ag*h4R0CVz(hjpmUW7@@^kT_9NU%ly2m`1N7HhVB864JNa@PJmMQ=^ zp;TTNwpII!zWbuNUi&zzxjV+y* z!{asum?<0XSU(1>^iEdE;>*aop`q4s< ziXgFS__JI0s0dqj>O{>JK+~N7YMLKsDfLIBsd(PnXlZGD;c-z%q3YPx6{UgrQnm6I zG&+pX2q^IuRoKT7tH;;ectiJ#zPqA??@9N&=Mbr!aTwuF>+!k7UREe9$)~`K``9{R zHIri&iefL}gi*-^djJxAs4T8b=CDq4{bqTEDu{H<2^1!MTT$!|mJ4LWC(eV1_jKkg zL>X)q^TA7=Vs(sOCigJb@YrZ|bd*wT7U{vgMM@UX`n&hL>6!yBvEb-CYML6R z*#qtzvN7zd(0=?LDJ{t+3HMV>lf$bEFb7yGEW&|Tp!61f0a%3FuOIDk0wf7ADowF~ zEdwCBdDpB16E(=6{6UVwcMv-&f(>Un$)u5ITZm_@mA@Y<;ljup!9CeIt>bO2n@CQr zNoL3FDU)^CGjVHY_LOYR*;7&n!eBW4tY|!Pp1G9`IA2#`mzu;i^WZFO`?+`)r}?1G zu4pgYe}Tm+8}Y<}*L4y?aX&g1Y2Whtj!)>Hr~{&FK8TW$YHB{HVXLmw4Q;W#NnB5P zXp>H%P|CcvWgXuL%>=hH4X(B$DMY%dv+$OmTfwENL!sJ2Z2VfIA>H^j`@B_5BJ1`U z#nwbnd=Oj#-h7Y&1ULkt`7U&S4Z*ZeXY6BYG1ht-#I`mf>^K6$EthuM&ownXRMovO z`_IYhgemZ6noEdi&foo=~#uOO+~piXqDm%bRHjBF|9fNX00D$rMBjzx2<{R z)UY{A%=)R&0SSrkT^omoRAu%Qc6aMX1eXw8eyX;2T*g0Q%k1J-pY}HSD=y_L&Nsj0 zQ_-IJzL&FSwt+?KEvik2R#v^$2`$K^BM^ftX8FA;Is0$0Y0z&dfO?D#ZB8K^J8Y%Q zmHExG){lwQIvle0jw?d6tQ*x^Kcv8?b$4J2CJ z)=$-QN5*su(waSG;TxXRokSGyub z!k!Yyb~+aP>Z%dU#MY~|Z!n3>Pwg9;p9ZJPe;pG4be|oMFcb4+z{HU-OkEO^-dZHk z8j!N+TZ<){|8~scDQo3X!k%bS8s<1jmaMwVk=vQvMX%R^^1JyjUUwrj?EsB}<`zOz ze4DO2(Zz*WA~vnX0{AvVE|Ft|HNKj4x>AOnr+~@SW7;&~R5tExOm#uWM;A#c0?FE(P|;NA`(>o5It#FxWq zoo=8}s*CNKo1#RIiT0QTPXh3*Rbt|MS-$Ca!Me&7eFy1KqEYd^);n1;c_%FzC@aXs zG#9@cPvf8)EQ7E z33GtL5;+I-;m6KVl7w?L?su-rrtd0$PIjXO!`dvsQt{hsuBIhL5Bc&Fw1t)xEIaRv zPhJLA?yZ#0_~d0oH64DlWku}=!@5*>yKa3mUjZl8AYg)TCr>iX!p-E#-Wy45-gIiT zz+m8B+NpD|UQTVb^!=WOQsSr>D}1Z~=@7*&TUk;kEjvjHI~J)usu;AGPWrf~tRl){ z37z##X@XC8zbJ%HZ=px_IejX)%LcQZV<+@;i^3e(Z$Ni@xVKDlA}NcH7VxcniwC#( z0tH!8OO|Me7}p*{u^HcU$lH;D@AZ}PCX@3uch~@-q>ERulb&_i6|Odv?*-SW{RI9@~m+end{kw)!FNG{F>9% zD|F0SpZiVYkH4x}kKvN02wFcE?|RQUM{*?Jex)kowTw^Q+<|4PM@suExL&WU#7B`F zKY$a29tBT2f0Go~`WJ#b<;LIon^!W(cB>_`DFO;K8ut&@YKY2A(V^#w4b}Ald>RiZ zcD_)B98E^+7Y>%)9?6p}3f|P!N3Az%tvA`7wD-^gz)Qj~1ngvtM@x%{$nqaZ>%OQ0 zY~-2$3SMX5BziBgwQ~lLsurc_r-xDj{ji)j8anIko28!BG9Ou+%OH%i8;3t3g{#)= z0(n?*g7xER<5vg|(bJSaQ+6VT4|_tfuo6~U@;1hkT3P)l0CTESY|QFs!)>zOm^nwa z>`anFjw@Tn<$YNzlqt4s6(!f?+(|{lK?$o6(pK<~P(>h7AY*`;M0JB8uW#ijgFi&7LzIE3)T+V6W`VLX)^ouSyppxbaK9sj){PvY-PZqRZ z`@uD$NBz}(Rs4liJ(Cqypw$6>Fkt;qWF!gkaDfu00Xu#Xw%lluYS3jU_B$cXhu9T2 zR5R&ps5XZME^P>Ug>3k8OB}4HM7Cb8`MAu9#^a6*E1~L5b7C9PsbfX96^cmQaBCEI zu=_91dqJx$ZY?}gK!Bjp^qZa*jL3Ox&ul2@Gh`OiMllIaH+XoTlS2M(2ZKXxI%wQE z%9Gt#stAo(9=i{l27Ea}rnZ_4(kWZ8#79!snzx+8Ixp_nYc>g-w8Bru!fVxt-O{Q# z;QB-#ZSx@&pyx0!d`R~Dd(qM=f`b7AIQ$%i8aU&3#RmApo7l=0M4h1rbuNh;QDxFs zgV_>G-b*66LL!~`APfW<0w!yGW^6`7pN0nvio8TBStv$5es|I-A>6a65&Lk{o5?d5 zsp~ReK^KR;#Z;*+1PbBmPH8?GG#+=uZ4Yf(_n|Ope)=n~+jbPkx1lLJ4-_c9aHF|3 zL}lZu0|`~_0}g=L!LNNc8V$XGRz3;BVw#&FjRwPX8Fu_b{|$ zj~mhLF)}H(SX_mBVj7Q+ltOApNV|eb4*PQr_?nu)i@GU z&D7h}T`_O!o|tO97*p+3x0zB?55%|41pQRr-jnHV>TRl-^0vj)R41jLN~tu;sb^ze z<3dbLy&O}`@5WT)g_xQ;8dHt@ZQk;U__q02OijHVQ_Y8BYU*T6HB!08p_td+9#f4p z%EoxgdnKh##Z+^c4H@n@>C;)($-^8YG6&pbLd|3Xd-7PUH2Hc;C9o$Gu#*YI$<)o{ znN;JQm}(?on-9diRyC$3&!yCRG1W|iYUVAUk8fKH#i4IL6;qA$wwb1``CNS4JP=cp z7h-Cvlu`+n#+FS-k3Lae@rzyDfL23O+A!S+fr(KN2nt5mQsIrPPs>I+jwe$5i8FOidk+sYd=b+YfMd@ zOR4u#>U>IFh^fZCG1V@mRKifZn)1?!8uz5U;gnjPQfpIcG^QGN#Z+@sOtr^is(Ecn zJ)2SoW2$|9O67HLPIZAQsdfQE@XH)9Alsb@72UF^WlzK6x(%2daL(Ny> z+vf3&$ z%rILZ>C$d~ONNLS`~_=lpN$2S;$UfR10m^JQ)w}Z#}6|uTs9~dq@OdLeNWl(7lSR^ zGQwKdGUB0q@0!>X!QR+j04+vL=|%H_|DUtB0oC%#@;&uLb6yj3a^6Q%(JD=usiZ2Y zj@{PZ_W6e#|_T1ErJ!69o1}r$|yx-@;kMgL=^&H1Qib;V5 z22x-_0yY@NKnfBtppbwC2`Csakbngi%TNhOAnN>{qQpKY9CRCAq9Q6B?KeNwIc2h#i{a4&IG7 z?&#gzcB{ANiOuG%-mZR!dGsCfZZe}Qy?xfFV+&>HD1Z&pHdlWZu& zF2`F7VNz)^uTCm4E6&5K)I;>fh#*$e8`H#C-Ml)xH>&_?(0~)})mqa6^(-fev3-DJlO|m4DI+0@6b1BBW9Vq zE{r!^)fk;?l^7aXgu<ABz)h z(yaETly~#hJEe1Lm)SSpsKm*A2(X^0c#CxeMF%|Hb(O$MnvE6jygO3~CvK=B%~~ZG zh7%wNO@vh&P7N{$q=xmfLCl7)C)9L*Pzg~tIeZ-?k~~*1zl+A%O3Z=&d!-VfyOeX{ z{02Vs5{=W9Xw~#m@sz-ckydm*-OZJ-vULYDZl0;cQOi+ScT2@jc~-PV-K~`{;R^J6 z!7tIv#Y(WUgLu0yR{UWC3(RjNOM_{Sp z?^JWLEwS0>zTKBA-X-yFB%&tnJ#F-;Wv)Y)0AyqhCJ{=k~?5kuY@OAj} z?uwtH1}!(nZt*@G#5!H^7M>lu#9^aZ3APosPeNDGbdU3uz_Jl;$)H<_qbeb9hAy!2 zP9;QrNU_5KMWnRBMB;Iz979Z)9uZo|oLursxPhe_)a|CKHmgWdVXl+5IHa8z1)uWQrFkXUR=1X*jgPV~2>h@s56vYhO%_d}J7ipH{n6MVw20BuwdF zM!~r7_!clw59>jvU8V%GOjVH1OxEfrdD=g0H2P)K9>xZNa<~klXi*q>`Kz={e2CMe zna5?AY7eH86uXjdZJCO>#gpY=mWC_7u1jqh8TMm_pX?-V@w=@~BUD98`+uM+BLjf? z(v#L9+FC{qKx(m0OYk(>b2h$87hn{+7ETCo6n#vtU;(W1Zl>EWYnn2LVAY)%&yWX%mgPrKzWnfB#?0q8I#s(=H^16W@tP5>DVVZV7`59T}C zw$j|dQ~Q=o!sE0CUg}T|)y`Q~rP=yY!*aBy^DBGzaY-WUitqWQFI~SYJ2}%kohtVT zI!!=0k?bmUekXm&x6Aod$U_`{eK7A`#C|!+;vLJ|%^g@J#j1IM4Jld#Uq_3L1v&UK zj5Sz~_%e**_*Ot_bCMvh*42e0aStaRUcIlkzVzDvmrFSLsA!FktXhQzWn_e(yYw@3 z7l**IFN@{YqVe9)_`Abn2f+e{Rc`nhXi8t{*H`FZmecsu+vM6@oaNJleC`n@D*WTb zul5q6wC}68>)gz1zk2(DdqriObDuAnX|Hs~_4exi8!i$B;Y$HU`{8=~Q8Sn9{dkJJ zwhC3%U2i|hXPu)<@8rOuJC*O-fSh%`y`g9wQO$hF5e-EK9QVudy{)roklrrZoX63A z8l?Fjp-D%tUPcB~a10^NAgfYjIr41+KZ#t+1Ck=4-1DE~*+a9CA_ zV`ON>8rJWh9MNc%TP#52D9nJlA6uKe+N(!~c!RF#kME|}(r7x@tNri@FGyvih5^e6 z7oz=8G=HF1U$a=P8F?CjQj@bg~kNc$F_T#bZ{IytW1fnj+~Z6~ z5Q|~|OBPzNEMeO%9B}nr_p&>L-rRVvwt7{v^@1PkI`ZzSQq>#ba%i;oz(Qw$J z{le&i8gw%x;*S6Hf)ql>bMrYK?1gQN2|TqJW;jtA2|7=yU&=_EkWtbVZP~ok+y4kx z`DYpJx4!=O+@O4XmmAK8P*`yj_*4GIi*~DM_adl0Q?w5i?IY~#fhK+e1V#I`qV?N* zWF80-K}rnwY70iRA1|y$WpPQY@#{WL96#_24BaD~tz%@KnBBh=ZO&aan;F+$6A-q9 zt{8ZOqEx1OLi?vWeuAFx%ld)0Fg(KpbeSTH_P>rKaDr|}R&vvd!2@9xiX!4lcUXp_ z_Dn7mUyMNM+!-uP!`cE%nJaG{q`MmH`&8jq>g`t~K{hVQa=rV0ao|@zeocd%lFpk+ zg@GAK@c=i$HO4<5)q(8rGJ=(wCL8~pEg@K@V(IiOXQ$V@ui%Jl%h=S0M9&QZTx?df zenK3#-4XMuRjWohxvP7TXElE{{uaqGEao^exCMOPqB2>+Q`Vg)DD4%Z8obV$FzUB5LUzX zmY+lc%?)H0)KRp5o*lnh0pscYlvtzst42j!=Z@z|9sbPb0eqRHH@SIM>IB^b}+A@kf9Y+%aA0^Yz?+xYm#PHoY@*90e=}O7p z;4BK0a#*#7`^M=*sM=tY?a-yoFl#h5f@pdR|5tb8GiI@Tt;c$oyuiQ@> zmtZ+q+x?!7#Oo)Vt^)2_rHYqM+IpUw2$B?Q(x!X0XN0`giyScJ2IopwbL{(qV-urs z>D%He5$t3NLs0sd*1SXxpVH!DKS$ocfixHn`Apc76(2j~GrK;;nO!g1>$H4H4to*W zGpocdQjWn~f1-?Cg3QT1MeU+@()K0<`&OApI6LEjc^bvWALEHOrevc^L zc#ngx$U(<_Pu&zP>m1xCu!F`TyZyQF!Id$P5~lOh=Z2PJ!+Gl*%o`A<&(Y_Kv0sqY z5cj^3RHF7onh4_?*l1m2FMAl#Q)a8{oLR zkWc*{__tx*aZeNwS>u(aOI)yL@@s$j?L2Sw6-||k8yq1t0$jY;{!-^Ov}fvjw7W&c zaQL^_0$k|29)}@}3=H1I!F;y>pb#u}Fh;V0%GHww@tdYemcb}fr z3>=o@pXf5F1jWkT&G16nwmdcCT?AH-j9qI zGwnI>o}i&iKzo3wt@bUa2O%PRPT;UO($tZs(ooHwRXmtnKOR#xzUbFAjhoXygmtL@ z9FYAsZH6N+`*Or7kMv^4_cHECsxjw~WZ{jVNP-aa@x5dJdHA6$^GKm{{7pbpwRst3 zwExrW5RW|E3^;kX)j?BP?3?u!4|gitryI{qZ+#al82if zZv!Bx5s9f<0^0_|%DRMeISH*^D19iVZq-87Cy^2ma18@`1Ur%^6$(!~Oo9T9D2H!K z_l4Sw-K=Oi8#`h-Rp&Pphc8D>lIBD<;ci2kF&mJJKF2;{mlj)Cw2ViNJpJ$*++R1W z#VOP6cZFVvD;(k(W53WfF6LGIG`!KCuv8W@dFE`$N!<6zq>V%EDDlKO}C!1R9r^tt?yx6+Te!EM8bY zzK=&;fc?PjHDXxZ7ouwTdu~W9bSpVFVw*Xjm;$HzH=hMwaoN6=dq{G4@dU8%su+=W ztym|&_Ul(c@AWJB&~M=B*bOC5qHuLjmTIuI9;hIdLWUTw~AkO&BF zl^l+mLFp-J&LWtnA%|9kvM5!Y<@jmbfY*6c)T~1t)Ev!cMFh>~atM)N z4SpYM|IwY4 z($6j*Vd90@@&57!_rca)VDw?wgO~arb2L64E)F+gvrOL98Tf2JHNv+kulEAwAwslY z@Ql!{xa0t5pkx(5w$Q}3X_jL*#*?fESuF%>(6kO7h>Boz-(PZI6tQOpR50lCF zBQATz46icQz`%g7!^6kkqI<$Oc_(p&4Kd59rN(9ZMx4gg`)x3WI1<2*EQJZDdNi)~ zKS)lq=+Yt%g<41 z+;xw@Ryz>e`U?(B;N*>9wy3d$7<88D6$*Y$S;(NNw_3inVMu3bnA)r#x3m7rP;QNJ zrkE;)Tf|;baR+{FF6j%&Q1xUrf)ZI>d_mv=Kq@O_(y5`m*q5P*$i!5^GDy&l}b7vK@v&5^Hb^q6^ERFgx2_)^5;iTvg&??vwVcG!?^H&2|&N=`*#oVsexfn za2b1>Gd4a&b1xxn1fD)hdd4G44R^?aIzm=A&3n*+nXti`ozBJNi^a?vo)U3<(+$z{ zr#eyPIOhYe^J(zvPwT-GNf`5)_#Tl2!5%B6P0isDRPJ_bA6G7c<+7)^0v27eG1(UF3Gd zi-E*Bo$)raN>QeCY0y9{9nDfqUC{nG01KAR?!}f)grHD2n!0myl$3eIS(_YVSH1Mt z`CKcBb-l<9+(=>=fEK@d5&bz63Gq$R13J}JBOD{iH%sw*c>OJxaql4&ch0zff{|4C zTJ;1T?xNB-jCeKiL`bYK3Rw_oS_g=pdeE~2mypjFi4g(XmvYwbS9>F}60&Roa|ub7 zjui5|7EP&HMCK;zN;#5)$e}FD42~Adpb8=4duw@0Hxn_T!NT?U=i2nM2XW{5VZ`cW zpa4sTf=VP~jiQ_9PZExIa7UL4pU_);E50+2MQBs08B_JvYSZz=T3r7NlVzEWC_9yy z;7In}G%}YtFo5IWe1gVa?7xccW@hp%QQIfYKgJmuo@H09qGPy`1JxoOCY75KDMwC{ z*93d6(vW8LAdASer?MyEpf2f2Jj>42Q7`Fi^O+4?w|r9;Hac;n-?@|>d4*@cPC;<) zwPiiSijf@mXey7qcre&Jx?Iy;UFD|Fu~&y5%K#VM9~4+aX?A_8 zXkbmhih38#H;V4|qQUVWAm+5; zI>vY^Qk@V_dG?_BT(rlDoaAX_VxK+zi zs1*+^!?PEG9~q5Z{S!%*nt^6o0K7kx0csZ6JY=xwKr*W6fBqS_VdQ#=N_G~LH?<|4 zhRapTTfsp+5=!LflHDxMum4%vA_IG)Sxm)92&CXE3Ys0=I1EpMZdgU=d`cgmqD|Jy zASEFxp`z@i5lUPAN6znc9KkQ70#E8Y8hbc&Ac`>LU=zGV!*fYxef)BL{1dM5&MAX8 zIZAFaH~Tu$Y_vF0#>{0JQRYR?JQqd+JApxsPL`QpHFjt!S4>~U0Hxkttoyk+Uxnd^ z;e~UTX5J{KUM{Aliz#oKjv)NyDSAwieQebJ4PspC;e$D7B%0Z$!IN9tb<5(}7>SC> zF|Z3bDjMl#Hj^@;I0 zIg5b}z{Eg?C!z%MwH)315Gmm1utkbQpzy6kfg@j^6EZ&D_0|r$XL3Y@)((|A_7SVN zoR*we%(O%S7c2)72f#_jJ94c!x~*uR6Vqz!@LXi}BEpM0w_FU$`+h*`z06`kCcWcdfyy}ir=HaY2O~m+#5Vhegz2fK{_~cdIk9BhQaA= z#q@RtW*x6=l+X5AuXKqen@y~Dz|T55F%rlsn}ow);~Hyj(yM?}jhc5B_6uQ9pE}~4VRiie$;_S#QoVJ67QERgYmbZ)XE2OBm zURDN8lqaWXFS$E!b7i~Qjy9$XxAqB#@Q%g~nK({u#SB-4RLhH*rNzw4j7RDYK+Qvt9RfVN z@sUD=PX_d{cY{!c!0t9RNWV9$i_8kkaU@r#zf+?blOuA1IFf+T_mlM2U5S34-=bT` z5&>=oS3^hx9|q$w=G86;=-{vT1$6u(S$0_pUKxNpm(}E=qy)9ksK$~+gjSjOB1yE* zh^iPQt+k}36|OJiUk>VDKYpd&eOQD0+;!*rFu9hu%>}Li#ZMK2M=u)+7L(VC zNiO=_T}hWSxM{KKM&uZ;RCLy zftMlK3FypQcI2FZfosYMu_NBFq}DY7m1`7qs+v8SfUI14EnOV8z*EC@0KO5B&y-$mFaL|%%hDQtTlRTon@beZpwFx^f;?n@zz zG|D$Ofc_{y<5M$;<6q^Lr4%vx)-@dB^sQ_C1j%D;e7Ig5zfoTU+RvZ0(6 znBl<}_BQC@ED5ujLSSL+SHs_`*0_+V-2QEey{Tqtbviq89=GA3UmsCl6)1hHG4DXw zktj#z4W&R*Mvzn7f>%{mfA=LbI+^IA@95=bS`~c!I_aexXDOee>g}(~b?nBaG)BV~TRIvEP8{>s)^4$JR0%WN zikU5v)Mm7}_*Wb<+S;vwc;=?qADk0@4J)_E2F)Oq^{2wdzh(eTv2O^JmQVE|*NGe7 zhij91@2S5940R@h*Q=!PaGcURJl;6~8 zgv(37fKB+(ke&`p>s=!f3LWZ2NNabRGW+wP(YqE6ZgudC1U@E9{h?)O-`xn698|^W z733q3nD$K#OU{FyD=V1}hOEdc>?qUZVP{CV0m?UT+nr%L z%9}JCfAjD+>T?T(Ib`^wPl$OQrB(LHEl;%{2$HlLpn@-ajy_S$?9?_2GCAg@(W6hO z8yxjs(*OLD7~)Z|DQS>fSQ(~KyGcJF&6~t7hF5IbLbhhre|FJg*-&zk38yEXw@NOH z;73*w4ego0k)BS_%+PKemW5omSvCWcTM4Z1`K$gJ_7qCtu)2_^kGvr@W$h82(+dC@X=t2dOrsW!tGZ(@NxJp%&CXg-CRa5fIursEH~JbA9mN>+ytPhDNvI8`_Ud{F z*4g2USzDZvm+$_teno}NQTzfo{y{mIbI_^AS0*+B9xdnUx1|AC45@cbSNlN*oU^Z~ zlQp3zC4XZXtMwZZBdepZgt?`RgERSNaygF38nuMtS`P9;erlKgV-hEp7{O;4``hH($P|S@YrxpiS^4zYsv_)2yYHy-ynf{h|En}G)Xd%CM=NzrOe8rshs09u7=$lkmPAke>o)5J?1qDMJS1A5W;{0 zX#iLv#Lmy9y?E`Q|MjDxaozqHA#++ZPYDBbMgFOa|;FhS{iq*>2 zyM}D_@ZD6w=b^f?8G1nQ+Dr~&xJ{C3<0@hqHejy!VC$kjuo#0_;tH3)%v_;0wPJL- zi5q`uRUH-Y_c2i>$s{H#9(^*sX*ixpnhi4XP;<4HK0VA3N8}15@r});{kb@bWnLQ1 zi)v`9xkJhZP{rZPL$dnlKBuSkTcQI`l11Z}9%$45ZFmKWq!$cOF>{hFN1>&I(OUPJy8z6Qu@bv2s?OBwUjn2Y z>b{bZ5^qW|vj$o2a`>`SC3Z=rZZ&fG5KhN{onUj%2^T)ganA-~aC@GQV@>3Br zCmF!m-f-9O!n>Ag?K=O{2P@e;?0rBhS<`l!Vcmm4WT{C8x)Ya6!iRsTvPK?H-5RXso)}oT1_S*tw*)W$zk)^$6mG!?{UCe&E0Hr9O!(&C5Z4bM8v)=bwgG zE0I~7vQrQFsS+vlypxh{hkTA+z%1Z0`x5q+spW9R;uiyiN&$)RCKiu!P`LdO6a8O@ z^Me(aQr{ySc}N-PG{uCL_3F(R)Y0eGqyrsVq9TzyTrb{5cYMTG)bP1%5nWPE(;eqV z=44WOY@2GAa9;1Wif+%%Q17xK15&Pc4;8&>)uel*Mq83e_qBkX*g=cL&5lDk2p@q! za<98#%{9GHu+A>m*h=SN?9T&)$qKM1Zb(7VI<@Nm7=D;nacp;SY+rF~8?xA3{k2^@ z#nBaM@(K%5+sxN?0R(s(5Do%0?RW5H)%DRKVrdb5nr{Ar zhV&N8d(9^S@U;bq?zZMv+wUc_fU5mYyj78F zMRy+Tlpe?C60J}QPxr`!^vljRh8WdbDYjB|9Ps=wjl+HpG4u1H`}5*ez!I_!CU|~P zw8C<#=>9T!y%i<3>P7cgqDOzG->6Q#`wKi7bh@$(^?R8Hr%bacve{hrBTYGSc7K7k zvHN=drszn4Lp`VSc&6qKTO@)P&yA{Ur&C?oS<59DFJXr6ho615@g>sn>--66jDjtf21a zVDCF=;8B1_tQPBiruuh_-WZ#g{*B=zQ34fAQCQpRtz}bG(W)<#iKy1P{!JLE_fQ$s zW%&Vd)sJ8M?}ontwTTQfHxF__k1&3g8D-3D=B`sFy0-~0fVQ580N*LPXHb3@N4Kl@ zLtwp=QFzBkIwM$ccp7Y^vGY+_7#)!!j$W7kfVfyr&nzH!y_r2r{jz}}B$)lgI>zfH zT1bq_%K{RoZeWFEd927cE2zG&THzu z)Gv&xs8-~)1mAE)_%rc(AYSaD&6(3p)lZ`&n@)FsBjhR9^olYlT%O>?ug=Hu)sw|= zrxkwj>b}pKm(jqs_-70SKUi}DtyehQfiT2o`)SZKI_(7*!B#zNiq(Eb%Sf$Y03$0a z*1O6t?U3PgK}YVq=A9yC^hK!hrGelkJ{D;2TY$>JZB`su>Ghi~TO{vVSRZ>0^I9sl z8r=&B9rOKDa~q*A8J51H|HG`=jKbPk<$Ivs{VfI8yPvbbh?jR0*-JMqDUg#0)L!0^ z!WyKs+xA_yz@mrUqikSws~=KydT{F{)`8H1rgb2-@7OOz_pO&$hs+KwJlbcob($|# zbecrl_uv9p(Wxc#_WndID#K}0_*QUBa0DUKhd%FXyU`o)`0AfMwzc1 z!WZq-{Sus96Y}Jg;#=yy)@7s){i^kg77SCP0M>8et8wQgG3HMfO(6%Zj(hMyHJ>1&ih7-R4br}NB( z5G#X#BT8lmPD&{2a%1`54c|}J$R|_D(4>VL(-#q;1Ed}|2*4DeKDV9Xv72OKmUGKy zI;|VF!Td2@LsSK!D|aFfCs`u-rd?oBod zK}TA~VI4qXXZvdkds5##{awN@%95Iv#xv3em1&vKK9R&D6eAXf_tb1PbK@J{9?-h+ zUwL^+ttq|k9bw{bb%GoP1Ws<$5R7`*g5p2|=(WCQbw8&MU^x$?Sex6f$i{2EC85_< z)fnFTu%g;^J1Yn}t2E8cZ!t-A7L~+GIfr=$*E^ONrjTlkJ+uz@yTBVX-l&=AD86J- zzB(k)!Hg~)N|IOXP9>g|-Z$0D&BbyTzn;rTd59QIaq61t z_}A-m3<}MkXAK+>B&h7`P^T!FMFywrzn^7(bA9CDb-qNVo=vF4Ct*d}kqV87{fq5! zm`N@~pRZRx2S5Rb!N>qZ3yE_tu^dVA3RLoVeb7T$RALBTRr#|rH!&eilyBn58YCi_ zKzR%AWo;G9Gc<=XG}79PJs>%!$h==M^NhToexRjqR$4moOE#OO5@~6*tJ>Rb*nIBU ztlc8JXx1w^GH=yMU>aOI2kV`qr0iN(G9s>+e6IMs4_U&~27%=mXTNQkDF!)}Qp!we zP(b3Jc>^&{7$|Ab>?I`{-EAlTpv49?=3_yVo8ieWr;gI9sWQN3t6=g zuYDAh>bY3^n6jTXmWAF{J1QAKHlSvcv=b*zU_{)xC-Vo=PP~)~l3}hS>(L#V_iS!v+&~G1FAfXp>BMwsoyAm{K>eCf6Bu&1adLVk9+~q)rKgK2)mlJ001p9dqH*$#Y+$q~{>>d-2R} zGH*T4k9IjQe^o3dW}TBMR&rBnd%G(#Tl4NDl!j6tUA2rL12%~`&C#K|S#6~Y&h2$w zeBw}YdwP-sMlCb5TPD|fG;g2D9&Dy&e*yK^a8|{SP7)OT_md7Kpj9>90;_{9nL9Aw z=E=^aK5b097L9}P+AB#~YRto5K{|6yLtO|xAECd&=CQraUOHnUh29@2${;Bi1|xe< zeo7d$x5G0|GSu{j*D6Un)k;|_kqAJ51S!xWx*(L*nm-tMIlZThPi&fel*6V#oIdEI z{Xmox&_mfaE2+m|zL`>)1-^t$jPHW26fX#~# z_#_W?_kWNule&sl_e!TeTs_1@4KAH?Je6>Bt+JI%hj9mbntQ$PC1qjEbk5-wu5Gv& z^kIf&LIvQ!06AD12|LBqTE&!$On|PvOmeOm7kAKpAH?*_sBP)c)nD#noMQ8~v zs``3;pK7bep~&44z0il(2rZj{Tp~GzM;+AIRliElKa5l{q5oHBI9w^YwscVSI zCg=Y=>@$C5zFm@OCJ9b>DScgLNmz^)DkN%`Bibvz$ovX{KB>xBk}HVh`1?cC#1F_2PH&VSdf^z<)lxg!qYZ zIVCM-1_)N~$Ow%-y7+oeF+HK{0+i%a-u|9W-_vDd53th5hZiRVd3)+=HUz#4IlJBl zFuw5`z12@11BsHwnKQ`!IfN(ks25T&PLl-074*i6h7-qoOvjQX{>Hd#_IDA~twh2oB41 z8D7Dd@%hPW%_}nR4ER&E6pblR9^xYmtPDne(DRa{6piT&)HOCPiAT>r zRii8~mpB?52dog}=+8;!6Lq*?ku*!Uge>R0AMfYy+g=Sx2Srmnmh>T&<^alh58!Z# zyb%Lc3MC;7!fu+ou^6fW6#fkmyErF@Sy1g=~@6?VHHLOSP*~^hJQD!gaD7(sO?!;P8 zx70NzZj{H~&@EhSB<*h;%}2ao7gz?lTa^j&S9<@ACcRR#^*h@C*Y6U(Nz7B6?c~W4 z(8-h4MFEvmPH>0NUNdtWJZFTdanfFM;K)L=g1xYUsD6Hz$Z1?q!5%Q{I7tl{y2Fw~wNsy(=-HsE6+iPO#gYq03v%rKUg z+A17F1O%%vBo*(9Q|EWJo<_cB6{B%=fXxQWDM!IzIr#>HN){HpuCjkhS}L97Z9c5j z?1YRFG}2mNWg2`2n^|dHn@=JK>tF)$W5!9dWu_?YX$#5|T*iA}eeO->s#brhB?c@r znNahrUd1`3?KMSj3G-^EI#O}4h@S|exuNc93C-`}S1Sf={ad)&iYn2B%?Zp;z>|~+ zAl;3S+00zxRQ8mNc66O3`pZZ$sT8_TP{@(fu>ngQMfNh&s-49D%Qz&6HcmU}6vnG5 z4j6DW$6TZx?#C|37^pU+O?{D1igP`LD@j$zAsmfOzR~)&l_epFkf~rlcd|wxlcmo= z36{RJT96(7YW?uCV(yd*=+3JD7i=8YOMi{M{K@{C*A8y4+MY_0cr7ns#8cFwJtj3# zd+Y(MZ!r47lC;vSoYtk$KM$3+NAQp_M{7faGO*I+2Ws>Hsyhu#QL^tp&`j}UK5YoYL^5%Gt^dxZWM;d0k}Mu|VwK+%MNBN9S~QyqO)R!tR8DQ!G_Ig{-Qq zv-3`h+FF_%O$H2&P&s1x<^74W0uWu?%v^yvNv^Vwz+zuWpw##tH7QGRR3v z$JWzSMx+IJ>MfvsPWScRLZ-l?Nb09lgHG*laJy91;AGq}2_QQ4=xYfDA5elL9DbDK2vCG{NR5 zgZ|6_X}0#65uL=<*a1uD57S>CMWnE$!yE;gb5ixN|AILjxjFPLvTdVUsUzg&(JsGZ z)I$L_H>bX4hp!WN1E|QkIce!UpPOC4f!x`pX2wH%)Wm+-kF#t+X-|GD`A{cSPD8?V zY&$%%9!$VYuP0B0h3WO;H`D7AzqLb?>FEWIKCA8qMNVs~rRWRN@W@terOWz-&c#Gf zowwJh&;3Dp4P?r^m$4Xx>)JKt-YI9)@y$Hc9oIoXCV=8Xa#WiA$Z^X7b{Mcv&rd!n z<}Ql`9=pgc{+70j(PzMa9I&Aa77+;A@G=SBsIBJCiSgox``E?g2K&b@2;*N5tt#fO zMXE?b>4*i59Y2yP2*BO)^*I$w1f6f{exq;D^oQI;R1;(FT=^vzEv?umNe%rBq`}nL znEf0vufC_9Z>^Hr!%`pLsf?mMN1oJAI=!di5b0ABAtx~FkL3dT8K5Fe`w5M|b4RF3{E=aE?VQ0u6+TcGZN? zCy+Gm%1~GeM}`lc!uq9aEv6XTf#E%5`M_jCr8n_FVttx zlQX?s&)g>i(?t=U#wZ1v{DV78_)r3ClJN)AAV+wK5`DTJ)&DO@LrqzoYGBY%HH{5* zj}3p$p|IKHJ=e(irDo8yrF|enTh6F)Ch}!vP*|hj_8eh4%dvDvZA^x$O*jk}?yuGCWjMNTrk{BquOb-XdM}!zH=VYTTDcL>QtOea13WBq9L`9BN23 z#T2G8$I8gUMxZ{wJR+zT>BTgzWiqN<1If~cvx`oea%6WQ}CqEW0d~;0T%VD?&CC}EzW`@5{ zdy0s1wmwA2+$abbUIn{G_^3YGtHUa*kF23Aj_l!)13SH!Xj6>zq%sm3X3wjwd7`eO zzB$apKJ15^>gUc20@Ki~@O%f~tBdSQ9s{8XLE}sAcbtBaE3`Q>v7=agNx#q28Rl0Y z$TWT@1h|gmYG`K9_xr3V+C6!E3919?GHVEhtFqKGn=+rI7`1R5y&$@UJyb)<^3k>P zn~a&6Bnm!ufh|(F(U1svbZExvAa3JQ1j*(mhZYS`9h~XA!z|5jo*ov z@d|4@si_{bk`g&L32;fgx?P+@she8r77W)mh%bdrQAy58AkcS$tUhrCz|#5v{*~1N zz8H1_bpS^%JzwHPUGJhc>$(!NW4FHRt*3#9EjzPgJk&khnr1i0kh?Hc&JZw$*6Qgr}A_E#Y9e$YT~3 zs8n^bt7*uS(oLuQX~@g&f=)iaCL&62$shAd@F4jO;5gp6KL1DtSS{^5^L{*{XO%}s zCvF^FmEYa_4?>^8EJd*I zgt#lSfg~%C0Zy@xg!{lHQ+zeA9w0_S_WA;)_mlkv!UV7c2Z6Iu5Fk5^M7Dv}h;K)g zOyaf=5e7Cbf(V@q9j_!wFc*DL%W9Ho{8C>f<0ty*hA=M2rK>&zcBsvFjrQm*rJ@82O25s&k1X0O9XN5ah zteAxdEmUimB}l<`UG$|%D_C?`q|r%hC~q50MUn*r`!R#ZNd$z!X!@Cx+i$c#BT_U7RtWpBQtB9zd~#(6md z;VZLWV;t6-GbR7h;C3J-4ez$FMqE}J(Jdm1D$}}@eX&Ap!2a`6E*pRxq2aP{*<3Z1h+~*Q7q=&S; ztl&;Dabq3IbLR_knm<)>895Rm!n65P&t4<3P;74zw#)X{?%`DcO|{4^Iwye{Hnplr zRTYq&m0->zf7y@lNRkV6Og+0~#?H{QcXHOLs5}12w5D2%k6c7dDW*aGReG(~W}5-3 ztEaBZgi{n}y)w)vb+?r8=<-~kDxu~{gcghb?VHq>k|GNZz)!XS+q0h8TV1vG_SK&b zFRjl%rfg~XiPI%oNG|$LK$PvCGHCg3A2Mhj%z4jc$H{Lq+BrYrAQ)5QRmd>sCAw_P za!xFk7u_rvV7K<9s|iY2OLq@Vf&l}p|Uj|rO-i(?T2 z&RAQM>8Te2h9u6bHweFcbHOG^nFpJhk32qNA)~lpmXzqXpA|c8v>rBndistCwP?T~qR*q$8jdE1sg3fh6=xQBe$%A7GMrfb) z3?y0@$4gWracEeCw}t)AnRW-}<9= zNrc*BGi6Yw)Jv9)xp3j)LgB|dNwN4(i%)M%k~K((0bXfTErw*HY&RCk&$n3VT0P$!kNZQxej0F z4m(F1Oj+OaJyaoSBvcOC@OZ~~nkt~WevEqv=K4o}4S+$`2&R(wC|?2q`@Jy*HUCw< z@Sr6AMZ5KEhQUphp#s#5NCOk| zvH0cYKonEr8%D5(;LOyRIRh`z2891oiK=MPk{FPhl4_&mVF5>TKZzi-t0H+iaa@3D zdxr=$rDgC07it&pS5ML1A+4rnHjLk`4J(Xmk*NXxc^A&7Rcxb|g zGC-D|Sl6fIa^&P!vZox$lid#y(~jiXz%nr^AV&!+qkV!kCq9`I%Yn|edma_iqI>vJ zZ6>v?u9%s%d#`_+`kfl}@ALkh_OEx1O?@Euw0~#T*uC7ptNh#buj5ajwEIo}zT@As z{{6(i&TVF?+%wK$<`KJnGUH6#GjhQ`ANu$D1IRnQ4e_v>tfn1hV@G5`&W2&Ub%a*9 zm?EuN$N}SHy6{?iYWMG}zrrOUMenIvO$&ebty^d#?-^#eH61wtabVaBsrR1Jjk5Z} zDj|8U7`{h_z230zPtrUqpFX9CRT(Cbir|m7J5+&-rjXekz?b+#{Sdc$KKVx-#d|nibSLC zzh34sxB?wrTf6a!KJegK%KRmQwD? zX_JjAHJdg~9o(w{C1^Fxcu3Wh<+ zp%t#iD*vvDz2GYNos^Aucm_o8bKkQH(q4htJHmGVU`?As1S$u0f|Blnp#iH@QNAKK-t#!B4GJaWfe4-U58*lTR~ zPZ_%RAG+v#d?uXgV)Fc%>-@7Y_g2+rF62bl75!(=mn|^UCw$IIhf;MOs%pR`^=v_v zl_dN^i8umIzuLTIwnw#Z4<>Hn9zyvBYP#5@-fth*sBM>4&Byhe*N^uHI%#;p(!6;YnWlHcQfJBHD+` zU5ExR-iqR*U7K>HsDwW$#wdI!tJvu|)&nD)Ok$&j?x(TwNHC7|r~zl35F{OtIPNzQ zNmQj`=6Y%|Np)(C>xd?b1GihmyZG6SVm~WOrqTW0yOcan!_g{nuCw~o|2(*zR_cFp z5Ww^~2{n;+`b;J0GDpt}kL)!jPw6xV zpY&TyZiz>#TdwkEsNoKxJv!0Ii>S>Fe6+cjdylqUcm(HKZ>^x9n%y&$U9Su+SDfq} z?^m!~K`LZy;XXmNZb|PSlwD%FE5T?waVd4}gKE?1MerIq<~J3+lbbo<9l#{c>?-Cr zON>6&MuJKHD~MLAkFzwt%U*4zsjyd{DEvAigxh}r;yN+Hetan{HVxfl_h z-kXByXrUXx^Uu(U&Tq~kG0QAYEKf;rX#q{(Q0fH*1P~{dTk=J5rJUs^4iV7R;s(CX zL6XR9m4ryF5?bZ?*TYMxYk*D-=eLwj;>~XX*Z_q%t}F$L=}=MZOLEZvH2k3AN=ye4 zm=06cxg4u#z62B{s)X1r#q=BcmE@^Fg?nBypty_xx6KxnrrvcE+^8MrJ)9==i=C}T z^dJJO0mo?bMZz*Qt+5znXCDBcPz_?J-q8!nYSzDveNSQkkf%*3dO6t9U$RyS7jubK z{!%@eynsPGn0ZJE87Qs%YU;xMiOul>H50$>rKORy=d+%L5k^X#7ZS9?4cJQq69n)u z&uuSF)Iq7($p@vh)vz^n<*#ZZy7`rp9O_IVMr(gg?}F}+3X{1Xy4JdkJ%op+uN$n2Q9PK7V({$Us3WN2_Wqn576AkQ=PiLD%rQUWH9Nh@6 zK`uaRazN!L`{}+C^{P-XDM#x(I6xUIQysKe^cF~%f%?!^0P=~Ycip`Vu@MtmWKU(8 zphy%wt84b^UFJ^eup~HqQ>&k?=feZ@+cdAIM)PziSs}S6(%rI~nb4crO|x?$7;%_d zy}6)xQ~TpMBmqz1Wd6m%Lr5{d9sk~s7ZL}VowLz?%_GoyD_}D8w{!~T(gK$fo0|cJ-dv0zKytC~Eou$9Rc=0?Kdc6!Ai#pN{yB;-|Wz3Y37hB(tTGI_KbLig@#;qE|pyYB9{4= z1xyqOpOAupM^u0gBGuNPIz6wqhA@VLids#onm|ENfrWbUqO2NOrB0?4z)KV#;Ej_< zCWaudhw+36D8l^)2Rg}scFw1_njI0wUU+C0aNS4c$a=dJBUMFxk>=kCp_GToyA#q~ za%Y72;z{})>Kt`|ODXX#68kWK;H}Czcq0&G=BvDykaQ7 zF>QY7Ee$+S;ULUqR334!m|7Fx9AO_U1y4oMd2gKN`0Lsh%pK?ViCCeXKI%m>$KHu{ z0>VURF{*%oGGa7#4K)04_?ryZx5A-Zfs#ft(!DgF$0nLfJ%?ajG<>Y7ZwTcCgV!jx zpp2BpOQfZqBc#4r6E3qKR1%(Ose6Mh8QeP$*N-vp?N8K1g^ury~ur_ zvqsioxWb`DQ|q}G4%rH=jaPm!g$|VLP4q4#p3fjB~0rlu14perpPUAJkn$DGcyVNt1f5;rV7aF%)JS<*Lt$3TuF zd9o4L-eRboXV)UD&`Pjme$7bq8}2+F<~9c!V4ga~U?wE;%U--LN2NkS&$2eb+_w9Q zkT-4yWAzIXRrbjeVkVl|S~+&mo>~MrS@hNyy)03lSZYHj&L4s9!YYcao1-$N#ys$F zQzi8_1|`g{A|$O1&#sD_GB*-h^w#}dknn7~>#Epl%0&KC%;KovR9tDH{3WHq2DLnd777Sp` zSNUWjtNW9DrEtzNmddQtP3Z~@$Itqnt}tfvnZVD zNa#)9LQXIp2_u?D!2yu@h#hbWO?zdB=ualmbRijX&f0@tIcQ800i=E>-WJlj>mtQt z!|b!zPRYc}DR2?L@GSLq)KtEnOgrr;S*V~6FH@O+BtOJ5ib91Wm5)l#u5aPTSQ zyKMD{fT?+|Xl#0P_&(}h0*T``2nqczDz=o!4RxnDMA(4tvCJXj00ljlr&`3ITjOH* zG1`aCflsmw!&m{n~w z^)Zpr@xY;bapEtRrBla;%{TN*tg1prqF4Nf%qU`qh~v|_InRdazF6RvSTN+-Q5{FO>|O_BPDY935NB|+ zEh4WV=N?PNqP^XrB_C>q%GJqp_u1OeYUN_jX3Tv_o@SABo~(_KiOKj99yUZK-iWB} zWMjY0v(B;KR)=h+T9VY6g=T=9bMjcO0h^YNTyd&T{bfE)xu3UXmsAo`w~{cIs!#kV z7m5e>+DO6`%OEsQW}vFWI`2Z0p9-2XFlLydlpS8d)MOc=ZTe`!aI>i+3REUSQygP4 zTYJ2JFpD#`ia;4i8KlU7X9ovyqU(p@|8RIkeg3S-FnAOP#1f5f4kD%br_a?JUl&{j zh%ChA-x8KV975CJ#gWr1f{;_6Az^d3lI!;?Zxy3*%GbTm99LZbABLCJ=g*Z5pAeN; z53zImOLG}WG&P&aML*75R2;MEEu=04*0DDYq>lH$bE8S*XPFHry|h1!1l^P~s5=p! zYEx!i*2F{x5`M^h}U0Ln3TK47y~UZs$izvLf<~6 z=}1cwjmwwjfIB3vMk$TGriS>EkRq$Kon+x0Pv>NRVt!4N)#p!=9@>zoA5ExV+?Ybe z=mx{bOT0L-Jmz!lGk-=7BuAw|+~zy{N~6F4$0MIHH;CmjFijESn-BB+MY(VFLc%xO zRLaH`7dMc~O@NUXSs%ObwC~rmh+)4|l~{P>ie;yhQ}xptOebCzCZbxY!$tPsMN$nR zYz^YKe8AVlZV3^pibs}ceM3_zLrf(VPL3jL4_<6Qye;Lpm$m%IBFI`!MJ2YC! zQ@D~~;R~&Rh9pm-ngQVgPL+x}!*L=?+gM$99C_q|Vm1G0qOzx zq$`B;$fBO@i#d>QhNkvKJ*>nff?+m_hax+W323fZq&MsYr6#j_FYShqm9tg<%<7ea8vz}G31EHxP2~7QN6|yv*hTl{N;X;*Bj3K% znyVZ6i?$A5CkE3=5an)WcA(P5BSs|1lL5fu6%&&TBnvLsFD<*rqqBBCnH%g>3gE%q zQ&+8hCH$v0p;?~vEr)bC4k`^$GRd%*CB*bmf=IF(4#Hj^E$}eU@G4U*l|o6)HzD-Y z&j66RbBit+G=rUOLq?Wo1O@m+aOdACtVKM&B}|nOBM%bskXbmQmv*-OJMf)jQkN7O zac=)5c}%-VBHY~+;|{l*Ycr%Yy`5{2ucVBeKrwj4Iro-81X19p`t3^IxI5dP8D0*u zz0RsNhpaGGNABm!ehVU}EOYXxU}xKN+}bp~U6Fw*3Xh;D4k#iaIg|~b?^Iu>jIT z1s>ocmOT{3N{Wb!I|5_&3Oy0n+4czCCa>E?0(%pZW78*e_~BqAg3aCf(JJsI0RyuD zKve(y3LRt`^fTxzKnS8+GQn#dQy1FNRmfdE_p|WTZxFO2X&h#RfKf^Mr_X0xc?p7; zC1i~qPibDXH?bTKV47v+?91Z%5_&0miZoCbv~L=QQ?%b!M5lbsS7reMsG5EBLa5u2 zR>LHSRpG#$dKZ*IZ1l|3X8v@f6c#%-iq6fA!=v@)<3o#=ERjCN;&U1&!N|moU|X*6 zExHDD(#kVliyz6e3QA(w?EdCXNrcYnr9laYB-m zZ5jJXsMvXD%-!1ViJxcsnY}Et`#aA>G(HAPj=JYxwV{s=DcVB0)m|BbsU{Z2ucoT8!vUPC= znXSy5=pBdJA_LavKU5NG9-dB8pVyGZ#EaW2e!1`yK5CQ-}I4TFwEUC zGLsD*JJ#ZL&vz`omqSNCT3IGN4j{O8GqRG+{4PMCiUCER>02KOWw-_SJ@$dlB!oc! zP*eP;;cv3kl~E~)7k8R1(K5oaLPM?xRfd3A@y5U+XYB6XM~7;W*aUL)u?tU0zvS#w z$B{rC)u~9+xg#(|anVZoXF|`l;`qitRur)#v(}2VfUWuDX%SZicz>32%P1nHi>`3| z2ldwS@AWkyxkv+(&xB81XXw98TFnwCiWSVUUyoGj?2#)i3|28GY>=E&7;`oFN&w=b zSJ2*-HOY**m=@G0&PBs1syWDC<~mp|jMzX2O^d8g6AwqlJ3B*C@IKyINy1!yOMaTG zJsgzppt;q5c*ZFZ=m!)K!-MCUpwyRJX@IN@%`j}E%<`c6b4rOPk5YyKgDOP@|8$r$ z+Y~}N8a9TdR3)c~bp9p!Lrj3w9M&j@&M1_QRGr|ovxkhv-h~Y^Y7CYL9xX&>9|vagfJBt+?i1+PYJlWJDA%He2GQyNMDhU z)t$YJY+9fHB*R?BA78=&`_%xqnWL2hHijd_P;+nyj){K*`b&<{4%|i>8&pRi-a{yF16aLt<*B?L!guiRsIyg z1Ni)vjSLDLftH4jqB&hU=dXyUkxW$Mv?dV7c<%MzPFfklN*NJAEme}QyOgrv;veZ6 zQmujGB|`Dg0Lh?8d(B_TW%^AP+Rhh|{$N-i=A4KWYW+yp-SvG~PqlSbc^oJoP(!`3aP5RQ&cJLZKv0wP)3Varh#iO5P&!O4+3t z9E~=6nHI-JZ!K0X6h&XJR-vqUV_#}d?2tLQ^_LQ!vcVi>?_dWA$4E(yFma>k>CE`% zuWf%ZHXc_$a5}C|XHH4eKGr!D)~v)&AdfZQP0?|(AV1)xJn6v4x~Ubf66fFg(Q`^x zjjLs83$H-Ta4fq+Ve-4RGz}R!OSyANn(?w|F?)FkmomqaHJyym>BhF&T$I~`ao(D2 z($GjE^n;1k>1W7>+IYEFSXJZgeH;mHo|z>57onl~WY}z|=6ok0!=#oITGIIf+Ekzu zlw^LN=k`>?0yp?HhN9hLOgy zTO;E4x9P5X?8pmbSF=v$wQc<==ho()vH&;BvsMD6hn3^Po_goInroR zE`igug+g?PS)%TFn^ywhack2fGW{i|Dkk5EcJ|Qj6IrEWW3>ayr7pG!O`Xd*nPGW0 z8ub;8@az-U^p)x(J}(IteWmTL~Fq}v<2VT|5Mg2*e;F5wBFtRHjgyc$Uo0Prk%CCX{C*%CdpW1)+A6dIQ zfwB|Du4Hkt=kflYTnf z)Qt~+R*mU73UwcdnFbeYE8KRF8FGTEELo0KTpdV9J#rUz)yE`KW)2c2cqdkYpkxMx zB49aUlQszgb6;+XT#@BflB;v#0 z9vHxsjz_j=6v}G68X9Vff=(=l*$}&uI$`$2a*p%xm|A*7(v*)|Uos=8qG3d)0Hh;m z<&b=VU;xtqUHwI=Z@I@29_95lsd%A2QVsfkD}2uFt-i#Ry+T@5Dc|C!VIoHYZV<6a z9gv6n(WFa>%mPV5N9CIo5U0}TZ^P>G$a{fv?%IZCDG;jZ08zB$wu@&#HbWc`$ zo*O!Q;~0Uqey7Y@Elu%SEuLkJ0@eaCWqtpbs$%bm^PX2&&%gV> zh!|hg_kW>uW0CrOr@jHEM7{yy*mE|KH-qdaQ2qc0Xmw->LjccQD@<665* zXdO4A$G&`I7&2{qP2N<3qs_i#9pN<|w@Nh4#A2uYtuXFvbs(qcg&!7I9r$rT^KpIu z$6@_7{wSF^=<^8ryuSZ)O~BjlV>k($H;)}3PaSG}oY@VB3bfxx8c2bx+Xmkl`>5!= zAmp?@l7tMbq7`6K&ze}vcfdkC;7i#3bj@&0=IzCiAE+gdY%Gp!Qel0-7t!ps`xBeV zwGj(&56&L3wmiL)%z(9Ag0EV~tbD)iO_K)evh5e)A;yn*v zy1-rirRZ?Aa;4xdQR|`ll_W{9PB+vzt}_0COi%ni1#ZD1Ufn36~d?x1NAE$ zz_sT-_G7%F@s`GZ1%9Hhp?hUWJFcg3iF?w;E)c{o#ip*_zfq+y*PcE@sY4Ih3Pbm~95;?^61>DBP!pqWx{NAhUppI!Sd=WG4!8UXxCIcbpBR}+>1V(9Js zPQuyBFpx+L;rM6Qq~SU2V<)~0Fb_H3M<;s^GUtlB_PiS^ymZXN z1I7OLBA6K^n{7BK7R)(y-cNf<8@AdtL;S>h;?;YV# z6WJ3pdA>y6!oa~pusw>E>{vgs6GZpWPI1!20;GSObb3g0;pjs;1cwMdbDT!y##tl< zGN~_+Y5Ap06ZqW6_IBpuiDHp3f*9Gf0q+XRRmYe*NK>gzrVg45Ya@e%qA5=JU`}@} ztzysYG^d756HRf@z-hriJX^g^M~zHLPJcje9%tE)&S@{j38r}TdA503u2*ty^;qb8 z!4fNoS4^`P3~?A%eUEtUq$uwYqlijoq%EfB;(UOaod%cvuh(#luz&#`Mn<&pgzxbE z(XjMDOf92#Oukf1ZZ9VH6_Y!P$(M`Cv0`%CM}VXgK~xl#nS3dgIm2NoFXr-_*?~{W zQ>q9g!^xK(;zDg$&xX}S?+b}7FrjIwEHE6WGq?(N=BfzG41<8ly{>dU^%$BTaK1IX z6xhj#jXFj9dClh4#L#VT!`*98gpYp?x$seANSIs!73h{`u*P8n3v|sH`T{w1WqooI zk@*gxc-f(wz13qCkC^@Bno8E&PdkA2{7H&YkIkVvEQfSzC$dCs0%fM?yd7KRzwYv} zQ*8b`xr!4X4lS;qXbL8r6uOXzxE9q<=rSx^chygH!*zH4#Kmw8*H7p=6hdqD6Q{$q zq<-SFaNScsaVA{%)=ylK>&>C1^%I}CkT=Uh-W=U~xao>`B&Q&eJRCih+wH|IQrDQ6#|593-z4 zGJT~QGJS;*Z77}G=sqX=PL)e{Qh(wYK4{w_*5oD*@I-V~k9NQ7eNlrAKeQnDFc~aa zr-7DFpJO!n1NYyJDfMQj-mKJucyhCUpHHD%9J-|p-7>111fZK`(ZM9=aem69chxj3 znkdBqU%UrjYQ~=qrdzh4n0($jJ+GYVNX_Q#YkLAovZ zZ@2&UO3vl^d+C(I?E$sD)oR?;T7`BtW%QCWdPx~2pB?tWls^@@!^rVLWs^HooR=Nv zC?3gnO**S2p z1NSO0Mc-$iePyBh1~P4?SYwVgR>ta|z&6>`Fm`wyhlE8VHXXHDDWYqiZkf27VouwC zy7Zq;{;%5q)zbgfDo9hKDb}20&6Tm{lK)BjpDg`PCjU3=|3>NmM)H5t{%@B4Zzlg! z_CHnnpGy9x?SH!TKb`#Fw*T9u|J$O2sii5DV@PSaGiB(R7*q z|K-yEa`OMo{-2fppC$h*_PEFzn1*3+y8p$e?9qg{2iG5s`URV`QNbr zjndzTwYg5ir4Oj z$$z8$H|C&xzH}$+jpI7Jr zw|G94vDM*Q%hX#--Z+(`yyz$|mQh|zNw?X5Tj{?o`ER%X_R@cQ@_)(xFO~i;nGx*v z@2(VQr{nA_^;(svAuDfTYM-lf>dXSaQJSA6!`XK$I~UgtHI;_q|lzA|)Q z@*lJRSS6pPeVS#=<^VdUQ@XBWb<0@YK00%hX-Ao^WPQ*+2g^j6HfQZWTl&wYLSD81 ztCbw)>@!!!oJ%oJ+W%zf??X4IPN&c}9QsBXnmGT|oA!UR^iQ0B>XiLY$v@@rwte0% zW4@jI&)EM=>3=5qzhnP*N`IeGGIh>PlKAt~S;skB#yM-Mmo&{M_b-wzQ<%Ova zQYq)0!#U;9M}H1H@4)j4Owm8E&j%Hs5AE||3Brdd<^}s-DE%)a|BLp&So&W~{-4JWf^K{0{wP&0e`;GmcxzF(I`wZAz z`(lFw1{|J(0q4C^tNc@*sye6YR9WGgxpvgxfCDzzV1oe%5-?!E1{(}G;D7-I2MpL? zLp8k5_q+d`^E1xOgZGl3b@p%Vwb$Nz?X}lld+q((J3^iq@}v#2V8}uXQtJ|=)|IH$ z?kTT{J%K{4;@C=#wHaHx7n-JaKd@eNm|-QW^~YqrPS%@~^|p7U+F-=$H&%aJVFnEu z6vPq{r&dW1)|NVcX}vnJGGkj}=Z!>&bhHs1T?S^m9@a+-4)9{@czB9si8NMsScSZPa!*^%+ z?g-yw_?`?;vbWdpy&1kY;_owjUxx3C@B@Y)$Z(GWwUHQm(6I+|?7;{hF?>Yu2pKhG zG-HlN_;JIJ3!de^R*R8!N7i$qdW1I(Z)SKi!siX2&+w9+Upo`AP8;iV#yTD0XAD1+ z;g=))oZ;s({9LP`7u-R8$WrZ6M89D43qp^Oi-ufmgIqG?QXAy5A(z`AR}8r#NGrqE zf$6ntEvUzV$!+w;Hg9vx{Hn=ZZ6kcmkZWy_>xNtx#1*<(>esg-r5nb&(JBzbN-ag+ zbmYxUB5Ly5EyHgKE~2&DQOj|Ac2{)E+)1FKb|)B{X<(||iCNz^mD}a4Q{){--ce*k zziY_dlxZe+KgQp4{Jk={6nWo~_Z4Za-5(P@HvDmd*B+}r6Ku8!4y}mw#8^)Of)zBa?xM)(H9H)QyR2;XS<#te^oe`1s2n=(A={fRAxZxK9F*lNhujJY+!w;8@I z!?#8FcEh)4c+~6@I}G2^MtP?pJ2R&3`iTRP&Thx<&arm!OdLSo?B0x6dyKWGjp|-Q z_U3eU98DaL`1>5YFURhS@B@Y)5IpOZiGwlnpd$||vLrb57(eRxQN^=?R^CUsaO<&a zB&_4cIxei3u5L)Z4bn8E*#?<6WL^+=$N8A{wBe^S{B(q$G5ky$g$ssUXoFld1 z1wL^-Qn>8c%Q^P4J9@O7CvLhFHzMv8<6g22`ki z9<5o0#ocf;q{H&`vl6|Z9W!zQO%6Hlp`7`(VaSf0c1OhAY52|z z-}wqVJtjA^qR39B@g-iW*HK18zUpHfjW*f;A`2oZexQThvs#!2+mR{NlIQq*0g#sz zMTtO)(~_-M(NiKW&`8JwUNVnwak1SZr}ZX_TnN0Z?WFBH3W~`s)%}0fQ&qNAmeF@h zI=P*S5KjU^LWsavP8C>o%Qzn@aG8Y`oV8;h;f9@6@w#p{(}+|bi&Yh`z(9JSgEhmL zhmH>u0nO2w>GF5NE_`lk*so9MI4w1h*EeYsn^+mI-E(#<&@1LuwtLkM7PS#wGElo* z)Gn~TP9eicSGxcX--Ye>s&NM|S`7}0kdKTe_X*DdKD*T`{}O~v!WxZ;))o&6{5b)X zhfv~1);4S<2ARDzll%UdgOx$@1`hp}*}bz;{U2=C+!qQ%P#oRIqyEm84+37nrl9PI z!1bmjsXyS;9~Mg+^DIMg36fSg#+Uhdg$1_!us!|6I+!cHF&_4Xj=!Q!Amht)8=Olr zy(j$^(|dT>h~jm@={@59G@B$Mn!LX(q>s#MzrcHaaqo+fxwHw~$>UmVnLMs5oWRg3 zpDMuBQ*fN(b7|oI9vuYRSACEDuY9BtPrwQ4@;&XZfjqmZ`a(uJ0I~QVgIXwzzkllO zu3iAkOX=W-LU1n#3(JxMT@fO0^LqipHB;O!6N!m^rbYm=)7L~kXw=iJ))$kfweYW= z{6egv-aSg3eyP3E8at@<%xX3XuuI?-y_{GVNu4pNGl`UwpRrnRlA@T5mdE5dkj!=E(K4lGss$C?0fM1lJBcATF(5!%bE{`Xs9IO1FTvy#Q;9gk$zpU z3n~~HA~`cjn_qOnE~d1`<7RsCCse>KemYhcvxXSVoWMC_Uyh}pyc&_PXF$4=kisG= zl|m1w{9&nc@``Fdd5OZ1-gS5s(_d{>>rpXzHPMN&*gH_amY^=ewMZ-1>JuY6{hy>0021a&2KqLle`HzM6>k-u9^-YFs9i8yyn=x&OO(0hj7OHh-)7vt_b z?tUrGpFT#`U5a>*jrX{O_c#jJBpb(8$Kp=yi3y(M;!f=;CZCiNK8ZNoN)3M(N^uLR zo5Y5i>JZXYM?2C~?AlXZj_WGLby+%8q>#%LzEcQPN=V+N<#OjvJB70pyxtOCult6G z6_cqz{l@Dr;q|9dM-4DFXr#ds(x5um)b3cUrN&rV!dM#Ph8#CkiW`b?!;Tv+#SO=} z6^>g`ii-x})Jn&#EXA$V7Z#BXrW+yu65knQd~3(r`9`eeJO5zEZqjj zZ79WU@Q%jSfx)dd+i28{CDe_P%qGWeD#dNmZs;hop(2-B#5Oy@=2C)aPEKuc9Oh(O zJ-4)#sg2B5qhevUp>B<3+UB@zrMPV|ZoA{Qm*TcZA)VS4k#-nqM+s?1LP{dDtG!Q6 z?Mldz#O_k;?x$k+ID)k z#Uj=nS1-lY6D4+Omnk(fYw0Xg%~Gmnqc22 zS`u-;n7UU&z85Jb19a-XDc(;=k;FqoA10`U>0yj}5X|S?fba8Y&?TiJ=H%eYmKvDC!4d z8`oDx!o#_Z>nlMjrHzI|eMJdpMF}Sw5cQSLdu57q-`ZPbeywu!suV3bsIT&LB6g4Z zYGbS}VXTh2q~41(!~(B1-r5r0+8DRqaqCNQ>z&J`h_S&K8%h`(l#8=ym3O1@HkR-< zCVnR&*leWDC8W(Uqb-ixQi|J>bi<>fzO|@tYgKBivA346w?<0a9Jj3$w=KqPcii?; zoIX5}rsAn{EuB?ceMd~N(+PH#66}@&u` zgkgD0aR(iDuoRc-I^wvIQrt-DGtq*nkG6_N7qU}A3Ircs+E)MhkYz~gDpecssfCG7cFN@K?YoHpL+65i<; zcgAsNN^v$>LJPNNXOpFVu7r9nlDS|q7fNv#V%$Z?T`a|2lu@6B$how*aLEZSl@eUi zIV>RoSMIj)q9uEm^`(7uK&0QIez`>EvJT_Q`69V()y(8$xv#nyS4-)y#-0-jp!TrM ztANM6+>+Ov_*yCPHJ!zlGtX(BO8JRXeo{*LNvrlDXG;E5vg=NEy_D>FiOcS%EiT`1 zf*Yj-$xb4Z`p(FPo5s6Y!n+ycZaMB&DehK`yY0B!rMTPrYASOe)u5=~iD~XQ&7D%3 zWc{?%;k}4`*VuPU*mp~u3OP_4=b6;${h0oq)89+!W4}!{QT?H#AEsz)q41R+-03aq z96y(awMRyMR6>0eb9wBz$ECQ(NhvKvq?SvizEISkl#riD0hDVJQ!SYELc*3#Nd+T8 z8VR}rcB4bsjgEw^`ZRnFLue3GKY>Pn#O^Y7SHc!;_}IXOP1U1pG%7}_BqWpcM{}U2 zo)PKw8nw5C8i(RWzvKE#amnpc*Y{>J@EiKD#etzna?r^JOUVYKwxlZINo~|vYV4&6 zJ64E-`iUfmj5L&x;*hV3GwG5eIO44^-in0himzyms;a)-#%;wQacuQQqOvj%MGbOT znW!aRuL@!tvs~pYS0yB8xhlr3cHHU|CrKv%#@du&bkj7}wlZ8#bi$8R)|<-u1l34F zwQ(h+sZC>pF*YO&mtjN7WK$%wv6acDqOq}ryfNZzGNDZ=E<(2&x-~&ferwd&a5A)& zY?Y+96ELRV=JeZ2>7%jL*zUOPrMT@e-44g?D8=p28Hq`Rly$I?zLs^W{q9I>XRG$R zi^k3p&7E-oNX1q~pqySKgwpwGKDef!9MN6!4z;OpkaR)4VO!GPHFXT27b354L%Sh2Um{LVq4{H=j z^)^OLdNd)qNTbnEv=l_5$BlQqgm*l~)f`tV#nob5-Es9&Ts_9kJ8r%dH{W7qo3-0G zZPe2x)YB~mL`mDRZE7{nl(5glu9}H^+rMw>FZaD5n zDb5#BVHjG_e}D9d|p$MQbnc0pj(n1L-+ECM7ikt3gkDHFR&veCcl~P<-D6;)N9W9aRe&h9*@N9`t z)#(+Xq|<{&8Z06ChD)S&dSygfYNVwlq@^ttmWd4+Z>WT4w@>bH(<`DbosPr(bjzhP zy^3O$(xyVTYzyJ6Ea9Xwu5#Y1Qk--Vxu({dUhC+!DO#;Hy;fD2UaxUwS|h&f#TZZPVG5~^J};^C&;7pFHGuVh3_My>T8i5$@pcKs3-_gnz0KI$O4!><*wY;37A19hyRo;Iuzg8NrtL8= z(%xb09VP4?F>a^hN|wZQG{C2KIc`@e-L9B!x8rt~;&yWu+W0#W;eZhiln|nqWcr}v z4wm8$#&jc&8!5%bVSaklaigWU(U|VIou~<7%b2I9gBF9ak^K)nmG*+o zW{jJ6+=@{pMdiqQ$?o5n3=XB>vapxoip}VHP5&J^cy3F6EFO*VU zXsv68RPC~M(b-%qCAg@`bIPDS5Hq{vG?z+gqT-#t?6}LNxXUr!6~|pE#a)SUR~>h? z6n8aj!qIp5Yyl}|hJ5j%6u}G!JcM8AikYEa_%i-_rNV(bGeaDMLEQ3=7gsM@%&s?w zD;!)D_L9)k(w3RHy95YH*e9{P5 zF^AaU8&h1#p{qG`Er+h>(2X2odu>d6D~E39(48E*n?v_<=zb18&Y>qcw2(qm9XZsM zL%Ehyy&2Y@LxVZAG>3+AXgG&f=z0#_%AvbClxx|@wVdusvD1|t%JrQd z%&?_7v?7OA=1}I#bmqo%=E3x)jJG+5cI42`9NL}raARfE!>eD=$!_bUANwoS4sE@# zu0&l5($^seL4@@CeAbz@IzKgRvY%PI`1wUk`1d^jUf^FZ|6WA3b2|p1#lG%3=g?Y&9EDiBcYr^fIdR?f6(sbH$)_(S=~nqQ-s5qp+lM2 zw7Sg4Ke1<&{rE?>utAnv4X{jgxEarfH#q2x9lzsi7(7(o6Q91QLuo$^n@mr9T5%iz z_F_6HvfQSi1Etsqte#=sVO#re$Fy~{`r%D3sgU27@l4x!JsNXrX>iYW zasYYs)bb@>r%#?USEv@P1h&Az$|m&t+?zDBy0bX`R)qs*X|dn5kD%nh(^oxyyLxn3 zY;dd(;XL|oXXkUAK*|ZW+EndA_{p1zF0fn$UUSKw-gk&bkdrJWb>WlctVCg<#YT^ZL$>^mpr_Nv~RZ3A~>PV;G+v5 zKAK&992&ZqJI==|;jl{`f?A!vudf@mn_ID*?H0}xKK_|qUeM9l zRn>f2jELPan@2@sA=orv`1rtp*-KX#f8FUgz)qW#$6rU_Aito{^p5J$tx(g!c;m0T z-mCR@{B>RYC+S*X<`T2r!YnP9AkR6bH-rMINmaNl{kdPoY{TaBV){`ykClVfG@;tk zH<&7f$W}kRrR+Y$57D_u>VsRlT63nE)o#03XQp#}`f@tthg3{&;j4ho>RCbu8CyM$OL_lxLA>*LDubRW%d{qnAmr83wJrWl$WUK z3ZTU_U&)IS4BKB*&-LnQSdmb= zdDtIYU~*oUs7yT}HT9jm3av=!k?NAb`moJ0W{MBN{O}Ha?&w=A%nZhv%=qio5AUil zjX|E6*2^}c-55%cl_@aX)kCeBPCzCc!ikhOo&=6~V3C_oCDvk!h!gM17L65u)PtCP zc&GXyM<Wt)Uuk6rEE>2vJK~Q+0wL%J>1wQu zd~U1?>|wzs6hzf^g=jd;8h^S`Oh4(=S!;@0O~+xWg>X!`o?t~BP=fUdZM`OUUTulR zCaoO=Ty$O?yBRX$O0AjIbf4(EET_C&K;#pOBabj z!;w)316ls2J``&U0_?|44@uDo%xr8)4TpE2n@@*cS9w73G4-i_d*vi%t7Ai_b-I#! zQziEX#89yqsl|YVI3kZI<^B3&fmZ*U@zJ@AjSV(-1o0c*-1ACXLx~|2jRBmklEdmG zFo;67Bx3S1IS_e988tSN7NcbcKgyu-cqK|lqI?Gusr3UH(bE$X#*rKraY*m@_p0Ns zRLB29Lzq=GVSl*uy&%KTlasp54PG?Zu^{nw=_m?JbIrq`Jhex6B(}36xpbiuP#O>Y zC6t?LCDb*tdOwnJU?CLc+|BoS-ecF^7HcG0+pn@aysGQk0-Cmz10yRKsaP)9*8XQr4hqz)sKq)VDcy`{dFitwFS zELeRngtEjrN@H))xDmoJkJ}7;UnB7h*lFw^gnd^kTKGjFNm~t(c^r>N-j~L&^C0OOW^ z!!!9v=PJwCWnvOIGPNhEjZ0+~#r|RDnHwA3Gb~$HZH-;)Y#61;JyCpj3y`15NVc&z z%E<1RabtICRxT(+fU=y0)gsCoYrUERX6`rSy$(4hI-4SU8=JTuuZ>O$l2*eD`d&jb z4f&Y#p)i)4FnN%gu-HARe)vRUH+e78oxDT=5;0|MbqUpPqhG?xM?Tk}{WGdo( zbEku|mFR^a5Rw7}V(N*~5yG~^{NT{)Kt{2)B_{8r0Nlaka3`6(8(U`b(c9d}7YfC< zU{VXQA2nzk<)Kf&PV297xt^F5eq*{%z_eYXUOM?nYPCmkfT{0rRoGjzL$$2$pehvX-CLhxLcU>Y)3@oBjSf`E;{H<;7}otnx<{*ttr)f{-Q8jang z7lv#iZ5>D+&rN2^sh%5Z;4M! zy4VAhiV}W3Hbx}242eJF(dgnjJ8`uUs?bn4vBKuq*cEcIa$Bo z8j@)i3KKd_UAM9$OD?@+q`o)IZcK7VYNQomk|dMHlSg=l`lSu(wkHq@@MVS84-g2< ztRD~ul)tbKgxP9a!bCg#h9>$D{eLG+(@0Ah*YKG%tW>ta#0<4=9L$5Tc`8W_5?*;h zvl!FVtk>q-tbR!o z+oXS{_Sm0xc4^d9jCeFb`YtP&z(L$%ZmzAgB$T3%64MEHBo2`m?pW=7A!BITRt$~l zlJHfgimcBwQLzXEy7P&MqL{=%f3$zLtCGbjroBL_C=^o{@~F#~IM}A45vTTq`3Hz9 z9hb`x3aLY}rkd1%W;QxUKs#=Ehvct?=x)sSJueq$hcN7P?l@n(d)h=0nB5-&aK{ko z!j#wZq0kO8K-?z9)KDmAF2kWO6*JXb8m5kfS%L~6bK`QkD8y92=F4{B=*6i6!zDXu z${8;qM#D`$lEVN7q_z&}s%3u9DwQ|587RS5PyEpfI z8#;ZuK~LZRpIwc4@6lT7SPTgX>YIwG1ul}Po?WGgJ_4)ziuxA9JX#~9PX_`jf^_1h z-wWEA%*O^#A6m|VW-)nDuO;9`J{Z&B-1JqY0-$H$*v>lya<(4kAWUh?rsJ=4v{m`q~bgXhe z!6uAk7R(HH231<|QLO3<&%rm=bg^ZN`f=MPs!lXW_$4DOLigOEb^9E$Wpz3#5sO{**&sq6aBju#14ld8-Hs)>s*S>pL*`GaA!Z)k+;!0i}8v zUdyS>8kB4tk*vt+_K3Nb83;+so$&O;<>%@k343o(WigBZ1=|&Gt*$`fl#I$^{&X%L z?CG!IrjGyhz0ju{ho0-{>Z>e%f!pj}=G-*Ov5DmMx|Pi~C;cS;9)f;?Bh?HB)nLDO>AfCUhwOB| zD|GO=__J>1E?G4Nv?m*>n{T|lFt&h-eO)wbR`KX@3T5b)5czd`{~KG5)eo1eQ4hEa|5c@`J^`$b6Cu z)Y0MkqeTOi`P-61aO9|Ydg<%WdcG-%ao2(p9MKs(kTg{inNsq;BkqoJ7D}XDB|Z}; zB<1>%HX0Sls-{F$8*oaLikaPMngMg~#%-SBXg^#Mx2PtUATH`*?M(!ch(**ue??;n ztaYHmrAQ&9Gih{al)-wj;ias7wv84q!*M+hgf&ZFvgK8WJz5Z(mSI`pRw3?zJj5|b zK02q$!8@f;XMwQ&z_(%OVjIVXtAHJBt@E<^>#2ocLk2sf;55;$JVKb&fn3kQ)55i@#}T}z2U#N{P*D>qx@a}<3Fu9P>fYI9Qr~xmN-~Ej91E4 zs&hCZakD(G9{;I20Zb!N2&Ghz2oHJYn1>tTj*wA?jR7LJd!FPua1bzA!9X zVzxT^UVk6=+tokqEaq>6&cR9pi~9b$rP1uFeh*=2Fi)-`_4w#T&pf5 z0yr6jovzOe3AiOxC4oe&flv~)7egek@6%OtLK9~b;Kc0W=azMIPnVKYVF1gzbuUrK zQlXG163khS^(^R=-c4|^yZ@KvF|!{PS6L1@6e5ot)X~da)Zo| zL(XGAE}DbYv3GdB7GX6~!leRZe^aF(WfFhH;?q;0|LA@BaF;8v27*-MX>?oyl&F}$ zQp|r+%xu!*VrudC*qYAghQtl-q^^$tq&j~7MVB5X8fNh`}jZU zD%N8k5bagu&%Q+yw9y%AOB624;|?G1p&;r1q`TnNQ=DaW{1?^n&#U9_R>yz&9CLy3 zFRJ7JOan2282^`|iPliT=nFZ8mqR}HUv3ix?U$tXt8Tj^H6sJWzv#0uHU0%=P+wpF zb4W!XO3~HD#^05SP_P%>8@j;wzjSJA1e+Gd|3)ij;}5FiUslKewL1P)pKsS4|I%6L zeo(;9{VM|bvcvIzgxiC|-No?}Y89H~#M^p~e5o2F#=0B)L^t7f+62Ew9OF_`S3Y_Y z`$6YG&wv!b$Opdgd*+Il@yE1lrWpH?UrsIwKZ}Nt#<7Mvz|T3~zB`EH$!>y_MQRIm zb+S9^uan)RD#l(L3W=BDvMFXp%^JF|X|!E8NiY$3*$KvfO{YKlB6?CS#&wglI%TAB zQPs;AX;#2xo8!76xq9|=O1tK_)18~M{S28W*MxkIeeS|lkA2SL9h_1_$373qVt|wM zj(tw1^)EV~1VVd^itxb(9N?iZ&v zaQ#^6U99{XbhDwGpTga0=+>v8+YH_I6m*lJn8Yalk1`&xnz2_O;|kl3i?X*sIneYkT=4a`@Q`~-AMiwZ8UKkYJ^qiVEkWoEZDp8c+kpH3$sc(0 z6C-+*m+HwMNYOP1Q+y~loVIo4Ys@>A(Z_^=64I53QGcNM8gFo3 z)4NV$-^Ehp??7c>G1BpE(wz+Yl-uE#N%h1AI<&-6*P{K9j1L$^4VCO(UP1n+JsDmg>1WDRJLz0AGTBuYD*UFBPoNj%Gm6XuqBXhH_mUr z7tf&VF6L@(9lBjdF>}{Us2=%EV8-EYOhFEpR3yM9&!-S4&jWHo)oyH&^e$~He$Mv) zF6(?MYbV458j3B_OuyXM8)&Pjfp!c9)%>nhL%jJHT*QfsP3ag?($eTbA)kCr_v;Nj zKhUrLyM{Xkp4XrL#m^1&{U!EPl+|M9UPv}`kD&7LE7^wPh{XZKuY$V8k_Hy7K4|r5 z!IvcEPIdUnrk9J8=h-DPT8y15X09=tfV{eTbE62U!{hULR5bhDgiQIb6f+l!nTy2? z_?L^BOU2Ap&Ey991}e&osij|*=w%54uPY;)q$9=E7oKm0*MjHFrNRa}2Nn->4RjAs zQp9ix{CHuYci=^+z64*Y1I56=z~DeHHR;t9gV@Ne7n~o%t=2Bw16AOKP}LGkn1PX~ z58{&Yubm3}6$7BeySdS`Ke-=H{w#iHCCb{mBmZqgtO3F!P^Ud z>l^N-9(~kI+57f%it{2hdNHc>=0@KKZ{_aop>km_=teEqrzL?jML&j~#0Vv^2=Bp> z-{dl>fpn8OqlnsYW7I=4R}`T6XRf@aMPdbK`%NSKN`f|q_ngi+=y29os-v%kL~T0x z@DpyiwM1Nz*-MTdAljNiJpm&om>z#4%_HHt0I_5yRR&&)qnpxRVE%+Y`>A>4Wf8>Y zBJxNI_?r?f8R$=mXzYs`C5z+ldtFnFZ($=L;(0kGd10W4Nf6~3oc}CXwBsVp=MwJo z1Jy+S5nv0P8|{CK;*28u|K4lpJ6qHr{{JGz?aW+}J~qqzroUf4{F5JNyH4ZF*leFh z6@e8-=wc|yJ1XhyqbMwAAF2MFJ>1+N3zECp9guE3dtavE=%GF|{@50tf!8%oGHQl-Smr~kqQzNOmVd$=O)ElXPm4`q zp;o}49M3LDMV?wKpTCtW+$kvpT(C?)x*1O zO7-*VRgVP%A*D%rDiy>|3MRf@XOEndg~ai1*Ym6y&?QdXwLZe`XU;Nn*Dk^ncaSX2<7K+pd7V4FS-wmgrPR+c zzAT$3KXv(n;SidKo?5a#oz72oiDQtmY;17th;Q;&zE+9!Afx3O(Qa4;K+lZ}DJ zL$-<~V3=bkKSeOyilcHX7kI12sz8ILDQb5*b!jwZr}yiSdzAO`j!xEx(9#^vKKh>a z2er(?zwCLQp`uZYy%vl@u{W|g1luZJu4?8-n4tvT;-O}m`bBZ_pZmJ`MiX6uck1Ln zYob;G&Z-!JzREDZtX4*0G8DKBn5Qq?9?gV+yDH_F_}QYq73?lM@|&pa16GKjSZ-*g zlMBAHkDH%$Z?;lNFkAJ3b%Q<6SD5M?dC>k3tfF=s=7HN_dn3B?d6lQltjg7ed8{54 z$N!f6Ad@ms+cf*>t0)v=swXwmwYY-B$5GE|Ksfmz#r|uKJ)!#tt0(`J9Re&EzLnsC z`V!g=mlyDC*0pI_)Xb?H;p%R?btM^xyI*`BCgJ1_Z-{dU$KLiZf2R8|7-N5{%Fkfl zJW5lAi1{dEKGGoTc?9n6Q@6aoVl=2F^e!_R@*S(nGZGBE!A!f6X%eRot3M(Ha9^2AZngYzAP=aX$O+AfY`G>w{I;-tZyh{<8TC9)_-R{9dd@#DQwm96a5+s3+qXHlv zimNzF+^JhhS0a<{1+Mkz8rd&AE46i%iYqq#T4~z4@i-F@zec91X+l6a{Di?NCvQQO zvWcTZn!Tw{^Q_UE9r_S1jSZchLp|&yb?UZKv-aV-gc^FNO(;YZ(Sb&gohTX61#jY| zrn3vH*|AC+N^u*6!Vwjjl73_2>e!p$M`ajM+Kd_EQUZc}Z-(0`%~-WNnZQak#K^~phP(W)VkT5OW)i+L ztS0e8xdx5+Uc~Ipn7wMl=sOz!J839}1A1um_eA{ujPFxxK$%_jM(Vk^lFS2KTXvlV z>q=te(GE5-3MCI1&VlN&_d`97{gf3>^IJLqiLbpO`vZr?%wyReM?aRd1ipi*0JRSR zV}G-QwXR?UWeV897(&VSKie-SyOyesex;fo{R&2OR!9F16by!wOoJGR$@Dyu8s8+( zF$_PdW9xVlKts*gIuLe zWl%P?HS8wo>+8hHdaOzY{6)q;?c;OnW7XpLXGHO;N*$|)(OZreJCAXJGeMtaV)B60 zqwD@Ny`VsIo4JwUo~_flLWIoLrz4&TqgA`VWjf;82Tvz@#Rd4cVxCA@i)yyTa zg$|y%_g(gji-{zRJR|woKZbJ1fEknW*DlhSmD*Ffo9ED%{)SRT9_Wx|q2hta2A0~5 zkYMZ)zi?#iQ8D(gs9nJ=RqgkFU|qyz9CrL_nIojiTC-IdckED#JZ3dF{!twBP*SGi zrV2`nqRD{%+TX~^+5XNzhhok4zoJei<<;DXoVacq30G_DgdX6p+MxTIu!H_16`Z~$ zgZ*VcHePt?Bb@C%Yhp|ni6 zWc4Cuw9I7LJc<3iwDS+?nE26Sw|N{|&~6T*H)w(MNIt}`8xx<={m>chjOtj zp_QWc-5j9*$!&$t%X)KaSx}V1k%E_Sp?}hARHJ$gibw{OHA1YQ?byj4ZN)|o&7J;Jrr4q8E#FZXZd!$a-x2?? z3;_Bez2Vf2)o{*=1(;v>PxEF{68$6s)jh+EwdoZ z9Ymk3{wvq;MN^;XL?Pu~`c09_IfSW#=%$FkM0q${b$hXd!Oex9IEKnXr=mI5*K3&k zjPjG5n^%6t=&vxQJ)uaEN{$T12!$BDKtXQeQd@In(Hx3PZ4USKbT6aQkvkQ9n`CFUi&u0U&WrNKGEJc86 z8HDf5e-4jIxq4-R<2{&OH(=w>trWynd9C`wNI-p?8_Z+5^4kNB(fJz|mi9<6F;3XG z(Mm$IH#hV@&zeFcW(Jli@5e6MGq zsJ#{2g?iZ)vW#O`=$CJ~UHKIv>S|2-+Z#mKsya3X50`1g;qj+=q)7=h?Q>WSANxUT zHc2LNo@$xaQl0#|qJ##DVcE*$2V(;PTw@wgP@Py(ud;=Ut*(v{KO6FRVUs*pJ;&mg z9M6tIiYv>yyPjLNOzZqu3iPwlS6%&iJNk*XMvQ!nwYf{PGM*zBlMz#Gj)X>NjufY^nX!NbwNM;+ z@Lzh0R4)obC4`pxa%h_l#5{~kmZj8l13G1+55+NKh?P~5Xbug?(qMxb!KgInIGa#C z+qoeV%p9ucF1(@kx|oVs`ZdQb6pU$7pUn~N+ls;TD~`RQI35;dzMr-zsfrP`9c3uZ z8Z}VTN<(URn$qeTyH6l~Fa(DRkMUxYuUXZCI=-z$H2u=98V6GmD8Z}Ierzv68A+XU z?7Mu7jAsK*z#~4O4Fshm!&V3Q7XsDMzreo`^03x-$B{?KEs^*MAx$XU9O!Gb2F!-T z^cBf#E}^XtPw6!nDhX|N;^unHXSW>mm=T`1UOj=hX#7(l}-zuY*BnrRLtSKLLm{0jRbc}h_|QMYKSoPHyF zFE(8ZE=t3Qb5A8sbK~YUeM)1wW{4eqr+R1!IY$Cg!3}QuZKijE)sgpcwe0`xIKs6J zuPK<2xAgQ^?T#}5s@a)YG;gNXMUCF%35fc82<_m~2mPO3f<6NCFZgb&r9fj}YS9B< z(rcQfdi*pG=t;tF`l?-75Y3wuqh$bO%c6O6DT4A{Sc)fni;I%V^LsBBwZD_+mI6cY z*+>vx+20i=h0B9xPE(^r%aLa&cvt4~&gF}L=lQNc?cX8h&U*6KvZ~C3+Iv(gytg)u z$M+QB1H3@==J2)zFR+!lYB;k=+fR{oiPM$up`6=Toq{rhtVn3kl%&kP5~H;Em>Se# zhIV(uNDA58dcO@p5n-rMntDLHH0QwSWdsVr(%Nq|mf;}uR<}?(OKDUzx55WK&D-4_iz@v(dTkMVeq*E-ZG&t7?f?gp zF+5%6iSC2LPhR1w?a% zPq7R{htWh$Bk&FR55o%@j-=MVf#x^l4}s}H1_dMQLrdhqi<1Z5WYFRzop}U|L94y5 zn;MBj*%BRG{TR4N+~^vd2}26&owhekIy-tBQ&3T!QW){d6F8^r{4cHMql1 zf@$Xg-0G<#X4av_F6a2N%hZC-)69)RdG=t{UJyg+j1_B{!o%JzZ*V;x&~5* zyV3O3=5-zbj6bd4Vs3{jXPEa~v6h2RnK|lXu)Ljstyu@e$t6~X`qIv5KBjO_$Y5O?#f6~UP&d4MOCzkmcei*40uEvd|+5HoF#s-0kV zfB4BCuypNceeQ-t4um%&0}{4=5ORK^=rJz}-0}RVWe{iRx@Z;&F$}F*lS7}i5{CCS zgPEeJZ>x0wFK}D_vaaB%V;CD)`Sj=DMG3^Lxw-_@XB41@q=G1)P!{`r|oTICD*bxxJYK?PuLs#K2?!!;W8^+5=5(Q8ljcJxTd*2ckjp!OOjAw@l z3p~3bk*Clr&;%x*!ci1fK*J5cBKG6il?k#kK~^OQmk(&>g9y5}NY*4@d^&-~jy!2? zRMojs=8IQcCW6>hYZCye$+3Tc%EmZJrD5~OZ^zElJzJmf@d{r07%sg1C-!Z*aotMz z2#w=LZ@mN{l#_IdTZg_BB{@bzG|DstaO@xb%GNq9*;R>KcKi6WoB4Gy_JMdb_JKCv zkA1*rOhw~0PcO#SK~+Y>*!xUs`w{gqc1a!`UdA!7M~6Fm*)Luk`IHR;A1oWv<^e57 zv>FkUqfKkjWQU*VgxR)+m3HTK{$VlCy1+s)f2Nopb(`b4R%2v=Ff9o?h(`G<{ATB# zFle!#B48D>+s&i4OwEk8cV$MF7ApS!Sq}zSi9qaHtztim0z(fJW)}XoXHarsGqC-) zTuP1pz#(87dxZ?cU z{AssIiDjG~j!>CWvemr3-D-Ew|IG&_bpOMn#gPk4Ir+;pHg3+OGH_oO zep7RJGLOHxmU7ix4Ha&V1Yr^*4|66hgfd#m!Yn%&at1-Wk%Ub6i+0Q5{=_Uf$k2Qm zE2_1I>w6#+j4wj)fk-YiZ_rWTI9DqyyfHY+VLOKfaK6H}r!MWmw{)~XpzK%F%hjXr z=$D6LNrL9O)Le62qJp!xm4uuEIf+lbh+W?|vTdnp&)im7 z>&(QHebB8F=~y@;8Qvn!>{>4|XENj6pqxtb2R%a7hHvNv&paBaFR6x->iVC1s@3yS z$5NctQ9P;+vdc@FGARl?Y@^@jF})mNHCa8s6h*3)g_M@vK-gY19tQOy^{tkdpM8Kf!C47P zLpp9jmiD|wDRJlbdt^bOVw!kXB`1s&TJ%lv#oW%6j|@;2R-}yON-1W8Pmu&9mgJUT zORYGchJtB*e=&S>tNeJz*65Vv5XzemRR%ddCh8QRphYmM2rbh!wAE}mz}cRS`eN8MdujbMsdt;zEAzqhd9r% z$8<={Zk0%Nsd?*`-OVp+^8?SH>ic->Z558P*Y2lZ7KrYvJP%kn9-{C*P*!?&k6v_4 zeoQDP8_xO+dE^?*opyCR#xP+Yd7t5*lOe;yvPL+oL?=ZbzuU)8I5t|#KR*sQ!^~{o ze?iM2SRT}IqAueAH`9K)+L!P|20hG%IZO{Sa#IdPd3Q_5H;vr1Q|rcG^%Qb}NOiQqITuQ~TylZ?t}WZ;i{7OkIkg>?Du?2#05=EGa0uv?&B#jew{cUb%!4lVvS0c0^p^Qd8);Djo zY;9@y&co|oUuZ#KZWB*z3(on8BJRCBVb`#O0jDkKE<`ee@G_{R6IdQtmBri^tlywh zt$h=kRp|C`e$+jcpt;?k9Z9S1Xld2t13dDZPE;@ysEP-|d%{6jqk7#=fGxG)&||Bk zZ`fK*IuWS8`_W3SzBHCS?P)|YF^aDMqVTrmL68#BShyw8pw*Fkw%fy|<_;u*6x933 z1Mzuo3s;cf;FFZ#3}wQ0lZ7WWu!20&{uA3VlYcL44IxiD-l3XR0C~l6EA2qg)?a5H z^;pOYSxy5RRyX==^m~j&9Mbbpx07&`P$z{PdH;`lUMeOw(T&;J{-~HZsE5t{mcEID zkfNCki*KvcO+d6caniF%h+PU5cAG`sv(k@*UW&o*IEFUN%TXE_+U*BT)Dw2HU zOUALmP`H!*#duRvO_R_c`RQT1CMyOQH5>(1d%2?R>Uic5(*5o<{o18a9XTPJhD;CD zJoJ~A1JsJA?iF)`oH_(Ye$Ngy^(T68;Au%6CU!mN{Tf`&@*F%5t*9nV(f_Sysc6Ke z99yV_I1i&lD&n(M!OJTyvIs`s z7Uhs;?0TR>g&8Wa#E(2cLJ}?pRUP(mm3pK9}y^b5O4 z`&$wwNu?v?4x?1`U1kezFp# zIj0sE5^M0p>mVOuzvAa9HXME;J%XUo>(1|#4m-b-Z;vIHZPh?-4liQ*Q$5d4>j!9q zRNU@hn?J44QuG128CpC?>FG@iUvsNUK`GR^5jgT`YA`8CX54u_M&3%uKAjV(M9ZCm zl9@7pF@|zR*q?zswA$(GwJig#_UH>%4|UZoUtSRml$kyprTx|Ojy%}b!@?0W|Ij2w z6UTIaC|O&-R&ca!IVmK@6CW@=LnU3T9&@x%U=tJJpS0DyOi4TB+7hz9q@6`iab`6W z{#e`)^;FTm#>epK^wZo$?WukuQ4ZjXQz%#3r@~4sFeylXWv1#}ZG%uw>!18tNMO?uRpwL2 zbHB1JlEq%%&A5`Oxh$crUgG#xFJVCiK{&sQrK}Y;bf{(9n81kPp^rKj6P%@1`D=9* zF`4F4FU2nLw-{wPi=9>zj-b$Cj0Gkn0~~vYsVMxDNKsBA))@^~$-<;1jyY`#gP;~g z_^O`TmNQQkM|oJ({sRnsduWE?>$Us*)GZy=Hv13(WR_Y?^b+0BuO5Lt{GGcBBNzwM zTi$ogdNm^8b$libfi$(J3SySKQ|t&w9(V%;&_u*2)pJ*QQbHUTZ3rq8mf*RoG*6I^p+4ZX2|#8dtwzbZ~0EKY4lc`@Lm zB6j-21sMS6u8y4OS&8V&nvXnzgr>ot@Mr=;Pl%=&46F^Ni*;&)ycBaQnVPAA*)lPU z*I{Qddtd!#Zo3o?^Vf-uLYt+2kBf=D#q8aJ9x$;@1H{DEVs5mkb?_*g+TfO+UIwx1 zQCd))JRJ0d(n%Z8Q`c|n^eqKSf|3a7%R<}7Q8I%2ExDIwZfa1SxhVr&WRJe%R&9wL zjTB%b|Gfv_3cLav&U2hvd-hQoB@m|N`Q7j@xk#Tb6wN2){n1*B(9Pg`6}DTm81*M@ z)L3G#iCuV>4Po+})Zz2|pFH?66*t?LB7!ln`@b*Qc? zp3C7oYsf_(1Cr&vF_jQd(5@VOyfw>NCH$lZHKI@QTZbv6)gR{(~ zFIS%JB~GUE_j?K))M)}{k*11fQ22$PZ1D_cdfJ1OHWU?FiAjNa`yjHU~uZ}-F81gCVx0#iiJFz%{ z(&)MnKe~=Kuv;W}|5Y)cFxSv&hSY|_D8OlzM;;7nCwUMnJXUdy)U&~d+JHK{&$1#C z+VYpRApF(d61xy09-PTi5YPztVaO(N)F~cT|khfWMaQzpV5%)R2xd~XbpX0v;A9piW>LFK9sUr z#?@umTzhb0GRx*kBto6tFGX@Fz7Ki9R=%0;?@&>X8bpO5qlEZ0q2I?)8{5)NyGk+q z+h0{z`IyZMTx>0pJ?P@ePsMG+vT0T`_tb3=+AEl=gHvT58w)h{>PzuG)3eGdGp8+} zmG0pH)Ebu#;9G33*FU)Z;|kZ@(xUbc>Uy<*P?kd7BCO_Cjvr*Nr`NHVM6%_WRjj_} z8OpY1pRA6-8~eDJTiZuzS{vJXm{1yX!IvR#J$SJPJ>El^r|DSx(gO@W}Wo08ujEq`+^=hSU8NtL_P5+n&F(Rt<@7h);25tYBus0`g`i)cAZf95y66 z(Au~a)*7Us_@0^bHcmXm=cjhIm~GP{D=)9vN=sDz>qe~lWP=1}z%H8Gc(cI$iN1!` zVjlns*jf@OCN$$m#3lw&Sz&%B<9`sQqk*F$oEQ{$#;*U@o>z+V^PS83mT6``ArqTP z;9T=-RCVan7l;X}6e$cy^5;`f>DBuo&)R*0edyl4>VAECHl#ULiz-8ENcnAVc<0Ul z7Nfq8y#SnVNcAUdgPm*AGjXmtn&ODmw|z*UP!eYJzg3nm(qTfP1gbLC1XXf7cUl@3 zWifYpcaPX2S&rIs?zHL=KVXspnUe4eL))f~RN5|6El3OpPKO|!=1{#Y8BDL;kCUmG zznWe%PVJk2TQg2c;@s&}6if?NNayDLuJKXv{^g5DwH6g&D$|ySYZcy)Jcv`OnAZSH zE65qD6rJ^PQTrKxRr%V_)GNlkq|c8;-f`|3X&-_71Ep$PLic==&pk>y7IDR94SJTL zD}Jc|mvLzUBJv^JFtN5516zxW#9L})4~S{Ec&Lk&W+0$9yJVe`BCAFx9(qE0kFJN} zFg`))3aTiLu?Js}G`&BFQe$Jh@edq}>_M~qujs1g9>gq=4YZ@j zn0}T@Q*sa+h}*Z#XKW|%t7%aT?DnxBbZ6;M6?S$w>K?L0NYb3FH7U`01L{%p1Fe^i zYDY>mk+yTBKx-D(iuQIKQOL6uf@}?X8kFWT#Qu|F^D_X19X%y{!Jeie)t^%G8M!&p z-eo5GHI;TFPYe=EBU=GU*M@I>M# zV&TOdxd*6Ci&2TnGxB_N4k0*nOS&Lmp?X zgCUn$!O8}#7=2a!T(+~eV9Rac%&Pl0u{7gd*=7S(_82Ddq?;NiNdq8oqL3=%$U1^r zW@bB+T>uF^V;p(#dRU$Ghye-fyj;G}PLZ~>!KoeJXJ;u~4yp;Y)vmd!wU4c__z3Ig z4rrdJe*n0g!y`}apB&%?DRA-L+c;r0^kK_?eBS)SaJ@Kl?Ecb6lEj&9Eoa?~~(AP8C0X~G9 zd20D$cIeNvwG9_zM0Kyq&Q5m7+dvGhr8l+WEHiULG_mq&TN4Pc**U6@c47hrjQ_h@ z1UcQFW1>1H^97tS1_y5vb9j4C|1!;S(s41`wa$`ou9yNQoN`h%nR$~Y#I(NtC~}Yq z`P*X9`z1Q}8^lNeGjWrd>aWyZK6A!i~JL(hy}QY9TE3Ih{cHrbiYd z{af{j>ZQ3klGJOl8$dvljqdj6{aUNd|%YnMUZ0y4QtmE6G^42~;Hhjda}0dBdK;Y+Tg z5k&XYwLgwKxrqzav=)GqNe5}g@;-Ah)I%{x%US}tN0-YTLCxFu0ytXNr(E1q*TTj? zd&fC5A!W~Ra+IgW6R#K+!pS3eV2r9ZqJsrx0MLpx%;Jd3wm~=oL;59@foX=dO?X4` z*^Dw9!`|Ge6+;uzDE_K%VjDXy^%A9Yt8$ZO6B$mHN;_zE@DV9vX2^6@el1Ypm5XI9 zJ>B$4K3`W-i8hOIjD1f%DKc?L)0OmHb89EJjtcva6rn~bTm*BwX~fj2P>E?#lwkP4 zqp2yszt0Q-CjBw6MuD6F!DuDmXdvFSYVQ5H>VX(lvZ!$b%$=6S86pWazH78zAKT3F zSh6{h$$uc!iRui!Sl$kv5b3LFWguN$}Kh&EnoCfLSovZ3dmxLi=>LqQaSS|SWD`W zarBKcGZgkOxT|JGUhr*FOM!82QQTowW&^}C5%lOr2rP)XL%u>YSC*-idsV!?ZAL-kxTxstwwMuhOpS!BFpH!fL6y%JsKVD4i zit!|?);{N|&w``Q{mE7_cT>Jm-BSZ>v95yU5=d@N)hUw|-wdl;AvsdKZ}DQzq6{C# z(3+!b7QNsvHRM*)H|XgHcp%p2?*m#kiB^ud*nlzo$ezHlq^PO;-}@xjQ-kW~92sY2 zWKBm$v(b=JfT=a66jyH0nFZ-(JYt6{2xW1ko>IBIS|6Wz%%(n4ORh{hWhIytDlKN( zmRc^#uxJG-L_1P?PS0u|VVV`K0<})Li#hhoIMZP4nlvlF&!$G!8gwAuLm3nS9(K(c zrNt-q^mrJL;6Gx@0o!205iXPD*%dwor1Wi-ZDZT#Az85&P+<+wqUU51*b8v}z*<+m8=bciDd0ukaC` z4h`mQsEU z#WuHW4jk_0%Sjk<^q<(8el7hHaSf|Q~UCkBxd+HLTDPQ1J5GS=V3_Nu?d>ezKsO{SrC7Qc} z#YH0NcprgvH3@^iYEsoTlP%^xNf~mePC^MFQQJSALuqZD{8^e z;#c(|)CFi@r2)x&6{RN*pb*m5WgX4MmiYlDG&_h2twSB`iMn=SEbOw{%93kfik_2y+0qV z)xH>UAc4Ni2OM;4Be3Uy;^Mdqy8sMR@l_(y`w4lX^8FT1fR)&msH}L3>9=v@5iv`gnpJX}XA9nLc9H)uS~vjhU&Q%!wu0#p4Zx|#cQ0%EC7+5^WM zQ@~jEa2nM|Yu}A)dgf4DF+;iBMU;mN6FW?n!gl#<$5)TdTkP7AD#KPQ|4v@t{&(US z#RBh{ziKj@Uo_^8^2s0r@m(vA4ZqJ=PIF4-=(s^?jy5$UlO9NTG&k|=hwFPf!wV65 z3EeN?{*D$i;x`_m_pHYQfVz8AQ+n$CHRY!njqQr2{l78jdU)YP;v;^&A{ug?_|zv_ zwIy-{m(T+_-2~&AYkn%6{_{e|bG-ENQAq8V@{=_?hBPg4o6Xz{4eo`12N^~6$XUb& z^f2=Fa$?hJjtOz;#HpyZ5~o6SPhG{qYL)33(x3a_zaUUf6J`hksK{b~dWmR+V06Hx z7j+b~VC+Yz0!9VW7h^vvUD`SJBRB4=YQWJ~^^v&z_b!gfK%1>qp(Y{2kXv$!uzOsQ zGk2+A%9r0#`6yyrtsDyx&pyMs)Y=2!U579qeU{$RDA(Dkl}%L<)4=Nt zrJ~#7w1?}^An~wqj5V7Ocl22*X5-vo_~eTK>HfeUHHa_K3QIf&R8riqlcxG;r!Zq+ zMplg>x@=j287?*q5bmIgl4#|axNG*Pl3G>^m_s&XbRY5x8jaBx_E5Rx@QYm_q^XX* z3BUMm1hbxSVD^y*cpu2!_nQ%+1BkRpix7_fkWZQqFY=iH$Anh<=YYmFXvZD|@Y~^_ zy<=|&qlW4gM?Z_JrAI%DR`b!%Y&G-qn!j<-!Qo`UopfK(RysFaZ{aV;W_4<}OmXx# z&f(~9LJslu#81NOiJv(3#QFGo-mfEHh1U_?$HB+M+|iCBgr@( z13=%$C8Z?KUJ1t+Pn~#8e$BC8m_%nNT4eOG-^lTp`r@oM;U9fV8u$b0NS>GYrjM_- zG|wUeua%bXb1bLtaH3kAUvoG$C(L2LDI9kS7v`oQr=jB*_C{oaeicqhkW^Y|FA z`AcN4Z}^kyYWeXf8Yes9LJAr&3{gRqq$2aCNhBiHQlbReF~DK71oAl78YI6yjtH+j z(zH&w4fd%pH1A1LXmZ)3JZanYMZ-9W@)boB_9#5m{oeF`t|%mO6J0oE|mDXNzM}ZHUpkV$%35 z0qH4<^NU_xSc576#4(O3NK$?FuU-3Zb?RT>OKC?Yv23>;eG7YqQ49n$+vuxeg#)?l zZOoj%rTdYp$G*$+%=jCQAAhep{+ECP_!@H>Bt5~#7}nb62U<_5XkX{d#>iwD=7y7lzQ&#`xbBwdjk z|KBkI8KC1}Y4&u#r2bE*?hf+DX}gPCDwun%!hKK-5el<{$(dyjv>|SM*2cp|8a%HW zfD%uS#{IN+K%Att%QjJnBe9=Wp~QkJa)0{agn*QSBFL+yIh|{VQc7 zv2CmmECL@pKo~M6LHa;KR^87Xt4<&A6bebRvz|f3IipB}ms1}nz;DigBY*{0%wM6a zQo`KNzcJjEx-BiGj?85*zvz@Q99WcMbYUry;u^f1O8=fj{N%5wNjj9YJBK+4349K- z(}hhcQtF=VoIyg;>!8$xa%dqBuw2u{j#+MPIdy}ZvE7VZ4Tr*35QVK4^5Osb=!0DX z{rp8QwV(JxN2NdHy1N5Tl zN7uB}IPppaXJWxVba9MUJ@I2&_7zS{pd2Uu1|TT_@MSBX9fm40i|?>jQW6eVATCCL zQi&`*_T8X7W;GZ6=$aAw(uKTXX*vE)9H;oR--zyqfFAyeL5Rn)Fvi40Yna2%-+rq7 zvkwC23LSL*e(}*2oW!50zft%YvLEe=hC&F8e;JF8hsTKcfTiueq;6E8I{vRY;SkFz zY7t!=nQA2aasIaUD+Dq#_mO6MyL=iW#5fzBO=3Jg%eAAf&&wud*JS zxhMC1V8}hTTQKjz01D6Odzv-|OY>eXgF2IKB#XZa#tjSItyGR%!CDD2m$#&)(bm7{ zZ|srzJGjeQ+yBCA-qNPmQu^3;=I?}NCOI`J8gF%XFv*(rPR=n8%E_AC7-|)+RH0EA zu;=e`G#;J|6gdy$n7ai$?(FZA@?FN@qXoo|K4IlHst<2z`{;&+o_p$1YhU(ADXIWW zO^*E{iu?GxFR{iNBITT%zr*F}+~goLDOdm#uS>t6cU6+037L$b(jGMJB2G(9Al9_QP5lPBxT)9p?>YnDBxRHq0#O~luC<1aa_p1}%tBxP4PM}ZUV%Vxqyi=X{0s7YY zd^ctO7s}i!ppPHNkt`JK`-&UaL=V;+avYRG+}n=ZAL8~q4&ov19ml;F;@Q?eA*Fooe`FIjLi3Nx1y#n?8XlbsoB_V zQ9iY=ovcb~#Po}emn;DSzmkcEjir7^bz}hQ7X!lf#Iw3$TlcfQNXH~^k=5DXwhAfq zvG*hY<~2qKnqouBP+epGj=cQfjq1pgaAAX+#-w!CY^b!0CG9(ZN3-X&fUBdc)1nal z_gQ-5sdH1L2LdzhJhicS{!UhIM$-M!OvV|mKDtrm5~5=M6D(($p*U}ukd3}N9KRQk zs>YVlr+`k`){B1V!_=@lKcdS;ZxJd|%PD;1jfkDY7wxod~B9tM!E|D>TYmX?5=b1G+<%Cle; zK3>!Mj0A1htUg6*@L9BMnZ`nFMjPoyR55q{j<^9U5rPoN{Blu~ahuIv*8pUmco=<- zQaPwyN)k8+o&syIKmH%m&IHb?vi|?~Jj~88aIb@+4t4Gw%%RYrw9r5?aVs=UEG*1z zFi2EHFeprz_0BNEHZw2-1EL^|hKhxX3T|OxX=zzuX<=buQDI?GVg5hw?{m(bf&Bgc z|JUoU!}~tx+4p_9L8%sXj-&LGT+U-?w8j^WzGJUU;Vj zq1rq7e|G%(f-PW_jj&difrRv0FULAUKJIM1AbB6dZF^|_JF2)x>%YcP@w|yHW!I!f zzj)-N;vJ8v*c77*rS%524M%jsCF2b!>~W<@FTszy7FZz#kX#*EvPdV?43c2!WoShy=>BA(yZPhl4O6}?d1(og zt+R6zV??)-z4^Ih>)d4PZ4#?w9E)B@|DbiQ@iuFf_Q&z`CsM0(D@Vs$7bs%Q`nZXX zf6Xd6t6mxL)~Zgjl&^oW<(g-}lu` zTR!p{Vr}Y?wa!j9zh!=(tuYX}R5p#W9O+{qXTl=JvLO-Cxm8D$dn1FV)S|faTKYT$ zr(MLh@q_5H7vru`Hq1@e>fKzcR9Q;#ooK6a{yVl*&mAc#6Qucjs2pdO{*Ox0f$Ssg zQy=O*?9x55mWkd&NilJpPPx99DJl6urP?-|%TVLx=N5Fgpsx*h<32ahLh>s;I(2EQ zF8}o>HDrfv6Q*{R*v6spOl~|Eb;JUs_8{aEBF@ZA8uAwnv}KcN@wq*Uer|ovi>@^+ zXWIK1!ek9W}il( zwZk0pPLw%qpRmmF9%RhvrDYEl`rEETdyMilf~`=`TLakE0nDk^Um~Zq!N`^lC2E|c z1!JApZe7Z)0=m>x68h1;D4z{myZBVEz@kuJvA{PPxS>HS<}37%E}XSwt*zGHwzdw{ zPB=EkO;;0fO+QI{?}jc~~4HM6`x`HkML_8RH0W|qaWeb~B&iReeFE4=VDPsIltYjTUL zHaMVO%0R8%PP%{-pyny85)B0&ij`_g{(jrWv*t*!J& z>nx@;ITOcy`)(gPrD6MSbsdz!uTZ}3-K^bLU6x>*g~9e19mx3y%WF3&A1GlhLdX!T zQrknJXp`p}^q~2ykE*iOa+73QHSD1wkjlm?$=Py=`pR7sWBK^E@4Q}ZwT<2vp2kMf z>5L*wlw6?O5&*uz9Ztdn+oAgjKc)QG_v5GPd zu{yGFkj&|VP)Y}ZXWQ%?DWn=Tr@J%NurF0RE>%A$RkuTBN(D+2td;_bNFoO}=cL+p zM;6rW&}>O+;SEZFqonvoS(v9UU90LpWmw5>RjA)dz=v70N%1N>%$YevvwSU2w8zuE zwbg99z_s>d%@$wgYuj~#BwxL3Qb_rD3wGKAuk9qJjoBni4C#k$+3|W8>E+9-s#g7_ zHlCvKh}w*N*RLeVXY$?Ri89Q=AU{&H!WS(ZZwwr@7}?%8f< zWqP``imR3dxmBB{`CdoU{8ZEYTuEr$Az1~YaR+~OGcGASrUE~x5uhFDQPs+IK<8BG z)9bXdrI1@cf_m&j7uEJ><{H$f3gb?Qn+7ONFltqO@uv~e`ipiz&w8DBc(#Hd-0nnIe;`lMRPGIT6lnrgjA z2`4Faa0A{>keo$Oq~Gf0)_c@^6z7^iyrZVpsTAl((Wv7Gw3KRrqg0LzAEQzuSLEK| z?eXz6l4@v)nyx(MH^qWhmxcjm;s`gN|)m!dB1FHj!xx@F<9flNg$ zJAz1Nd^Gc%)H|=Soc&5de{zMvpC&ZhciU$yLcc}>ybg;=YYJm4Br_z=G0FqxUs)zQmsm2Jg5;u-}hct_A2|i$HTw-#+t69h@&m;*!W1(fh3gl7`*z;ztYnN0k}LSn7+sS{>_S zQTx&WsR~hwkY`MWeFMD>6LPA@H;&ipw;r0_fv?m=$TF{6=2%^mWW2zl-j8pRyGr9; zpp;p^p*s?r%k9MOb;^84|3Lq2mM~hesjb$1w73v;4SZZg^^q#-KHsXM^i~D|sp#Vp zJ;*4??KC(((yXr3vZ8MQ`BLj+MscgQ8U@p%FW)lOU4=^B4Am4x>fRg~n^FAHk?R^_ z%%hR((u5J+L|Pf$;Tn^neL6NlDp7g>mWs+uor>j>+W0AfZ25a3_nkb%q zj4>H&RZhoL3zN+msW$5UJWMq=AuEsg$m*Dyn-P{7-`9GRN7G|xkiub#1dH8${b_2w z{`j# zMf`#2Y4Z=K0-_rzB8~cF1~Aq-@CaqT`>MY`+DoM=)TsWnxm4?oC@jn!kX>ru86K^| zdGnG`gvGifDpP{RNHaza6|S|Uu0+7p%TTV?wR1^JZB7B z$J@QoGfYDDu(Dp+dkv=gjHhbf?Cpzkw{&E+?ucGKM#VVyX?I%SMcrtiN|Yc<$6-N~ zOw&H%pn1IAyrKn1Jt9$*+Sr{7nqozRrA{3%lFzMss9uXanw%RQsw50|Rktj;Xi3gKe9^Ll6Jh$)U#n_rKhe^sEXu1Sf(oPE#v#wgS!R#V z7+rgE)kW7nZJFl)W7j_Y*}F|9vi|UYROR)(%#`js7%e?04u-Q2=ZoDx#;T)RzqMQaVJLShNuhAM>e zO6@lKKe1R-LfZZja(Q3BP)n!Pf+OkmYy9n#^HwwE#&^(^aUx+}S8 zXg`g4gXH3;y{wP*s|qye8yXp|W+tpGx%j^1;s=vUZz$FTIcjB8>Al(~cEaMPaIb&xxAll0xpUeySPRUk}0!JD|a>8-b|&>VOvF`>?B3K3*1;gn#tD2JJFnK zj3$;O?DR<*zb+gF!WTWXYIkXDOnXsufb*@R5?UUR7160~wzNjpwvXdf_hAwhJR@B9 zhQg40-B@p$S=2SWRmNpvN)~hcs6er0W3uRxgbQi9Vd{a0|bKP_y+si9lmAcB&qt4zV@v6!ZlH^-D5sCzDwq?IKg7?J} zuo9bbxzig4HL%eqmg%iYuNK+7;QfUeP4~!OZ`%^B?%Yf^-p3JKJg)uuf1(32R4J<@ z_kN3h<>97CpO@E`7$1pVpX_-kR!=qRu$@^MJ02UQ#-g0Xmi94ZLFnU1oMw&NHG$Fi zbYBZG9%V}^EX$wXVzZr&e5)SGZ7)}#BK5aY?a{81!(u+4CmwT_>--Ppbxos`8q~+`%zz`4 zLid5iIis)0f(pviMCKBHURb7ShBzbj3jXKf;Im*Hqbf86pzhSTW{ILtkwF zK8580z26>uUOQ09r!;)MTin%fj@5M@-eMh#QPkwTON=}l6$t6biOo0@W~%Di57PF^ ziv9&&J8@5#V}ntfXj&2985yJN5L;n0tLBfs&Zjo+wrRcko2i(WsxiL#3SBhaIVb1Y z*x#zPH23DiCa3SV07g|&tl9rk$@__yaYN;Omfm{3YRk;t^f@|6YjLe8(SPXu-(84e zP*(P_FdA@b+jO3~H`>Er^y#QmM*~JmSjx%k|4(k<;XbwxILrpy1BREGZf}Bo) zGKQ>=v_?@w^QPWi!&`Kb+7D`4UH!zmQ*~5R-S}4&ZjLrER!pthqPw`%hn&Dp7c5UU zzMwywD_OOTxsk?6{M8MrWJ)!A0-aiYDQz`-F@M3}WOjHYr7@C{Kc}OALf+Ju6?Usa zx+FIJNU6zXlH@QOxcT)+Tj^gjC)e)twPxfbp|_Z`7pA(0u!xna*L|bfwb5V0B(2jN zOldr&p^{cqbctK*AsaUBWel0UJk_m-f3sH<>0hy~q0e4kmRx$Xj*WS%vsc85%8itv z>=lfDvsZk$u(T|dy;>f=noso+Q`sr#wSQWMm?EW7lALCLwzYEU+#)-yrh~~Gf{2Wo zeOIe191N}Km7Yf1gViQ5i|CdtT`*RcWpf>`E}h6uQ%hPsR zNo8l7e@yN&nbRVG>|pO22A3`{$ET>kVWcdf$!rW=QKlUtj_6q0l*(RKCckhd+TX(x zU&5jrYO-@9JxgboG2&D#Yx2RKupzEBmQ!3a9l?u*ct1OZR~wZQaaY>LES&Du5Y2`; z$7mEjzau$U`A!|bR=T15?ze-+L}=Zq`t$R3YR=A4Pf}!NOnn(7$iN%-%Evkln5y5c z+$VvZ$0$>IKx{d>;cev;<$s=_(&*feB+6K;WVCnft$U(l8vb~J1hP0sOL%H#DXsN+U2iV{$BP}51t?t{th1F7z(e8{>FB)he3(?Z#;dyGt7 zo@29&igLFfwaTxQwl{o_%-bdFk{YI&K69c-R+mOgPl%&a$T>B}{@Tqg71e8gy}^I_ zOQRYO>0vN$T@<8Tva>xyas+VoDMltJXd~<9_{`SM*p*z@xWg81>`=b8-5#My198cD zeYRO3(l>;f3H#c0U5UobHjF?>-LX73x?xjCq_~^3->7W3+vhF`9D{!=_NwiA=f;>X zLqgMI^DMHIGd`g<$}(_7t)ux*2^yEkE=)+k=OjKgx2#Wz>#8XzESz%&Q}Vi}0D-1K z{@bAROR3JL>|*<4FAy@bBbK06^qQD#S2WfBlLHy4)e{wFFDA@A>d6*GQ$Rh5R8OAc zA&;I4C9azD9#vH6?aBKeg`}L8)p~W(;v-QcxhPqC6=^08vsd@#_c2S2)RQ;E9!5OO z(j$%aF>{y@NA1rGNM2PNHMZkA$z=e9Bu}=fAJXfqD6{q0lAUS7Zn!f!?Vu-Ze$G>0WqTFgF+7Er}hI3ryKhHfy|~57@=QAf-FGiZY};X-OkLXjf@n zXnxVJ{-U(8TuVJ}S;b4*r_wL_vs9a?8S}Bd3r%sl9GOn$P#?ec5o(@C!v-~BGYZqV zlO2-Es=GNTl`T)zp3l_0vWCwv+FNYmWY5LKDS6Yn09x}^ahIBXBJ{yG%|7?(4yBr@ zSR->%G?ggHvU#bjdUEP8Gu8be4Q;IX)d2~l%TuUpUfxW5e_#PQ_#?W1$*kIJ;ZvM? z4=8RM51Q0}#jT!%OZH4MzgkMfjj+OELACJ50cks6QLZ9ur6xPXH{`O^mUZhwGN9s1 zanxu}w`g5v94G`B&8>ZN0K+Q@hkFL8N+3Ou8};!uW+Mq;ZleJ)bd^ zt9ngH*msX@uR?6>ghBo2y}ZG@#PoRRK$=bLqlg7=XuNx)*MdGyYh12kAKQ4O$Mi^Q z9860aDq&yws%zqF5-O8wFWs&aecE&|-Y27VSLhE>C~B+67b=_OG)4s=uC%mD@;{`k znV|`>tbv_!P-RY$-Trb^ImcqADeFc`iD^m`e6>(l`1qpff9X-lL%DDq8DJ~JWI}~V zsZ}@9hfJ197~2%Zf!C7t#awGb`itX%)IThR~XC%zLGAZ)9XI4#kljx0smHvdm`6s@+pkN}kairA9AWqAg9e zOir~-mH%iiTE@dQBel?`j=Pppn{8OX#ya6^Mw{Xo<2bfi>arU9xLAV_W(4%1QC|s* z9B*jRrD2o~q@@~GryA19h7;(zHLNzBP5aFlZ|12tuwRZ3PBv*94v&>Jy~3|n!)Pj> zMqI*qYDqJV9jg~>gp3i*pV%+jMmoK<#$_+|)>33)a?Nx3p^}$?)=1t6Eox`iyqBR5QUDKjol4$ZWfXNplle#{)WPmWBq{K!n zIuxVzOKIpd+q52MGMw)t^-$F*+M|MgOdy%gp6R9&FDS>!3kiggtgq>i)cGxbG~46M zW5gp7a8%+%76u~s{uhDcZFO%V`mx?vWYD&j<2;iB=8v*`Tr9Jw@qrnTkOh%`f}x8B zBAW|pT)v})Qcvi;d`oCcbPT4MV$3D;?u`_ z+8ZY?)SsaFjo507nE|;^Y{BLpv)S^`Hol)%5m~dD)l6?t+k;4E$tamOo14D$?C`qD zHynb%ugYEM-D7(9cqzYMb11GPlA7?bQf>7#GP+8eiXr!H+kg5>#1p%!*U>++Pu!Vj ziPyueIQ;8G<~e$1SRfBqIs8k*`bbwYR4t+Gr=d?IqZ6e6yCWIzE7i@pfY3tr372LO zs1tL_dbf)_&{yhk1BZVxc^kz*PEeGv7|~Q>Lgxn#vx=BfvBcAnsfmRp|G)0#?8*sr za6*@NuyE5i9I9~?d)ly|^T@%__o*z%cRjN#1(anXk#2xj(nh}1dY_6_?z1eOf594E zfgtly1ymk&Y*EN*KYacMC12y^`JaNk!eC%AC@m_?AF8RUxJoRvOKI(Shox#IcnrELL0%B$4 zDvhQ6NhK$a)S{me%xKJ0#X2gGpY$i8<`wy+`Cc?gg*KJM zS`?ScAM<557T`yXrWNt}Fj=W15n@AMdD&YC&m(hE$IW|o;4 z$?1dDQKSuOiM?kWiEx{uASOslWe-j=ij@Y*HVgoX@|P5skz6t z?ka^-Z6nFmP4`I-!ChR>BucEqThjR~5zzFkZ=pxYtF%*XBXv23FAnN-`zVqod)q$y zPtD#B(Q*mD>PFgcRrDJw!>p^2E&cVPcTvB79D8yFg?U^rnkm%1{L130o098BCfAM7 zE{(&#`q5gg8^Hmz0&-p_F-K-Ifz}6_j!iWUR|v~=zF`4QO_h#gLYZnVDpR&^I#qu| zb?|X$s_9QjZt5}lSOz=U;AM6q(58*1Q!6#=tuvk{X&^G6uGSTwWfEz7uf!amZ@y0gRVTP>8oZ=GlkGKAL8f|oGW2@0BYuV^V$Ok+RGj{l-fA z)!X9j7bq+{;2qbJh9i+S>Dl%aHMYo9w0>!*0z>Zfq^32CBASdx|# zy!rYmY|&tMK$Jw0!}U`T$S3tvRGlgcupv&Lb{+h!uw9lWV$s6;wj!E@SK#!A4liQj zs9o>9JfB;QFt1sjP{c*qrhbaDGh@?UMde!W=Q57UDV?H;8gox}OR7%_wMZsTA;h`# zkl6b$I(i#_$CCO+>i<1GEQ{5gb+Ula18pqnX zDXh13Gfm^QlerZo%A?%ylCs$H%g zX%wvk*Bs?PrpoCNU_DX{hQgrG=@9P9ZAa@_WGQ~y-hBxJEXm`QRa_r zh~q4-i{vowtxx2_W_egXjq?dHEPu%ZD&6b$C!1eqj>!Zx66+4?jiIP`D=z)|tKLFa zc~S~0&g*8R*5C{7zgh7-i#7Igk+OkG_wud2e364R37UI#$i#$XeU)(p{Q=eISlD(* zYwGG9KbWk)+!WOxaH)mK)OwquS$~Sp&4(;vdUNgi(S7A{yxk5#t{+2-MaGRn5iQ^A z?5El$orCf*p*JP^e3^bJ*jhJ@i+py#*ONIDoO)3tuGp+=hjdSA31_?#zKzi;b5vOR z{7R_H3HxN}SeGS6>>^g`0I|(Z5o^silL`w1i;43sh;e&kDQNN&PS=yLDr2hP)E(6H zeIMJrFg`40@yi}qVmjMJWV2gDqJ@D*VX^t6tm0UIv9`hVwRgL`rk;VhIq@*R^hWn2 zt2|;qDg^IUd92rd=)-KrC-Q~ae3eycu?-eVshU!?&b;^WQ1e4Rblw$papDj(KNN*v z>f!D*-#w$7pP5rSw^^5# za#RgQ=Gx8l7GyL4j&lB%d{)gwIj*4Q3D?R~ShDtqsjKAn)|6H*<% zB2$p5BD9DWoe9$Jm;s4?$)&3$Q9MY%UMc%cGrA#Oxxal5XNH=0rWOv-c^!4DEm*RO zi{)B1x4Twy2wE!?f>?1F9aWo)P}#TF!8O@#GRgJZ;@^0OnAgIpuC?O4IWFDO$Y0$# zs{Y03)gejQa?1K`x`R~%q= zW%JWohFR)@$tzmWWzL9#&!ctz)8Du&RlR~|Gp}0j(eN{n*YxNeBC~jfMl87=hgrN& zn{B*YyY`eRC+Iv!q$mGGrB(bYE(;aYmD5bk2Q}8o+?e`{tjTGLTpQc$88I)m4u|H= zC!}h0NM=@Q#XLF>*i;?6a)ugunTr&cSm#2Vt{o$h$8wqHy&NYL8$xRt7;LHT*>DP1 zc#wQ{4RP*rbyG6!6Jcu+8MU?ABBpbYcdKKNMjfVSs+S)hd6R5n@^g&yd~M%3Uga2v zsAEhp3V~^{ThrwutLY-`bM$43S$fKy>t$&ad8*zwEKwzYl-3JUO*h9qa1Fow3tXn& z_rRUXl8#=ff^fQFUDoPEybTjHVCcO>vSZNcc5SrsYU~p!v-2)lS5GRc0y^xa4jFMf{$XPkkyOGLt1=qdN@wQdnvIIWtwKM~J8bTmyWVLD ztt%Q21k{%KtSf=yBzETrO>O&i6-_h>>#gyl%%nTZl$qN0P!ePDSe+lzJHcuq^=Ij5 z-cdRq_Ur4TST^?+zjrBxD2=1Drjqb~YHfW4MKzve$3`3Ja<+J*xlfC!K3~*?-ZFKZ z--(Kh&cGe8BBL8V)Sjn0C2`0GQX4vRTH1Y??aoQGS$BKGTI-i^%O$m*UFD|z!CHJt zF1=HCJ?XMDT`$*SyNfq$@f{Vm591M$OJ9}ol~eUs9_@ZTOqDlTxZb;u0i;G9E~O3H zeKc5Lb}}=)^lo)Dw3^wWKP}kEXNpy*(`aAbF`rTswdN~yZ4Ub~8_RRHib_b+tb<#}l z6CyrC4V+}OwUWqD(1vO*db`%M&9jGpM~gvT-LvoBF4?!-wgC9;o6BF0&Y0>V6gAxy zYB_t)Bl=4^$P=ud>&!lvKv*8}-_a5OuKm$uNbN*Bk+^Xa`;|9tPHo(p+PE#XaZ{>m ze_R_OwA!p|zl1)r5h$c4L+WnaY&ZMSeUWbKjhHEwjKfUpE4S0_JvEqRTNrbi-I@*Z z$*fQEQrG@tl#6`wNW;b+JS@Ky=|%({#h)mj=M?o-t0Qz&sl(ubJEdV`DZRF7?SFh1o_Esh` zy;fVvkX>eikJ)r17y4|%@r!Rq=+}no`oTxI5|#Gu130JrEaxO@8f7jGiub0)ezJjw zTKYaaK5gSJ5o#krO;ki9aKE!w0f;xL^(3O+yhUjH%XScixRnMvyvjvvU+vY-e4&*v zp9J2*I}g`!gb~XicFnLklG~T6H3x0&V_&U&PRUYPRMTj?iA9o9hgo@*FE81%Hy1kF zXoSBMVtnaGEC?eh2{rbyj=A4WY}C$K@{M}y5>QI)lXbP8_)w!fqH0&!!36KQT@_o1 zPDMcvdvS5zD%+Z=`c?f}qZh)b65_^#=u=eNHaOb~Rm~Md+7{)_n>>NkcG22u<#MW{ zKD)9C%MROZQldQ|YJc-3sb5o4&8_tTJM11W4_Kdh-63COEb%S&cO2dkn&s91uN@)9 zhWz@L8g5;qphbP(sWBUO`RbLduN>@4LR@*Pa?WK^tIZ|Bv4-gST2{1`@N6~J--SAw z(qkJ;*)g|Wn=DLTGX5{pmeU`rO5RMx_IM3N&wu@>cV9T^wM&XdJvsVw_kHZ5Q;RmA zdFAcNpO&0He{Et|B9S*gk!VjO5(T=$pYP9Jde*2!ULq0b|A!7O`MtaS%Z=~*>gkJr z)iiqN(3jm~QyvY6UUm5y%XciB^1f{M(`S|s{^LVuZc2{2zyD7@`s|;tN`LvJ6+`|o zs^|Xg1J)LP_=H`zJ$BP`1K+uP(aXO$bQI3aubl z@(6rhLK^cD(wLVB!8jm|QVW0srnLysAP|CaU_M9$zyWi+2+<%Af^ou`iQ~?b=Vm3& zk+)|jZZMBtt?!%U;j*(OH8U5cK^IE)R_VA%|K>=~FmLoMg?+A!U;Cbx9CxItUhR2A zMqb_!OX?tSLBAj`$PWsF!k{Q94oZUlL1{1`C<_MW=?aKM-baLBP>>8#IuKbN3=WPC zjtPbY#|Fm*#|IUGE~^UOAA~_V$OM(au;7H?1Hp+wRWLkH9ZRiKfQJhuIQ& zrCIX|{=9_j&r8VuyoBt}3&;r$^aJFeynIjq3PBMl1|^_BCz*N^arJ204M|Hpb8AZ(&1(^3E)6KKzirpg91

1H6o5id1d2fk=nqQ408j?XK@}K+rNhl;GKhL? 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

pTLR`|al5wc?mBb|((5s$V_WHhHD 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

ei2D?~}{D7|QWReFz)B}ur1 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
yaC^Mg zwaD4nq{T@$`)kv>&U{@Do93u?H@<=n*f{76R|v!4M&Jz=J`J2e8&N}s0ncfy7HsN_ zwHLOy4`cJbgOwPL;}H$8aDPk~8~AMg{M=dke~SJTL<~6pLRIN&-}F0L3Z@hE(iI!pLRRQPJY_sAUpf%I|m7aoxKjS zE38!<41am?x*h^WDh_6;2?YAKs5*1%TGT#NZ2(Ua*$v8>9B+B=Ob=QzkT9Mt9@VFr5KK?eQwvxCgQ5pE7L1g|{@ndzq!4l>J6Cmm$iPp2GY z#80OkWVWBm9b}H5ezTKV=$g;i$>0V*opq4kz*f#qhI9RN-a+Q!NLmNk4+qOR$o_u1 z9T_y=%*_VauCj?bCCHyx@LXDgUxUFx*@0Rdf)KV4Lcbw@Y78PS?H(KE@JqK zMh_SHDa}C^`zhT)miQ^?AP4&?!$A)5Q^-LM^;4#UEcH{CoeUoFQ`k<1hxsYuAcy-Y z+d-E3DaS#M@Kdgx3~uyOo}CPj^iw}OnROlpC3Z4A3I-((ax@G|9OM`nlsL$-Feq`5 z<6ux?CxeG!P+}*;<6%%@C$rAMpu|pwC%~Y@K~980iG!R3gAxZh*-t|q!889JnkTYRI;vi@FX^exM4L#05&hgVY2RRpJ zBMx#NT<0C+d|045$OSMIagYoBG}%Eeg2B0iTnukn2e|}xst$4~>{K1(G8lk3$mM?e z+Ci@H(+mf>(oZuT6 z>$0B~+R5-bKP|G8Sy%nE*g;;0&AWrV2pcv*Cg!yB6RfOM}*Z!cpFxZbY?qNj&$Z* ztQ_gg4y+vM%+4D0O&8W{haZm#@4|2d4_1NUOc35J@D?k4kHA|Ed?F_Noxs}+TpknN zEAVy$pNk3a6Zl&LUyBLv7kGz-4+y+d;4)WC_jDhg zySGUkGr>zoy0Eb=92mn#jRTvHN+KqFl*^t>KUJI-HtCPq9_d&z9j{pUcryK5amdei z(Jx)Zm5PP)sx)#|hb#OG&i}P#^sA3f*dF>sGM%hAhm&{FDVf6}ct3?tIWxJ7POB29 zof3CYd6(MU4q{?7p9T5S?xNq+1j?NW+(l=8|1p2Ni_ZSO1pGA5S#NJF-d+tlZ{cyk zx6_3#mD+Y=4t&vQ?}i)3*4yb)rP6Fke_6EYvZ}G+vzX<=(%y(IO!f28k6bmdu;FEg zl50k1!`E~f{uKG;KDv(AWNsM)^Lgqw&`-!sc3$Cf$J5O&ReeQ#GEm1C;wiPO2|lh# zX`d7 zXTjQSnDNY5VL9$&JlqPOE^wI{j^mX$e1sXE^=Dw{dG_Znf{EQIQwSbZS*^S@x~u8D zmCMdsUK*nkgKykMW4jt2EbzGs_)5FL%`4YeIsmJ5{MKMdvkYBrX|5{_leqCV3f5o~ zBn9^eA$8G96V)7s)bP?IjeyPGWR1ArOH(xB0WW=}5!JmkRU_iOG)*I#d1<;vO!m^( z8u528&CrNCUYe;9_j+lTMg+VxTO;7(FvnH}II3x`B~xlt@jR6ne4`f4=PyH4WgxM1 zI%>GIQB_oEEm}}vz=c}0PzLP4LRd7$#oK6+<877tN=Nu;v0AQD@wS%OD7>wu>f3@8 z-qtd;u>7``YlP2BD>Nbz_aJBl-sdWfNb=HZjUX?r5k!V~bl1?GURtXWd%UzxBX(h} z&uGcQSd>r1+Mo%*5OQNzk5xJDWiDJ$N1GH1-zihyC{z`u{It2N*Nlj|6C~W!#n)CO z-0Zl&-zqR1$HJGbY+Nlv})w?tTt$Mdc zus4uKpb>wk5opAFH6k9T)o8@?UfQn_ufWYrBVP5=_Zsn{mwwQQ7rb;(BVNNHSQ>Gg zmkwz}bLd(|jSA;q_6j?qya|3^L7b1JQ2f3?{iIO*YOu_9%<;a0UOKL2ckgZVv+-rH zXOry5_{;FpFPb2}>0dSC)>?F;!mkib?xZG(um61Di>`OE?2o^qj0&(WgFGOM^|jrVW>9BBlYuo=~`E5a~;I3 zCjHub>AEChg1FVB9}09sPb54FS3T$yn@^{HA*KaFY2;$Vd^*iW!F)PhP{y?pEVb1~ zL4$(%wDG(!pU#jJUn#;;FrNoISvG2ykHR(z=F^ccZ06HOE-;_Yt~dnd z(>XF3vy^*b&h!N<0f}XG`E9zxS7FYiGOjR;jQbhUu*PWQ0ZZxrHVU@F11ioI(~yBe zm~DlP_{U(`Br@@tb6V^~0poO@eor~ zQ8-n{;6#3;WlW)AMjV56FHTGK@!*(~IHv03Q2^`3$$B|Guy2yj(#&{X960{f7g5Jr zo?lGW;~)_VI3~&r0j*5NB~qa%`%## z;qxaSn{Ojdrr9z?c%MZ>K1`-L6^DG3Omiy^`8b*8RUCrt!1-2*YNAB9(}FKB{}VF- zRB%~y9B;`lZTKaAgqpPQ3ptw#-i*>XIw#39ec1G-ET2gT-HYL+i z5h5MsqEEXynU+-?vL%_8SDf0`WLjZ_7`}|r)V5(qR)z>at!T*hWLi~m$hXO~y5f)> z@TRUfWLGk+tvFQG%C8vjk3M9G}>FO z6xzgz@r8$>mUuBzIQr&pqi??8nTt64CMwV4sl4)0kA;BZbw7bHPtjo!? zM}!DZ8LN8Wk8>rNzBA$&&b(Fy1lJ_f-ikxk;u5WjL)N9x{@;74S@$H<0iz%oft1(a z%DNXzd`6=7H*pn9d`29@A=D~j)&t3Ou)>05T}z=KQ4q0M7it{MNNo^@&>&bKMipq3 zLWh6%3GPdwBfl$fe+nJ_U4aKv=%?QmcqoOA{jR_tQt0^a3OtM@#EL8PdNTb|ambBi z`nBSaCsOFd?`HSp{dDq+dORX2$1PM;={4w-)d|;z0F2q>r}Db-A>)dHa!aDFkoZlP zxE)%tC2qzO1K=_hkpXa-Qj&tpR5k*P#a1<-9EXN?V||ZxnfuYeYEf>5f;a{(PYCi>2d-az z9WJy2^G#m3ZuM!n(5kpG7AH*{c>ouY!iCnvEDsmiK_=#K;CvGYaosD@D-c+^=wfv%84KZjwmQSUJ zS~TCgYe|<{^yDZF6IYCOcH^%XEmT7R+HiaK(N}uO8lq%VkqSCq>{EOnmAsv%b*o6Z zEfeX~r0GT^v{Rwn8Z-_s(6dH~P!1Voh80CL43nN|&}PFh=~)&n8iq;FwrJ5X3>pU& zaK481U^GjvVjO-j*9tpg3&R1JMsmDI6Ai0L^Fb>$DC)aoOtWrU zpR{{*TG1`mcTY?`KK^^9^4+p&=qkN6KT(rb>korg;w$T2lh)|8ct-RaYmI)RvA9Nh z3QpWraWkx*8rbNk&~I%pG50&K*P@LT^`(&~VKiyEK;qb{ICC$2K0rsD?1cawl`M9B zOxcS#z0YW4;w-5mEPNcZaFLJkaSIm%-%dYsk5=J1cr5)3q>Ybml8F7QfyIVvQ4G%D z?uI2gK1VC^cZBnoTvW@AUv=mtIvBvRF_;S|0aYS!3p%Ag_j%~68WY0)U^zb9>=@TH ztgiefifmXqWW&JtOgHOfu_qJgY!t!R{#+D2gtG*r=#d(9!6-Zyr(cBWdIDXHhT`<{ zOClHJ)Um8C*n2jl(V1f>unX?l=?1@ts#WYzcfkYD`fC z$C&WH(TfGUN8d?$E)E!xI0gr|@Y$RpJuS4(Or1gN%#sY+BIk#;7zQKTD>LPA9@UvM za30l}vv3~O8BFDKyF(w4eRtMz99M?pIY5~`x1gZGna_Z2RQ8JK-`#N3NXB`y{NOkR zHCY43CIhM?z)OYQmCaThHAO`lQQJ$!Dlzz~mr7J($nDry z)`&a2G(;mhcxk9ceBz~2jd&Jn8LEaAVXqsTQ?AHAyfoYr;msYI_d^k4pPha|_c$(cEm#*@y2W@+JXij%-D=-si+k^Fjxkg;$Kt~K| z^SYaA3LooJhR$GqcU+UO35EuZUlGO-3%Z-e5TokC#Z#A`;-y914J{J*T^+ z4rO@x_JLqq=s6&z^26kQaoFEdWMv-znO_d`J&vg=L%e*woMWoW5R)sSd4yJR9(@D1pAilZ)#~#gpu{ zo@6AftM>7e7*}5+6x+sHJO3h%4&YPEcq*pf1E{p`t=y-Irt^c9(RAPhI*5!io{H`F zfC&B32<5$5fe%^I_+n7Shb@dP5}f;c1hFHnVkg}N={P!yd?T%5Cf$Vr?J|s1uUG2*t55LY)L7M<`}6LY>l> z5FCY1>kJ%W%Qc3btbVhebCPc`c970!5`1>bS&a!{I(V+Ta(zhIGXA&g;4A65p{%tb=# zsxqhw3R}clTR|^$T_YyrXihULXh3YubkoG}S<7mLOaFS94TeM0dPw`Q$jf*vEIRcN zBO09L5@Ain9&JHLh)xy@h z%oxE8(it@2e4RlPE&yZZj#$X6P|C2{1qO|}NS8tG#Tvs?k`jd}5qF#n7U_sd3ew?2 zkA^5RVBFA9dYF0;Ya8fFN;P7jmxgIXKN!DR6^wIeQNd+O1qTbDo@fyU;bsvl0uH7{ zgi#j8!L^7mT8oelM}% zydo{p_2O{Y9_ZD%=WO$nulQ+rqavkzzB0JYPl!E54Mkh~O2x0^3@;VK&T^WHp`cIi zk&syM6jJ*DD|LxwSoHhaEIE4h(O49mq2S_%P)LmOwT+Fuf@gsXLJw_ z1Up&W5H1KHjdp_vi;cV{BmmYk=PuM5ffc9Ki8K$J#WQXL7kc_;}Vfd+5Xtb8yG=xIlCFoKCcL0Cc<-|Cn! zsn9{J{D%1kw1Ey{<(K9g7y})|3ja#nqP0Ci${JSBm?;np}Wb}BB+!o>-j zxi!vAg0tVYN71sH^lcAw8F&)ju&|cpro02$idl4U zw2zgaofaM=@Gc8a7I?QPCbW(S&kkXq*26rln(ue4i#y&;0bFERfGe{1_AsVbw^pZp z@+WLN_KRLb^mDL+j-baspw?$!C>Wx?-qGF-g>KDdfNh6{|d?tU^JT#Ofa&7o=-*f_fq__z|Ddjj_~ zD&dTOvBGcSJ>fzE3y%``gn@aPRp65r#E98V-C(3D0SXH47!2@f8L0hA;V|!>(Zz@yFLVY2Lz#IK7lz}iU?n_v zKQsm@QXrLATCa(9zR+EXj{HTw7MLwr0wwly%;6f!ldq1|C zlyJtyN_b9(8dRc$Gajsj=b{H3qJ%RZs)Xl^fIYkt&Uly_UJELL8V+2hgy-UUMkwKo zM=IgmqDCpKnv2H2!ZSRwsJK0bpSK-$)FE2{apd4dNRb z|2GoK${aKFt=b5MaeGhG_OrxrkeVlnm|zLd5pb4gPcdh(4gtmSF$)Yzm^7w^U0IJO z(ZZfJ@UT2?{MT1dw=VvN$6-%v4Wd9?JIouJi^U^B5MB`lSm0RFlQmg!4H@5OwF0MG z2u7SC119vw9ki^c;hdyjr~-QwE;5d$iYAek;fl0|NxSk?m~g_R-6B?b1hL8@1~XBe zR^#ntJmu>50Iu1QKXE0^T2vlSbMN7{DyAvY~_r%*QJVx{*+YKx< zEe`)yyaDKI*iz2LTJ;V*W2j4P(bK4hINFKE80r#J^fVk|cA;J6wL!aTnj25M8FT?? zRx6(NFlYwwEG`KBjzLQns|Me}o`(OW7-u_U)j{MYFUvWCD^WyvdvRS>b{g~o759c- zAmfX1{4?kUB7UB@;5}~#^a2AH#NtBuLG_^*SopfYhh%)AH*|$wAh9S9@Da#EArj*% zFCiT5nE>xBd@ddTi3VH{gCz*mM^P<&FdhGi8PYK;`~?|)+zNjIAMDQ-`WWaJAYNgv z0lgeLftq(0FP-SA&YNC_0lG%C^3o}dDDl#1jTnqY2id-OfgdwSw87tW25s<+WOyzJ z8MMK((e{;&qiiu-Jtt(0d7g2&?Riax=ad(827TH^qxLY0Pe;##b2BvwzOe4HR^WUn z3TBkZTcT2~nwUM9R$*zuiU1F$A#Jg=pb_o7bVDOP@X}3<_|QwKz08W`G+@D=rV;R7 zNLPu$SG*Kdi6L12&d`WjIEvgNc$SNTWoiTpmZcFWSXd)au!u&y@1<;wKuL2{f(w?b z5<_ZXkE54i265c&iH-aZw+zF5u9vmA@y7(}-^;ux4_C0zfL`))yaF#@j>p$L4U_^S z1sVjzZ4{F;gyl2%8tyyWw^=1e+Hckpf>hji?7-IE}aqn;05#H#RXWg4-Dq zovIN?becvW(din2M8DPuBsxPQUV<;2MifI&=*8*@kJxWxc?7O-nm`WDt?VU6X82u- z6{V#(?@DKu;rcBk!kY!+^1d-RwNjVZhf^!T$T5@GrIzF1Z*I?W*8zP9U&y)$l)2|1 zD4bgdSop&A8k{gf9`FcSg+!HhJ zItG-@Xn)z>*lCGi;KXJmQV^T*kZ(Xo4E-h!UKea-o1sx4~9}L@xqi8Gw^$BR(h5CU)*dnZ$lhqD{=)jY#5vjMN;O2`=4^CIR#V zkbG1me=v$#W0bcZ^qQ~VBFz3Rd>uG}4qMVWsQV*IHSo;ns40zV>yMetPbNmSF+PS8 z7aWHU@DVQmtr}0q@!s1S}p?)wBn<~E`tGoed2h9fJfqvzlIJ^$(%&2C# zg^*=4SoU2ZdomjOY;`(?I?5g6T3U+PJ_K{e#4atBbySWz${iE4v=mAHh762q&Yb{@ z1c_esF*<8KXYLrx@vY~$Cf1kT;#X3!!-|vkC#w_>>aW5 z&dU;9=C`yXX5M*};EI(?_70qK-AmoF91&BUt|6J6r(6p@!L%O9W$h;jaga?WzDn_%}s^zL2tFJMZGbL7s(o{lZEgUkMyqUD`}5++pAdu zWg~J)d%VkD&8j3&j)k795>L67;B)bm$AIba>3>hpjz^c2gT}b8<>#7U0o*7IDraf0*#RXPKJ~L&tRC9 z0ndnl5*bi0fd)O$ym~Z2`L?@2Em#?B5YhoyVyv;WbN#dN)(35y;DS`DKt;$DftRdI+U9^TkH&B8|2T&_}B`o$ZR= z#!~t%X#c#FzLGJP(i!to`YI9LR$yLAUoFB*jBqTauTkTtdT4F$>c)!1TRj`$-i39& zJ;s8?TRnaGb;UTgUeuVe*gv2<7S}DD;bXi}rdUmuXp_jX)XkVn^oEnFgSxqNAHvJw5p7|oh7H=;B0 zC5mt~qO&5r#0W0MFE zI|wi4s)fh<7+Ok%%U+YxO*(}-^qR$S-S~`n1hUl|{g=j8|Hiqc4 zgHfEkXmQX0`>|{n$Tq7bWc#yh7sxha{a`>;_8F|9vuqp4Hq8~XgIJa?KyI1~+5D*N zU$K7vrP1vrpiJED6*5NqV9f8cNQAc)nBQly2rn_h@jgq`_;{a#k+)g@gPLLeT!xGG z)d%b6GChIOsg%la(Vh@KOoj{GDV~O-!t(iCp|{6l@f?X8-#r=!5+5NWi)FO*cpAyV z53}$gtems(!>EO~4+-JXEIeqLSd(itIiAL_a9tM0J*8t=xGoE?$KTjSN0sH*MU}n1 z9&c?tL=UwiSXPx_J-zMSK+!9F6_$rkPl98Xh_ zRNm`Is%Zm^-$*KtO}d&k5HD&fzbH28YT5uVYFhL~p~snSBqX+m2RwjPa|>g%0G=W1 zLcB;+A6M)vm-q%C@i`VQ5_qmsY7U>riJ5~T_9f@b%*4=u zeaQtfGl4tSpoJ>N`sgAVUkqJ{zgWf>LkHq7k@5l~{!$eq{xX!um^x3v(hwHIzqDrU zd^yuT4Bs+_c-$@+z9kkV0$wF>d!rp=XLhy3A{=-PzlxUpDzHwBu3;^|ikAE;cu#s= z^i}Z9kC4s12H7TWK)=JlEov*bAU5)@ub^>F+W4ipfx$j0iMjKzuF}{`o4$<4BpIhU zC6@5EG_GL&l8<-7c}^gpB5eK=i}c)cw97LjytD;TrdK(vo_d%M} z6Ghq1;j*LR@NfAs&CeMXzeBACRQyhX<>!rx-=*TtaNPaUafAf#h2ZkJJzw&UiE&~B zQ@DKYJA;BdtT4Qayyv66f-=s*U@06Gu}_y`Z`u77=W-vsaw`tGA6~f?hdc&G6uo@+3}&`BI#61(Q+p_EO`PxnGP#aQUf`?gjYFibQPZ61pO7;c`$>h&zPJK4}l( z)T?mFDSL>>Cv+e54bk>-=2;M{3K*};(Ey8im7&K&z?kRbJ1Rbo@2JN^XufBx&Z}#|AVSY6p#_-5o=2Bed>nmckB6|8Zw2zS42p(@AH;G76b%a_W8ljcMz|M>hJ_Ih zeAVnyU^vC{*G!Ciz4zKi1%IQ=2`FkVc zadL7WVQw|T8^gX$g{iK{2RJ#|LAJ-q$qw?v+SI>K#WujraelHx{v(`!=O91E`Nr&(Qa zGK`QAHXQ8eu`hv!@C!=Y1kEDzQP>UkG3W6-)m#C)L5tw2<_cUG+DB|Qm#vfibmVG-4903(cD4F7P0>4J-l9H3EYIjhKov@+^XL zg~V!&m{N82x5aqV1lsGOc2Xv8TGM`px|%{ zRzVER&bGdS9asfX!V7l5&@fs6#NMie7EXt;VKfx$T-&4FXGRLPaiBjb@`F#n5mT4I z#`I2|!N&A1$zWreQ^CgcZZOi2nHdZid(?DcEb*O)Bi7|0!RvB+wK%+)y-#C!vuMB0 zV6*6eNJp&ZaZWJ3{$9w4?ur>~R{fyI!ZP_mltvh{hKhWHG3oo!!o>m~QcH{Q!&Z19 z!lC`3FW@6fZ~(C{*wU9>7iW$1k=NAQkJ>c^uwo+8z)^*f?!Lh%pa}KBj_&ZSRVZXyXeVM+ZWso2EfdnEO%q;5?denL_wBvmzW_;g8~lvK6E z;YTEON>bGmhtHGLX-UN;4rf(_%T+F@302|~hwo>~k#_HibR%Zs|>6`_=#QAtK7qfVMaXy})HdQgHb~qo;Ce;V$ma|uhAG~Ntups)$Qk0XF>6wd0qVWV(>-c1|T6Q||%<+mDr2pr#+W}|S( zU%HLLfEKh-pW?JU8->otA(Gr=wk&Qs&hBv;@OwPGVZ1HtD5E68%$CDPnpXZ-!UFOXdcFJ@AqVt7z*c+DJn4pzSCcsNn~#D zaS~HifuU7k{-6>==0bJRi2If7)kPyF;V58>;D(NZ&Q=L7=p2neIp(Sa zmt&qrpd9lx0_9ks5%=KiioWc{hjobH1&rDFnTrXClMM{7lAv9*dhZlJGTC;JbRLSMb!CWXFwgG~y3^+p?ozIv05 z!ttix*eLYKn{5<&dtIQD|J{ zHVTdFHyeePo!A7BRU9?eXT$gMV-0v@2JrsA?v%Pf1 zBDiCmjpZQYBX1v@@q<|Yxz^Xb!r-5{{IjpIUp)$|F*h)#@=o?Bv0HspA}r`)EhaV9 zZ3yymZd$6_T8v4@A~lu-)0r|o8W&+*2zrhxwMa;1s1zci<%ew4Dd;(BT9Crg5m}}b zo5X@TjZ=YbQfQhHoeH6-*+xXePIeWhA2X+&^ zYGy3z!b|;A-B>pnQY!Xa(!y~xAk_^Ul8&zMC@&4v0<(QINXd?UsX{)=R|>_KOt`#M zfM`OaiV2Q^NgXsEi^$k5h$2bAR&Tl>icKPxC%H(Ygb6XEux&n`bg+_jL8>eCijRgE zS(~0+q1SyhRH0Z3RH+gX1q|U#@?loukxY@>a4UNr;9Ru{RuvU3>tsDrn?_U;^rzZ1 zvXY?swP{o(K@Dot=t_bftxaPp33{wHjjbf8VKR+Nb=y}Hi(;^vh}9sYE)omZi3P?8 z)=?(l(XnvW-mp*Ti_6fX?T5d@Ik*fx%5aOClSGqK-NrP~oZ$6MqA3Qqsfx+9OQNsr za($9$s$H&a5>2ynpCr+AJJ%tJzP5AkC(#T$_hAyvv~%r~XqKJpnMAYg+{Z~Y$Ig9} zM04$2rzDzZ=RQrM`F8H}BwAqSI>JN6&V80di|iaa#KqBeIRz`&SUv(_?Tx49rqI$< z_wOtaKj5Qfc;!Ch7>LvOphi4=J1tLj!+One>!}F!(F*;0iNL94B^rQK-*(=P?=^{5 z8HL?i#hlKg0jxG3z~s;X*4X9H0M^>&&;ZuiIW&Ovb`A|-gPlVI*l6d_05;hS8fAKzmc&mitrjCUJg4T_|eGo5n!IUFv?OOcQC0 zO)!x@pi2eMKvA<%XQ8MWl(F89i2H7%gQ;$@!O9wZbc6La`Z3D$@qTjS^)@;bE?mHL86 zps}1lUJ3e&W(#o68O!IDps#4Q07fw$8qe9~l_0xj3-GKHM0pLrfWN~{NEPQ@tVtk* z^$G8D5Bv$sWP*T7$VB#+SSB+Fc|b)+Ty&p?NkVvsYy5q2G}Zjw0N%sq??>Zky7~LD zIQrWB-7t=3n7<#7qnYOKCveNX`TNN@nr;66PaMrLfB!d*=9<4-!#dgg{T9}`P(akU zag;G%BeOsya#vxiP9<`#VXICha_2$UQi*=>xm%(Vx!BTNsu9bu%%u`J9bm4k61h)d zuTCT22C-5l@(^W}O5{w(UY$zhjlg|Y8qpp1S*b)0-rzcoD8PQ5O5}#IU#Ai|y}h(i zBih33NhR`7(r;8EXMmSBt3)oc-J%kCsP(NHk%Eh?G-3=cvH~F+dl8OG!9`YvgweK{ z*kKSj^*WO6%SILM1cBz6DrTqyH{&8Jjo5~ZtOQZ!7ZRCQaZrdxoX160AguP0oq>z2 zR3aBe-=`6+aUz*Y6j!Zk z^rP`Bxf&fZe$}o;`WS(E6{399$=qDCri!ST( z$AY>6IwqpawOnx`8_OOSvTU;wyokktm9!ghWdk+N__@Rd~6!?*cLJIuYLzxQf;Grx9e&V69 z0zdUoM1h}qC|iLYJ(Q!s&pni@z)l{@Q($K-DJigvhx#k9tA_?C@Cy$OR3IiegA~{u zqrU=ifMtOKdwQr)fxSFbq`=;|K~sTWdZZ)p7#N5f72tpJs!8(%Cwqd;Q%esn&O+yISmvUvd->1104Xq1!f7ogEjwts-e zIN1RK8tY^S256jv4XzH*cn2F96rc%C_JsgVbh7yYn&e~)0yNpl76xdFlPwC+S5CG# zKvSJ;Nr0v~*}(yt?qr7q=xZlCG(a<)Y-xaII@w_Xn&o7N2WYmFEep^bCp#iQbDiwS z0L^oR;u>o4-WXA<)v6CGipe0UrLV%V!*x>R2EpxDui2+*f zV1wrZw8FtgCIx7vgAKhJpj8ewGC4r2o$QnVt#PoyQvq7*U?WckXq}V&DnRQUZ1{r! zZE&!WsR7#PWTypalarkupl_V)*8$q>WM>3ui<6xhpsh}JR)DrS+1UZw?qEZ&1?XD` z8<`WJ9Zq&`fOb0A;K=~(V%FH-Fng|f0ov_k=LcwygUvV=pzj=PWC2#0ob18??Q^i< zb^+S&V1s7@bilzz76s^g2OIilfPQeWkx+mRI@!em`q9aT19ZsAF2ULK4mSKg^fLz= z0ejTRE`^HbWS2ojbF%o}jyu@k*#Q0QU?VF6^ox^S8K7UC?5Y5raIzQ!PCD5&0XpSm z*9PdclU)~}awoe!K)*TJ4FNjiU^7kx=&XZ{Yz)vjCyRB<^G^1g09|mhn*(&w$!-bI zB`3QzK$o5Dwm7`w{>%#%33NRjv+$CJm?QV>2c-`h z1Q4{mKP4?*PmdXNMc_Rg^EqgI zBJduL`5eqXLP2XHgF9Z=VX-NQIfuL(+;B&M<9W~xe-szuwDTK2E8$>tS(o?iUPzz_ zXH)1!HXr{T>q?wVp%=>c$A34I$>C%Qy+}rIjRKS#wB{bN;|QX;=Q-JBPzt%=u*Zeb zQ~tGh>L0|OD?F}))3E?Dfb%Zkyx)H%i3W;C;Jn{|#mswo0p+iL|n+LuNW7AR*dJv)SE^mZGlZOS}j@vBYYcibc zT<#*{A`D(#FH>Fv-;J?4iALbztyNdJ-h@khG}4GE&LLyJsTIjIDrju!<+XCl$zP%f zfw4G0x^Z9xpW;5^DHw~(_~vOT>tQUe(Z`2Dr*VML8@vU2aNE7gEN{;Iv?WWqcxR)^r6;FM($8+bd~_ zx7YJ056$F;P|^~~_WTJS)GSDg#V_6$;Ki@mg23XJ*eJl_*Bpb8TM3v4&(#PV<3G<# zgLe)%jrnF8Vk-e@EHI-80%i1yE$28m>W+~aX9dS8sEcF;hc9|1f4kbULq2Q|Rz=$s zFFO?VhNdP2)ddD-*N9JFU0^8c4P$cgEGhgfk9%mHc$O4?mdC3=HH-EZ=tlWeectZh zfcl8;pMcmHC9r?u^3WzEBX>MTVn5^?1?G8ZvjWi>Z&Ba?4{cT8Ko4zG;2;leS75$} zzEvP5^E(t+=%JkoEW-Yr0*gJgTY)7W+M~e19{Ns!Lp-!sfkQpCPl2T#+ONQ29y*}F z;U4;4fn^^0L4hMYbWnjfN$5ufj`GkU1&;R6VFixy&=CcW_0UlTj`Pq@3LNjDV+x$$ zq2mgi=%Jq#ILSl5C~z`%&=feuLnjpYm4{9$a4L4s6gbU8rxiFI_n<5AYY+XVz!}&& zQ{YT&ohfh@mX#DZ+e7CSh=Kcp0_S?@q5|i6=#m2Gd+4$P7kKE30vCGdssa~z=$Zl- zd+53Xmq43P;8H9hDG+08YDV;1SdJwm1+IWTp}>_`LQ>!=C=?1@jU^-nuE7$L0@q>* zNr5 zmXH+qEffU>?!Xd~0(W8wNrAhdB`9z=v;+n2!4i@Jzrzxe0{3DGNrC&Ygrvaz9x7Gf z0c;v6@OuvpSKtpGDpTM=>=!BUM-Pou;2{r&_&O=`- z@Vtj+DDVOXa0OoU&@2UB^3ZGrUd9bL3cTW>xeC1Mp?M0t=ArotyzZd|3cTT=g$lgs zp+!+R3d7T41-d=7M1dI3mn!fU4=qz*jE9yhkUX?Pfw3N1slZ!tESv(XdT6x*tKncc z1y;xDHVTZxP^`ds53N^Vf`>LJ(Bq+v3ao+gSAkxPzY0vm_^Uu4#$N>{VfT48SAq9q{8ius7=IP`AjV$>{t@G^0w2NntH3{D{8eCmjK2zO zfbmy>k7E2);9oHQD)4U@e-+pS8uf&at!tH8H0{wlBy z#$N@#gYj2^?_&H_;CmQ<71$QzuL9d){8ixl7=IP`0mfeiw#WFZzz;G0D)1wWzY6>q z90og!)qK6xyH>aO2*n5sP32q7jQ>1)>pf%G|6GOJN0~5zAl& zq7lns1)>ovUpaUofUorDnDw(b}t>$h;O}gSR;0L>4-+` zgn_F@?1F)-M(l=xt48dBfvZM*2Lo4)*b5sFjo1ep5RKRm8xV~+02>gE_#QSO8u0@x zT{YsMm&!HbM;NGRx~LJyy>v+&U3aT3NL8gU8-#%siB92l<=ZcJm;en(Qqg-AZpb>7kA!$Sv7>#PgEndpkh#0saX#~LqNh4x$U9LvlitBPU zqAFaFG@=^x4~?h}{X-+-pnqsYJoFEZNPzyK5gzCt8c_rKhemjze`rJ^^bd{jLI2Q* zBBMmz`oLnHnU{X-+3hyI}vFF^m$ zh<`x;(1?FR|ImmRp?_#ZbLbx$@e=e8jc5V=LnB^>{-F^qp?_$^E6_hQ;#KG$8u1$R z4~=*o`iDmR3;KsfyaD|~BmNEjLnB&2|Immxp?_$^f1rP8#DAfGXhdu19~$u%^bd{r zAM_86cpLhMMzn$cp%L#u|Imncp?_$^d(b~LqAm0fjc5n`LnGdY{-F^cK>yH)_Rv2x z;zQ^k8u1bI4~_U3`iDkzfc~KopFsc6h){}}Z-^bd{b1pPxJ zI#<7me`=(rre3O1^4a6FUWjSva=G4cz2dN0t|EV%e>KAoH&T7a)d}f*=<48VhcrKRz3=)=h}`4i zSg#}W9k87d{*J2)D0JRgzzl0RuL%N?K@6S-GF0K?I-3ij4iBd&N)7Etd(lVc-8B*vh z;(iF(sFcg)O!E?RnOFs7GgBmDTMdkZvMUPf=3o47L+;=`5b)3;fv@IlCao&-k*G zcYmAnS%ja^nY|^aR zKUzHBs+Iil|8?wI_L?gm_0qnPsMi1gkN=O=Kx#caaFr^q`swvL#a4SL^M%Zd3GQ2~ zj7YEd9;mmgxZMqE)K7@5)+X}>ce`6+s<_EjzjbW&Kg7CY-04qNamS2kQNMZp+Z3io z{c5+kT_a*fRY`T#Z(xfXlMgA^caTLtWLLe3cT5PZ8d&B?krAL7SD>OqPe17L*{2P>^*v19nsn={?b?3w*{5wA+)=+S zGu4vrnGF@ zB<0ci4I0$H(_s*e!~V&J@)5@PyPq60pMd2*6;HFO8I2@Z>gmG_0!#Vs}+TJ zcT2jv2Hv&1dX;py+qHS_`nb+BFTOmp`rWl3Y13_b{Wr%?UiRq1uUmu$4ES(%$Jk+o zFNS8^+V+kg8@gX!leW2ILVVN1bw|JTw`XqKQk?Kns|BsQmA$xb>6^Wt+kS4!Gb@`d zotSpV!6(N5yL_Lk?`_XNKYiGmFNe3@zH)uPe{_gs_g`7|`TfK1dF;Rof2rDU&(X(n zx89q3X=v`fWp~bgtm*4pZr^9TPhyr>iD#)q#e(Sq;oxARz zth_UM%e?bEdp~rPCm%}05kEUq)fCZX#hZ?#AVR(((>qUD-s~C zD4JQ@+j-Uq{9b+;tDGGFEw7TtfzUL-lsF|1Tp!Q_bO=WXnlb9`SgfxC0udY>EakNm z(^5`8UI<@L4a%1h^h`A7?Oz!SE$UuRZZa5|EPwVK3Rc6vPG%S$3L!bqUZa<9B69}~fllKq-PG)3|7c!PGCGU7FwiKxkboB0jono)+ z$7FYLB3JC}{L%N#2h5JB;GPw9S^HHRK-D};NSz%s0^W(z+8r|6aJHGep*F>pD7R0R z=J*oJ*l2vp8l`zCIe$T$WmS?4Xe8$$Ywr zsFNC&sFzpHd%R0+p3Z~3C>bB2c4I3Lmz9`c=yKQ7xzR$uWWl;fI`P`7D=Y9Y_wedy zp3-7QWU^tU>q^{s7j@*UQS{AZw^N@*yC07~HS9S#+|ly0t$4Dl=R=RiA@AEKsOu?J z%N)pJU4Cl8u(fNJvnlaShkvf!U@SDUo4FabHtQ0yaCgM<;>*YpY02%uib(WAyicI_ zg;Ab-j>IYI<0p}L8?|ENdoe%N;XM&a6I_z4AN%0)CJz8Sc^F6oC%#btl_TAyej@Ud zzE$JjeUGTegNa!!_~vd5$nRM8i;lG@%O-n?vemV1#*Bq z3P58343Pw6zc!HovH7=?6dw9}I)D=C01DCpm~%IlKlw9oN!=XrF2ghE%havhw&crG z;}r8;ur?~YOD4|&*QtwYr8zJz=lPIvgnC)NC5x=;5oQp=j8q$lrww(EjZAeAJXM*i zb9KS}c>m-TlNu_C*2-t4;^5zZR}QCJJ$B$AU2qM0g)%2Icl2n2PRI*BSkO@w=TIB}R5fPNSINdXv00l%U-e@O)>@{;<`%%ld> zuZ!D}eFE_^fHkoP4;*A7z>uI%(2LRe&O#tt{hsE&a-6Tfk8_~YHzoq}7R*{OS$E0K z9+0+2p}vyc@f~sl$<7!s0t|NAAla$?71<%2c9`xj#>WD#H7PPL2HN!VEi?vzH>yYZ;l1 z&|E&<&!NY)dPwcOac|YO=L=n(j7)txCF&K5_#vKF6x+;lo8%Ll+@EwXR1c|I9^R~&t$8-a5_e3~ zQXb_e%n?<+CcH5rp}^~rSz{IN?(I{22ivMbN>&6B6H&$=X3}@1ZmQK^pH7P6@?nY4 zEDoAg5p%iTYG-^Rrj^@CHX~+obai88e}1;`ba!D!?>jpu)fYD8S7VjQg30>GssnkL z?>jo)T7LeJ6MlbEwVh7n-GmF`ZN@M8w&^1zL-|?_R;w9>lzQ3>SQ3hbKmE&1-J(@;cdJ9Kb{yX4H+uvp55I76(xN0l2iko4Ec|0qzl{ z1Y89G0?>C&NC`vI>=yB$NCkD?56Mc6qyy{EA8i%@@uMRg$q(l(VnZD%ElY%!gw`DK z%cS`v^SsMg-L{)2BGZIpQ`+zmpth$w4N?X`5tySHfA1ycb40WKSx)awJ5ZRx@emSQ zGrKtiLGcNSb4yuMM!xFj^qZc8G@h4aV;EfX1^jWPGMTeZghvj1Q&FqZEwKkIAWb4e zck~4}OFv{QJxsMOt}j*Yw4>|FoJp0_w|)6u)I>jgy=FSO4i+>RwsayROLV9z8KNPT zQj=As-gD2R-*OeKLr<-;IwM7L?8+ ztrtR@K3qu{SF35=I$bGY8a6hQ^^v{B@>p9D_G97%>(A6D@b7)-H;y~)Qj zz60=#uXi^W27@5+jHBSOq1`(~^d=bF!9%T32<-RX1Ri2WM!gdS44^%MhiHI%s{&Hm zAuyW14}I2(3I_QDbK>$%3r>s*Yo$_hL?VVpIM}AgVE?BtMK69fffGa|a2KIu_J=4h ztD3Mep#ZQ##DJw93MnIlk&=@~TLbWDC}fR*ds=|&18`6NBW3CTK~x?D1VQEj^(VKf zyW=UB0A5oQ6JAXd0|hNPIW0*|X|${)T1{0GDFg@*KL=yt`cdhcdU&}=nqVEhe0fb= z{DVB4TnKnNRR9lP2W^@0J+_S4E7tUlnBt}D#M&Gpwl}DWw#@1O$R>QhG8hy0AFlYj zDFYBq86*aYLSjI9iw02NO&O%z_vZiHJpyC=_XYl5zb9`p4Oeik->XfWoNUP@%P;EK zX+zeUjX6KQ>|yLv!mDc6kyWV>_{8Uw-mXT46vFm)W6!gVF^#U0Ez-{#YPegUFWVOb z@!{R%uH|K@3nJ=$QaE!3he3T$=kU|+DHpA9=dK)!TQVQY_h<=k;LJ{I7|_)yHwt=wl-fYl(rvyS7!7E= z&R-fjc>+$I%9#7hp_#4+#awcOq>Ylr{c)J+Tjyene0B<4PH?AK_ms1~Yi*KP@xv8N zL7jbqOhwvjOH3ZWs!9i)6l@camsZuoPit|uNxNI0^D+a>zg4A%0BFAuK>KCa8~N9& zQZUEB38LiLao&nZRE83f9kO+ehlKs_A~3{AAQqCR)P<`SFwGcl=jc z-hYv1GD?1W*FrY-^&8e#hJBrEri5QQ=q0*M)L*KoMjcIn99%x;62r+b#D^P>ifC_- z80FEe$&R55XjsToNvgdq|_3PT-&tZPlfYTWnA5F zN{bR3cqw#jbUVZX1f{HE-#H(&J{Kqw$L+(g`56v@lLq z*~m1%&{bQ+qSZP)nWRMp;K}?z@Uz-6BPelVM7$$`{${iOd(4P$;0J*21BidpvS>6B z{LtT;GQ{TJ49))xsYx1_tDDb}BV#-+m6y=fXi8W;yETkgApW9qK?XD+b-_|7cb@c_apP_5jw=E!iGtTHTX!^m6lqBD+3ECU23493Nw% z?@c;xX*COT3%W7-bMPfp>N&?7ov60k4(3r>wg@b5NKn&PIo3yil}yw zL&NU){;LpDLw@}oq?!YfYUVGc_#Z;kzeS1<{$k#l^y-@J3HLsw)JrzQPqNt_{C`1j zS1Nx8Jy}VV^uG)A{$y-Wf)j{1$4hjZK{1274B(P}rNVK5(hmNCDjfNz5No8T^G$-Q z8<`-SU0fXlPhtNB4Q})+4Nm-u$iJk)$>-vZ(at=a$~=togDK@)&*$^0eN)u6j=bMP zI#c@jlZ6*MP}|bx+HrDneSSHlp}izm=*7qSMNd-;3h`rj4aUu%O%l7-92gUVx>QtD zuROP9{bKv^I4e3+&|D9@q{i^5vN7sm)QVh$^&0}%_XSxi}ux%c*A=Lr5M|8DLz@aG)|qBl9?#Y{0ZHlvSd&9cH`0~9IdG9_PM zn39%a6kTsZmlbB#k8Mt;Nj{cUD1JSHrf`zC;dL8>hpVkB9bv)~x(j4ZfBCzbPxO2~dF+134L~I2{bi z0b?O~T{Bmnzrx$Px$t6k(#ua&E!Z)N0QzLO=z_?cg~euPgQ1aR`a{YYmu0GIJ)#M`}r&Ym-%0i2Yn;2D_XMw`ie*unuRjg_(Q5zUT3zu ztrhxkSynvrjYYKLSsFBRl7ceVMJZ>JZVHZzQ;G3i)y}>KuX%53SN{B7THSbu5@A8O zbAPpUKZ7}9{PS#6iW+RJBx%*xZ9_XZdbzL2qKz#KJ;m?kXDyYuqJzvMb!pmn>Ph&q zJ05c9n!i6J5R2M0P@cmMzZ literal 0 HcmV?d00001 diff --git a/Unity.Entities/SourceGenerators/Source~/Infrastructure/Microsoft.CodeAnalysis.CSharp.pdb b/Unity.Entities/SourceGenerators/Source~/Infrastructure/Microsoft.CodeAnalysis.CSharp.pdb new file mode 100644 index 0000000000000000000000000000000000000000..e26d1244ecbaf959a114ed0e311e9e56047c0a16 GIT binary patch literal 2206548 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

UbSy@h4v7J=VnygF#p-;K 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Ã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

y-t64_booLyr=b_cW?2D<-P7ed24VL7oS+( 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