Pixels come from wl_shm (CPU) or GPU buffers imported through userspace DRM/KMS/GBM (iland). iland emulates connector/CRTC/plane/GBM. It never opens /dev/dri or /dev/kgsl.
On macOS Mode A, present is an in-window Metal layer while Aqua stays up. On Classic Desktop Replacement (Mode B dylib + wwn-igetty), WindowServer is down and iland presents fullscreen Metal. See iland and Desktop and LockScreen.
Drivers
| API | Apple GPU targets | Android |
|---|---|---|
| Vulkan | KosmicKrisp (Apple Silicon + macOS 26+ default), else MoltenVK | System or SwiftShader |
| GLES / GL | ANGLE | ANGLE or system |
KosmicKrisp is macOS only. iOS, iPadOS, visionOS, and tvOS use MoltenVK. No kernel DRM/KGSL ICDs. No opening /dev/dri or /dev/kgsl.
Platform ceilings
- tvOS GPU is available. OpenGL ES goes through ANGLE to Metal. Vulkan goes through MoltenVK to Metal. The Vulkan loader does not work on tvOS, so clients dispatch straight to the ICD (
WWN_VULKAN_LIBRARY). No KosmicKrisp. No IOKit. - watchOS present is SpriteKit GPU blit of SHM frames. watchOS GL/VK is blocked (no public Metal).
WWN_WATCHOS_METAL=1is research only and never in the store Watch IPA.
Settings → Graphics picks the ICD. Nested clients and waypipe follow that choice.