Join all threads before returning from the test case, to ensure that
we don't return from `main` until all open `Device`s have been
dropped.
This avoids a race condition in glibc in which a thread calling
`dlclose` can unmap a shared library's code even while the main thread
is still running its finalization functions. (See #5084 for details.)
Joining all threads before returning from the test ensures that the
Vulkan loader has finished `dlclose`-ing the Vulkan validation layer
shared library before `main` returns.
Remove `skip` for this test on GL/llvmpipe. With this change, that has
not been observed to crash. Without it, the test crashes within ten
runs or so.
Fixes#5084.
Fixed#4285.
* Convert Tests to Use Async Poll
* Update examples/src/repeated_compute/mod.rs
Co-authored-by: Andreas Reich <r_andreas2@web.de>
---------
Co-authored-by: Andreas Reich <r_andreas2@web.de>
* hello_compute: check for missing command-line args
Fixes off-by-one error when checking for missing arguments.
Before this, running the example gave this scary looking error message:
```
$ cargo run --bin wgpu-examples hello_compute
Finished dev [unoptimized + debuginfo] target(s) in 0.13s
Running `target/debug/wgpu-examples hello_compute`
[2023-12-27T22:14:26Z ERROR wgpu::backend::direct] Handling wgpu errors as fatal by default
thread 'main' panicked at 'wgpu error: Validation Error
Caused by:
In Device::create_bind_group
Buffer binding size 0 is less than minimum 4
note: buffer = `Storage Buffer`
', wgpu/src/backend/direct.rs:3139:5
```
As this was the first example I tried to run, it almost scared me
away, thinking it was a driver issue.
Instead, without arguments the example should use defaults.
* Add PR #4939 to changelog as instructed
* Fix indentation in main examples readme file
* Update examples readme files
* Update hello_compute example readme and fix example not running with new command
* Fix srgb_blend example not working correctly and set readme accordingly
* Downgrade resource lifetime management log level to trace.
Allow promoting it back to info via an feature flag.
* Don't filter out info and warning log in the examples.
* Changelog entry.
* Add the base of the example. May need refining and definitely fact-checking.
* Start change to changelog.
* Complete changelog change for repeated-compute.
* Apply suggestion to fix typos.
Co-authored-by: Alphyr <47725341+a1phyr@users.noreply.github.com>
* Add storage-texture example which currently works native but needs to be changed to work for wasm. [no ci]
* repeated-compute now works on the web. [no ci]
* `storage-texture` now works on the web as well as native.
* Format because I forgot to do that (ugh).
* Add `storage-texture` to changelog.
* Add `render-to-texture` example.
* Not all the files got git added. Fixed it.
* Add `render-to-texture` to changelog.
* Make better readme's and add examples to said readme's.
* Oops. Put the example updates in the wrong place.
* Add `uniform-values` example.
* Apply clippy suggestions.
* Improved readme's and documentation.
* Fmt. Turning into the Joker rn.
* Make instructions for examples on the web more clear. \(Fmt and clippy happy\)
* hello-workgroups It doesn't work.
* Add basic comments and readme to hello-workgroups.
* Add hello-synchronization example. Currently doesn't have any tests but those should be added later.
* Forgot to check wasm compatibility for hello-synchronization. Fixed it.
* Add test for hello-synchronization.
* Make my examples downlevel defaults.
* Make uniform-values downlevel defaults. (Forgot to do that last commit.)
* Fix clippy doc complaints.
* Didn't fully fix the docs last commit. Got it here I think.
* Fix redundant bullet point in examples/hello-workgroups/README.md.
* Trim down the introduction section of examples/hello-workgroups/README.md.
* Add technical links section to examples/hello-workgroups/README.md.
* Use idiomatic Rust comments, break up big text wall into paragraphs, and fix some spelling errors.
* Move output image functions into examples/common and give output_image_wasm some upgrades.
* Modify changelog for moving output_image_native and output_image_wasm into wgpu-example.
* Fix output_image_wasm. (Formerly did not handle pre-existing output image targets.)
* Make a multiline comment be made of single lines to be more ideomatic.
* "Fix" more multiline comments. I think this is actually the last of them.
* Make the window a consistant, square size that's convenient for viewing.
* Make the window on uniform-values not endlessly poll, taking up 100% of the main thread in background at idle. Also, change layout a little and make native use nanos by default for logging.
* Make execute in hello-synchronization return a struct of vecs instead of using out parameters.
* Didn't realize the naming of wgpu_example::framework so I moved my common example utility functions into wgpu_example::utils.
* Add add_web_nothing_to_see_msg function to replace all the instances of adding "open the console" messages across the examples.
* Add small documentation to add_web_nothing_to_see_msg and change it to use h1 instead of p.
* Add documentation to output_image_native and output_image_wasm in examples/common.
* Do better logging for output image functions in wgpu-example::utils.
* Remove redundant append_child'ing of the output image element in wgpu-example::utils::output_image_wasm.
* Fix error regarding log message for having written the image in wgpu-example::utils::output_image_native.
* Fmt.
* In examples/README.md, re-arrange the examples in the graph to be in alphabetical order.
* Fix changlog item regarding wgpu-example::utils and the output image functions.
* Move all the added examples into one changelog item that lists all of them.
* Updated table in examples/README.md with new examples. Added new features to the table to accurately represent the examples.\n\nFor the new features, not all old examples may be fully represented.
* Fix inaccurate comment in hello-workgroups/src/shader.wgsl.
* Update examples/README.md to include basic descriptions of the basic examples as well as hints on how examples build off of each other.
* Remove `capture` example. See changelog entry for reasoning.
* Fix typo in hello-workgroups/shader.wgsl
* Change the method of vertex generation in the shader code of render-to-texture to make it more clear.
* Modify/correct message in repeated-compute/main.rs regarding the output staging buffer.
* Update message in uniform-values/main.rs about writing the app state struct to the input WGSL buffer.
* Add notice in repeated-compute/main.rs about why async channels are necessary (portability to WASM).
* Revise comment in uniform-values/main.rs about why we don't cast the struct using POD to be more clear.
* Change uniform-values to use encase for translating AppState to WGSL bytes.
* Cargo & Clippy: My two best friends.
* Add MIT-0 to the list of allowed liscences.
* Fix docs for wasm.
---------
Co-authored-by: Alphyr <47725341+a1phyr@users.noreply.github.com>
Implements timer queries via write_timestamp on Metal for encoders (whenever timer queries are available) and passes (for Intel/AMD GPUs, where we should advertise TIMESTAMP_QUERY_INSIDE_PASSES now).
Due to some bugs in Metal this was a lot harder than expected. I believe the solution is close to optimal with the current restrictions in place. For details see code comments.