Skip to content

[Req]: Improve Windows guest Retina/HiDPI support on macOS ARM #742

Description

@moreaki

Problem

Windows 11 ARM guests on macOS/Arm hosts are currently awkward to use with Retina/HiDPI displays and VMSVGA 3D enabled.

The local test system showed these specific functional issues:

  • Setting VMSVGA VRAM to 256 MiB did not work with the current ARMv8 PCI MMIO layout. The 256 MiB VRAM BAR left insufficient low 32-bit PCI MMIO space for the VMSVGA3 MMIO BAR, so the Windows guest display stack did not initialize normally.
  • A 5760x3240 Retina guest mode needs the additional VRAM. With the smaller practical VRAM configuration, resizing beyond a certain maximum screen size could produce gray or colorful display artifacts, consistent with insufficient framebuffer/surface memory for the requested mode.
  • macOS fullscreen/autoresize requested logical host sizes instead of the Retina backing-pixel guest mode, so resizing did not scale correctly and the guest did not reliably enter true Retina resolutions.
  • The Windows WDDM Guest Additions mode dropdown exposed the native Retina mode and then mostly legacy 4:3/5:4 fallback modes, with no useful 16:9 intermediate Retina modes.

Functional HiDPI Patch Series

I have split the functional HiDPI work into small pull requests so each subsystem can be reviewed independently:

  1. Expand ARMv8 MMIO32 for 256 MiB VMSVGA VRAM #743 Expand ARMv8 PCI 32-bit MMIO to support 256 MiB VMSVGA VRAM.
  2. GUI: request Retina backing size in macOS fullscreen #746 Request Retina backing-size guest modes in macOS fullscreen.
  3. Additions/WDDM: add Retina-scaled video modes #749 Add WDDM aspect-preserving Retina intermediate video modes.

These are the patches that directly address the user-visible Retina/HiDPI behavior tracked by this issue.

Supporting Fixes Found During the Investigation

The following fixes were found while making the macOS/Arm Windows guest test path buildable and stable enough to validate the HiDPI work. They are intentionally tracked separately from the functional HiDPI series:

Non-DXMT VirtualBox support fixes

DXMT and VMSVGA/DXMT support fixes

Performance Improvements Under Separate Validation

The macOS/Arm VMSVGA DX11 output path also showed high CPU cost from repeated readback and frontend repaint work. Those changes are performance improvements, not functional prerequisites for this HiDPI issue, and should be evaluated separately on top of the functional/stability baseline. They are currently draft pull requests until the throughput and latency impact is verified with reproducible 3D/UI benchmarks:

The reproducible benchmark source for this performance validation is https://github.com/moreaki/dxmtbench. I will update the performance pull requests with isolated results from that suite before treating them as final review candidates.

Validation

Local validation was done on a Mac Studio with an Apple Studio Display, running macOS ARM64 with a Windows 11 ARM guest:

  • vram=256
  • 3D acceleration enabled
  • VMSVGA VRAM BAR at 0xe0000000..0xefffffff
  • VMSVGA3 MMIO BAR at 0xf0400000..0xf07fffff
  • Guest Additions run level 3
  • guest mode 5760x3240x32

For the WDDM mode-list change, I also validated the same intermediate modes through the existing driver's custom-mode registry path. Windows Display Settings exposed:

  • 5120x2880
  • 3840x2160
  • 3200x1800
  • 2880x1620
  • 2560x1440
  • 1920x1080

Additional screenshot proof is attached in the issue comments for fullscreen Retina mode and the HiDPI mode dropdown.

Notes

The Windows Guest Additions WDDM driver patch still needs final compile/install validation in a Windows WDK environment. The local macOS ARM64 build tree cannot build VBoxWddm because PATH_SDK_WINSDK10 is not configured.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions