Commit Graph

1484 Commits

Author SHA1 Message Date
Dzmitry Malyshau
c230988caa
Add repr(C) on copy views 2020-10-21 16:39:27 -04:00
Marvin Löbel
752c1aad33 Elide redundant set_pipeline calls.
Add a small abstraction over state changes

Deduplicate redundant pipeline state checking
2020-10-21 19:25:21 +02:00
qthree
c3a5144ae0 Fix regression in device_create_swap_chain
It was caused by new behavior of Storage::remove.
2020-10-20 13:33:03 +07:00
Dzmitry Malyshau
8ce2530b69 Save an allocation of raw bindings in create_bind_group 2020-10-15 16:37:10 -04:00
bors[bot]
7ecd9b477f
Merge #990
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>
2020-10-15 20:19:20 +00:00
Dzmitry Malyshau
a4e8d58144 Update gfx-backend-vulkan to 0.6.4 2020-10-15 16:03:30 -04:00
Dzmitry Malyshau
6d40a81833 Revert "Fix coalescing of descriptor sets"
This reverts commit 56df63b122.
2020-10-15 15:53:26 -04:00
Dzmitry Malyshau
8a364d3c69 Revert "Group binding writes by wgt::BindingType"
This reverts commit 98c3de7884.
2020-10-15 15:52:58 -04:00
bors[bot]
3c801eeafa
Merge #987
987: Align stencil reference flags between pipeline creation and setting r=cwfitzgerald a=kvark

Sibling of #986 for master

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2020-10-14 21:05:56 +00:00
Dzmitry Malyshau
150ee25c01 Align stencil reference flags between pipeline creation and setting 2020-10-14 16:54:15 -04:00
bors[bot]
3be2c452c4
Merge #982
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>
2020-10-13 22:45:14 +00:00
bors[bot]
0f16fb096f
Merge #984
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>
2020-10-13 22:38:58 +00:00
Dzmitry Malyshau
ecbf81f4c9 Fix locking of device lifetime tracker on resource drop 2020-10-13 18:37:20 -04:00
James Gilles
05c58e805b Fix garbled debug markers in render passes 2020-10-13 17:34:25 -04:00
bors[bot]
7ac706f0a9
Merge #980
980: Group binding writes by wgt::BindingType r=cwfitzgerald a=kvark

**Connections**
Follows up https://github.com/gfx-rs/wgpu/pull/970
Fixes #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>
2020-10-13 20:18:37 +00:00
Dzmitry Malyshau
98c3de7884 Group binding writes by wgt::BindingType 2020-10-13 16:06:50 -04:00
bors[bot]
c933b9766a
Merge #973
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>
2020-10-12 14:52:57 +00:00
frbimo
fdd561e69e remove PowerPreference::Default
Signed-off-by: frbimo <fr.bimo@gmail.com>
2020-10-12 19:17:44 +08:00
bors[bot]
44a41dc9a4
Merge #970
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>
2020-10-12 02:48:18 +00:00
Dzmitry Malyshau
56df63b122 Fix coalescing of descriptor sets 2020-10-11 22:47:41 -04:00
bors[bot]
f963193be1
Merge #966
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>
2020-10-11 17:10:42 +00:00
Dzmitry Malyshau
c87a94f976 Early texture destruction 2020-10-08 23:21:11 -04:00
PENGUINLIONG
6f4508523a
Pass [u8] instead of [u32] for push constants (#918)
* 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
2020-10-08 23:13:18 -04:00
bors[bot]
7377552828
Merge #968
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>
2020-10-09 03:06:30 +00:00
Dzmitry Malyshau
c4c8e3b224 Early buffer destruction logic 2020-10-08 22:28:52 -04:00
Noah Charlton
5ff6b11daf CI playtests for Dx12, Vulkan 2020-10-08 17:17:16 -04:00
Dzmitry Malyshau
0a7d81351c Handle cases where buffer contents are destroyed 2020-10-08 12:57:17 -04:00
bors[bot]
8059c03273
Merge #962
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>
2020-10-07 20:15:25 +00:00
Dzmitry Malyshau
50594a747d Another small Naga update 2020-10-07 16:14:25 -04:00
Dzmitry Malyshau
0070bf703c Coalesce bindings into a single write 2020-10-07 16:14:25 -04:00
Dzmitry Malyshau
962e4dbaf7 Defer bind group creation to after validation 2020-10-07 16:14:25 -04:00
bors[bot]
aee0bead78
Merge #963
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>
2020-10-06 17:37:45 +00:00
Dzmitry Malyshau
dc2d581c8d Add repr(C) on mapping structs 2020-10-06 13:36:17 -04:00
bors[bot]
b6e1170163
Merge #959
959: Only request features that are needed r=cwfitzgerald a=kvark

Core part of #958 for master

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-10-05 23:13:33 +00:00
Dzmitry Malyshau
45ade807cc Only request features that are needed 2020-10-05 14:51:32 -04:00
bors[bot]
1bac63c654
Merge #957
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>
2020-10-05 18:40:45 +00:00
Dzmitry Malyshau
0a67d6a7be Enable RBA feature where available 2020-10-05 10:21:39 -04:00
bors[bot]
bcb3162b2b
Merge #947
947: Update naga with the new usage validation r=cwfitzgerald a=kvark

**Connections**
Includes https://github.com/gfx-rs/naga/pull/200, https://github.com/gfx-rs/naga/pull/203, https://github.com/gfx-rs/naga/pull/214, and others

**Description**
We get more comprehensive validation, which can sometimes be annoying :)

**Testing**
Tested on wgpu-rs examples.

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-10-01 16:05:42 +00:00
Dzmitry Malyshau
c18ac58fd8 Update naga with the new usage validation 2020-09-28 10:18:35 -04:00
bors[bot]
97d1a7eeb9
Merge #942
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>
2020-09-28 13:05:36 +00:00
lberrymage
41228ef1a4
Fix clippy warnings about using if-let over match
The specific lint triggered was
https://rust-lang.github.io/rust-clippy/master/index.html#single_match.
2020-09-25 23:02:51 -08:00
bors[bot]
49cf466dc4
Merge #941
941: Use self where possible r=kvark a=adamnemecek



Co-authored-by: Adam Nemecek <adamnemecek@gmail.com>
2020-09-26 03:13:22 +00:00
Adam Nemecek
db1870e7fc use self 2020-09-25 19:11:46 -07:00
bors[bot]
645c121dda
Merge #940
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>
2020-09-25 13:28:58 +00:00
Leon Scherer
1fecbe18ed Fixed typo in texture size check 2020-09-25 14:21:38 +02:00
bors[bot]
a56f9949ec
Merge #938
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>
2020-09-24 13:18:04 +00:00
bors[bot]
cc169af549
Merge #935
935: Properly implement compute pass usage scopes r=cwfitzgerald a=kvark

**Connections**
Fixes #934 
Closes #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>
2020-09-23 23:09:06 +00:00
Dzmitry Malyshau
0345c56758 Properly implement compute pass usage scopes 2020-09-23 19:01:47 -04:00
Connor Fitzgerald
a9750f83bc Remove erroneous extra feature check 2020-09-23 18:13:54 -04:00
bors[bot]
e72724a6e3
Merge #936
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>
2020-09-22 20:28:29 +00:00