Hardware Acceleration
Sent and received video runs on the GPU when possible. The tables below show which path is used on each platform, by codec. Anything not covered runs in software.
Platform paths
Acceleration API by operating system
| OS | Encoding path | Decoding path | Vendors covered |
|---|---|---|---|
| Windows 10/11 | NVENC + AMF + Quick Sync (H.264, AV1; VP9 on Intel) | D3D11VA | NVIDIA, AMD, Intel |
| Linux | VAAPI + NVENC (H.264, VP9, AV1) | VAAPI + NVDEC | AMD (Mesa), Intel (iHD), NVIDIA |
| macOS | VideoToolbox (via the WebKit WebRTC stack) | VideoToolbox (via WebKit) | Apple Silicon, Intel Macs |
On Linux, VAAPI handles AMD and Intel. NVIDIA cards use NVDEC
directly, so the nvidia-vaapi-driver bridge isn't
needed.
Windows screen share picks codecs in this order: AV1 if the GPU supports it, then VP9 on Intel iGPUs (Kaby Lake and newer), then H.264 on any encode-capable GPU, then software VP9. Only Intel ships a VP9 hardware encoder, so NVIDIA and AMD systems skip the VP9 tier and go to H.264.
Hardware encoding by GPU
Sending video (camera and screen share)
| GPU family | H.264 | HEVC | VP9 | AV1 |
|---|---|---|---|---|
| NVIDIA: NVENC (Windows) | ||||
| RTX 50 (Blackwell, 2025) | Yes | Yes | No | Yes |
| RTX 40 (Ada Lovelace, 2022) | Yes | Yes | No | Yes |
| RTX 30 (Ampere, 2020) | Yes | Yes | No | No |
| RTX 20 / GTX 16 (Turing, 2018) | Yes | Yes | No | No |
| GTX 10 (Pascal, 2016) | Yes | Yes | No | No |
| GTX 900 (Maxwell 2, 2014) | Yes | Yes | No | No |
| GTX 600 / 700 (Kepler, 2012) | Yes | No | No | No |
| AMD: AMF (Windows) · VAAPI (Linux) | ||||
| RX 9000 (RDNA 4, 2025) | Yes | Yes | No | Yes |
| RX 7000 / Phoenix APU (RDNA 3, 2022) | Yes | Yes | No | Yes |
| RX 6000 (RDNA 2, 2020) | Yes | Yes | No | No |
| RX 5000 (RDNA 1, 2019) | Yes | Yes | No | No |
| RX Vega (2017) | Yes | Yes | No | No |
| RX 400 / 500 (Polaris, 2016) | Yes | Yes | No | No |
| Intel: Quick Sync (Windows) · VAAPI (Linux) | ||||
| Arc B-series (Battlemage, 2024) | Yes | Yes | Yes | Yes |
| Arc A-series (Alchemist, 2022) | Yes | Yes | Yes | Yes |
| 13th–14th gen Core (Raptor Lake, 2022) | Yes | Yes | Yes | No |
| 12th gen Core (Alder Lake, 2021) | Yes | Yes | Yes | No |
| 10th–11th gen Core (Ice Lake / Tiger Lake) | Yes | Yes | Yes | No |
| 7th–9th gen Core (Kaby / Coffee Lake) | Yes | Yes | Yes | No |
| 6th gen Core (Skylake, 2015) | Yes | Yes | No | No |
| 4th–5th gen Core (Haswell / Broadwell) | Yes | Partial | No | No |
| Apple: VideoToolbox (macOS) | ||||
| Apple Silicon (M1 and newer) | Yes | Yes | No | M3 and newer |
| Intel Macs (T2 chip, 2018+) | Yes | Yes | No | No |
On Linux, VAAPI handles H.264, VP9, and AV1 encode on AMD and Intel
GPUs. NVIDIA uses NVENC. NVENC is also the fallback on systems where
VAAPI isn't available, typically NVIDIA-only boxes without the
nvidia-vaapi-driver bridge.
Hardware decoding by GPU
Receiving video
| GPU family | H.264 | HEVC | VP9 | AV1 |
|---|---|---|---|---|
| NVIDIA: NVDEC (Windows D3D11VA · Linux CUDA) | ||||
| RTX 30 and newer (Ampere+) | Yes | Yes | Yes | Yes |
| RTX 20 / GTX 16 (Turing) | Yes | Yes | Yes | No |
| GTX 10 (Pascal) | Yes | Yes | Yes | No |
| GTX 900 (Maxwell 2) | Yes | Yes | 8-bit | No |
| GTX 600 / 700 (Kepler) | Yes | No | No | No |
| AMD: VCN (Windows D3D11VA · Linux VAAPI) | ||||
| RX 6000 and newer (RDNA 2+) | Yes | Yes | Yes | Yes |
| RX 5000 (RDNA 1) | Yes | Yes | Yes | No |
| RX Vega | Yes | Yes | Yes | No |
| RX 400 / 500 (Polaris) | Yes | Yes | No | No |
| Intel: Quick Sync (Windows D3D11VA · Linux VAAPI) | ||||
| Arc A/B series | Yes | Yes | Yes | Yes |
| 12th gen Core and newer | Yes | Yes | Yes | Yes |
| 7th–11th gen Core | Yes | Yes | Yes | No |
| 6th gen Core (Skylake) | Yes | Yes | No | No |
| 4th–5th gen Core (Haswell / Broadwell) | Yes | Partial | No | No |
| Apple: VideoToolbox (macOS) | ||||
| Apple Silicon (M1 and newer) | Yes | Yes | M3 and newer | Yes |
| Intel Macs (T2 chip, 2018+) | Yes | Yes | No | No |
These tables show what the GPU's hardware block supports. If the
kernel driver or runtime doesn't expose the codec (a Linux box
missing libva-drm, for instance), software handles it.
Detection runs on the first frame.
Notes
- What if my GPU isn't listed? Software encode and decode still work. Modern CPUs handle 1080p30 fine; older machines may want to drop screen share to 720p.
- Which codec does GameVox pick? One codec per call, negotiated by what both peers support. The sender's hardware-accelerated codecs win when available; the receiver decodes with whatever path matches.
- Why no VP9 encode anywhere? Only Intel ships a VP9 hardware encoder in consumer parts. NVIDIA and AMD have never added one. GameVox uses software VP9 by default on hardware that can't accelerate it.
- Browser users: The web client uses WebCodecs. Hardware acceleration there is controlled by the browser (Chrome, Edge, Firefox), not by GameVox. The tables above are for the desktop app.
- How to check what's actually being used:
Two places. (1) The voice channel's activity log shows the
codec, encoder name, and hardware/software flag for every video
stream. When someone starts a camera or screen share, a folded
sub-line under that entry reads e.g.
AV1 · av1_nvenc · hardware. Encoder swaps mid-stream (a hardware encoder falling back to software under pressure) show up as their own activity entry, so you can see exactly what changed and when. (2) The desktop client's log file. Windows%LOCALAPPDATA%\GameVox\logs\, macOS~/Library/Application Support/GameVox/logs/, Linux~/.gamevox/logs/. Useful lines to look for:[HWEnc] Detected:(what your GPU exposes),[NVENC] Function table loaded successfully (API X.Y)(NVIDIA driver/SDK version),[ScreenShare-Win] Capture backend:(WGC, DXGI, or BitBlt, the capture method actually in use),Selected encoder:(what the codec ladder picked),[FFmpegHW] Created(encoder opened successfully),[EncSelect] ... trial failed(a hardware encoder probe rejected the request and the ladder is falling through).