From d8b45ca1369875bd066841ecd7f66f2d5b21e79e Mon Sep 17 00:00:00 2001 From: JMS55 <47158642+JMS55@users.noreply.github.com> Date: Tue, 25 Jun 2024 11:17:52 -0700 Subject: [PATCH] Fix MeshletMesh material system ordering (#14016) # Objective - Fixes #13811 (probably, I lost my test code...) ## Solution - Turns out that Queue and PrepareAssets are _not_ ordered. We should probably either rethink our system sets (again), or improve the documentation here. For reference, I've included the current ordering below. - The `prepare_meshlet_meshes_X` systems need to run after `prepare_assets::>`, and have also been moved to QueueMeshes. ```rust schedule.configure_sets( ( ExtractCommands, ManageViews, Queue, PhaseSort, Prepare, Render, Cleanup, ) .chain(), ); schedule.configure_sets((ExtractCommands, PrepareAssets, Prepare).chain()); schedule.configure_sets(QueueMeshes.in_set(Queue).after(prepare_assets::)); schedule.configure_sets( (PrepareResources, PrepareResourcesFlush, PrepareBindGroups) .chain() .in_set(Prepare), ); ``` ## Testing - Ambiguity checker to make sure I don't have ambiguous system ordering --- crates/bevy_pbr/src/material.rs | 18 ++++++++++++------ crates/bevy_pbr/src/prepass/mod.rs | 3 ++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/crates/bevy_pbr/src/material.rs b/crates/bevy_pbr/src/material.rs index 0deef73a9c..a9c7895781 100644 --- a/crates/bevy_pbr/src/material.rs +++ b/crates/bevy_pbr/src/material.rs @@ -282,12 +282,18 @@ where #[cfg(feature = "meshlet")] render_app.add_systems( Render, - ( - prepare_material_meshlet_meshes_main_opaque_pass::, - queue_material_meshlet_meshes::, - ) - .chain() - .in_set(RenderSet::Queue) + queue_material_meshlet_meshes:: + .in_set(RenderSet::QueueMeshes) + .run_if(resource_exists::), + ); + + #[cfg(feature = "meshlet")] + render_app.add_systems( + Render, + prepare_material_meshlet_meshes_main_opaque_pass:: + .in_set(RenderSet::QueueMeshes) + .after(prepare_assets::>) + .before(queue_material_meshlet_meshes::) .run_if(resource_exists::), ); } diff --git a/crates/bevy_pbr/src/prepass/mod.rs b/crates/bevy_pbr/src/prepass/mod.rs index 56ee5a86ef..9189830e74 100644 --- a/crates/bevy_pbr/src/prepass/mod.rs +++ b/crates/bevy_pbr/src/prepass/mod.rs @@ -184,7 +184,8 @@ where render_app.add_systems( Render, prepare_material_meshlet_meshes_prepass:: - .in_set(RenderSet::Queue) + .in_set(RenderSet::QueueMeshes) + .after(prepare_assets::>) .before(queue_material_meshlet_meshes::) .run_if(resource_exists::), );