864: Remove `power` module r=kvark a=GabrielMajeri
**Connections**
Closes#859
**Description**
Removes the `power.rs` module. If the user wants to detect the battery status and choose between low-power and high-performance, they can do so themselves.
**Testing**
Tested with core.
Co-authored-by: Gabriel Majeri <gabriel.majeri6@gmail.com>
857: Separate valid internal IDs from external ones r=cwfitzgerald a=kvark
**Connections**
Closes#638
wgpu-rs update - https://github.com/gfx-rs/wgpu-rs/pull/494
**Description**
The core change here is to allow user-specified IDs to be in the "Error" state that was introduced in #776 .
This is done by defining an internal `Valid<I>` wrapper. Now, the hub storages can be indexed by this valid wrapper only. For regular IDs, we have to go through `storage.get(index)`, which returns a `Result`. It still panics if the ID is totally garbage though, we don't want to handle what can't be expected here.
All the other changes come mostly as a consequence of that:
- new "Invalid*" error variants are added
- the error types are undergone sever refactoring
- new `command/draw.rs` module for stuff shared between render passes and bundles
- functions to generate error IDs for all the types
- various renames, e.g. `comb` -> `cmd_buf`
The expected use by wgpu-rs is unchanged. So far, I don't think we'd be generating Error IDs, but we can always reconsider.
For browsers though, if `device_create_xxx` failed, they would generate and error ID. It will occupy the slot up until the corresponding JS object is dropped.
**Testing**
Tested on wgpu-rs examples
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
856: Implementation of the builder pattern r=kvark a=Andful
**Connections**
This pull request addresses the issue #851
**Description**
Add a builder for wgpu types.
**Testing**
TODO
<!--
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: Andrea Nardi <buongiorno19972@gmail.com>
860: Update naga and fix type widths r=mechanical a=kvark
**Connections**
Related to https://github.com/gfx-rs/naga/pull/98
**Description**
Naga's "width" has type `Bytes`, so we should treat it as such.
**Testing**
How did it use to work? Oh right, it didn't.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
855: Fix multi-layer copies r=kvark a=cwfitzgerald
**Description**
When copying multiple layers at the same time, we ignored
**Testing**
Tested on the skybox example with BC1 textures doing all layer copies.
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
854: Replace NonZeroU32 with u32 in TextureViewDescriptor 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._
**Testing**
_Explain how this change is tested._
Not yet tested
<!--
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.
-->
r?@kvark
Co-authored-by: Kunal Mohan <kunalmohan99@gmail.com>
853: Implement TEXTURE_COMPRESSION_BC extension r=kvark a=cwfitzgerald
**Connections**
Closes#852.
**Description**
Adds support for BCn textures as specified in the upstream issue. This also shores up the validation and copy logic to work well with the block oriented nature of compressed textures. ETC2 and ASTC should fall out of this easily.
**Testing**
No wgpu-rs changes were needed, however I tested it with the following changes in wgpu-rs: 96c05ef4bf.
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
845: Finish error model refactor r=kvark a=GabrielMajeri
**Connections**
I think this is the last part of #638. I've reviewed all the remaining `unwrap`s and `assert`s in the code, and these should be the last ones left which ought to return errors (the remaining ones seem to uphold internal invariants).
**Description**
Implements error handling for various conditions, which are then returned to the caller. Including, but not limited to:
- running out of memory when creating a command pool
- running out of memory when creating a frame buffer for a render pass
- invalid dimensions when creating a texture
**Testing**
Tested with core and player.
Co-authored-by: Gabriel Majeri <gabriel.majeri6@gmail.com>
844: Add mip level count and array layer count validation to texture_create_view 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._
Catches the error when `mip_level_count = 0` and `base_mip_level > texture.mip_level_count` (same with `array_layer_count`)
**Testing**
_Explain how this change is tested._
Haven't been tested yet
<!--
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>
846: Make level and layer count for texture view optional r=cwfitzgerald a=kvark
**Connections**
implements https://github.com/gpuweb/gpuweb/pull/945
**Description**
`NonZeroU32` is more idiomatic here
**Testing**
untested, but should work
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
841: Safe error handling for queue module r=kvark a=GabrielMajeri
**Connections**
Part of #638
**Description**
Adds error types for the `queue.rs` module. The out-of-memory conditions are reported upwards, other internal `gfx-hal` errors are unwrapped.
**Testing**
Tested with core and player.
Co-authored-by: Gabriel Majeri <gabriel.majeri6@gmail.com>
835: Convert all logging to tracing and add fmt logger r=kvark a=cwfitzgerald
**Connections**
#289 ish.
**Description**
This converts us fully to tracing, allowing traces to show up in logs.
https://github.com/gfx-rs/wgpu-rs/pull/476 should be considered at the same time as this PR.
**Testing**
Ran examples in wgpu-rs.
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
838: wait for buffer to be done in the player r=cwfitzgerald a=kvark
**Connections**
Fixes our code enough to replay #834 without issues. Doesn't help to solve the original problem though.
**Description**
There are two things in here:
1. don't deduplicate the BGLs if we are not generating new IDs at this layer. This helps Servo/Gecko/player. cc @kunalmohan
2. have an option in `buffer_destroy` to *actually* kill it, at the cost of blocking on GPU sometimes. This is required for the player, since the very next command may try to reuse the ID.
**Testing**
Tested on the trace in #834
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
839: Fix push constant pipeline invalidation r=kvark a=cwfitzgerald
**Connections**
Fixes#821
**Description**
We need to invalidate everything if push constants change. This code is kinda ugly but this is try three and it's the least terrible I got.
**Testing**
Pinging @Wumpf :)
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
832: Return errors from device functions r=kvark a=GabrielMajeri
**Connections**
Part of #638
**Description**
Lots of changes, but they should be easily reviewable commit-by-commit.
- Error types for most of the fallible resource creation errors in `device/mod.rs`
- Removed assertions and replaced them with error types
- All of the `BufferMap`, `BufferNotMapped` etc. errors were united in a single `BufferAccessError`, since it was pretty weird to have so many overlapping error types.
- Removed all `unwrap`s of `gfx-hal` errors - they are now returned to the caller.
**Testing**
Checked with core and tested with `wgpu-rs` (see https://github.com/gfx-rs/wgpu-rs/pull/469)
Co-authored-by: Gabriel Majeri <gabriel.majeri6@gmail.com>
833: Switch pipeline flag to mutation of depth/stencil r=startoaster a=kvark
**Connections**
Reported on the matrix
**Description**
If the pass mutates depth/stencil, but the pipeline doesn't, it's not a bug!
**Testing**
on it...
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
829: Fix typo in BufferUsage docs r=kvark a=cwfitzgerald
**Connections**
A couple people have bugged me about this in the past.
**Description**
Docs were wrong, they are now right.
**Testing**
Read it again :)
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
827: Make RenderBundleEncoder derive Debug r=kvark a=Andful
**Connections**
This pull request originated from https://github.com/gfx-rs/wgpu-rs/pull/466. This change is needed to make public types in `wgpu-rs` derive debug.
**Description**
Make RenderBundleEncoder derive Debug.
**Testing**
Co-authored-by: Andrea Nardi <buongiorno19972@gmail.com>
826: Detach MultiRefCount from RefCount completely r=cwfitzgerald a=kvark
**Connections**
Fixes#823
**Description**
The old way of trying to mix the new `MultiRefCount` with bits of existing infra with `RefCount` was not correct at all. We'd get into a situation where the refcount was already deleted, but the object is alive, for example. This PR detaches them completely.
To clarify: it's not great at all that we have manual refcounting on BGLs. And this de-duplication crap caused much more trouble than it's worth...
**Testing**
Tested on the wonderful example provided by @tiberiusferreira
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>