fix(windows/vdisplay): QueryHardwareCursor3 + per-mode-commit cursor re-setup — M2c findings
Durable results of the M2c on-glass bring-up (.173, 2026-07-22): - The base IddCxMonitorQueryHardwareCursor DDI slot is stubbed to STATUS_NOT_SUPPORTED on WDK 26100 — add the ...QueryHardwareCursor3 wrapper (wdk-iddcx) and drain it instead; v3 X/Y are only meaningful when PositionValid, so a position-invalid tick keeps the prior position. - Hardware-cursor setup is per-mode-commit: the OS silently reverts to a software cursor on every mode commit, so re-issue the setup on each swap-chain assignment (monitor::resetup_cursor, called from assign_swap_chain) or the query fails NOT_SUPPORTED forever. - One caps definition for initial setup and re-setup, resting at XOR FULL: the query delivers ONLY alpha shapes in every configuration (all three ColorXorCursorSupport levels, event-driven and 30 Hz polled) — masked/monochrome cursors never arrive. FULL keeps the frame cursor-free for ALL cursor types; the full-fidelity shape comes from the session-side cursor source in the host (design/remote-desktop-sweep.md §8). - Poll the query at ~30 Hz instead of pure event-wait: masked cursors never fire the data event, and the seqlock's position/visibility should stay fresh regardless. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -151,6 +151,17 @@ iddcx_ddi!(
|
||||
out_args: *mut iddcx::IDARG_OUT_QUERY_HWCURSOR,
|
||||
) @ IddCxMonitorQueryHardwareCursorTableIndex as PFN_IDDCXMONITORQUERYHARDWARECURSOR
|
||||
);
|
||||
iddcx_ddi!(
|
||||
/// The v3 hardware-cursor drain — same input, richer output (adds `PositionValid` /
|
||||
/// `PositionId` / `SdrWhiteLevel`). The base [`IddCxMonitorQueryHardwareCursor`] slot is
|
||||
/// stubbed to `STATUS_NOT_SUPPORTED` on current IddCx (observed on-glass, WDK 26100), so
|
||||
/// this is the live query DDI.
|
||||
IddCxMonitorQueryHardwareCursor3(
|
||||
monitor: iddcx::IDDCX_MONITOR,
|
||||
in_args: *const iddcx::IDARG_IN_QUERY_HWCURSOR,
|
||||
out_args: *mut iddcx::IDARG_OUT_QUERY_HWCURSOR3,
|
||||
) @ IddCxMonitorQueryHardwareCursor3TableIndex as PFN_IDDCXMONITORQUERYHARDWARECURSOR3
|
||||
);
|
||||
iddcx_ddi!(
|
||||
/// Set the preferred render adapter (LUID) for the virtual adapter.
|
||||
IddCxAdapterSetRenderAdapter(
|
||||
|
||||
Reference in New Issue
Block a user