880: Port to gfx-hal-0.6 r=kvark a=kvark
This got a little more involved than I hoped, because of https://github.com/rust-lang/rust/issues/34433 which is unfortunately closed.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
877: Add image cube array feature. r=kvark a=StarArawn
**Connections**
None
**Description**
Enable `IMAGE_CUBE_ARRAY` in vulkan and dx12. Note: Currently this will cause metal to break as the `available_features` from the physical device will never include `IMAGE_CUBE_ARRAY`. Thus I'm opening this as a draft until gfx-hal metal can check and pass the feature on.
**Testing**
<!--
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.
-->
I can test this with my repo using wgpu-rs here which uses cube arrays:
https://github.com/StarArawn/harmony/
Co-authored-by: John Mitchell <toasterthegamer@gmail.com>
876: Fix support for d24unorm format r=kvark a=kvark
**Connections**
fixes https://github.com/kvark/vange-rs/pull/121 on some platforms
**Description**
We used to associate `D24Plus` with internal `D24S8`. This results in assuming that it has both DEPTH + STENCIL. Creating a binding from it then fails with the `All` aspect, since you can't view both. This is unexpected, since the user creates `D24Plus` with just a single aspect.
**Testing**
None needed
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
875: Add labels to pipelines r=trivial a=kvark
This isn't functional until gfx-hal-0.6 is published, but the API is there.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
873: Grand cleanup and refactor of the descriptors in the API r=cwfitzgerald,grovesNL a=kvark
**Connections**
Cleanup follows https://github.com/gfx-rs/wgpu-rs/pull/501Fixes#871Fixes#848
**Description**
There is a lot of small and big things crumbled in here.
The major one is where descriptors live, and how they are parametrized. Logic is the following:
- if something is useful by wgpu-rs's API leave it in `wgpu-types`
- if *in addition* it's useful to `wgpu-native`(i.e. has `repr(C)`), we possibly parametrize it (currently, only label is).
- otherwise, the type is moved to `wgpu-core` and stripped of generics
- remove all the builders
Some medium-sized things:
- moves the subscriber out (#871)
- moves the `RenderCommand` into the `draw` module (which is meant to contain shared things)
- makes `TextureViewDescriptor` fields optional, but receives it directly now (#848)
- moves stencil stuff out into `StencilStateDescriptor`, so that we can derive `Default` for it
- stop accepting raw strings for labels in the `Device` API: neither the clients, or gfx-rs need that shape, and it can't be safe
Some smaller things:
- using NonZeroU8 for anisotropy
- using NonZeroU32 for descriptor count
- putting sampler addressing modes into an array
- add labels to command buffers and pipeline layouts
- improves errors for exceeding binding limits
**Testing**
Tested on https://github.com/gfx-rs/wgpu-rs/pull/503
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
872: Respect texture view aspect on creation r=cwfitzgerald a=kvark
**Connections**
Fixing https://github.com/gfx-rs/wgpu-rs/issues/498 (but needs wgpu-rs update then)
**Description**
We added the aspect field to texture view descriptor but didn't respect it properly.
We do that now, and also disallow Depth-Stencil sampled views
**Testing**
Used the modified water example for testing.
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
870: Implicit layout r=cwfitzgerald a=kvark
**Connections**
Closes#868
**Description**
The implementation can be split into 3 parts:
1. reflecting the shader for binding expectations, and building a bind entry map from it, merging them between stages. This is only done for shaders that can be reflected, and we error on the rest, for now.
2. based on this info, create new bind group layouts and pipeline layouts. The tricky part here is that we can't generate the ID out of thin air, so we have to pass them into the `create_xx_pipeline` function, which now also returns the number of IDs it consumed, allowing the client to free the rest.
3. API changes in the descriptors, new methods to obtain the bind group layouts from a pipeline
**Testing**
This isn't tested, but I think it's fine: it doesn't affect the old path, and we'll be testing the new path while improving Naga and our reflection anyway.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
866: Streghten the multi-ref-count on BGLs r=cwfitzgerald a=kvark
**Connections**
Fixes#834
**Description**
Bind group layouts (BGLs) have to be somewhat uniquely tracked, and there was a synchronization issue with their use of `MultiRefCount`. What would happen in multi-thread environment is that we'd see `bind_group_layout_drop`, which first decreases the refcount, and then adds the ID to the list of suspected resources for deletion. But between these operations, something else may have triggered the triage of suspected resources, and if BGL was already there previously, it would be removed earlier than expected.
The solution I came up with is deferring the "dec()" call until the triage itself. That guarantees no gaps, and in fact it goes in line with the other resources we are tracking. I'm fairly confident that the new method works correctly at all times.
**Testing**
Tested extensively on https://github.com/gfx-rs/wgpu/issues/834#issuecomment-669362572
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
865: Replace u32 with NonZeroU32 in TextureView 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._
We now expose separate methods under `Global` to register error/invalid resources. So the check for `mip_level_count = 0` and `array_layer_count = 0` can be made on the client-side in Servo, and directly register an error resource instead of trying to create a real one.
**Testing**
_Explain how this change is tested._
Not yet tested. Will be done wgpu-rs examples.
<!--
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>
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>