Commit Graph

1354 Commits

Author SHA1 Message Date
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
Kunal Mohan
485dab9a52 Prevent an invalid texture from being registered in device_create_texture 2020-09-23 00:30:50 +05:30
bors[bot]
a0cef40550 Merge #928
928: Reverts the addition of LabeledContextError r=kvark a=scoopr

Removed as discussed, moving them to wgpu-rs side


Co-authored-by: Mikko Lehtonen <scoopr@iki.fi>
2020-09-14 20:11:12 +00:00
Mikko Lehtonen
8252758674 Reverts the addition of LabeledContextError
Removed as discussed, moving them to wgpu-rs side
2020-09-14 22:45:10 +03:00
Kunal Mohan
d423d3d5d7 Allow dropping of error resources (#925)
* Allow dropping of error resources

* Unregister error resources without panic
Panic when removing Vacant element or when index is out of range

* address review comments
2020-09-13 21:17:53 -04:00
bors[bot]
43adcbcf68 Merge #926
926: Update naga with new image API r=cwfitzgerald a=kvark

**Connections**
Gets us https://github.com/gfx-rs/naga/pull/187, https://github.com/gfx-rs/naga/pull/185, https://github.com/gfx-rs/naga/pull/182, partially https://github.com/gfx-rs/naga/pull/169, and https://github.com/gfx-rs/naga/pull/167

**Description**
Brings us to a point where all wgpu-rs shaders are successfully validated 🎉 

**Testing**
wgpu-rs examples

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-09-13 03:59:44 +00:00
Dzmitry Malyshau
6a3c106cc4 Update naga with new image API 2020-09-11 12:34:20 -04:00
bors[bot]
f6f7210b63 Merge #924
924: Unlock nightly builds on CI r=kvark a=kvark

See https://github.com/Xudong-Huang/generator-rs/issues/24

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2020-09-10 15:07:13 +00:00
Dzmitry Malyshau
fc27920fde Unlock nightly builds on CI 2020-09-10 11:04:24 -04:00
bors[bot]
2972212d42 Merge #921
921: add `polygon_mode: PolyonMode` to `RasterizationStateDescriptor` to allow drawing wireframes r=kvark a=manuel-woelker

**Description**
This adds `polygon_mode: PolyonMode` to `RasterizationStateDescriptor` to allow drawing in wireframes and point mode

I added `hal::Features::NON_FILL_POLYGON_MODE` to the `wishful_features` in `instance.rs`. I don't know what side effects this might have.

**Testing**
Tested locally on my Windows machine with Vulkan backend.

Co-authored-by: Manuel Woelker <github@manuel.woelker.org>
2020-09-09 19:50:33 +00:00
Manuel Woelker
336d070b26 add polygon_mode: PolyonMode to RasterizationStateDescriptor to allow drawing wireframes 2020-09-09 21:34:37 +02:00
bors[bot]
8db3af7286 Merge #922
922: Add LabeledContextError r=kvark a=scoopr

Purpose for this is to add more context to an error.
create_render_pipeline error is improved, by showing the action
(creating render pipeline) and the user provided label, to aid with
the investigation.

Example error
before:
```
wgpu error: Validation error

Caused by:
    error in stage VERTEX: unable to find an entry point matching the Vertex execution model

thread 'main' panicked at 'Handling wgpu errors as fatal by default', src/backend/direct.rs:1457:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```

after:
```
wgpu error: Validation error

Caused by:
    Creating render pipeline (label: Some("hello-triangle pipeline"))
    error in stage VERTEX
    unable to find an entry point matching the Vertex execution model

thread 'main' panicked at 'Handling wgpu errors as fatal by default', src/backend/direct.rs:1457:5
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```

Co-authored-by: Mikko Lehtonen <scoopr@iki.fi>
2020-09-09 17:56:10 +00:00
Mikko Lehtonen
2fb8fc34d2 Add LabeledContextError
Purpose for this is to add more context to an error.
create_render_pipeline error is improved, by showing the action
(creating render pipeline) and the user provided label, to aid with
the investigation.
2020-09-08 17:44:53 +03:00
bors[bot]
730313177e Merge #923
923: Fix invalid mip level count check r=kvark a=benfrankel

**Connections**
Fixes https://github.com/gfx-rs/wgpu/issues/894
Continues from https://github.com/gfx-rs/wgpu/pull/893

**Description**
Invalid mip level counts are allowed through `Device::create_texture`, triggering Vulkan validation errors. A fix was applied in https://github.com/gfx-rs/wgpu/pull/893, but the fix needs a minor correction to work properly.

Also added back the `MAX_MIP_LEVELS` check, because it's technically possible for `MAX_MIP_LEVELS` to be less than `kind.compute_num_levels()`, e.g. if one of the given dimensions is very big (2^16). 

Error message is updated to reflect the change in behavior: there are now three ways for a mip level count to be invalid: it's equal to zero; it's greater than `MAX_MIP_LEVELS`; or it's greater than the largest mip level count allowed for the given size.

**Testing**
Tested by manually modifying the `mipmap` example in `wgpu-rs` to pass various edge case values for `size` and `mip_level_count`.


Co-authored-by: Ben Frankel <ben.frankel7@gmail.com>
2020-09-08 12:20:50 +00:00
Ben Frankel
2ee07a2a47 Fix invalid mip level count check 2020-09-07 16:49:06 -07:00
Dzmitry Malyshau
68bf10a3a5 Fix invalidated segment of the staging memory 2020-09-06 20:37:03 -04:00
bors[bot]
5cfdd4a135 Merge #920
920: Don't bind groups that aren't expected by the layout  r=grovesNL a=kvark

**Connections**
Sibling of #919 for master.

**Description**

**Testing**
In addition to the fix itself, this comes with a new regression playtest!

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2020-09-06 02:22:02 +00:00
Dzmitry Malyshau
eed8bf84ef Playtest for binding a group 2020-09-04 23:47:24 -04:00
Dzmitry Malyshau
1886149cae Don't bind groups that aren't expected by the layout 2020-09-04 23:47:24 -04:00
bors[bot]
3f1abf571e Merge #908
908: Clarify usage of SAMPLED_TEXTURE_ARRAY_NON_UNIFORM_INDEXING r=cwfitzgerald a=im-0

**Connections**
https://github.com/gfx-rs/wgpu-rs/pull/540

**Description**
This clarifies usage of SAMPLED_TEXTURE_ARRAY_NON_UNIFORM_INDEXING with GLSL.

**Testing**
This commit only changes documentation.

Co-authored-by: Ivan Mironov <mironov.ivan@gmail.com>
2020-09-02 20:43:32 +00:00
bors[bot]
bbb9b84bd2 Merge #916
916: Flush staging init buffers r=cwfitzgerald a=kvark

**Connections**
Related to https://github.com/gfx-rs/gfx/pull/3362
With the new use of `write_buffer`/`write_texture`, the results on D3D11 regressed.

**Description**
It just happened to be the case that all the backends returned coherent staging buffers, used internally for `write_*` and `mapped_at_creation == true`. However, D3D11 backend currently doesn't have the coherent memory at all, and it helped me to see that we were missing a flush() on the staging buffer.

**Testing**
Untested, but should work (tm).

Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
2020-09-02 20:24:41 +00:00
Dzmitry Malyshau
35d2ed39b5 Flush staging init buffers 2020-09-02 15:58:32 -04:00
bors[bot]
6df8421f22 Merge #909
909: Add Quad play test r=kvark a=DevOrc

**Connections**
#807 

**Description**
Adds a play test that renders a white quad to a texture. The texture is then copied to a buffer and checked for accuracy with a file of expected bytes (All 0xFF). 

**Testing**
Cargo test succeeds

Co-authored-by: Noah Charlton <ncharlton002@gmail.com>
2020-09-01 20:18:21 +00:00
Noah Charlton
d05d1aeec1 Add Quad play test 2020-09-01 16:07:24 -04:00
bors[bot]
ca7f6aee9a Merge #910
910: Replace backends! Macro with CFG Aliases r=kvark a=zicklag

**Connections**
Needs to be merged before: https://github.com/gfx-rs/wgpu/pull/907

**Description**
This change makes it easier to conditionally compile code based on graphics backends by adding `#[cfg]` aliases for the backends such as `vulkan`, `metal`, etc. This makes the code easier to read and maintain.

**Testing**
Tested the WGPU-rs cube and boids examples and they work as normal on a Linux machine with Vulkan.

Co-authored-by: Zicklag <zicklag@katharostech.com>
2020-08-31 04:33:42 +00:00
bors[bot]
128ead0141 Merge #912
912: Fix write-only stencil state descriptors from not working - fixes #911 r=kvark a=Dinnerbone

**Connections**
This fixes [#911 - Stencil testing broken between v0.5 and v0.6](https://github.com/gfx-rs/wgpu/issues/911).

**Description**
Write-only stencil states (read 0, write >0) are being treated as if they are disabled, which causes pipelines to act as though they don't have any stencil state set at all. This worked prior to commit 2473c25971 (introduced in PR #873). As far as I can tell, this works fine in Vulkan, Metal, DX12 and DX11 as we've been using this approach over at Ruffle for a while now.

**Testing**
You can view the reproduction case in #911 for manual testing. I have confirmed that this fix makes that case work as expected.

I couldn't find any automated tests for wgpu-types to copy and add for this case. If that's wanted then please let me know what the best approach is.

Co-authored-by: Nathan Adams <dinnerbone@dinnerbone.com>
2020-08-31 03:51:17 +00:00
Nathan Adams
0e94752749 Fix write-only stencil state descriptors from not working - fixes #911 2020-08-30 23:33:09 +02:00
Zicklag
7572dbeaf9 Use CFG Aliases to Replace the backends! Macro
Uses the `cfg_aliases` crate to replace the `backends!` macro and
provide a more natural way to gate backend specific code.
2020-08-29 21:55:17 -05:00
Ivan Mironov
9557ab36a6 Clarify usage of SAMPLED_TEXTURE_ARRAY_NON_UNIFORM_INDEXING 2020-08-30 00:47:00 +05:00
bors[bot]
bba82724a8 Merge #903
903: fix for mixed STORAGE_STORE and STORAGE_LOAD r=kvark a=kocsis1david

**Connections**
None

**Description**
A buffer that contains dynamic data is used for both uniforms and storage read. This was a problem for wgpu and it gave a `PendingTransition` error.

**Testing**
It's a trivial fix, but I don't know if there's an example for it in wgpu-rs that can be used for testing.

It seems that the PR "Sync changes from mozilla-central" is already solving the same issue.


Co-authored-by: Dávid Kocsis <kocsis1david@windowslive.com>
2020-08-28 16:10:55 +00:00
Maximilian Lupke
5d50b2ac24 Allow copying from depth textures (#901)
* Allow copying from depth textures

* Rename TextureFormat::is_depth_format to just is_depth

* Only allow Depth32Float format for copying, and only as source
2020-08-28 10:58:48 -04:00