From cea0a1e73a848bc56c0baecb1fb898e5132d1171 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 26 Feb 2019 12:09:00 -0800 Subject: [PATCH] libobs-d3d11: Disable NV12 textures if NVENC unavailable On NVIDIA devices, disable NV12 textures if NVENC unavailable just as a safety precaution. --- libobs-d3d11/d3d11-subsystem.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/libobs-d3d11/d3d11-subsystem.cpp b/libobs-d3d11/d3d11-subsystem.cpp index c224e7f4d..cfe77c1b0 100644 --- a/libobs-d3d11/d3d11-subsystem.cpp +++ b/libobs-d3d11/d3d11-subsystem.cpp @@ -281,9 +281,11 @@ void gs_device::InitDevice(uint32_t adapterIdx) /* check for nv12 texture output support */ nv12Supported = false; + bool geforce = astrstri(adapterNameUTF8, "geforce") != nullptr; + bool nvidia = astrstri(adapterNameUTF8, "nvidia") != nullptr; /* don't use on blacklisted adapters */ - if (astrstri(adapterNameUTF8, "geforce") != nullptr) { + if (geforce) { for (const char *old_gpu : blacklisted_nv12_geforce_gpus) { if (astrstri(adapterNameUTF8, old_gpu) != nullptr) { return; @@ -291,6 +293,17 @@ void gs_device::InitDevice(uint32_t adapterIdx) } } + /* Disable NV12 textures if NVENC not available, just as a safety + * measure */ + if (nvidia) { + HMODULE nvenc = LoadLibraryW((sizeof(void*) == 8) + ? L"nvEncodeAPI64.dll" + : L"nvEncodeAPI.dll"); + if (!nvenc) { + return; + } + } + ComQIPtr d3d11_1(device); if (!d3d11_1) { return;