1125: Fix UB in populating dynamic offsets r=kvark a=kvark
**Connections**
Related to the traces in #1123
**Description**
The dynamic offsets arrays appear to be empty in the traces, which makes no sense. We are populating them unconditionally, and I double-checked on the `shadow` example that the traces we record contain the offsets. So my only guess is that the reported traces are taken from a release build, and our code that does `slice::from_raw_parts()` on the offsets is UB because the pointer can be garbage (if length is 0). This is what the PR fixes.
**Testing**
Untested
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
1124: Fix range tracker merging r=kvark a=kvark
**Connections**
Fixes#1123
**Description**
The merge routine was not properly updating the end pointer in some branches.
**Testing**
A unit test is added with the data extracted from the user case.
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
1121: Implement render bundle freeing r=straightforward a=kvark
**Connections**
Fixes#1120
**Description**
Since render bundles were added the relevant bits of logic to free them were just missing.
**Testing**
Untested
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1119: Lock device tracker after the resources r=kvark a=kvark
**Connections**
Fixes #1118
**Description**
Added a comment above `struct Device` explaining the problem and constraints.
We may have a few other cases that need to be handled gracefully by the type system.
For this fix we at least ensure that the device tracker is always locked temporarily.
**Testing**
Untested.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1115: Request buffer FAST_DEVICE_ACCESS only with some non MAP or COPY usage r=kvark a=fintelia
**Connections**
Fixes#1113
**Description**
On Linux AMD (and likely elsewhere) buffers with FAST_DEVICE_ACCESS are very slow to access when mapped. This makes sure that upload/download buffers don't request it unless those buffers are leveraging MAPPABLE_PRIMARY_BUFFERS for some non-map/copy usage.
**Testing**
I reran the failing reproduction case in the linked issue.
Co-authored-by: Jonathan Behrens <fintelia@gmail.com>
1117: Free associated staging buffers r=cwfitzgerald a=kvark
**Connections**
Reported on the Matrix. Having a loop that creates mapped buffers and drops them results in OOM.
**Description**
We are now checking for the map state when destroying buffers.
**Testing**
Ran through an ad-hoc example.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1114: Fixed error message for BindingTypeMaxCountError r=cwfitzgerald a=Wumpf
Previously, `BindingTypeMaxCountError` would incorrectly report the binding count as the violated limit. Now it reports both the limit and the count that violated it.
Example error message before:
```
wgpu error: Validation Error
Caused by:
In Device::create_bind_group_layout
note: label = `BindGroupLayout write scalar`
too many bindings of type StorageTextures in stage COMPUTE, limit is 5
```
Example error message after:
```
wgpu error: Validation Error
Caused by:
In Device::create_bind_group_layout
note: label = `BindGroupLayout write scalar`
too many bindings of type StorageTextures in stage COMPUTE, limit is 4, count was 5
```
Co-authored-by: Andreas Reich <r_andreas2@web.de>
1106: Encode render passes while command buffer is only read-locked r=cwfitzgerald a=kvark
**Connections**
Could fix#1104 to some extent
**Description**
The heaviest part of the render pass encoding doesn't need a write lock. Only in the end we need it.
**Testing**
Untested.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1107: Use `repr(transparent)` for shader flags r=cwfitzgerald a=grovesNL
**Connections**
None
**Description**
This allows cbindgen to generate bindings for shader flags in wgpu-native.
**Testing**
After `WGPUShaderFlags` is exposed in wgpu-native, bindings for `WGPUShaderFlags` will be generated in wgpu.h
Co-authored-by: Joshua Groves <josh@joshgroves.com>
1103: Fix Assorted Low-Hanging Validation and Error Message Issues r=kvark a=cwfitzgerald
**Connections**
Closes#1085Closes#393Closes#1053
**Description**
These commits are independent and should be reviewed individually. Combined into a single PR to reduce noise.
Overview of what was done:
- Add validation for empty texture and buffer usage flags. (#393)
- Add allowed texture usage flags to `format.describe()` (#1085)
Validate new textures follow the allowed usage flags.
- Properly validates vertex and buffers are bound. (#1053)
Improves error messages when no vertex buffer is bound. (Before it said the limit was 0, now it says something is unbound)
- Improve the vertex buffer overrun messages by keeping track of which slot has the smallest index.
**Testing**
Tested on examples by artificially creating the situation I am trying to validate, as well as running clean examples to make sure they pass validation.
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
1100: Validate swapchain extent as non-zero r=kvark a=cwfitzgerald
**Connections**
Fixes#1026.
**Description**
Zero area swapchains are UB under vulkan, and should be verboten.
**Testing**
Not tested
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
1099: Pass DEPTH_CLAMPING feature request to gfx-hal r=cwfitzgerald a=Imberflur
**Connections**
Fixes#1087
**Description**
The request for the depth clamping feature was not being passed down to `gfx-hal`. This led to a warning from the vulkan backend when attempting to use this feature.
**Testing**
ran `wgpu-rs` shadow example and the warning no longer appears
<!--
Non-trivial functional changes would need to be tested through:
- [wgpu-rs](https://github.com/gfx-rs/wgpu-rs) - test the examples.
- [wgpu-native](https://github.com/gfx-rs/wgpu-native/) - check the generated C header for sanity.
Ideally, a PR needs to link to the draft PRs in these projects with relevant modifications.
See https://github.com/gfx-rs/wgpu/pull/666 for an example.
If you can add a unit/integration test here in `wgpu`, that would be best.
-->
Co-authored-by: Imbris <imbrisf@gmail.com>
1098: Move AdapterInfo into wgt r=grovesNL a=kvark
**Connections**
Fixes#1095
**Description**
This is just nicer code, and we'll be able to make `get_info` available on Web targets.
**Testing**
Untested
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1096: Fix build for wasm32 target r=kvark a=VincentFTS
**Connections**
#115
**Description**
Fix Wgpu build for Wasm target
**Testing**
It’s just a first step toward wasm support in Wgpu-rs, a PR in Wgpu-rs will come later.
Co-authored-by: Vincent Jousse <contact@ftsoftware.fr>
1097: Fix bad copy/paste in #907 r=grovesNL a=VincentFTS
**Connections**
#907
**Description**
Fix a copy/paste from dx11 code.
Co-authored-by: Vincent Jousse <contact@ftsoftware.fr>
1093: Update naga and gfx, move the shader validation into a shader descriptor bit r=cwfitzgerald a=kvark
**Connections**
Includes https://github.com/gfx-rs/gfx/pull/3533 and a bunch of Naga things.
**Description**
Updates Naga with the new WGSL syntax, lots of fixes.
Large update of the GL backend.
**Testing**
Tested on some wgpu-rs examples.
Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
1092: Optimize submit() for no command buffers r=kvark a=kvark
**Connections**
Just a few bits I found when tinkering with API traces.
**Description**
No need to lock the world if there are no command buffers.
**Testing**
tested on API traces
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1090: Clean up render pass labels r=kvark a=kvark
**Connections**
Follow-up to #1088 to fix https://github.com/gfx-rs/wgpu/issues/1089#issuecomment-745596393
**Description**
Render passes are recorded into their own command buffers under the hood, and I forgot to properly reset the labels on them.
**Testing**
Untested
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1088: Fix and improve object labels and command markers r=cwfitzgerald a=kvark
**Connections**
Fixes a part of #1089
**Description**
PR contains a bunch of small but important things:
- reset the command buffer label after submission
- add labels to compute and pass descriptors
- actually push/pop markers for the scope of render bundle, compute passes
- set the label to render pass command buffers
- set labels on pipelines
**Testing**
Not tested much
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1086: Add SHADER_READ usage bit to non-readonly buffers r=kvark a=infinitesnow
Change-Id: I99d189e7ef295a58c2179635f95656eb9a2f5fe6
**Connections**
Fixes#949
**Description**
Non-readonly buffers are created with the STORAGE_WRITE usage flag, but that implies SHADER_READ too.
Co-authored-by: Emanuele Dalla Longa <3xplosive.g@gmail.com>
1077: Remove extern "C" from set_index_buffer r=kvark a=DevOrc
**Connections**
Fixes an issue that is blocking gfx-rs/wgpu-native#61
**Description**
Moves the ffi definition of wgpu_render_bundle_set_index_buffer / wgpu_render_pass_set_index_buffer to wgpu-native. This is needed because wgpu-native has its own version of IndexFormat that is different than the wgpu_types version.
**Testing**
My projects with wgpu-native work
Co-authored-by: Noah Charlton <ncharlton002@gmail.com>