Conversation
The last warning any build printed was `block v0.1.6` declaring a static of an uninhabited type, which becomes a hard error in a future rustc. It is not ours: it arrived through `metal 0.32` under `wgpu-hal`. Measured across four versions, wgpu 29 is where `metal` and `block` leave the tree, so the fix was a bump and the bump was an API migration. Every change below preserves behaviour rather than adopting a new one. - `bind_group_layouts` takes `Option<&BindGroupLayout>` now. - `push_constant_ranges: &[]` became `immediate_size: 0`. Zero keeps `Features::IMMEDIATES` off, which neither pipeline has ever asked for. - `multiview: None` moved from the pipeline to `multiview_mask: None` on both the pipeline and the pass. Same single-view default. - `SurfaceConfiguration` gained `color_space`. `Auto` is wgpu 30's name for what every earlier version did without asking, so the bytes this renderer encodes are read the same way. - `PollType::Wait` is a struct variant; `wait_indefinitely()` is the old meaning. - `get_mapped_range` returns a `Result`, so the readback reports the failure instead of indexing a `Result`. - `frame.present()` moved to `queue.present(frame)`. `get_current_texture` is the one that needed a decision rather than a rename. It returns a seven-variant enum instead of `Result<_, SurfaceError>`. The mapping is 26's behaviour variant for variant, EXCEPT `Occluded`, which is new information: 26 had no name for it and would have folded it into the error arm, and reporting RenderFailed because the window is minimised is a false failure. `Timeout` stays an error, exactly as it was, rather than being promoted to a skip inside a bump. The eleven acquire lines were duplicated across `present` and `present_all`. They are one `acquire` method now, because a swapchain rule that holds on one path and not the other is the divergence shape this project has already paid for four times. `cargo build --workspace --release` prints zero warnings and zero notes. The lock loses 16 crates and gains 23, at 248: `metal`, `block`, `objc` and the `gpu-alloc` and `foreign-types` families out, the `objc2` families in.
Orellius
added a commit
that referenced
this pull request
Aug 26, 2026
) The last warning any build printed was `block v0.1.6` declaring a static of an uninhabited type, which becomes a hard error in a future rustc. It is not ours: it arrived through `metal 0.32` under `wgpu-hal`. Measured across four versions, wgpu 29 is where `metal` and `block` leave the tree, so the fix was a bump and the bump was an API migration. Every change below preserves behaviour rather than adopting a new one. - `bind_group_layouts` takes `Option<&BindGroupLayout>` now. - `push_constant_ranges: &[]` became `immediate_size: 0`. Zero keeps `Features::IMMEDIATES` off, which neither pipeline has ever asked for. - `multiview: None` moved from the pipeline to `multiview_mask: None` on both the pipeline and the pass. Same single-view default. - `SurfaceConfiguration` gained `color_space`. `Auto` is wgpu 30's name for what every earlier version did without asking, so the bytes this renderer encodes are read the same way. - `PollType::Wait` is a struct variant; `wait_indefinitely()` is the old meaning. - `get_mapped_range` returns a `Result`, so the readback reports the failure instead of indexing a `Result`. - `frame.present()` moved to `queue.present(frame)`. `get_current_texture` is the one that needed a decision rather than a rename. It returns a seven-variant enum instead of `Result<_, SurfaceError>`. The mapping is 26's behaviour variant for variant, EXCEPT `Occluded`, which is new information: 26 had no name for it and would have folded it into the error arm, and reporting RenderFailed because the window is minimised is a false failure. `Timeout` stays an error, exactly as it was, rather than being promoted to a skip inside a bump. The eleven acquire lines were duplicated across `present` and `present_all`. They are one `acquire` method now, because a swapchain rule that holds on one path and not the other is the divergence shape this project has already paid for four times. `cargo build --workspace --release` prints zero warnings and zero notes. The lock loses 16 crates and gains 23, at 248: `metal`, `block`, `objc` and the `gpu-alloc` and `foreign-types` families out, the `objc2` families in.
Orellius
added a commit
that referenced
this pull request
Aug 26, 2026
) The last warning any build printed was `block v0.1.6` declaring a static of an uninhabited type, which becomes a hard error in a future rustc. It is not ours: it arrived through `metal 0.32` under `wgpu-hal`. Measured across four versions, wgpu 29 is where `metal` and `block` leave the tree, so the fix was a bump and the bump was an API migration. Every change below preserves behaviour rather than adopting a new one. - `bind_group_layouts` takes `Option<&BindGroupLayout>` now. - `push_constant_ranges: &[]` became `immediate_size: 0`. Zero keeps `Features::IMMEDIATES` off, which neither pipeline has ever asked for. - `multiview: None` moved from the pipeline to `multiview_mask: None` on both the pipeline and the pass. Same single-view default. - `SurfaceConfiguration` gained `color_space`. `Auto` is wgpu 30's name for what every earlier version did without asking, so the bytes this renderer encodes are read the same way. - `PollType::Wait` is a struct variant; `wait_indefinitely()` is the old meaning. - `get_mapped_range` returns a `Result`, so the readback reports the failure instead of indexing a `Result`. - `frame.present()` moved to `queue.present(frame)`. `get_current_texture` is the one that needed a decision rather than a rename. It returns a seven-variant enum instead of `Result<_, SurfaceError>`. The mapping is 26's behaviour variant for variant, EXCEPT `Occluded`, which is new information: 26 had no name for it and would have folded it into the error arm, and reporting RenderFailed because the window is minimised is a false failure. `Timeout` stays an error, exactly as it was, rather than being promoted to a skip inside a bump. The eleven acquire lines were duplicated across `present` and `present_all`. They are one `acquire` method now, because a swapchain rule that holds on one path and not the other is the divergence shape this project has already paid for four times. `cargo build --workspace --release` prints zero warnings and zero notes. The lock loses 16 crates and gains 23, at 248: `metal`, `block`, `objc` and the `gpu-alloc` and `foreign-types` families out, the `objc2` families in.
Orellius
added a commit
that referenced
this pull request
Aug 26, 2026
) The last warning any build printed was `block v0.1.6` declaring a static of an uninhabited type, which becomes a hard error in a future rustc. It is not ours: it arrived through `metal 0.32` under `wgpu-hal`. Measured across four versions, wgpu 29 is where `metal` and `block` leave the tree, so the fix was a bump and the bump was an API migration. Every change below preserves behaviour rather than adopting a new one. - `bind_group_layouts` takes `Option<&BindGroupLayout>` now. - `push_constant_ranges: &[]` became `immediate_size: 0`. Zero keeps `Features::IMMEDIATES` off, which neither pipeline has ever asked for. - `multiview: None` moved from the pipeline to `multiview_mask: None` on both the pipeline and the pass. Same single-view default. - `SurfaceConfiguration` gained `color_space`. `Auto` is wgpu 30's name for what every earlier version did without asking, so the bytes this renderer encodes are read the same way. - `PollType::Wait` is a struct variant; `wait_indefinitely()` is the old meaning. - `get_mapped_range` returns a `Result`, so the readback reports the failure instead of indexing a `Result`. - `frame.present()` moved to `queue.present(frame)`. `get_current_texture` is the one that needed a decision rather than a rename. It returns a seven-variant enum instead of `Result<_, SurfaceError>`. The mapping is 26's behaviour variant for variant, EXCEPT `Occluded`, which is new information: 26 had no name for it and would have folded it into the error arm, and reporting RenderFailed because the window is minimised is a false failure. `Timeout` stays an error, exactly as it was, rather than being promoted to a skip inside a bump. The eleven acquire lines were duplicated across `present` and `present_all`. They are one `acquire` method now, because a swapchain rule that holds on one path and not the other is the divergence shape this project has already paid for four times. `cargo build --workspace --release` prints zero warnings and zero notes. The lock loses 16 crates and gains 23, at 248: `metal`, `block`, `objc` and the `gpu-alloc` and `foreign-types` families out, the `objc2` families in.
Orellius
added a commit
that referenced
this pull request
Aug 26, 2026
) The last warning any build printed was `block v0.1.6` declaring a static of an uninhabited type, which becomes a hard error in a future rustc. It is not ours: it arrived through `metal 0.32` under `wgpu-hal`. Measured across four versions, wgpu 29 is where `metal` and `block` leave the tree, so the fix was a bump and the bump was an API migration. Every change below preserves behaviour rather than adopting a new one. - `bind_group_layouts` takes `Option<&BindGroupLayout>` now. - `push_constant_ranges: &[]` became `immediate_size: 0`. Zero keeps `Features::IMMEDIATES` off, which neither pipeline has ever asked for. - `multiview: None` moved from the pipeline to `multiview_mask: None` on both the pipeline and the pass. Same single-view default. - `SurfaceConfiguration` gained `color_space`. `Auto` is wgpu 30's name for what every earlier version did without asking, so the bytes this renderer encodes are read the same way. - `PollType::Wait` is a struct variant; `wait_indefinitely()` is the old meaning. - `get_mapped_range` returns a `Result`, so the readback reports the failure instead of indexing a `Result`. - `frame.present()` moved to `queue.present(frame)`. `get_current_texture` is the one that needed a decision rather than a rename. It returns a seven-variant enum instead of `Result<_, SurfaceError>`. The mapping is 26's behaviour variant for variant, EXCEPT `Occluded`, which is new information: 26 had no name for it and would have folded it into the error arm, and reporting RenderFailed because the window is minimised is a false failure. `Timeout` stays an error, exactly as it was, rather than being promoted to a skip inside a bump. The eleven acquire lines were duplicated across `present` and `present_all`. They are one `acquire` method now, because a swapchain rule that holds on one path and not the other is the divergence shape this project has already paid for four times. `cargo build --workspace --release` prints zero warnings and zero notes. The lock loses 16 crates and gains 23, at 248: `metal`, `block`, `objc` and the `gpu-alloc` and `foreign-types` families out, the `objc2` families in.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The last warning any build printed:
blockis unmaintained and transitive:wgpu 26.0.1->wgpu-hal->metal 0.32.0->block 0.1.6. Measured across four versions by resolving each in a scratch project: 27 and 28 still carry it, 29 is wheremetalandblockleave the tree. So the fix is a bump, and the bump is an API migration.Every change preserves behaviour
bind_group_layouts: &[&L]&[Some(&L)]push_constant_ranges: &[]immediate_size: 0Features::IMMEDIATESoff, never requestedmultiview: Noneon the pipelinemultiview_mask: Noneon pipeline and passcolor_space: AutoAutois wgpu 30's name for what every earlier version did without askingPollType::WaitPollType::wait_indefinitely()get_mapped_range() -> BufferView-> Result<BufferView, _>Resultframe.present()queue.present(frame)The one that needed a decision
get_current_texturewent fromResult<SurfaceTexture, SurfaceError>to a seven-variant enum. The mapping is 26's behaviour variant for variant:Success/SuboptimalOk(26 set asuboptimalflag this renderer never read)Lost/OutdatedTimeoutPresentError::AcquireValidationOther->PresentError::AcquireOccludedOccludedis the only new behaviour, and it is new information rather than a change of mind: reportingRenderFailedbecause the window is minimised is a false failure.The eleven acquire lines were duplicated across
presentandpresent_all. They are oneacquiremethod now -- a swapchain rule that holds on one path and not the other is the divergence shape this repo has already paid for four times (launch::dress,launch::seat).Gates
cargo test --workspacecargo run -p termisu-vt-difftest./scripts/build-lib.shexports 28/28 verified./scripts/build-host.shall 61 exports, and no warning line at all now./scripts/build-swift.shThe gate that matters most for a GPU bump, run explicitly:
cargo build --workspace --releasenow prints zero warnings and zero notes.Live tap
The compute and blit paths are byte-gated, but
get_current_texture/queue.presentonly run against a real swapchain. Launched the freshly built host with aZDOTDIRthat prints a test line, captured withscreencapture -l, no synthetic input:38;2;217;119;87renders asD9775742does not flipScreenshot attached in the merge comment.
Lock movement
248 crates, from 241. Out:
block,metal,objc,malloc_buf,paste,hexf-parse, and thegpu-alloc,gpu-descriptor,foreign-typesandcore-foundationfamilies. In: theobjc2families,raw-window-metal,naga-types,wgpu-naga-bridge, and the usual non-macOS platform crates that resolve but never compile here.no_network.rspasses against the new graph.Observed once, not caused by this change
the_visible_grid_reads_back_as_text(crates/host/tests/session.rs:144) failed once on the first full run, then passed in isolation and passed two subsequent full--releaseruns. It waits on a fixed 5s budget for a real pty, which is the same shape as the two flakes already recorded in CLAUDE.md under "Tests measure their own claim, not the machine". Not touched here; flagged for its own fix.