Validation panic when loading a shader that accesses lighting data
As rust-gpu doesn't support access specifiers for storage buffers, bevy panics with the following error when trying to load a shader that accesses its lighting data:
ERROR wgpu::backend::direct: Handling wgpu errors as fatal by default
thread 'main' panicked at 'wgpu error: Validation Error
Caused by:
In Device::create_render_pipeline
note: label = `rust_gpu_pbr_opaque_mesh_pipeline`
error matching FRAGMENT shader requirements against the pipeline
shader global ResourceBinding { group: 0, binding: 6 } is not available in the layout pipeline layout
storage class Storage { access: LOAD } doesn't match the shader Uniform
', /home/josh/.cargo/registry/src/github.com-1ecc6299db9ec823/wgpu-0.14.2/src/backend/direct.rs:2403:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
This can be worked around by forcibly disabling storage buffers via WgpuSettings (which is default behaviour in the current BevyRustGpuPlugin), but precludes their usage entirely, which is not ideal given that read / write storage buffers are viable.
Upstream tracking issue: rust-gpu/#689
In theory it would also be possible to remedy this on the bevy side, but that doesn't seem appropriate given that their lighting system is read-only as per GPU usage idioms. Patching in a read-write option for the sake of making a third-party crate's workaround viable isn't a great reason to do it.
This is in the process of being fixed upstream (https://github.com/EmbarkStudios/rust-gpu/pull/1009) and has been tested as working with bevy-rust-gpu / bevy-pbr-rust.
This is in the process of being fixed upstream
Sorry, that PR is not for the non-writable branch you tested, which I just opened the PR for:
- https://github.com/EmbarkStudios/rust-gpu/pull/1011