990: Simplify descriptor writes r=cwfitzgerald a=kvark
**Connections**
Reverts #980 and #970
Takes advantage of https://github.com/gfx-rs/gfx/pull/3410
**Description**
Weighting all the pros and cons, I figured it's easier to adjust the Vulkan backend a little than treating it as a lowest common denominator for this issue.
**Testing**
Tested on wgpu-rs examples (on Vulkan).
Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
982: Fix debug markers in render passes (#981) r=kvark a=kazimuth
Hey, that was easy. Didn't change anything in the debug groups markers / command pass markers, since afaict they work correctly.
I didn't add a test here because I'm not sure how to use the `player` testing apparatus, but I figure since I'm just adding a line of code that's already there for compute passes ([here](https://github.com/gfx-rs/wgpu/blob/master/wgpu-core/src/command/compute.rs#L452)) it should be alright. Let me know if there's anything else I should add.
Co-authored-by: James Gilles <jameshgilles@gmail.com>
984: Fix locking of device lifetime tracker on resource drop r=kvark a=kvark
**Connections**
Fixes the player hang in #983
**Description**
It turns out the current type-level protection from locking device's lifetime tracker is not working properly. TODO is left.
**Testing**
Tested on the trace from #983
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
980: Group binding writes by wgt::BindingType r=cwfitzgerald a=kvark
**Connections**
Follows up https://github.com/gfx-rs/wgpu/pull/970Fixes#979
**Description**
The problem was that Vulkan restriction applies to its own descriptor types, as specified in the layout. I originally interpret this as types specified in the descriptor set. So we erroneously considered `StorageTexture` and `SampledTexture` to be in the same descriptor write.
This PR makes it use the `wgt::BindingType` instead. It's a bit richer than Vulkan side, but still correct. We are just more conservative than we have to be.
I think gfx-hal API could be better here. Filed https://github.com/gfx-rs/gfx/issues/3408 to look more.
**Testing**
Tested on #979 test case (thanks!)
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
973: remove PowerPreference::Default r=kvark a=frbimo
**Connections**
Issue: #971
**Description**
remove `PowerPreference::Default` and change related value to use `PowerPreference::LowPower` .
`PowerPreference::default()` is remain.
**Testing**
`cargo test` and `cargo build` passed
Co-authored-by: frbimo <fr.bimo@gmail.com>
970: Fix coalescing of descriptor sets r=grovesNL a=kvark
**Connections**
Fixes https://github.com/gfx-rs/wgpu-rs/issues/592
**Description**
I forgot that all the descriptors in a write have to be the same type and visibility. This should be fixed now.
**Testing**
Tested on wgpu-rs examples, see https://github.com/gfx-rs/wgpu-rs/pull/593
Co-authored-by: Dzmitry Malyshau <kvark@fastmail.com>
966: Immediate resource destruction and freeing r=cwfitzgerald a=kvark
**Connections**
Fixes#964
**Description**
We are making it so a buffer or a texture can have their native resources freed while they are still referenced, so without waiting for GC.
In addition, the PR adds a few missing cases where error IDs should have been handled, like at render pass encoding.
**Testing**
Tested on wgpu-rs examples, see https://github.com/gfx-rs/wgpu-rs/pull/591
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
* Pass [u8] instead of [u32] for push constants
Use 2-instruction aligner
Fixed alignment
Fixed offsets
Added alignment checks and fixed size
Use semantic constants
* Replaced all magic number with constant
* Fixed type cast
968: CI playtests for Dx12, Vulkan r=kvark a=DevOrc
**Connections**
#950
**Description**
Implements CI testing for Vulkan and DX12. Also, cargo test stdout will no longer be captured so that people can verify that the playtests actually ran.
Note: If no adapters are found, nothing will run and the tests will pass. This might become a problem if the installation no longer works and no one notices.
**Testing**
Passed CI Tests
Co-authored-by: Noah Charlton <ncharlton002@gmail.com>
962: Refactor and optimize bind group creation r=cwfitzgerald a=kvark
**Connections**
Fixes#960
**Description**
There is a small bag of things all related in here:
1. It detects duplicate bindings in the `BindGroupDescriptor`. Previously, we compared the count, and formed the write array. If the expected bindings were [0, 1], and the given bindings were [0, 0], it would pass, erroneously. Now it properly errors out.
2. It defers the *actual* descriptor set creation to after we iterate the bindings. This means any error would not make use leak descriptors any more.
3. Finally, we form a single descriptor set write instead of having a write per binding. This is much more friendly to gfx-hal, which does the work per write, and should optimize bind group creation a bit.
**Testing**
Tested on wgpu-rs examples - https://github.com/gfx-rs/wgpu-rs/pull/589
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
963: Add repr(C) on mapping structs r=trivial a=kvark
**Connections**
Required for https://phabricator.services.mozilla.com/D92636
**Description**
Allows C clients to avoid redefining those structs.
**Testing**
No need
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
957: Enable RBA feature where available r=grovesNL a=kvark
**Connections**
Related to https://github.com/gpuweb/gpuweb/issues/955
**Description**
Until we have a better plan in place, enabling RBA is the least we can do.
**Testing**
Should work!
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
942: Fix clippy warnings about using if-let over match r=kvark a=lberrymage
The specific lint triggered was [clippy::single_match](https://rust-lang.github.io/rust-clippy/master/index.html#single_match).
**Description**
Details found in the link above
**Testing**
N/A
Co-authored-by: lberrymage <mageelog@gmail.com>
940: Fixed typo in texture size check r=kvark a=Fruup
**Connections**
https://github.com/gfx-rs/wgpu/issues/937
**Description**
The texture's depth was omitted in the check.
**Testing**
No tests needed.
Co-authored-by: Leon Scherer <scherer-leon@web.de>
938: Remove erroneous extra feature check r=kvark a=cwfitzgerald
**Connections**
None, found during investigation of DI issue.
**Description**
This line of code just shows up twice in a row, checking the same feature and setting the same feature.
**Testing**
Untested, but shouldn't affect anything.
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
935: Properly implement compute pass usage scopes r=cwfitzgerald a=kvark
**Connections**
Fixes#934Closes#933
**Description**
The old barriers in a compute pass were totally wrong. They didn't combine usages across the bind groups, or with indirect buffer.
This change implements the *actual* semantics as seen by the spec. At dispatch time we gather the usages across bind groups needed by the active pipeline, possibly add the indirect buffer into the mix, and that combined used is what we transition into.
I think we can find a few interesting ideas on how to make this faster. In particular - how to avoid a separate `TrackerSet` per pass. But for now correctness is more important.
**Testing**
Tested on wgpu-rs examples
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
936: Prevent an invalid texture from being registered in device_create_texture r=kvark a=kunalmohan
**Connections**
_Link to the issues addressed by this PR, or dependent PRs in other repositories_
**Description**
_Describe what problem this is solving, and how it's solved._
Since we checked the usage of a `Feature` in `device_create_texture()` after registering the new `Id`, there could be a case where it returns an error after registering the texture as a valid one, which further panics when the client tries to register it as an `error_id`.
To solve this, the check for the usage of a `Feature` is now done before registering the new `Id`.
**Testing**
_Explain how this change is tested._
Tested with wgpu-rs examples and CTS in Servo.
<!--
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: Kunal Mohan <kunalmohan99@gmail.com>