bevy/crates
James Liu a5b1c46d5b Extend EntityLocation with TableId and TableRow (#6681)
# Objective
`Query::get` and other random access methods require looking up `EntityLocation` for every provided entity, then always looking up the `Archetype` to get the table ID and table row. This requires 4 total random fetches from memory: the `Entities` lookup, the `Archetype` lookup, the table row lookup, and the final fetch from table/sparse sets. If `EntityLocation` contains the table ID and table row, only the `Entities` lookup and the final storage fetch are required.

## Solution
Add `TableId` and table row to `EntityLocation`. Ensure it's updated whenever entities are moved around. To ensure `EntityMeta` does not grow bigger, both `TableId` and `ArchetypeId` have been shrunk to u32, and the archetype index and table row are stored as u32s instead of as usizes. This should shrink `EntityMeta` by 4 bytes, from 24 to 20 bytes, as there is no padding anymore due to the change in alignment.

This idea was partially concocted by @BoxyUwU. 

## Performance
This should restore the `Query::get` "gains" lost to #6625 that were introduced in #4800 without being unsound, and also incorporates some of the memory usage reductions seen in #3678.

This also removes the same lookups during add/remove/spawn commands, so there may be a bit of a speedup in commands and `Entity{Ref,Mut}`.

---

## Changelog
Added: `EntityLocation::table_id`
Added: `EntityLocation::table_row`.
Changed: `World`s can now only hold a maximum of 2<sup>32</sup>- 1 archetypes.
Changed: `World`s can now only hold a maximum of 2<sup>32</sup> - 1 tables.

## Migration Guide

A `World` can only hold a maximum of 2<sup>32</sup> - 1 archetypes and tables now. If your use case requires more than this, please file an issue explaining your use case.
2023-01-02 21:25:04 +00:00
..
bevy_animation Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_app #4231: panic when App::run() is called from Plugin::build() (#4241) 2022-12-24 23:43:41 +00:00
bevy_asset Derive clone and debug for AssetPlugin (#6583) 2022-11-14 23:08:26 +00:00
bevy_audio document file formats for bytes field of AudioSource (#6619) 2022-12-11 18:10:02 +00:00
bevy_core Fix reflection for PathBuf and OsString (#6776) 2022-11-27 17:28:06 +00:00
bevy_core_pipeline Extract common RenderPhase code into render method (#7013) 2022-12-27 03:29:59 +00:00
bevy_derive Fix ndk-macro link (#7027) 2022-12-25 05:06:03 +00:00
bevy_diagnostic add system information plugin and update relevant examples (#5911) 2023-01-02 20:49:43 +00:00
bevy_dylib Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_dynamic_plugin Adapt path type of dynamically_load_plugin (#6734) 2022-12-05 23:39:43 +00:00
bevy_ecs Extend EntityLocation with TableId and TableRow (#6681) 2023-01-02 21:25:04 +00:00
bevy_ecs_compile_fail_tests Fix clippy lints and failed test with Rust 1.66 (#6945) 2022-12-15 18:05:15 +00:00
bevy_encase_derive Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_gilrs Bump gilrs version to 0.10 (#6558) 2022-11-15 20:31:17 +00:00
bevy_gltf enum Visibility component (#6320) 2022-12-25 00:39:29 +00:00
bevy_hierarchy don't error when sending HierarchyEvents when Event type not registered (#7031) 2022-12-26 16:39:17 +00:00
bevy_input Avoid triggering change detection for inputs (#6847) 2022-12-11 18:22:09 +00:00
bevy_internal Replace WgpuAdapterInfo with RenderAdapterInfo in the documentation. (#7036) 2022-12-26 19:47:01 +00:00
bevy_log Fix suppression of all console logs when trace_tracy is enabled (#6955) 2022-12-20 23:45:43 +00:00
bevy_macro_utils Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_math Improve code/comments for Ray::intersect_plane and its tests (#6823) 2022-12-05 22:49:06 +00:00
bevy_mikktspace Release 0.9.0 (#6568) 2022-11-12 20:01:29 +00:00
bevy_pbr Shadow render phase - pass the correct view entity (#7048) 2022-12-28 20:07:35 +00:00
bevy_ptr Round out the untyped api s (#7009) 2022-12-27 16:05:16 +00:00
bevy_reflect Add reflection support for VecDeque (#6831) 2022-12-11 18:22:08 +00:00
bevy_reflect_compile_fail_tests bevy_reflect: Add compile fail tests for bevy_reflect (#7041) 2023-01-02 21:07:33 +00:00
bevy_render Update Box vertices comment (#7055) 2022-12-29 23:45:07 +00:00
bevy_scene Cleanup dynamic scene before building (#6254) 2022-12-20 16:16:58 +00:00
bevy_sprite Constify SpritePipelineKey implementation. (#6976) 2022-12-25 00:23:14 +00:00
bevy_tasks Add thread create/destroy callbacks to TaskPool (#6561) 2022-12-20 16:17:02 +00:00
bevy_text Remove TextError::ExceedMaxTextAtlases(usize) variant (#6796) 2022-12-05 23:23:16 +00:00
bevy_time Update old docs from Timer (#6646) 2022-11-18 20:42:33 +00:00
bevy_transform Add a reparented_to method to GlobalTransform (#7020) 2022-12-25 00:51:20 +00:00
bevy_ui Extract common RenderPhase code into render method (#7013) 2022-12-27 03:29:59 +00:00
bevy_utils Document remaining members of bevy_utils (#6897) 2022-12-11 18:46:42 +00:00
bevy_window Derive Reflect + FromReflect for window event types (#6235) 2022-12-09 01:20:44 +00:00
bevy_winit Apply WindowDescriptor settings in all modes (#6934) 2022-12-16 20:14:11 +00:00