* const in ShaderStage that represents vertex and fragment access
We can store `ShaderStage`s as const values or members of const structs in all individual cases, but for example `ShaderStage::VERTEX | ShaderStage::FRAGMENT` cannot be stored in a const. This is not very elegant, but would be convenient.
* Correct VERTEX_FRAGMENT definition
VERTEX_FRAGMENT definition now follows directly from the bit representation of `ShaderStage::VERTEX` and `Shaderstage::FRAGMENT` such that it does not need to be independently maintained.
Until we have some amount of type inference, an integer literal used as a constant array size must have a `u` suffix. This is inconsistent with the surface syntax presented in the spec, and is a minor inconvenience.
For now, allow a signed integer array size to pass validation so that user code need not change when type inference deduces values of the correct type.
1231: Added TextureFormatFeatures::filterable which may overwrite TextureSampleType::Float.filterable r=kvark a=Wumpf
**Description**
The expectation is that with `wgt::Features::TEXTURE_ADAPTER_SPECIFIC_FORMAT_FEATURES` enabled, any texture format which is sampled as float may be (linearly) filtered if so supported by the adapter, not only those that the webgpu specification denotes as filterable.
This arguably causes a bit of a mess in the way we distinguish `sample_type` and `(guaranteed_)format_features`: The float sample type (via spec) essentially integrates a feature, namely if it is filterable or not. Unlike the actual format _type_ which is just a property of the format, this property may or may not be available depending on the device.
So the type of `sample_type` stays statically defined whereas the Float.filterable property suddenly becomes overwritten by a format_feature which may or may not be present. Couldn't come up with a cleaner solution so far.
**Testing**
Tested in project (blub) depending on R32F filtering - passing now what was previously causing
```
wgpu error: Validation Error
Caused by:
In Device::create_bind_group
note: label = `BindGroup: Narrow Range filter 1`
texture binding 1 expects sample type = Float { filterable: true }, but given a view with format = R32Float
```
(Blub still can't run on latest wgpu because of other reported issues)
Co-authored-by: Andreas Reich <r_andreas2@web.de>
1227: Derive more things for primitive and multisampling states r=kvark a=kvark
**Connections**
Related to https://github.com/gfx-rs/wgpu-rs/issues/769
**Description**
Adding a few derives and fixing a doc comment.
**Testing**
CI gets it
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1226: Update gfx and naga to gfx-12 r=kvark a=kvark
**Connections**
Picks up https://github.com/gfx-rs/gfx/pull/3650Fixes#1225
**Description**
Also fixes our playtests, interestingly. One of the changes here was that now `Analysis` is needed for everything, including the SPV-out backend of Naga. And we can only get it via validating the `naga::Module`.
What we used to was: if validation isn't enabled, we'd carry the module around, and then still try to produce a SPIR-V from it, if there is no original SPIR-V. This precise thing was happening in the tests. However, we had `dummy` backend depending on the `wgpu-core/cross` feature, which means the playtests were actually built and run with spirv-cross enabled!
Another factor here is the introduction of `ShaderModule::flags` instead of a single boolean, which was done in #1093. The problem here was that the playtest RON files weren't updated accordingly, they still had `experimental_translation: true` in them, which got ignored now.
So with this combination of events, the playtests ended up generating SPIR-V from Naga modules, without validation(!), and passing the SPIR-V to gfx-rs and SPIRV-Cross... Which still worked, as we'd expect, but definitely not want here.
So this PR fixes everything. It makes it required to have the validation for a module, and we force-validate if there is no SPV source to fall back on. And it disables "cross" feature implicitly enabled in testing.
**Testing**
Tested on wgpu-rs examples.
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1224: Update the blend API to upstream r=kvark a=kvark
**Connections**
Matches https://github.com/gpuweb/gpuweb/pull/1134
**Description**
Makes blending state ON/OFF explicit.
**Testing**
Simple enough!
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
765: Update naga to gfx-11 r=cwfitzgerald a=kvark
Gets us https://github.com/gfx-rs/wgpu/pull/1220
Note that "cross" feature is not optional here. We could lift it up and add to `default = []` but that would make the Web backend to always unconditionally depend on `wgpu-core` (since enabling a feature on it automatically enables it). So we ideally need a way for Cargo to allow platform-specific default features...
About the shadow example - the experimental translation works on the main pipeline, but fails on the baking pipeline because of https://github.com/gfx-rs/naga/issues/483. Fortunately, it falls back to SPIRV-Cross gracefully here.
The new validation detected a flaw in our shader (comparison sampler mismatch), yay!
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>
1220: Update naga to gfx-11, make spirv-cross optional r=kvark a=kvark
**Connections**
https://github.com/gfx-rs/gfx/pull/3642https://github.com/gfx-rs/gfx/pull/3641
**Description**
Gets us the latest Naga updates, plus the ability to make spirv-cross optional (on Linux and Windows only for now).
**Testing**
Will be tested on wgpu-rs
Co-authored-by: Dzmitry Malyshau <kvarkus@gmail.com>