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>
1080: Fix the validation of vertex buffer sizes r=kvark a=JCapucho
**Connections**
None that i know of
**Description**
~~The vertex buffer size (in vertices) was being divided by stride causing the limit to be lower than it was supposed to be.~~
This bug wasn't triggered earlier because if the stride was 0 it wouldn't perform any calculation and the stride was only set when a set pipeline command was received and the `VertexState` `inputs` were already created so the following commands would work:
```
SetPipeline with 1 vertex buffer
SetVertexBuffer with only 4 vertices
Draw 6 vertices
```
This would have passed validation while this wouldn't
```
SetPipeline with 1 vertex buffer of stride 8
SetVertexBuffer with 4 vertices
SetPipeline with 1 vertex buffer of stride 8
SetVertexBuffer with 4 vertices
Draw 3 vertices
```
Now all draw calls have proper vertex validation and not only after the `inputs` are populated
**Testing**
This change was tested after debugging an issue with the draw calls failing in a specific order in [veloren](https://gitlab.com/veloren/veloren/-/tree/imbris/wgpu-master-rebased)
Co-authored-by: Capucho <jcapucho7@gmail.com>
1078: Switch paytests to WGSL r=grovesNL a=kvark
**Connections**
Closes#1073
Updates naga to "gfx-4" tag.
Updates gfx to https://github.com/gfx-rs/gfx/pull/3518
**Description**
This is the first use of WGSL in our codebase! Much nicer to have WGSL for tests than keeping GLSL+SPV pairs.
Interestingly, the tests go through Naga without ever touching SPIR-V now, unless running on Vulkan.
**Testing**
Tests itself - this change applies to testing infra.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1074: Implement ETC2 and ASTC textures r=kvark a=cwfitzgerald
**Connections**
Closes#1070. Makes progress towards #1069.
**Description**
This PR has multiple functions:
- Adds ETC and ASTC compressed textures behind features.
- Adds three helper functions on `Extent3d` that help in calculating mip sizes: `at_mip_level`, `max_mips`, and `physical_size`.
- Refactors various conversions into a public `TextureFormat::describe` function. I have used a decl macro to ease in the declaration and modifcation of an otherwise horribly verbose function.
I have tried to use clever multi-select based data copying to reduce the possibility for errors, but there's a _lot_ of data moving around here.
**Testing**
Upcoming wgpu-rs pr adding wider compressed texture support to the skybox example. Helper functions were tested with doctests.
Marked as draft until I can get the wgpu-rs pr done and prove it works, it is, however, ready for review.
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
1076: Fix player warnings r=kvark a=kvark
```
warning: unused `std::result::Result` that must be used
--> player/src/bin/play.rs:142:29
|
142 | ... gfx_select!(device => global.device_create_swap_chain(device, surface, &desc));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: `#[warn(unused_must_use)]` on by default
= note: this `Result` may be an `Err` variant, which should be handled
= note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
warning: unused `std::result::Result` that must be used
--> player/src/bin/play.rs:147:29
|
147 | ... gfx_select!(device => global.swap_chain_present(id));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this `Result` may be an `Err` variant, which should be handled
= note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
warning: unused `std::result::Result` that must be used
--> player/src/bin/play.rs:173:21
|
173 | gfx_select!(device => global.device_poll(device, true));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: this `Result` may be an `Err` variant, which should be handled
= note: this warning originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
warning: 3 warnings emitted
```
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1071: Add pervasive Naga support to shader module loading r=cwfitzgerald a=kvark
**Connections**
Depends on https://github.com/gfx-rs/naga/pull/299 and https://github.com/gfx-rs/gfx/pull/3503Closes#1072
**Description**
The purpose of the PR is to support Naga modules everywhere.
As a requirement, it updates the gfx-rs version used.
Most of the logic is dedicated towards building a shader interface,
where previously we just used naga's IR. Now we have our own mini-IR.
**Testing**
Tested in https://github.com/gfx-rs/wgpu-rs/pull/663 (without the experimental feature).
Enabling the experimental feature doesn't work even on the play test that we have - https://github.com/gfx-rs/naga/issues/300
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
The purpose of the PR is to support Naga modules everywhere.
As a requirement, it updates the gfx-rs version used.
Most of the logic is dedicated towards building a shader interface,
where previously we just used naga's IR. Now we have our own mini-IR.