From 38a94b3cfd767f3aa8648ab529d963fe2357a620 Mon Sep 17 00:00:00 2001 From: Cole Leavitt <75138914+coleleavitt@users.noreply.github.com> Date: Sun, 25 Jan 2026 17:10:11 -0700 Subject: [PATCH] fix(linux/kms): skip NVIDIA cards for VAAPI on hybrid GPU laptops (#4473) --- src/platform/linux/kmsgrab.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/platform/linux/kmsgrab.cpp b/src/platform/linux/kmsgrab.cpp index a19eb72e..de140e6f 100644 --- a/src/platform/linux/kmsgrab.cpp +++ b/src/platform/linux/kmsgrab.cpp @@ -618,6 +618,14 @@ namespace platf { } } + // Skip Nvidia cards if we're looking for VAAPI devices + // This is important for hybrid GPU laptops where the display + // may be connected through NVIDIA but rendering happens on Intel + if (mem_type == mem_type_e::vaapi && card.is_nvidia()) { + BOOST_LOG(debug) << file << " is an NVIDIA card, skipping for VAAPI"sv; + continue; + } + auto end = std::end(card); for (auto plane = std::begin(card); plane != end; ++plane) { // Skip unused planes @@ -1623,6 +1631,14 @@ namespace platf { } } + // Skip Nvidia cards if we're looking for VAAPI devices + // This is important for hybrid GPU laptops where the display + // may be connected through NVIDIA but rendering happens on Intel + if (hwdevice_type == mem_type_e::vaapi && card.is_nvidia()) { + BOOST_LOG(debug) << file << " is an NVIDIA card, skipping for VAAPI"sv; + continue; + } + auto crtc_to_monitor = kms::map_crtc_to_monitor(card.monitors(conn_type_count)); auto end = std::end(card);