bevyengine / bevy

A refreshingly simple data-driven game engine built in Rust
https://bevyengine.org
Apache License 2.0
33.57k stars 3.26k forks source link

Crash in write_indirect_parameters_buffer on start of application #13175

Open arcashka opened 2 months ago

arcashka commented 2 months ago

Bevy version

https://github.com/bevyengine/bevy/commit/16531fb3e3c3ff58e3e41b598ae14d960f71a0d0 regression after #12889

AdapterInfo

`AdapterInfo { name: "Intel(R) Graphics (ADL GT2)", vendor: 32902, device: 17958, device_type: IntegratedGpu, driver: "Intel open-source Mesa driver", driver_info: "Mesa 23.2.1-1ubuntu3.1", backend: 
Vulkan }`

Minimal example

[package]
name = "issue2"
version = "0.1.0"
edition = "2021"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
bevy = { path = "../bevy", default-features = false, features = [
    "bevy_core_pipeline",
    "x11",
] }
use bevy::prelude::*;

fn main() {
    App::new()
        .add_plugins(DefaultPlugins)
        .add_systems(Startup, setup)
        .run();
}

fn setup(mut commands: Commands) {
    commands.spawn(Camera2dBundle::default());
}

What went wrong

❯ cargo run
   Compiling issue2 v0.1.0 (/home/arcashka/Documents/projects/other/issue2)
    Finished dev [unoptimized + debuginfo] target(s) in 5.83s
     Running `target/debug/issue2`
2024-05-02T09:16:43.445626Z  INFO bevy_winit::system: Creating new window "App" (Entity { index: 0, generation: 1 })
2024-05-02T09:16:43.446019Z  INFO winit::platform_impl::platform::x11::window: Guessed window scale factor: 1    
2024-05-02T09:16:43.519581Z  INFO bevy_render::renderer: AdapterInfo { name: "Intel(R) Graphics (ADL GT2)", vendor: 32902, device: 17958, device_type: IntegratedGpu, driver: "Intel open-source Mesa driver", driver_info: "Mesa 23.2.1-1ubuntu3.1", backend: 
Vulkan }
thread 'main' panicked at /home/arcashka/Documents/projects/other/bevy/crates/bevy_ecs/src/system/system_param.rs:576:17:
Resource requested by bevy_render::batching::gpu_preprocessing::write_indirect_parameters_buffer does not exist: bevy_render::batching::gpu_preprocessing::IndirectParametersBuffer
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Encountered a panic in system `bevy_render::batching::gpu_preprocessing::write_indirect_parameters_buffer`!

Additional information

I can fix it locally with

diff --git a/crates/bevy_pbr/src/render/mesh.rs b/crates/bevy_pbr/src/render/mesh.rs
index fa3cbdee0..5708cf829 100644
--- a/crates/bevy_pbr/src/render/mesh.rs
+++ b/crates/bevy_pbr/src/render/mesh.rs
@@ -217,8 +217,6 @@ impl Plugin for MeshRenderPlugin {
                     );
             };

-            let indirect_parameters_buffer = IndirectParametersBuffer::new();
-
             let render_device = render_app.world().resource::<RenderDevice>();
             if let Some(per_object_buffer_batch_size) =
                 GpuArrayBuffer::<MeshUniform>::batch_size(render_device)
@@ -230,7 +228,6 @@ impl Plugin for MeshRenderPlugin {
             }

             render_app
-                .insert_resource(indirect_parameters_buffer)
                 .init_resource::<MeshPipeline>();
         }

diff --git a/crates/bevy_render/src/batching/gpu_preprocessing.rs b/crates/bevy_render/src/batching/gpu_preprocessing.rs
index bcbcf8b97..c4b2edf29 100644
--- a/crates/bevy_render/src/batching/gpu_preprocessing.rs
+++ b/crates/bevy_render/src/batching/gpu_preprocessing.rs
@@ -48,7 +48,8 @@ impl Plugin for BatchingPlugin {
             return;
         };

-        render_app.init_resource::<GpuPreprocessingSupport>();
+        render_app.init_resource::<GpuPreprocessingSupport>()
+                  .init_resource::<IndirectParametersBuffer>();
     }
 }

But I'm not sure if that's correct and if it's not gonna break something else.

notmd commented 1 month ago

I'm hitting this as well. This should be fixed before 0.14