Conversation
Both wgpu window renderers ended `render` by unwrapping the completion poll, so a driver that never signals the submission complete takes the process down with it. The frame has already been presented by the time the poll runs - the call waits for GPU completion rather than producing output - so there is nothing to retry and nothing to skip. Drop the error instead, matching the `maybe_blit_and_present().is_err() => return` check six lines above. Same class as DioxusLabs#38 and DioxusLabs#46. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
jcuffney
force-pushed
the
fix/poll-timeout-no-panic
branch
from
September 18, 2026 19:51
10e1295 to
11c3602
Compare
jcuffney
marked this pull request as ready for review
September 18, 2026 21:28
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.
Both wgpu window renderers ended
renderby unwrapping the completion poll:render_surface .device() .poll(wgpu::PollType::wait_indefinitely()) .unwrap();If the driver never signals the submission complete, that returns
Err(PollError::Timeout)and theunwrapaborts the process.This drops the error instead. The frame has already been presented by the time
the poll runs — the call waits for GPU completion rather than producing output —
so there is nothing to retry and nothing to skip. It also makes the line
consistent with the check six lines above it in the same function, which already
degrades:
Same class as #38 ("Fix
Timeoutcrash when getting surface texture") and #46("Handle transient WGPU
SurfaceErrors without panicking"), both merged. Thereasoning in #46 applies unchanged: some of these errors are transient, and the
right response is to carry on rather than bring down the whole process.
Two choices I made on your behalf — happy to change either
Not logging it. Neither crate has a logging dependency, and the only
tracing::warn!in either is commented out at the analogous "unexpected state"site in
resume. Addingtracingfor this seemed like the wrong trade to makeuninvited, but say the word.
An
## [Unreleased]section. No API change, so this is### Fixedat patchlevel. Neither changelog had an
Unreleasedsection yet — that is the Keep aChangelog convention, but if you would rather these were added at release time I
will drop them. The entries reference this PR by number.
How I hit it
A Pixel 10 (PowerVR D-Series), release build, via
dioxus-native0.8.0-alpha.1→
anyrender_vello_hybrid0.8.0 andanyrender_vello0.12.0. Both crates failidentically at the identical line. The app survives roughly 2 launches in 8;
the survivors render correctly and stay up, so the scene and the pipeline are
fine — the driver just does not always finish the submission.
The driver behaviour is not yours to fix and I am not asking for a workaround
for it. But a GPU stall producing an
abort()rather than a dropped frame isthe difference between a janky app and one that will not launch.
(Debug builds on the same device die earlier and for an unrelated reason: the
PowerVR SPIR-V compiler aborts in
spvcompiler::LLVMDIWriter::Initbecause wgputurns
InstanceFlags::DEBUGon in debug builds.WGPU_DEBUG=0avoids that one.Mentioning it only so this is not confused with it.)
Related
#67 proposes a real
FrameOutcomeresult fromWindowRenderer::render, whichwould let a host decide what to do here. This is the three-line version, and I
would be glad to see #67 supersede it.
Checks
cargo checkandcargo fmt --all --checkpass on both crates. MSRVunaffected — no new syntax, no new dependency.
Related
The reason I needed the CPU renderer at all is DioxusLabs/dioxus#5849: the
vello-cpu-*andskiaarms ofdioxus-nativecannot be selected by anyconsumer, so on this device there was no working renderer of any kind. That one
is independent of this change - either fix helps on its own.
🤖 Generated with Claude Code