Metal for VR
Metal for VR
WWDC 2018
VR on macOS
- Support for HTC Vive Pro
- Two 1440x1600 AMOLED displays, at 615 ppi
- 78% resolution increase
- 37% ppi increase
- Stereo cameras for MR - SteamVR Tracking System 2.0
- Valve SteamVR runtime
- Valve OpenVR framework
VR Application
Rendering overview
Different rendering patterns depending on MSAA
Different rendering patterns unified ( new )
- New Metal texture type
MTLTextureType2DMultisampleArray
- Separate control of
- Rendering space
- Views count
- Anti-aliasing mode - Single draw, render, and resolve pass
2D multisample array textures ( new )
Application creates 2D MS Array texture for rendering VR content
Cross-Process Texture Sharing ( new )
IOSurfaces vs shareable Metal textures
- Ability to share Metal textures between processes
- Shareable Metal textures can have complex structure
- Shareable texture can be used only in scope of single GPU
- Enable advanced VR use cases, but are not limited to them
Standard vs sharable texture creation ( new )
Application creates 2D Array texture that can be shared with Compositor
Passing texture to compositor ( new )
Passing frame for presentation, using shareable Metal texture
Passing across process boundary
Compositor optimizations
Frame Pacing
- Single vs Multi threaded application
- Splitting command buffer encoding
- CPU + GPU optimization
Advanced Frame Pacing
- GPU workload examples
- Pose independent work 😡
- Multi-GPU workload distribution 😆
Multi-GPU Workload Distribution
- MTLEvent
- Mechanism of synchronizing GPU workloads
- Synchronizes across Command Queues - MTLSharedEvent
- Extends Event
- Synchronizes across GPU’s
- Can be shared between process
Increasing Resolution
Optimizing for Vive Pro
Reducing Fill Rate ⚠️
- Clipping invisible pixels
- Multi-resolution shading
- Monoscopic far-filed rendering
- Stereo shading reprojection
Clipping invisible pixels
Use StreamVr stencil mask to clip invisible pixels
Multi-resolution shading
- Contribution of edge and corner regions
- Rendering edge and corner regions at reduced resolution
- Upscaling rendered regions to final resolution for submission