gfx-rs / wgpu-rs

Rust bindings to wgpu native library
https://wgpu.rs
Mozilla Public License 2.0
1.69k stars 186 forks source link

Texture format R8Unorm | R16Float not supported for storage use. #877

Closed jinleili closed 3 years ago

jinleili commented 3 years ago

I'm trying to convert my project's glsl to wgsl on macOS,
the shader works fine when this project uses wgpu-rs v0.5, but now encountered a validation error:

 wgpu error: Validation Error

Caused by:
    In Device::create_compute_pipeline
    error matching global ResourceBinding { group: 0, binding: 5 } against the pipeline layout
    texture format R16Float is not supported for storage use

original glsl shader:

layout(local_size_x = 16, local_size_y = 16) in;
...
layout(binding = 5, r16f) uniform readonly image2D input_pic;
layout(binding = 6, r16f) uniform writeonly image2D output_pic;

void main() {
    ...
}

wgsl shader:

...
[[group(0), binding(5)]] var input_pic: [[access(read)]] texture_storage_2d<r16float>;
[[group(0), binding(6)]] var output_pic: [[access(write)]] texture_storage_2d<r16float>;

[[stage(compute), workgroup_size(16, 16)]]
fn main([[builtin(global_invocation_id)]] GlobalInvocationID: vec3<u32>) {
    ...
}
jinleili commented 3 years ago

stack backtrace:

0:        0x10e180914 - std::backtrace_rs::backtrace::libunwind::trace::ha70d3c0580051b5e
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/../../backtrace/src/backtrace/libunwind.rs:90:5
   1:        0x10e180914 - std::backtrace_rs::backtrace::trace_unsynchronized::h70c3b3ef22cddd13
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:        0x10e180914 - std::sys_common::backtrace::_print_fmt::h698e42c1766250fa
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/sys_common/backtrace.rs:67:5
   3:        0x10e180914 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h18cc31b07c2f1a67
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/sys_common/backtrace.rs:46:22
   4:        0x10e19b74d - core::fmt::write::h24f8349e8e89c9af
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/core/src/fmt/mod.rs:1096:17
   5:        0x10e17d8c6 - std::io::Write::write_fmt::hc54d7d6e95b15753
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/io/mod.rs:1568:15
   6:        0x10e182809 - std::sys_common::backtrace::_print::h07ca439149358748
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/sys_common/backtrace.rs:49:5
   7:        0x10e182809 - std::sys_common::backtrace::print::hb7331bf9c4b208ca
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/sys_common/backtrace.rs:36:9
   8:        0x10e182809 - std::panicking::default_hook::{{closure}}::h11b550d560f5cc66
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:208:50
   9:        0x10e182399 - std::panicking::default_hook::he168e99d1cf91c3c
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:225:9
  10:        0x10e182e8b - std::panicking::rust_panic_with_hook::hf87bfc4afef21ea6
                               at /rustc/2fd73fabe469357a12c2c974c140f67e7cdd76d0/library/std/src/panicking.rs:591:17
  11:        0x10e14ba07 - std::panicking::begin_panic::{{closure}}::hef719ff42dda6c25
                               at /Users/LiJinlei/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:520:9
  12:        0x10e14c728 - std::sys_common::backtrace::__rust_end_short_backtrace::h9422647750b3ca55
                               at /Users/LiJinlei/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/sys_common/backtrace.rs:141:18
  13:        0x10e1b12b7 - std::panicking::begin_panic::h418a56f76e75c937
                               at /Users/LiJinlei/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/library/std/src/panicking.rs:519:12
  14:        0x10dc99738 - wgpu::backend::direct::default_error_handler::h7a1281ba63ba00b4
                               at /Users/LiJinlei/.cargo/git/checkouts/wgpu-rs-40ea39809c03c5d8/1806a5b/src/backend/direct.rs:1942:5
  15:        0x10db7d0b8 - core::ops::function::Fn::call::h33968a9a9fc16f9f
                               at /Users/LiJinlei/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/library/core/src/ops/function.rs:70:5
  16:        0x10db04bed - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::he81000357b1129d0
                               at /Users/LiJinlei/.rustup/toolchains/stable-x86_64-apple-darwin/lib/rustlib/src/rust/library/alloc/src/boxed.rs:1535:9
  17:        0x10dc996a6 - wgpu::backend::direct::ErrorSinkRaw::handle_error::h9f4ac12ca8ade676
                               at /Users/LiJinlei/.cargo/git/checkouts/wgpu-rs-40ea39809c03c5d8/1806a5b/src/backend/direct.rs:1929:9
  18:        0x10dc8e5a6 - wgpu::backend::direct::Context::handle_error::h3457994ab72c1af3
                               at /Users/LiJinlei/.cargo/git/checkouts/wgpu-rs-40ea39809c03c5d8/1806a5b/src/backend/direct.rs:93:9
  19:        0x10dc95be6 - <wgpu::backend::direct::Context as wgpu::Context>::device_create_compute_pipeline::h9c681d97894f136c
                               at /Users/LiJinlei/.cargo/git/checkouts/wgpu-rs-40ea39809c03c5d8/1806a5b/src/backend/direct.rs:1087:13
  20:        0x10dcb1f9e - wgpu::Device::create_compute_pipeline::h8fb20c5539081e40
                               at /Users/LiJinlei/.cargo/git/checkouts/wgpu-rs-40ea39809c03c5d8/1806a5b/src/lib.rs:1592:17
  21:        0x10d39601c - sdf_text_view::compute_node::SDFComputeNode::new::h719407386247301d
                               at /Users/LiJinlei/blog/vulkan/idroid/sdf-text-renderer/src/compute_node.rs:98:27
  22:        0x10d39a278 - sdf_text_view::sdf_text_view::SDFTextView::create_nodes::hbecc67c81d001ad5
                               at /Users/LiJinlei/blog/vulkan/idroid/sdf-text-renderer/src/sdf_text_view.rs:86:13
kvark commented 3 years ago

This is by design. See the table in https://gpuweb.github.io/gpuweb/#plain-color-formats for the baseline capabilities. If you need to opt into native-only non-portable behavior, you can enable TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES feature.