bevyengine / bevy

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

Several examples appear broken following recent changes #15570

Closed alice-i-cecile closed 1 month ago

alice-i-cecile commented 1 month ago

The example runs shows several example regressions, per @rparrett on Discord.

Retained rendering world #15320 or various required components changes are both plausible.

This is in addition to #15563.

ChristopherBiscardi commented 1 month ago

I think deferred_rendering is broken too

2024-10-01T19:43:15.414646Z  INFO bevy_diagnostic::system_information_diagnostics_plugin::internal: SystemInfo { os: "Windows 11 Pro", kernel: "22631", cpu: "AMD Ryzen 9 7950X 16-Core Processor", core_count: "16", memory: "63.2 GiB" }
HookApp::findGameWindow, injectWindow: 0000000000000000
HookApp::findGameWindow, graphicsWindow: 0000000000000000
OverlayConnector::onMessage,overlay.init
2024-10-01T19:43:16.256784Z  INFO bevy_render::renderer: AdapterInfo { name: "NVIDIA GeForce RTX 2080 Ti", vendor: 4318, device: 7687, device_type: DiscreteGpu, driver: "NVIDIA", driver_info: "560.94", backend: Vulkan }
2024-10-01T19:43:16.750808Z  INFO bevy_winit::system: Creating new window "App" (0v1#4294967296)
HookApp::deferHook,
HookApp::findGameWindow, injectWindow: 0000000000000000
HookApp::findGameWindow, graphicsWindow: 0000000000480DA8
2024-10-01T19:43:16.862308Z  INFO bevy_input::gamepad: Gamepad 44v1#4294967340 connected.
2024-10-01T19:43:17.191075Z  WARN bevy_pbr::render::mesh_view_bindings: Too many textures in mesh pipeline view layout, this might cause us to hit `wgpu::Limits::max_sampled_textures_per_shader_stage` in some environments.
HookApp::deferHook,
2024-10-01T19:43:18.219489Z ERROR wgpu_core::device::global: Device::create_render_pipeline error: Error matching ShaderStages(FRAGMENT) shader requirements against the pipeline
2024-10-01T19:43:18.219683Z ERROR wgpu::backend::wgpu_core: Handling wgpu errors as fatal by default
thread 'Async Compute Task Pool (3)' panicked at C:\Users\chris\.cargo\registry\src\index.crates.io-6f17d22bba15001f\wgpu-22.1.0\src\backend\wgpu_core.rs:3411:5:
wgpu error: Validation Error

Caused by:
  In Device::create_render_pipeline, label = 'deferred_lighting_pipeline'
    Error matching ShaderStages(FRAGMENT) shader requirements against the pipeline
      Shader global ResourceBinding { group: 0, binding: 22 } is not available in the pipeline layout
        View dimension D3 (is array: false) doesn't match the binding Sampler(Filtering)

note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
Encountered a panic in system `bevy_render::render_resource::pipeline_cache::PipelineCache::process_pipeline_queue_system`!
thread '<unnamed>' panicked at C:\Users\chris\tmp\bevy\crates\bevy_render\src\render_resource\pipeline_cache.rs:580:28:
index out of bounds: the len is 0 but the index is 14
Encountered a panic in system `bevy_render::renderer::render_system`!
DGriffin91 commented 1 month ago

@ChristopherBiscardi Agreed: https://github.com/bevyengine/bevy/issues/15525

JMS55 commented 1 month ago

Meshlet example/rendering is also broken :(

mockersf commented 1 month ago

3d in wasm/webgpu is also broken since https://github.com/bevyengine/bevy/pull/13497

1 error(s) generated while compiling the shader:
:704:25 error: no matching call to textureSampleLevel(texture_depth_2d_array, sampler, vec2<f32>, i32, f32)

14 candidate functions:
  textureSampleLevel(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, level: L) -> f32  where: A is i32 or u32, L is i32 or u32
  textureSampleLevel(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, level: f32) -> vec4<f32>  where: A is i32 or u32
  textureSampleLevel(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, level: L, offset: vec2<i32>) -> f32  where: A is i32 or u32, L is i32 or u32
  textureSampleLevel(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, level: f32) -> vec4<f32>  where: A is i32 or u32
  textureSampleLevel(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: L, offset: vec2<i32>) -> f32  where: L is i32 or u32
  textureSampleLevel(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: A, level: L) -> f32  where: A is i32 or u32, L is i32 or u32
  textureSampleLevel(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, level: f32, offset: vec2<i32>) -> vec4<f32>  where: A is i32 or u32
  textureSampleLevel(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: L) -> f32  where: L is i32 or u32
  textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32, offset: vec2<i32>) -> vec4<f32>
  textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32) -> vec4<f32>
  textureSampleLevel(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>, level: L) -> f32  where: L is i32 or u32
  textureSampleLevel(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: f32, offset: vec3<i32>) -> vec4<f32>
  textureSampleLevel(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32>
  textureSampleLevel(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32>

    let sampled_depth = textureSampleLevel(directional_shadow_texturesX_naga_oil_mod_XMJSXM6K7OBRHEOR2NVSXG2C7OZUWK527MJUW4ZDJNZTXGX, directional_shadow_textures_linear_samplerX_naga_oil_mod_XMJSXM6K7OBRHEOR2NVSXG2C7OZUWK527MJUW4ZDJNZTXGX, light_local_3, array_index_3, 0f);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

it's also broken in wasm/webgl2 for another reason:

wgpu error: Validation Error

Caused by:
  In Device::create_bind_group, label = 'mesh_view_bind_group'
    Buffer binding 8 range 20480 exceeds `max_*_buffer_binding_size` limit 16384
kristoff3r commented 1 month ago

3d in wasm/webgpu is also broken since #13497

1 error(s) generated while compiling the shader:
:704:25 error: no matching call to textureSampleLevel(texture_depth_2d_array, sampler, vec2<f32>, i32, f32)

14 candidate functions:
  textureSampleLevel(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, level: L) -> f32  where: A is i32 or u32, L is i32 or u32
  textureSampleLevel(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, level: f32) -> vec4<f32>  where: A is i32 or u32
  textureSampleLevel(texture: texture_depth_2d_array, sampler: sampler, coords: vec2<f32>, array_index: A, level: L, offset: vec2<i32>) -> f32  where: A is i32 or u32, L is i32 or u32
  textureSampleLevel(texture: texture_cube_array<f32>, sampler: sampler, coords: vec3<f32>, array_index: A, level: f32) -> vec4<f32>  where: A is i32 or u32
  textureSampleLevel(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: L, offset: vec2<i32>) -> f32  where: L is i32 or u32
  textureSampleLevel(texture: texture_depth_cube_array, sampler: sampler, coords: vec3<f32>, array_index: A, level: L) -> f32  where: A is i32 or u32, L is i32 or u32
  textureSampleLevel(texture: texture_2d_array<f32>, sampler: sampler, coords: vec2<f32>, array_index: A, level: f32, offset: vec2<i32>) -> vec4<f32>  where: A is i32 or u32
  textureSampleLevel(texture: texture_depth_2d, sampler: sampler, coords: vec2<f32>, level: L) -> f32  where: L is i32 or u32
  textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32, offset: vec2<i32>) -> vec4<f32>
  textureSampleLevel(texture: texture_2d<f32>, sampler: sampler, coords: vec2<f32>, level: f32) -> vec4<f32>
  textureSampleLevel(texture: texture_depth_cube, sampler: sampler, coords: vec3<f32>, level: L) -> f32  where: L is i32 or u32
  textureSampleLevel(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: f32, offset: vec3<i32>) -> vec4<f32>
  textureSampleLevel(texture: texture_3d<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32>
  textureSampleLevel(texture: texture_cube<f32>, sampler: sampler, coords: vec3<f32>, level: f32) -> vec4<f32>

    let sampled_depth = textureSampleLevel(directional_shadow_texturesX_naga_oil_mod_XMJSXM6K7OBRHEOR2NVSXG2C7OZUWK527MJUW4ZDJNZTXGX, directional_shadow_textures_linear_samplerX_naga_oil_mod_XMJSXM6K7OBRHEOR2NVSXG2C7OZUWK527MJUW4ZDJNZTXGX, light_local_3, array_index_3, 0f);
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

it's also broken in wasm/webgl2 for another reason:

wgpu error: Validation Error

Caused by:
  In Device::create_bind_group, label = 'mesh_view_bind_group'
    Buffer binding 8 range 20480 exceeds `max_*_buffer_binding_size` limit 16384

Which example is this? I tried a couple of the 3d examples but they all worked on wasm/webgl2 for me.

mockersf commented 1 month ago

Which example is this? I tried a couple of the 3d examples but they all worked on wasm/webgl2 for me.

examples pbr and 3d_scene. after testing on more browsers, it crashes in Safari and Chromium, but works in Firefox after freezing for a few seconds

kristoff3r commented 1 month ago

Which example is this? I tried a couple of the 3d examples but they all worked on wasm/webgl2 for me.

examples pbr and 3d_scene. after testing on more browsers, it crashes in Safari and Chromium, but works in Firefox after freezing for a few seconds

Ah, I was testing in firefox. I didn't expect it to be browser-specific, fun.

kristoff3r commented 1 month ago

Which example is this? I tried a couple of the 3d examples but they all worked on wasm/webgl2 for me.

examples pbr and 3d_scene. after testing on more browsers, it crashes in Safari and Chromium, but works in Firefox after freezing for a few seconds

Both of those work for me with webgl2 on firefox and chromium on Linux. I hope it's not OSX specific =/

mockersf commented 1 month ago

from https://docs.rs/wgpu/latest/wgpu/struct.Limits.html#method.downlevel_webgl2_defaults, I guess max_*_buffer_binding_size is max_uniform_buffer_binding_size which should be limited to 16KiB on WebGL2. It's not mandatory for browser to respect it, but it's the standard... and we're requesting more

akimakinai commented 1 month ago

transmission example is also broken. Looks like bloom depended on the old behavior where it would stop being extracted depending on Camera value. In transmission example, pressing H key (which toggles Camera.hdr) crashes it.

wgpu error: Validation Error

Caused by:
  In RenderPass::end
    In a set_pipeline command
      Render pipeline targets are incompatible with render pass
        Incompatible color attachments at indices [0]: the RenderPass uses textures with formats [Some(Rgba8UnormSrgb)] but the RenderPipeline with 'bloom_upsampling_pipeline' label uses attachments with formats [Some(Rgba16Float)]
akimakinai commented 1 month ago

Currently ExtractComponents plugin does nothing if extract_component returns None. Shouldn't components be removed in that case? For example in addition to bloom, ChromaticAberration starts to return None from its extract_component if intensity becomes zero, which is I think not synchronoized currently.

Edit: Uh, this does not work if some components in ExtractComponent::Out bundle are shared across ExtractComponent impls?

rparrett commented 1 month ago

auto_exposure also seems completely broken. (tested macos, win/4080). separate issue created: #15824

ssao as well, bisected to #15320. run and press 151515 and observe nothing changing.

cart commented 1 month ago

All of the examples in the original message work for me (I just checked them off in the message). I've tested all of the other examples mentioned and they either (1) work for me or (2) have a separate tracking issue.

I'm closing this out. If you identify a case that is still broken, please open a new issue scoped to it.

rparrett commented 1 month ago

Opened #15997 and #15998. They may be platform specific if you weren't able to reproduce.