fix(vdisplay): recommit by the monitor's CCD key, not a bare target id #562

Merged
enricobuehler merged 1 commits from fix/vdisplay-gdi-name-key into main 2026-09-02 21:56:42 +00:00
Owner

windows-host.yml fails at "Build (release, nvenc + amf-qsv + qsv)" on main since #555 met the win-display actor work:

error[E0308]: mismatched types
   --> crates\pf-vdisplay\src\vdisplay\windows\manager.rs:527:67
527 |     let Some(gdi) = pf_win_display::win_display::resolve_gdi_name(target_id) else {
    |                                                                   ^^^^^^^^^ expected `CcdTargetKey`, found `u32`

Two merges crossed: resolve_gdi_name now takes a CcdTargetKey (target ids are only unique per adapter), while the UAC mid-stream fix's force_recommit(target_id: u32) still passed the bare id. Windows-only code, so the Linux lanes never compiled it.

Fix: look the monitor up in the manager's slots under the state lock (the lock was already held there — sole topology mutator), use its cached GDI name, or resolve it by its own ccd_key(); a target the manager does not own is a no-op. The caller in punktfunk-host/src/capture.rs keeps its u32 signature.

Verified: cargo check -p pf-vdisplay --release on the .133 runner at this commit, Finished. The full windows-host.yml run on main after merge is the real proof.

`windows-host.yml` fails at "Build (release, nvenc + amf-qsv + qsv)" on main since #555 met the win-display actor work: ``` error[E0308]: mismatched types --> crates\pf-vdisplay\src\vdisplay\windows\manager.rs:527:67 527 | let Some(gdi) = pf_win_display::win_display::resolve_gdi_name(target_id) else { | ^^^^^^^^^ expected `CcdTargetKey`, found `u32` ``` Two merges crossed: `resolve_gdi_name` now takes a `CcdTargetKey` (target ids are only unique per adapter), while the UAC mid-stream fix's `force_recommit(target_id: u32)` still passed the bare id. Windows-only code, so the Linux lanes never compiled it. Fix: look the monitor up in the manager's slots under the state lock (the lock was already held there — sole topology mutator), use its cached GDI name, or resolve it by its own `ccd_key()`; a target the manager does not own is a no-op. The caller in `punktfunk-host/src/capture.rs` keeps its `u32` signature. Verified: `cargo check -p pf-vdisplay --release` on the `.133` runner at this commit, `Finished`. The full `windows-host.yml` run on main after merge is the real proof.
enricobuehler added 1 commit 2026-09-02 19:20:45 +00:00
fix(vdisplay): recommit by the monitor's CCD key, not a bare target id
ci / decky-typecheck (pull_request) Successful in 14s
ci / bun-nix (pull_request) Successful in 26s
ci / web (pull_request) Successful in 57s
macos-host / check (pull_request) Successful in 1m6s
ci / docs-drift (pull_request) Successful in 33s
secret-scan / gitleaks (pull_request) Successful in 17s
ci / sdk-plugin-kit (pull_request) Successful in 1m24s
ci / docs-site (pull_request) Successful in 2m20s
ci / rust (pull_request) Failing after 4m9s
ci / rust-arm64 (pull_request) Successful in 6m40s
android / android (pull_request) Successful in 10m28s
f6f69547f1
Two merges crossed: pf-win-display's resolve_gdi_name now takes a
CcdTargetKey (target ids are only unique per adapter), while the UAC
mid-stream fix's force_recommit still passed a u32. Windows-only code, so
only windows-host.yml's build step saw it. Look the monitor up in the
manager's slots under the state lock, use its cached GDI name, or resolve it
by its own key; a target the manager does not own is a no-op.
enricobuehler merged commit 15cb7931ac into main 2026-09-02 21:56:42 +00:00
enricobuehler deleted branch fix/vdisplay-gdi-name-key 2026-09-02 21:56:43 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk#562