Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to wgpu 0.16 #308

Merged
merged 11 commits into from
Apr 28, 2023
Merged

Update to wgpu 0.16 #308

merged 11 commits into from
Apr 28, 2023

Conversation

kevzettler
Copy link
Contributor

addresses #27

@kevzettler
Copy link
Contributor Author

Getting a failure when I try to run my project against this ambient build:

[2023-04-14T02:54:40Z INFO  ambient_network::server] Connecting to proxy server
[2023-04-14T02:54:40Z ERROR wgpu::backend::direct] Handling wgpu errors as fatal by default
thread 'main' panicked at 'wgpu error: Validation Error

Caused by:
    In Device::create_shader_module
      note: label = `collect`

Shader 'collect' parsing error: expected global item ('struct', 'const', 'var', 'type', ';', 'fn') or the end of the file, found 'let'
  ┌─ wgsl:4:1
  │
4 │ let PI: f32 = 3.1415927;
  │ ^^^ expected global item ('struct', 'const', 'var', 'type', ';', 'fn') or the end of the file


    expected global item ('struct', 'const', 'var', 'type', ';', 'fn') or the end of the file, found 'let'

', /Users/kevzettler/.cargo/registry/src/github.com-1ecc6299db9ec823/wgpu-0.15.1/src/backend/direct.rs:3024:5
stack backtrace:
   0:        0x10451ebb0 - std::backtrace_rs::backtrace::libunwind::trace::hf9c5171f212b04e2
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/../../backtrace/src/backtrace/libunwind.rs:93:5
   1:        0x10451ebb0 - std::backtrace_rs::backtrace::trace_unsynchronized::h179003f6ec753118
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:        0x10451ebb0 - std::sys_common::backtrace::_print_fmt::h92d38f701cf42b17
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys_common/backtrace.rs:65:5
   3:        0x10451ebb0 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hb33e6e8152f78c95
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys_common/backtrace.rs:44:22
   4:        0x10453d424 - core::fmt::write::hd33da007f7a27e39
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/core/src/fmt/mod.rs:1208:17
   5:        0x1045186b4 - std::io::Write::write_fmt::h7edc10723862001e
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/io/mod.rs:1682:15
   6:        0x10451e9c4 - std::sys_common::backtrace::_print::h5e00f05f436af01f
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys_common/backtrace.rs:47:5
   7:        0x10451e9c4 - std::sys_common::backtrace::print::h895ee35b3f17b334
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys_common/backtrace.rs:34:9
   8:        0x1045202d4 - std::panicking::default_hook::{{closure}}::h3b7ee083edc2ea3e
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:267:22
   9:        0x10452002c - std::panicking::default_hook::h4e7c2c28eba716f5
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:286:9
  10:        0x1045208f8 - std::panicking::rust_panic_with_hook::h1672176227032c45
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:688:13
  11:        0x104520718 - std::panicking::begin_panic_handler::{{closure}}::h0b2d072f9624d32e
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:579:13
  12:        0x10451f018 - std::sys_common::backtrace::__rust_end_short_backtrace::he9abda779115b93c
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/sys_common/backtrace.rs:137:18
  13:        0x104520474 - rust_begin_unwind
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:575:5
  14:        0x104668ee4 - core::panicking::panic_fmt::h23ae44661fec0889
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/core/src/panicking.rs:64:14
  15:        0x10436c34c - core::ops::function::Fn::call::hcf4cc58820ffc9ff
  16:        0x104371ef4 - wgpu::backend::direct::Context::handle_error::hc8fb7fa40876ed82
  17:        0x10437530c - <wgpu::backend::direct::Context as wgpu::context::Context>::device_create_shader_module::ha40b4b95ddecf3aa
  18:        0x10437fee8 - <T as wgpu::context::DynContext>::device_create_shader_module::h5e88704abec52aaa
  19:        0x1043acde4 - wgpu::Device::create_shader_module::h612550accd4e4354
  20:        0x103b02234 - ambient_gpu::shader_module::Shader::new::h7f39a8fad72456f2
  21:        0x103ab0d70 - ambient_renderer::collect::RendererCollect::new::h15d8471a408870e5
  22:        0x103a902cc - <ambient_renderer::renderer::RendererResourcesKey as ambient_asset_cache::SyncAssetKey<ambient_renderer::renderer::RendererResources>>::load::h8041c661e03bf98c
  23:        0x103ac5d98 - ambient_asset_cache::AssetCache::get_sync::h3f72b98d359b1591
  24:        0x103a9062c - ambient_renderer::renderer::Renderer::new::haec1d2530fdfad6a
  25:        0x1037ed960 - ambient_app::renderers::ExamplesRender::new::h20c64d5c0234be4d
  26:        0x1023a7990 - ambient_app::AppBuilder::build::{{closure}}::h4a8835e912a35e71
  27:        0x1023d7788 - tokio::runtime::park::CachedParkThread::block_on::hd76caf47e1724d7e
  28:        0x102112e30 - tokio::runtime::runtime::Runtime::block_on::h4d567e45fb7ca851
  29:        0x10222b290 - ambient::main::h7418a37aad211a2c
  30:        0x102097784 - std::sys_common::backtrace::__rust_begin_short_backtrace::h1d539524a38b1283
  31:        0x1022d3e9c - std::rt::lang_start::{{closure}}::h3d8df7b89561f540
  32:        0x10451235c - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &F>::call_once::ha1c2447b9b665e13
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/core/src/ops/function.rs:606:13
  33:        0x10451235c - std::panicking::try::do_call::ha57d6d1e9532dc1f
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:483:40
  34:        0x10451235c - std::panicking::try::hca0526f287961ecd
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:447:19
  35:        0x10451235c - std::panic::catch_unwind::hdcaa7fa896e0496a
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panic.rs:137:14
  36:        0x10451235c - std::rt::lang_start_internal::{{closure}}::h142ec071d3766871
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/rt.rs:148:48
  37:        0x10451235c - std::panicking::try::do_call::h95f5e55d6f048978
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:483:40
  38:        0x10451235c - std::panicking::try::h0fa00e2f7b4a5c64
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panicking.rs:447:19
  39:        0x10451235c - std::panic::catch_unwind::h1765f149814d4d3e
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/panic.rs:137:14
  40:        0x10451235c - std::rt::lang_start_internal::h00a235e820a7f01c
                               at /rustc/d5a82bbd26e1ad8b7401f6a718a9c57c96905483/library/std/src/rt.rs:148:20
  41:        0x10222c6a4 - _main

