You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fix Video Super Resolution on systems without Windows 11 D3D12 interfaces
A user on Windows 10 with an RTX 3060 Ti could not stream at all, while
RTX 4070 Ti and 5060 Ti machines worked. The GPU was not the cause: the
3060 Ti host was the only one still on Windows 10.
D3D12CreateDevice() requested ID3D12Device9, an Agility SDK / Windows 11
interface, and failed with E_NOINTERFACE (0x80004002) since we ship no
Agility runtime. ID3D12GraphicsCommandList7 and
ID3D12VideoProcessCommandList3 had the same problem and would have failed
right after. None of the methods we actually call require those versions,
so lower each member to the minimum interface the code uses. ID3D12Device
and ID3D12GraphicsCommandList cover every call site;
ID3D12VideoProcessCommandList1 provides ProcessFrames1(). m_VideoDevice
stays ID3D12VideoDevice2 because CreateVideoProcessor1() lives there.
With video enhancement enabled, AV_HWDEVICE_TYPE_D3D11VA fell through to
D3D12VARenderer in both passes, so D3D11VA was never instantiated. Once
D3D12 failed there was nothing left but libplacebo/Vulkan, turning
"upscaler unavailable" into "no video at all". Latch the failure in
VideoEnhancement so D3D11VA can take over, and disable enhancement for
that session so the stats overlay does not advertise a missing upscaler.
Move the D3D12VA_ENABLED and IsWindows10OrGreater() checks ahead of device
creation and latch them too, which makes D3D12VA_ENABLED=0 reproduce a
system that lacks the required interfaces.
The FSR1 hooks were destroyed after pl_vulkan_destroy() and
pl_log_destroy(), a use-after-free of the pl_gpu they were parsed on that
also leaked their GPU resources on every renderer recreation. Release them
while the GPU is still alive. Parse the HDR shader variant only for 10-bit
streams, since the SDR hook was previously duplicated for no benefit, and
log a parse failure instead of silently rendering without the hook.
Video enhancement availability only reflected that FFmpeg advertises a
D3D12VA hwaccel, which stays true where the device cannot be created, so
the setting looked usable on affected systems. Grey out the checkbox, the
mode label and the mode dropdown when D3D12 is out of reach.
Finally, log the OS version at startup. Renderer availability depends on
it and the logs carried no way to recover it.
0 commit comments