Commit Graph

2761 Commits

Author SHA1 Message Date
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]
9451c23bb7 [rs] Merge #589
589: Update to latest wgpu with Naga validation r=cwfitzgerald a=kvark

Depends on https://github.com/gfx-rs/wgpu/pull/962
Includes latest Naga validation stuff.
~~Warning: subject to https://github.com/gfx-rs/naga/issues/228~~

Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
2020-10-07 21:39:22 +00:00
Dzmitry Malyshau
1b4e6b6a15 [rs] Update to latest wgpu with Naga validation 2020-10-07 17:36:15 -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
Kunal Mohan
485dab9a52 Prevent an invalid texture from being registered in device_create_texture 2020-09-23 00:30:50 +05:30
bors[bot]
7d70d8afbd [rs] Merge #577
577: Fixes #575 - vulkan-portability feature on MacOS r=kvark a=rybertm

See #575.
This PR fixes the issue with enabling `vulkan-portability` on MacOS.

Co-authored-by: Robert Broketa <robertbroketa@gmail.com>
2020-09-22 02:21:37 +00:00
Robert Broketa
79c50797cf [rs] Fixes #575 - vulkan-portability feature on MacOS 2020-09-21 14:32:46 -03:00
bors[bot]
9a4026129a [rs] Merge #574
574: Implement AsRef for BufferView r=kvark a=de-vri-es

This PR implements `AsRef` and `AsMut` in addition to `Deref` and `DerefMut` for `BufferView` and `BufferViewMut`.

This allows the buffer views to be used directly by generic code that wants an `AsRef<[u8]>`.

It's also subjectively a small win when you want to pass the views to non-generic code. I find `buffer.as_ref()` clearer than `&*buffer`. That also goes for `buffer.deref()`, but `Deref` is not in the prelude.

Co-authored-by: Maarten de Vries <maarten@de-vri.es>
2020-09-21 15:43:25 +00:00
Maarten de Vries
81df9fb707 [rs] Implement AsRef for BufferView
Remove AsRef<[u8]> for BufferViewMut.
2020-09-21 17:35:30 +02:00
bors[bot]
4b1c363def [rs] Merge #576
576: Convert swapchain.get_current_frame to a immutable reference r=kvark a=cwfitzgerald

Per our discussion on matrix, converts swapchain.get_current_frame to an immutable reference as it's internally synchronized.

Rationale: will allow me to take a non-pretty RW mutex as read instead of write in my application

Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
2020-09-20 19:33:08 +00:00
Connor Fitzgerald
f7b78115e3 [rs] Convert swapchain.get_current_frame to a immutable reference 2020-09-20 14:38:43 -04:00
bors[bot]
47c05b324f [rs] Merge #570
570: web: temporarily polyfill `create_buffer_init` r=kvark a=grovesNL

Temporarily polyfill `create_buffer_init` on the web backend by using the old buffer mapping API. This is just a temporary fix until the new buffer mapping API is available in Nightly.

This polyfill allows us to run `cube` from `master` on Nightly (there's still lots missing from other examples). But at least some simple use cases (e.g. projects only using `create_buffer_init`/`write_buffer` and no other buffer mapping functions) can run with `master`.

Co-authored-by: Joshua Groves <josh@joshgroves.com>
2020-09-17 03:20:06 +00:00
Joshua Groves
9270d85e3a [rs] web: temporarily polyfill create_buffer_init 2020-09-17 00:48:58 -02:30
bors[bot]
adfd90a148 [rs] Merge #569
569: Reorder framework canvas setup for web r=kvark a=grovesNL

winit only appends the canvas element once the window is built, and we need the canvas to exist before `create_surface` can use it. So we can just reorder the calls to build the window before using `create_surface` on the web backend in framework.

Also temporarily no-op debug markers for the web until we have them in gecko. Even though they're technically unimplemented, we can still proceed without them.

Co-authored-by: Joshua Groves <josh@joshgroves.com>
2020-09-16 03:57:52 +00:00
Joshua Groves
8153e29c98 [rs] Temporarily no-op debug marker functions for web 2020-09-16 01:05:12 -02:30
Joshua Groves
90cdc32c0c [rs] Reorder framework window creation for web 2020-09-16 01:04:49 -02:30
bors[bot]
da81673f64 [rs] Merge #567
567: Notes on LoadOp r=kvark a=PENGUINLIONG

If the swapchain image was drawn with a pipeline that loads a render target that has not been cleared before, the validation layer gives a triplet of confusing feedbacks:

```log
[2020-09-15T06:42:23Z ERROR gfx_backend_vulkan] 
    VALIDATION [UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout (1303270965)] : Validation Error: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x1d80787bfe8, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | Submitted command buffer expects VkImage 0x6dc7200000000005[] (subresource: aspectMask 0x1 array layer 0, mip level 0) to be in layout VK_IMAGE_LAYOUT_PRESENT_SRC_KHR--instead, current layout is VK_IMAGE_LAYOUT_UNDEFINED.
    object info: (type: COMMAND_BUFFER, hndl: 2027350900712)

[2020-09-15T06:42:23Z ERROR gfx_backend_vulkan] 
    VALIDATION [UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout (1303270965)] : Validation Error: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x1d8078586a8, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | Submitted command buffer expects VkImage 0x3ba5830000000006[] (subresource: aspectMask 0x1 array layer 0, mip level 0) to be in layout VK_IMAGE_LAYOUT_PRESENT_SRC_KHR--instead, current layout is VK_IMAGE_LAYOUT_UNDEFINED.
    object info: (type: COMMAND_BUFFER, hndl: 2027350754984)

[2020-09-15T06:42:23Z ERROR gfx_backend_vulkan] 
    VALIDATION [UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout (1303270965)] : Validation Error: [ UNASSIGNED-CoreValidation-DrawState-InvalidImageLayout ] Object 0: handle = 0x1d8078614f8, type = VK_OBJECT_TYPE_COMMAND_BUFFER; | MessageID = 0x4dae5635 | Submitted command buffer expects VkImage 0x4c5b620000000007[] (subresource: aspectMask 0x1 array layer 0, mip level 0) to be in layout VK_IMAGE_LAYOUT_PRESENT_SRC_KHR--instead, current layout is VK_IMAGE_LAYOUT_UNDEFINED.
    object info: (type: COMMAND_BUFFER, hndl: 2027350791416)
```

And it turns out they come from the triple-buffering swapchain images. It seems `wgpu` would only re-layout the swapchain image if it's been loaded by a clear op. I would be great to warn the users beforehand. (I know it's not something I should ever do tho)

Co-authored-by: PENGUINLIONG <admin@penguinliong.moe>
2020-09-15 13:32:59 +00:00
PENGUINLIONG
39b9a6218b [rs] Notes on LoadOp 2020-09-15 14:43:30 +08:00
bors[bot]
9840ae4eb3 [rs] Merge #565
565: Add context to errors r=kvark a=scoopr

ContextError is just a simple wrapper that contains a string and the original error, and it is used to decorate the error to give it more context.

Co-authored-by: Mikko Lehtonen <scoopr@iki.fi>
2020-09-15 01:38:19 +00:00
bors[bot]
4829875193 [rs] Merge #566
566: Report out of memory errors r=kvark a=scoopr



Co-authored-by: Mikko Lehtonen <scoopr@iki.fi>
2020-09-15 01:28:40 +00:00
Mikko Lehtonen
2e791cacde [rs] Report out of memory errors 2020-09-14 23:26:20 +03:00
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