docs(windows-host): consolidate 5 scattered docs into one current source of truth
The Windows-host docs were scattered across a design plan, a staged-refactor plan, an audit, an audit-remediation tracker, and a game-capture-bug analysis — several badly stale (the audit/remediation predate the Goal-1 branch landing and call DONE items "not started"). Verified the true state of every audit finding / goal / milestone against current code+git (4-agent workflow), then rewrote windows-host-rewrite.md as ONE consolidated, accurate doc: - §1 Status scorecard (Goals 1-3, M0-M6, GB1, audit P0/P1/P2) with DONE/PARTIAL/ OPEN + commit evidence. - §2 Architecture as-built (layering, HostConfig→SessionPlan→SessionContext, the VirtualDisplayManager ownership model, IDD-push-primary capture incl. secure desktop + GB1 recovery, encode/EncoderCaps, pf-vdisplay-proto, the driver, service/packaging). - §3 Validated invariants (the jewels). - §4 Prioritized open tasks (the genuine remaining work). - §5 Operations (RTX-box recipe, CI, env, build). - §6 Deep reference (/INTEGRITYCHECK answer, the 6 iddcx bindgen knobs, the driver port checklist, resolved decisions). Deleted the four now-redundant docs (content folded in; history in git): windows-host-goal1-plan.md, windows-host-rewrite-audit.md, windows-host-rewrite-remediation.md, windows-host-rewrite-game-capture-bug.md. Repointed the 6 code/proto/driver doc-comment refs that targeted them at the consolidated windows-host-rewrite.md sections. Linux cargo check clean. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -276,7 +276,7 @@ pub mod frame {
|
|||||||
/// These were hand-duplicated as `OFF_*`/`SHM_*` constants in `inject/{gamepad,dualsense}_windows.rs`
|
/// These were hand-duplicated as `OFF_*`/`SHM_*` constants in `inject/{gamepad,dualsense}_windows.rs`
|
||||||
/// and (as bare literals — `*view.add(140)`) in the standalone `xusb-driver`/`dualsense-driver`
|
/// and (as bare literals — `*view.add(140)`) in the standalone `xusb-driver`/`dualsense-driver`
|
||||||
/// workspaces, guarded only by "must match" comments — the top ABI-drift hazard the audit flagged
|
/// workspaces, guarded only by "must match" comments — the top ABI-drift hazard the audit flagged
|
||||||
/// (`docs/windows-host-rewrite-audit.md` §6.1). Owning them here with `Pod` derives + `offset_of!`
|
/// (`docs/windows-host-rewrite.md` §2.7). Owning them here with `Pod` derives + `offset_of!`
|
||||||
/// asserts makes a one-sided edit a compile error.
|
/// asserts makes a one-sided edit a compile error.
|
||||||
///
|
///
|
||||||
/// The host creates the section (privileged, permissive DACL so the restricted WUDFHost token can
|
/// The host creates the section (privileged, permissive DACL so the restricted WUDFHost token can
|
||||||
|
|||||||
@@ -435,7 +435,7 @@ impl IddPushCapturer {
|
|||||||
|
|
||||||
/// Block (bounded) until the driver has ATTACHED to the host ring (`DRV_STATUS_OPENED`) **and published
|
/// Block (bounded) until the driver has ATTACHED to the host ring (`DRV_STATUS_OPENED`) **and published
|
||||||
/// a first frame**, else fail so the caller can fall back to DDA (audit §5.1 +
|
/// a first frame**, else fail so the caller can fall back to DDA (audit §5.1 +
|
||||||
/// `docs/windows-host-rewrite-game-capture-bug.md` P3/Stage 1).
|
/// `docs/windows-host-rewrite.md` §2.5 — the GB1 game-capture fix).
|
||||||
///
|
///
|
||||||
/// Requiring the first frame — not just the attach — catches the *reconnect-into-a-broken-state* case:
|
/// Requiring the first frame — not just the attach — catches the *reconnect-into-a-broken-state* case:
|
||||||
/// a fullscreen game can leave the virtual display in a format/size that the driver's `publish()` guard
|
/// a fullscreen game can leave the virtual display in a format/size that the driver's `publish()` guard
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
//! environment before the host starts, and **for the knobs captured here the environment is constant for the
|
//! environment before the host starts, and **for the knobs captured here the environment is constant for the
|
||||||
//! process lifetime**, so a lazily-parsed global is equivalent to "parsed once at startup".
|
//! process lifetime**, so a lazily-parsed global is equivalent to "parsed once at startup".
|
||||||
//!
|
//!
|
||||||
//! **Goal-1 stages 1–2** (`docs/windows-host-goal1-plan.md`): stage 1 stood this up; stage 2 migrated the
|
//! **Goal-1 stages 1–2** (`docs/windows-host-rewrite.md` §2.2): stage 1 stood this up; stage 2 migrated the
|
||||||
//! genuinely-constant operator/dispatch knobs onto it (the dispatch-disagreement bug class: `idd_push`,
|
//! genuinely-constant operator/dispatch knobs onto it (the dispatch-disagreement bug class: `idd_push`,
|
||||||
//! `capture_backend`, `encoder_pref`, `render_adapter`, `no_wgc`, the vdisplay backend select — plus the
|
//! `capture_backend`, `encoder_pref`, `render_adapter`, `no_wgc`, the vdisplay backend select — plus the
|
||||||
//! plan-named `secure_dda`/`idd_depth`/`zerocopy`/`ten_bit` and the multi-site `perf`/`compositor`/
|
//! plan-named `secure_dda`/`idd_depth`/`zerocopy`/`ten_bit` and the multi-site `perf`/`compositor`/
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
//! `SessionPlan` — the per-session capture / topology / encoder decision, resolved **once** from
|
//! `SessionPlan` — the per-session capture / topology / encoder decision, resolved **once** from
|
||||||
//! [`HostConfig`](crate::config) (+ the handshake-negotiated bit depth) into a typed, logged value.
|
//! [`HostConfig`](crate::config) (+ the handshake-negotiated bit depth) into a typed, logged value.
|
||||||
//!
|
//!
|
||||||
//! **Goal-1 stage 3** (`docs/windows-host-goal1-plan.md`): before this, the Windows session decision was
|
//! **Goal-1 stage 3** (`docs/windows-host-rewrite.md` §2.2): before this, the Windows session decision was
|
||||||
//! re-derived at three call sites — the capture backend inside `capture::capture_virtual_output`, the
|
//! re-derived at three call sites — the capture backend inside `capture::capture_virtual_output`, the
|
||||||
//! process topology in `punktfunk1::should_use_helper`, and the encode backend in
|
//! process topology in `punktfunk1::should_use_helper`, and the encode backend in
|
||||||
//! `encode::windows_resolved_backend` — each reading [`config`](crate::config) independently, with no
|
//! `encode::windows_resolved_backend` — each reading [`config`](crate::config) independently, with no
|
||||||
|
|||||||
@@ -147,7 +147,7 @@ pub(crate) fn adapter() -> Option<iddcx::IDDCX_ADAPTER> {
|
|||||||
/// iGPU+dGPU box the OS may otherwise pick the iGPU to render the virtual monitor, so the host's shared
|
/// iGPU+dGPU box the OS may otherwise pick the iGPU to render the virtual monitor, so the host's shared
|
||||||
/// ring textures (created on the NVENC dGPU) can't be opened → `DRV_STATUS_TEX_FAIL` → the host's 20 s
|
/// ring textures (created on the NVENC dGPU) can't be opened → `DRV_STATUS_TEX_FAIL` → the host's 20 s
|
||||||
/// black bail. Pinning the render adapter to the encode GPU fixes that. Unconditional — NOT the
|
/// black bail. Pinning the render adapter to the encode GPU fixes that. Unconditional — NOT the
|
||||||
/// SudoVDA-parity default-off branch (`docs/windows-host-rewrite-audit.md` §4.2). Returns
|
/// SudoVDA-parity default-off branch (`docs/windows-host-rewrite.md` §2.8). Returns
|
||||||
/// `STATUS_NOT_FOUND` if called before the adapter exists.
|
/// `STATUS_NOT_FOUND` if called before the adapter exists.
|
||||||
pub fn set_render_adapter(luid_low: u32, luid_high: i32) -> NTSTATUS {
|
pub fn set_render_adapter(luid_low: u32, luid_high: i32) -> NTSTATUS {
|
||||||
let Some(adapter) = adapter() else {
|
let Some(adapter) = adapter() else {
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ static WATCHDOG_STARTED: AtomicBool = AtomicBool::new(false);
|
|||||||
/// without a cooperative REMOVE (crash / `TerminateProcess`) left its virtual monitor + swap-chain
|
/// without a cooperative REMOVE (crash / `TerminateProcess`) left its virtual monitor + swap-chain
|
||||||
/// worker + pooled D3D device wedged in WUDFHost until the next host start's CLEAR_ALL, and a
|
/// worker + pooled D3D device wedged in WUDFHost until the next host start's CLEAR_ALL, and a
|
||||||
/// not-restarted host left the orphan monitor in the desktop topology indefinitely
|
/// not-restarted host left the orphan monitor in the desktop topology indefinitely
|
||||||
/// (`docs/windows-host-rewrite-audit.md` §4.1). This thread closes that: if no IOCTL arrives for
|
/// (`docs/windows-host-rewrite.md` §2.8). This thread closes that: if no IOCTL arrives for
|
||||||
/// `WATCHDOG_TIMEOUT_S` while monitors exist, it departs them all.
|
/// `WATCHDOG_TIMEOUT_S` while monitors exist, it departs them all.
|
||||||
///
|
///
|
||||||
/// (A WDF `EvtFileClose` on the control handle would be more immediate — the plan's preferred §3.4
|
/// (A WDF `EvtFileClose` on the control handle would be more immediate — the plan's preferred §3.4
|
||||||
|
|||||||
Reference in New Issue
Block a user