diff --git a/app/streaming/video/ffmpeg-renderers/d3d11va.cpp b/app/streaming/video/ffmpeg-renderers/d3d11va.cpp index 8c0b8c02..19b722b4 100644 --- a/app/streaming/video/ffmpeg-renderers/d3d11va.cpp +++ b/app/streaming/video/ffmpeg-renderers/d3d11va.cpp @@ -155,10 +155,7 @@ D3D11VARenderer::~D3D11VARenderer() bool D3D11VARenderer::createDeviceByAdapterIndex(int adapterIndex, bool* adapterNotFound) { - const D3D_FEATURE_LEVEL supportedFeatureLevels[] = { D3D_FEATURE_LEVEL_11_1, - D3D_FEATURE_LEVEL_11_0, - D3D_FEATURE_LEVEL_10_1, - D3D_FEATURE_LEVEL_10_0 }; + const D3D_FEATURE_LEVEL supportedFeatureLevels[] = { D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0 }; bool success = false; ComPtr adapter; DXGI_ADAPTER_DESC1 adapterDesc; @@ -220,6 +217,13 @@ bool D3D11VARenderer::createDeviceByAdapterIndex(int adapterIndex, bool* adapter hr); goto Exit; } + else if (adapterDesc.VendorId == 0x8086 && featureLevel <= D3D_FEATURE_LEVEL_11_0 && !qEnvironmentVariableIntValue("D3D11VA_ENABLED")) { + SDL_LogWarn(SDL_LOG_CATEGORY_APPLICATION, + "Avoiding D3D11VA on old pre-FL11.1 Intel GPU. Set D3D11VA_ENABLED=1 to override."); + m_DeviceContext.Reset(); + m_Device.Reset(); + goto Exit; + } else if (featureLevel >= D3D_FEATURE_LEVEL_11_0) { // Remember that we found a non-software D3D11 devices with support for // feature level 11.0 or later (Fermi, Terascale 2, or Ivy Bridge and later) @@ -846,6 +850,7 @@ void D3D11VARenderer::renderVideo(AVFrame* frame) return; } + // Ensure decoding operations have completed using a dummy fence. // This is not necessary on modern GPU drivers, but it is required // on some older Intel GPU drivers that don't properly synchronize