can't seem to find where this line:

let PI: f32 = 3.1415927;

is. I saw it in some shader files in my projects /tmp directory. I removed them but the error is still happening. I'm assuming this is form a shader. It needs to be const instead of let Anyone know where the source is on this?

@philpax
Copy link
Contributor

philpax commented Apr 14, 2023

Thanks!

Looks like it's https://github.com/kevzettler/Ambient/blob/a033f677d8bb0802836ec4072f745132c39f159a/crates/renderer/src/lib.rs#L220-L224

As a heads-up, as mentioned in #168, we can't update to wgpu 0.15 until this PR ends up in a release: gfx-rs/wgpu#3657 - we could potentially use a Git dependency until then. @ten3roberts would that work?

@ten3roberts
Copy link
Contributor

We could use a git dependency, through cargo patching.

Perhaps we should hold off just a little while longer as it seems they are still working out how to solve the Arced resources.

Good that they also fixed the usage of a depth buffer without a stencil bit, which is an issue we've encountered and worked around

@ten3roberts
Copy link
Contributor

Thanks for the PR

@kevzettler
Copy link
Contributor Author

closing as duplicate in favor of #168

@kevzettler kevzettler closed this Apr 14, 2023
@philpax
Copy link
Contributor

philpax commented Apr 14, 2023

#168 is out of date right now (we've made some pretty significant changes to the renderer to get it on the web), so I wouldn't close this just yet

@kevzettler kevzettler reopened this Apr 14, 2023
@kevzettler
Copy link
Contributor Author

kevzettler commented Apr 14, 2023

Ok I have reopened and added a commit to update the shader let statements. I can now build my game and some examples successfully against this branch

@philpax
Copy link
Contributor

philpax commented Apr 17, 2023

Awesome, thanks. Can you try fixing the Linux build? Once that works, @ten3roberts can try using a Git version of wgpu and hopefully we won't run into any issues on the web, and this PR can be merged.

@kevzettler
Copy link
Contributor Author

ok cargo nextest run --workspace passing for me locally.

@kevzettler
Copy link
Contributor Author

Seems this upgrade has revealed some issues in some of the shaders. Going to take another pass and correct them.

@kevzettler
Copy link
Contributor Author

Ok I went through and updated shaders that were having compatibility issues. I tested most of the examples with the main ambient executable and the executable from this branch and things are looking consistent.

@ten3roberts
Copy link
Contributor

Unfortunately it is not working on the web.
Screenshot 2023-04-18 at 15 01 57

This also occurs with a small example project, and is mentioned in gfx-rs/wgpu#3430

Using git does not work either as they have other breaking changes such as a quite reworked TextureFormat api, and those commits are from before the WasmAbi fix.

Unfortunately

