bevy/crates
James Liu 6d547d7ce6
Allow Mesh-related queue phase systems to parallelize (#11804)
# Objective
Partially addresses #3548. `queue_shadows` and `queue_material_meshes`
cannot parallelize because of the `ResMut<RenderMeshInstances>`
parameter for `queue_material_meshes`.

## Solution
Change the `material_bind_group` field to use atomics instead of needing
full mutable access. Change the `ResMut` to a `Res`, which should allow
both sets of systems to parallelize without issue.

## Performance
Tested against `many_foxes`, this has a significant improvement over the
entire render schedule. (Yellow is this PR, red is main)

![image](https://github.com/bevyengine/bevy/assets/3137680/6cc7f346-4f50-4f12-a383-682a9ce1daf6)

The use of atomics does seem to have a negative effect on
`queue_material_meshes` (roughly a 8.29% increase in time spent in the
system).

![image](https://github.com/bevyengine/bevy/assets/3137680/7907079a-863d-4760-aa5b-df68c006ea36)

`queue_shadows` seems to be ever so slightly slower (1.6% more time
spent) in the system.

![image](https://github.com/bevyengine/bevy/assets/3137680/6d90af73-b922-45e4-bae5-df200e8b9784)

`batch_and_prepare_render_phase` seems to be a mix, but overall seems to
be slightly *faster* by about 5%.

![image](https://github.com/bevyengine/bevy/assets/3137680/fac638ff-8c90-436b-9362-c6209b18957c)
2024-02-20 00:12:41 +00:00
..
bevy_a11y Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_animation Rework animation to be done in two phases. (#11707) 2024-02-19 14:59:54 +00:00
bevy_app Use is method instead of downcast_ref::<T>().is_some() in App::is_plugin_added (#11949) 2024-02-18 22:17:17 +00:00
bevy_asset Qualify embedded_asset expansion with $crate:: (#11961) 2024-02-18 21:52:32 +00:00
bevy_audio Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_core Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_core_pipeline rename Camera3dBundle's 'dither' field to 'deband_dither' to align with Camera2dBundle (#11939) 2024-02-19 14:01:35 +00:00
bevy_derive Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_diagnostic Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_dylib Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_dynamic_plugin Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_ecs Remove APIs deprecated in 0.13 (#11974) 2024-02-19 19:04:47 +00:00
bevy_ecs_compile_fail_tests Remove APIs deprecated in 0.13 (#11974) 2024-02-19 19:04:47 +00:00
bevy_encase_derive Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_gilrs Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_gizmos Add a [lints] entry for workspace members missing it (#11900) 2024-02-19 17:09:47 +00:00
bevy_gltf Gltf loader now shows which file is missing pre baked tangents (#11854) 2024-02-19 16:49:32 +00:00
bevy_hierarchy Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_input also look in just_pressed touches for position (#7743) 2024-02-19 16:44:50 +00:00
bevy_internal Rework animation to be done in two phases. (#11707) 2024-02-19 14:59:54 +00:00
bevy_log Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_macro_utils Update to toml_edit 0.22 (#11973) 2024-02-19 08:11:29 +00:00
bevy_macros_compile_fail_tests Standardize toml format with taplo (#10594) 2023-11-21 01:04:14 +00:00
bevy_math Add single-f32 constructors for a few (very few) primitives (#11934) 2024-02-18 07:43:45 +00:00
bevy_mikktspace Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_pbr Allow Mesh-related queue phase systems to parallelize (#11804) 2024-02-20 00:12:41 +00:00
bevy_ptr Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_reflect Add method for querying whether a given short type path is ambiguous (#11840) 2024-02-19 16:47:11 +00:00
bevy_reflect_compile_fail_tests bevy_reflect_derive: Clean up attribute logic (#11777) 2024-02-12 15:16:27 +00:00
bevy_render Allow Mesh-related queue phase systems to parallelize (#11804) 2024-02-20 00:12:41 +00:00
bevy_scene Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_sprite Implement Debug for SpriteBundle and SpriteSheetBundle (#10506) 2024-02-19 16:38:48 +00:00
bevy_tasks Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_text Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_time Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_transform Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_ui Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00
bevy_utils refactor: Extract parallel queue abstraction (#7348) 2024-02-19 16:31:15 +00:00
bevy_window typo (#11955) 2024-02-18 20:16:15 +00:00
bevy_winit Release 0.13.0 (#11920) 2024-02-17 09:24:25 +00:00