Vectorize reset_view_visibility (#12797)
# Objective Speed up CPU-side rendering. ## Solution Use `QueryIter::for_each` and `Mut::bypass_change_detection` to minimize the total amount of data being written and allow autovectorization to speed up iteration. ## Performance Tested against the default `many_cubes`, this results in greater than 15x speed up: 281us -> 18.4us.  As `ViewVisibility::HIDDEN` just wraps false, this is likely just degenerating into `memset(0)`s on the tables.
This commit is contained in:
parent
4dadebd9c4
commit
24030d2a0c
@ -357,12 +357,12 @@ fn propagate_recursive(
|
||||
/// Entities that are visible will be marked as such later this frame
|
||||
/// by a [`VisibilitySystems::CheckVisibility`] system.
|
||||
fn reset_view_visibility(mut query: Query<&mut ViewVisibility>) {
|
||||
for mut view_visibility in &mut query {
|
||||
query.iter_mut().for_each(|mut view_visibility| {
|
||||
// NOTE: We do not use `set_if_neq` here, as we don't care about
|
||||
// change detection for view visibility, and adding a branch to every
|
||||
// loop iteration would pessimize performance.
|
||||
*view_visibility = ViewVisibility::HIDDEN;
|
||||
}
|
||||
*view_visibility.bypass_change_detection() = ViewVisibility::HIDDEN;
|
||||
});
|
||||
}
|
||||
|
||||
/// System updating the visibility of entities each frame.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user