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.
1019: Match upstream API changes for IndexFormat r=kvark a=kejor
**Connections**
#978
**Description**
Match upstream API changes for IndexFormat.
- `index_format` from `VertexStateDescriptor` is now a `Option`
- `RenderCommand::SetIndexBuffer` now has a `index_format` attribute
- The index format for execution is now set when matched both `RenderCommand::SetPipeline` and `RenderCommand::SetIndexBuffer`.
**Testing**
Tested with the examples of e5f82a2197
---
Should I implement this?0855ad9b97/spec/index.bs (L3703)
Co-authored-by: kejor <kevinoviedorueda@gmail.com>
1057: Move to gfx master r=cwfitzgerald a=kvark
**Connections**
Fixes#1027
**Description**
Switches us to gfx dependency on github.
Note: there is problem with libc dependency - https://github.com/timothee-haudebourg/khronos-egl/issues/7 - that would need to be resolved before we get this version of the code into either Gecko or Servo.
**Testing**
Ran wgpu-rs examples
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1056: Replace gfx-descriptor by gpu-descriptor r=cwfitzgerald a=kvark
**Connections**
Unblocks #1027
cc @zakarumych
**Description**
Removes the last link we had between us and gfx-rs.
**Testing**
Tested on wgpu-rs
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1047: Update bind group layout API to match upstream r=cwfitzgerald a=kvark
**Connections**
Follows https://github.com/gpuweb/gpuweb/pull/1076, https://github.com/gpuweb/gpuweb/pull/1223 (https://github.com/gpuweb/gpuweb/issues/1164), https://github.com/gpuweb/gpuweb/pull/1255, and https://github.com/gpuweb/gpuweb/pull/1256
**Description**
Aligns our API closer to the latest changes in WebGPU upstream. We technically don't have to do this, but I believe in the end it would be best if our API gets close to upstream.
Note: this is a sensitive change for the users, everybody will get their code broken. So please take a look at the API and see if something is missing or needs improvement, so that we don't have to go through the changes again afterwards.
**Testing**
Doesn't really need testing. Partially covered by the existing playtest.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1054: Flush write_texture staging memory r=kvark a=kvark
**Connections**
Fixes part of https://github.com/gfx-rs/wgpu-rs/issues/648
**Description**
Adds the missing flush to the staging buffer in `write_texture`
**Testing**
Untested
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1051: Register init-destination buffer in the pending writes r=kvark a=kvark
**Connections**
Fixes#1049
**Description**
At some recent point we introduced the map of destination buffers for copies, and I missed the case where buffers are mapped at creation.
**Testing**
Tested on the test-case in #1049
Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
1050: player: use the wgpu-cores's gfx-select macro r=kvark a=kvark
**Connections**
Looks like I broke the player in #1034, surprised we didn't notice, and that `cargo test` still passed. The problem was having the `Empty` backend for the device.
**Description**
Fixes the `device` backend in the player, switches the backend set to be `PRIMARY`, and re-uses the `wgc::gfx-select`.
**Testing**
Replaying a trace from #1049
Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
1048: Make VertexFormat::size a const fn r=kvark a=Imberflur
**Connections**
Addresses #836
**Description**
The `vertex_attr_array!` macro uses this function. This change enables the macro to be used in `const` contexts and for instance allows returning a `VertexBufferDescriptor` constructed in function without having the difficulties of ensuring the array from `vertex_attr_array!` lives long enough.
**Testing**
I don't believe testing is needed for this.
<!--
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>
1041: Update gpu-alloc and naga with linear allocation fixes r=kvark a=kvark
**Connections**
Fixes#1038
**Description**
Includes b807b5fb41
**Testing**
Tested on the API trace
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1034: Fearless object creation r=kvark a=kvark
**Connections**
Fixes#977Fixes#1032
**Description**
Requiring a separate `xxx_error()` is very convenient for `wgpu-core`, but getting repetitive and complicated for all the users of the API. This PR changes it so we return an object ID unconditionally, and sometimes it's an error. The actual error is passed on the side.
**Testing**
Tested on https://github.com/gfx-rs/wgpu-rs/pull/633
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>