deps: every crate to its latest version, wgpu 28 -> 30

`cargo upgrade --incompatible` in each of the nine workspaces here, then
`cargo update`. Most of it is version numbers only -- log, winit,
bytemuck, image, tokio, libc, android_logger, proc-macro2/quote, and syn
2 -> 3 with no source change. The wg-app-link submodule's twelve
dependencies were already at their latest majors, so that shared
repository needs no commit.

wgpu 28 -> 30 (and pollster 0.4 -> 1.0) is the part with API in it:
bind-group and vertex-buffer slots are optional now, `Instance::new`
takes an owned `InstanceDescriptor` carrying the platform's display
handle (the desktop passes winit's, since wgpu wants it for a GLES
surface presented on Wayland -- which is what this machine's fallback
produces; Android passes none), `RequestAdapterOptions` and
`SurfaceConfiguration` each gained a field kept at its historical value,
`get_current_texture` answers with an enum instead of a Result, and
`present` moved onto the queue.

The one that would not have failed at compile time: naga now requires
`@interpolate(flat)` on integer varyings, so `shader.wgsl`'s three u32
outputs were rejected at `create_shader_module` -- an abort on the device
rather than a build error. Flat is the only interpolation an integer can
have, so this states what the hardware already did.

Checked: build, clippy, fmt and tests in all nine workspaces (iris 196,
server 160); layer 2 screenshots on Vulkan and on force-gles, identical;
the arm64 release APK builds and the x86_64 bench ran a full
fling/stream/type/keyboard cycle on the emulator's GLES adapter.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
irisandClaude Opus 5 committed 2026-09-08 15:47:59 -04:00
1 parent a2e5e5881c
commit cc8148cbec
21 files changed
+1320 -989

No files matched your search

+60
View File
@@ -8334,3 +8334,63 @@ to design around, since a tools row has no markdown blocks at all; the
cost is the register/unregister lifecycle across the three routes that
rebuild a card, which is exactly where a stale `Selection` handle
panics).
## Every crate to its latest version, 2026-09-08 (wgpu 28 -> 30)
Iris asked for all Rust dependencies across the repository to be brought
to their latest published versions. Done with `cargo upgrade
--incompatible` (cargo-edit) in each of the nine workspaces here, then
`cargo update`. Most of it was ordinary: `log` 0.4.28 -> 0.4.34, `winit`
0.30.12 -> 0.30.13, `bytemuck` 1.23.1 -> 1.25.2, `image` 0.25.6 ->
0.25.10, `tokio` 1.49 -> 1.53.1, `libc` 0.2.179 -> 0.2.189,
`android_logger` 0.15.0 -> 0.15.1, `proc-macro2`/`quote` to current, and
`syn` 2 -> 3 (`iris/macro` compiled against 3.0.5 unchanged). `parley`,
`swash`, `accesskit`, `accesskit_winit`, `accesskit_android`,
`send_wrapper`, `pulldown-cmark`, `arboard`, `fxhash` and everything in
`server/`, `client-core/`, `event-model/`, `android-shell/` and `xtask/`
were already at their latest majors. So was every dependency of the
`wg-app-link` submodule, so that shared repository needed no commit.
The real work was **wgpu 28 -> 30** (`iris`, `iris-core`, `rigs/gpu-probe`)
and **pollster 0.4 -> 1.0** (no API change). Five API changes and one
shader change, all mechanical but none skippable:
- `PipelineLayoutDescriptor::bind_group_layouts` is `&[Option<&BindGroupLayout>]`
and `VertexState::buffers` is `&[Option<VertexBufferLayout>]` -- wgpu 30
allows holes in both. Every entry here is `Some(...)`.
- `Instance::new` takes an `InstanceDescriptor` by value, and that struct
no longer implements `Default`, because it now carries the platform's
display handle. Use `InstanceDescriptor::new_with_display_handle` /
`new_without_display_handle`. The desktop backend passes the window
(wgpu asks for it whenever a GLES surface will be presented on Wayland,
which is exactly what `default/render.rs`'s fallback produces on this
machine); the Android backend passes none, since its surface comes from
a `NativeWindow` and there is no connection to hand over.
- `RequestAdapterOptions` gained `apply_limit_buckets` (left `false`, its
default: it is a fingerprinting defence for hosts of untrusted content)
and `SurfaceConfiguration` gained `color_space` (`SurfaceColorSpace::Auto`,
which is what every earlier version did).
- `Surface::get_current_texture` returns a `CurrentSurfaceTexture` enum
rather than a `Result`. `Success` and `Suboptimal` both carry a texture;
the rest were the `Err` arms the old `.unwrap()` panicked on, plus the
new `Occluded`. Both backends still panic, now naming the variant.
- `SurfaceTexture::present` moved to `Queue::present(texture)`.
- **naga now requires `@interpolate(flat)` on integer varyings.**
`shader.wgsl`'s `VertexOutput` carries three `u32`s (`binding`, `idx`,
`mask_idx`) and wgpu 30 rejects the whole entry point without it --
"`@interpolate(flat)` must be explicitly specified for integer I/O",
raised at `create_shader_module`, so it is a startup abort rather than a
compile error. Flat is the only interpolation an integer can have, so
this is saying what the hardware already did.
- `BufferSlice::get_mapped_range` returns a `Result` (`tests/mask_sdf.rs`).
Checked: `cargo build --workspace --all-targets`, `cargo clippy
--workspace --all-targets` (clean), `cargo fmt`, and `cargo test
--workspace` in `iris/` (196 tests, including the GPU `mask_sdf` probe);
`./run-tests.sh` for the server (160 tests) and `cargo test` in the four
other workspaces; `rigs/gpu-probe` builds. Looked at: layer 2 on both
backends -- `run-headless.sh phone --phone --shot` on Vulkan (Venus) and
again `--features iris/force-gles` on virgl, identical output. Layer 3:
`build-apk.sh release` (arm64) builds, and the x86_64 debug bench ran a
full fling/stream/type/keyboard cycle on the emulator's GLES adapter with
no crash.