![]() # 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)  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).  `queue_shadows` seems to be ever so slightly slower (1.6% more time spent) in the system.  `batch_and_prepare_render_phase` seems to be a mix, but overall seems to be slightly *faster* by about 5%.  |
||
---|---|---|
.. | ||
deferred | ||
light_probe | ||
lightmap | ||
prepass | ||
render | ||
ssao | ||
alpha.rs | ||
bundle.rs | ||
extended_material.rs | ||
fog.rs | ||
lib.rs | ||
light.rs | ||
material.rs | ||
parallax.rs | ||
pbr_material.rs | ||
wireframe.rs |