Skip to content

Commit 1936844

Browse files
fix ambiguities in render schedule (#7725)
# Objective - ambiguities bad ## Solution - solve ambiguities - by either ignoring (e.g. on `queue_mesh_view_bind_groups` since `LightMeta` access is different) - by introducing a dependency (`prepare_windows -> prepare_*` because the latter use the fallback Msaa) - make `prepare_assets` public so that we can do a proper `.after`
1 parent 5ea5ec7 commit 1936844

File tree

7 files changed

+29
-10
lines changed

7 files changed

+29
-10
lines changed

crates/bevy_core_pipeline/src/core_3d/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ impl Plugin for Core3dPlugin {
6868
.init_resource::<DrawFunctions<AlphaMask3d>>()
6969
.init_resource::<DrawFunctions<Transparent3d>>()
7070
.add_system_to_schedule(ExtractSchedule, extract_core_3d_camera_phases)
71-
.add_system(prepare_core_3d_depth_textures.in_set(RenderSet::Prepare))
71+
.add_system(
72+
prepare_core_3d_depth_textures
73+
.in_set(RenderSet::Prepare)
74+
.after(bevy_render::view::prepare_windows),
75+
)
7276
.add_system(sort_phase_system::<Opaque3d>.in_set(RenderSet::PhaseSort))
7377
.add_system(sort_phase_system::<AlphaMask3d>.in_set(RenderSet::PhaseSort))
7478
.add_system(sort_phase_system::<Transparent3d>.in_set(RenderSet::PhaseSort));

crates/bevy_pbr/src/prepass/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,11 @@ where
9898

9999
render_app
100100
.add_system_to_schedule(ExtractSchedule, extract_camera_prepass_phase)
101-
.add_system(prepare_prepass_textures.in_set(RenderSet::Prepare))
101+
.add_system(
102+
prepare_prepass_textures
103+
.in_set(RenderSet::Prepare)
104+
.after(bevy_render::view::prepare_windows),
105+
)
102106
.add_system(queue_prepass_view_bind_group::<M>.in_set(RenderSet::Queue))
103107
.add_system(queue_prepass_material_meshes::<M>.in_set(RenderSet::Queue))
104108
.add_system(sort_phase_system::<Opaque3dPrepass>.in_set(RenderSet::PhaseSort))

crates/bevy_pbr/src/render/mesh.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use crate::{
2-
environment_map, EnvironmentMapLight, FogMeta, GlobalLightMeta, GpuFog, GpuLights,
3-
GpuPointLights, LightMeta, NotShadowCaster, NotShadowReceiver, ShadowPipeline,
4-
ViewClusterBindings, ViewFogUniformOffset, ViewLightsUniformOffset, ViewShadowBindings,
5-
CLUSTERED_FORWARD_STORAGE_BUFFER_COUNT, MAX_CASCADES_PER_LIGHT, MAX_DIRECTIONAL_LIGHTS,
2+
environment_map, queue_shadow_view_bind_group, EnvironmentMapLight, FogMeta, GlobalLightMeta,
3+
GpuFog, GpuLights, GpuPointLights, LightMeta, NotShadowCaster, NotShadowReceiver,
4+
ShadowPipeline, ViewClusterBindings, ViewFogUniformOffset, ViewLightsUniformOffset,
5+
ViewShadowBindings, CLUSTERED_FORWARD_STORAGE_BUFFER_COUNT, MAX_CASCADES_PER_LIGHT,
6+
MAX_DIRECTIONAL_LIGHTS,
67
};
78
use bevy_app::Plugin;
89
use bevy_asset::{load_internal_asset, Assets, Handle, HandleUntyped};
@@ -110,7 +111,11 @@ impl Plugin for MeshRenderPlugin {
110111
.add_systems_to_schedule(ExtractSchedule, (extract_meshes, extract_skinned_meshes))
111112
.add_system(prepare_skinned_meshes.in_set(RenderSet::Prepare))
112113
.add_system(queue_mesh_bind_group.in_set(RenderSet::Queue))
113-
.add_system(queue_mesh_view_bind_groups.in_set(RenderSet::Queue));
114+
.add_system(
115+
queue_mesh_view_bind_groups
116+
.in_set(RenderSet::Queue)
117+
.ambiguous_with(queue_shadow_view_bind_group), // queue_mesh_view_bind_groups does not read `shadow_view_bind_group`
118+
);
114119
}
115120
}
116121
}

crates/bevy_render/src/render_asset.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ impl<A: RenderAsset> Default for PrepareNextFrameAssets<A> {
176176

177177
/// This system prepares all assets of the corresponding [`RenderAsset`] type
178178
/// which where extracted this frame for the GPU.
179-
fn prepare_assets<R: RenderAsset>(
179+
pub fn prepare_assets<R: RenderAsset>(
180180
mut extracted_assets: ResMut<ExtractedAssets<R>>,
181181
mut render_assets: ResMut<RenderAssets<R>>,
182182
mut prepare_next_frame: ResMut<PrepareNextFrameAssets<R>>,

crates/bevy_render/src/view/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ impl Plugin for ViewPlugin {
5656
.add_system(
5757
prepare_view_targets
5858
.after(WindowSystem::Prepare)
59-
.in_set(RenderSet::Prepare),
59+
.in_set(RenderSet::Prepare)
60+
.after(crate::render_asset::prepare_assets::<Image>),
6061
);
6162
}
6263
}

crates/bevy_render/src/view/window.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@ pub fn prepare_windows(
234234
// This is an ugly hack to work around drivers that don't support MSAA.
235235
// This should be removed once https://github.com/bevyengine/bevy/issues/7194 lands and we're doing proper
236236
// feature detection for MSAA.
237+
// When removed, we can also remove the `.after(prepare_windows)` of `prepare_core_3d_depth_textures` and `prepare_prepass_textures`
237238
let sample_flags = render_adapter
238239
.get_texture_format_features(surface_configuration.format)
239240
.flags;

crates/bevy_sprite/src/lib.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,11 @@ impl Plugin for SpritePlugin {
7777
extract_sprite_events,
7878
),
7979
)
80-
.add_system(queue_sprites.in_set(RenderSet::Queue));
80+
.add_system(
81+
queue_sprites
82+
.in_set(RenderSet::Queue)
83+
.ambiguous_with(queue_material2d_meshes::<ColorMaterial>),
84+
);
8185
};
8286
}
8387
}

0 commit comments

Comments
 (0)