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>
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>
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>
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>
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>
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>
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>
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>
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>
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>