696: Rustification of Extensions and SamplerDescriptor r=kvark a=cwfitzgerald
**Connections**
This begins the rustificaiton of `wgpu-types` as discussed in #689, starting with `Extensions` and `SamplerDescriptor`.
#691 and the resulting discussion was used to advise the shape of the extension struct.
**Description**
The PR should be fairly straight forward. As discussed, I have left extensions as a bitflag until the webgpu-native issue can be opened and discussed regarding allocation of extensions.
The most controversial part of this will be the `AnisotropyLevel` enum. I created it for two reasons, one that matters, one that doesn't:
- It means that, with the exception of enabling the aniso extension (and lod_bias), the sampler is correct by construction, which is helpful to both beginners and experts. It also better exposes the range of valid values and means less panics in user code.
- It saves a byte in the `Option<u8>` 😄
I definitely think that, if at all possible, we should have explicitly typed enums for "numbers" which have a limited amount of valid values (so _not_ lod bias, though that may be better expressed, idk) to make it very explicit which values can be accepted. This also feels more "rusty" and reduces the amount of "magicness" in the interface.
Ofc, I'm not married to the idea.
**Testing**
Follow up PR into wgpu-rs will include conversion of the examples.
**TODO**
- [x] wgpu-native pr rolling up this PR and #690 (https://github.com/gfx-rs/wgpu-native/pull/34)
- [x] wgpu-rs pr updating examples with the new structures (https://github.com/gfx-rs/wgpu-rs/pull/345)
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
695: Fix tracing of buffers that are mapped at creation r=kvark a=kvark
**Connections**
Fixes API tracing for the new API introduced in #675
**Description**
When buffers are mapped at creation, we need to create a staging buffer and copy into them. This implies COPY_DST, which isn't visible to the user. And this only applies to buffers without MAP_WRITE, in which case we are just mapping directly.
**Testing**
Tested locally on the `cube`. It would be great to automate API trace testing on CI.
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
685: Read-only depth-stencil support (RODS) r=cwfitzgerald a=kvark
**Connections**
Fixes#680
- [ ] wgpu-native update
- [x] wgpu-rs update - https://github.com/gfx-rs/wgpu-rs/pull/340
**Description**
~~Interestingly, this requires us to create an extra pipeline state for RODS-compatible render pipelines (one main, and one with read-only depth-stencil). This also means we are creating another compatible render pass, internally (done once).~~
**Testing**
I don't know for sure that this works properly, but I'd be comfortable landing this at least if the existing functions aren't broken.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
694: player: enable x11 on Unix/Vulkan r=kvark a=kvark
Needed as it's no longer default in `wgpu-core` with #678
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
679: Enforce copy buffer-texture alignment r=cwfitzgerald a=kvark
**Connections**
This is a follow-up to #666
**Description**
We are now enforcing the `bytes_per_row` on copy-texture copies to `COPY_BYTES_PER_ROW_ALIGNMENT`.
We allow it being non-aligned for `write_texture`, which now has the code to properly align the staging space it uses, and to copy the rows one by one with proper alignment.
We are also moving `BufferSize` to wgpu-types, because it's required for wgpu-rs to build.
**Testing**
Testing this needs https://github.com/gfx-rs/wgpu-rs/pull/328, which is blocked by https://github.com/gfx-rs/wgpu-rs/pull/323
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
690: Implement Anisotropic Filtering Extension and Expose Extension Interface r=kvark a=cwfitzgerald
**Connections**
Resolves#568.
**Description**
This PR solves two tightly related problems:
- Adds the ability to create a sampler with anisotropic filtering
- Adds the webgpu interface for getting the limits/extensions on adapters and devies.
**Testing**
I have tested this against my codebase which uses it. Adding an example in wgpu-rs on how to use extensions/limits would be good, especially as we have native/webgpu extensions, but can come as a future enhancement, once we feel the extension situation has stabilized a bit.
**TODO**
- [x] Allow wgpu-rs to call limit/extension interface (https://github.com/gfx-rs/wgpu-rs/pull/338)
- [ ] Determine how wgpu-native is going to adopt this functionality.
- [ ] After discussing #691, what changes need to be made.
Co-authored-by: Connor Fitzgerald <connorwadefitzgerald@gmail.com>
688: Fix recycling of command buffers r=kvark a=kvark
**Connections**
Fixes https://github.com/gfx-rs/wgpu-rs/issues/333
**Description**
We used `lowest_common_submission()` for figuring out when to reset command buffers, but it returns !0 when there are no active submissions. Instead, we are using the exising "last done" semantics here, which works better.
**Testing**
Tested on wgpu-rs examples.
Co-authored-by: Dzmitry Malyshau <dmalyshau@mozilla.com>
686: Move BufferSize to wgpu-types r=kvark a=kvark
This is required to be able to update wgpu-rs, since it uses `BufferSize` in the internal API for its backends.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
678: Make libx11 optional r=kvark a=parasyte
**Connections**
Fixes#676
**Description**
Make `libx11` optional with a new non-default feature. Default features need to go "to the edge". In its current state, a crate depending on `wgpu` cannot disable the `x11` feature on `gfx-backend-vulkan`.
- `wgpu` will be updated with a similar new feature, but will enable the `wgc/x11` feature by default. This should hopefully be backward compatible for any downstream user of `wgpu`.
- `wgpu-native` will also be given the same treatment.
**Testing**
This was tested with repro steps included in the linked ticket.
Co-authored-by: Jay Oster <jay@kodewerx.org>
667: Add asserts to validate that a resource exists when used r=kvark a=DavidPeicho
Hi,
As discussed in #610, this is mostly for C/C++ users. Some questions:
* Would it be possible to display the ID of the resource that failed? I don't know what you think about implementing the `Display` trait on the `Id` struct?
* Do you see other places needing for checks?
Thanks!
Co-authored-by: David Peicho <david.peicho@gmail.com>
668: Return failures to the user in swap_chain_get_next_texture, rather than transparently reconfiguring. r=kvark a=AlphaModder
TODO:
- [x] Change `Global::swap_chain_get_next_texture` in `wgpu-core`.
- [x] Update `wgpu_swap_chain_get_next_texture` in `wgpu-native`. (https://github.com/gfx-rs/wgpu-native/pull/32)
- [x] Wrap `SwapChainOutput`/`SwapChainStatus` in a nice enum in `wgpu-rs`. (https://github.com/gfx-rs/wgpu-rs/pull/323)
- [ ] Update `wgpu_bindings` (?)
Co-authored-by: AlphaModder <quasiflux@gmail.com>
* "Use the whole buffer" is !0, not 0
Fixes#654
Applies to BufferBinding, set_vertex_buffer, set_index_buffer
* Add BufferSize type alias
* Make BufferSize a transparent type
Add a custom serialization "buddy" type
Use BufferSize::WHOLE instead of crate::WHOLE_SIZE
* Move SerBufferSize into device::trace mod
Co-authored-by: Paul Kernfeld <paulkernfeld@gmail.com>
660: Fix possible out-of-bounds when trace log level enabled r=kvark a=yanchith
Also, even when there was no out-of-bounds access, the log statement talked
about an incorrect submission index.
Fixes https://github.com/gfx-rs/wgpu/issues/659
Co-authored-by: yanchith <yanchi.toth@gmail.com>
655: use unambigous ISO8601 format for dates r=kvark a=skierpage
06-04-2020 is in the future (June) for ~400 million people.
Oblig. XKCD https://xkcd.com/1179/😉
Co-authored-by: skierpage <info@skierpage.com>
653: Implement Queue::write_buffer r=nobody a=kvark
Implements https://github.com/gpuweb/gpuweb/pull/749
TODO:
- [x] handle a case where the buffer is dropped while there is a pending write. Edit: we bump the submission index on the buffer, so it will be kept alive.
- [x] properly free the temporary buffer and memory
- [x] properly destroy the pending command buffer on device drop
- [x] tweak the linear allocator settings - bumped to 16 megs
- [x] provide a patch to wgpu-rs and verify it works on the examples - https://github.com/gfx-rs/wgpu-rs/pull/307
- [x] provide a patch to wgpu-native - https://github.com/gfx-rs/wgpu-native/pull/25
- [x] check/fix the trace/replay support
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
- Clean up after the pending writes on destroy.
- Fix temporary buffer creation.
- Fix internal thread initialization by the command allocator.
- Clean up player event_loop usage.