@philpax
Copy link
Contributor

philpax commented Apr 18, 2023

How hard would it be to accommodate the breaking changes? I imagine we'll have to do that anyway for wgpu 0.16 or what have you

@ten3roberts
Copy link
Contributor

I updated a small example project, and it wasn't too many changes. However, it does clear the screen with a clear color, but nothing is rendered, while rendering with storage buffers worked on 0.14, haven't looked into exactly why it happens.

Other than that I am not sure how many more breaking changes are planned for 0.16, or when they are planning on releasing it.

Ambient does currently work on 0.14, and I fear that using the trunk will cause us to have to keep up even more when they break and unbreak things, rather than once for a stable release.

So I am not currently sure how to go about it

@kevzettler
Copy link
Contributor Author

kevzettler commented Apr 19, 2023

@ten3roberts fyi the wgpu team has closed out gfx-rs/wgpu#3430 and one of the commiters has commented that it is resolved: gfx-rs/wgpu#3430 (comment)

But I guess you're saying there are additional issues? Are you proposing we wait until a later version of wgpu?

I agree with @philpax I feel this is unfortunate upgrade work that will eventually need to be done anyway so if we can get close with a stable Ambient with working wpu git version pin might be a win.

I'm happy to help investigate if you point me to a WiP branch

@philpax
Copy link
Contributor

philpax commented Apr 26, 2023

Heads-up - wgpu 0.16 is now out. Would it be possible to update this PR? That should make it possible to merge afaict 🙏

@kevzettler
Copy link
Contributor Author

working on an update now

fix braking changes
@kevzettler kevzettler changed the title Update to wgpu 0.15 Update to wgpu 0.16 Apr 27, 2023
@philpax
Copy link
Contributor

philpax commented Apr 27, 2023

Awesome, thank you 🙏

@kevzettler
Copy link
Contributor Author

Ok 2089caa brings it up todate with 0.16.0 My test project looks good and I checked a bunch of the critical examples they look good. The github build is passing green.

I think this is unrelated. When I run cargo nextest run --workspace locally I get the following errors from api_macros:

   Compiling ambient_api_macros v0.2.0-rc2 (/Users/kevzettler/code/Ambient/guest/rust/api_core/api_macros)
   Compiling wit-bindgen v0.4.0
error[E0277]: the trait bound `(Option<_>, std::string::String): AsRef<std::path::Path>` is not satisfied
   --> api_core/api_macros/src/main_macro.rs:104:29
    |
104 |             main_impl(body, (None, AMBIENT_TOML.to_owned()))
    |             ---------       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `AsRef<std::path::Path>` is not implemented for `(Option<_>, std::string::String)`
    |             |
    |             required by a bound introduced by this call
    |
note: required by a bound in `main_impl`
   --> api_core/api_macros/src/main_macro.rs:5:56
    |
5   | pub fn main_impl(item: TokenStream, ambient_toml: impl AsRef<Path>) -> anyhow::Result<TokenStream> {
    |                                                        ^^^^^^^^^^^ required by this bound in `main_impl`

error[E0277]: the trait bound `(Option<_>, std::string::String): AsRef<std::path::Path>` is not satisfied
   --> api_core/api_macros/src/main_macro.rs:136:29
    |
136 |             main_impl(body, (None, AMBIENT_TOML.to_owned()))
    |             ---------       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `AsRef<std::path::Path>` is not implemented for `(Option<_>, std::string::String)`
    |             |
    |             required by a bound introduced by this call
    |
note: required by a bound in `main_impl`
   --> api_core/api_macros/src/main_macro.rs:5:56
    |
5   | pub fn main_impl(item: TokenStream, ambient_toml: impl AsRef<Path>) -> anyhow::Result<TokenStream> {
    |                                                        ^^^^^^^^^^^ required by this bound in `main_impl`

@FredrikNoren
Copy link
Contributor

@kevzettler Yeah I'll fix that

@FredrikNoren
Copy link
Contributor

@ten3roberts Any reason to not merge this now?

@philpax
Copy link
Contributor

philpax commented Apr 28, 2023

I've dealt with the merge and looked through cargo cf example check-all. Web support's up to @ten3roberts .

crates/gpu/src/texture.rs Show resolved Hide resolved
@ten3roberts
Copy link
Contributor

It now works on the web, so LGTM

@philpax
Copy link
Contributor

philpax commented Apr 28, 2023

Alrighty, all good from my end. Thanks so much for this, @kevzettler! Much appreciated 🚀

@philpax philpax merged commit 85f45d3 into AmbientRun:main Apr 28, 2023
philpax added a commit that referenced this pull request May 23, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants