-
-
Notifications
You must be signed in to change notification settings - Fork 92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
GPU Video Decoding is Broken in Windows 7 #1011
Comments
I didn't have proper D3D11 hardware until recently. So far, I see there isn't even an attempt to use the decoder in one testing configuration, but I will try another one which should have better D3D11 support. |
Hardware decoding (essentially just H264) doesn't work on Windows 7 with any backend API in Supermium. I'm unsure about XP/Vista as they don't ship with that codec in the first place (or if their drivers even support hardware decoding, if a decoder is retroactively installed). |
Vista SP2 user here; a fully updated OS with Platform Update Supplement (PUS) has Windows Media Foundation (WMF), d3d11 and an OS-supplied h264 decoder; but Google have, since Chrome 25, blacklisted/disabled H/W-h264-decoding under Vista 😞 ; in
https://issues.chromium.org/issues/40953931#comment15
|
Encode capabilities have no bearing on whether or not decode is functional. While the GPU Internals page shows that, at least on a theoretical level, H264 decoding is supported; it still won't work under Windows 7 in Supermium, no matter what hardware or software configuration (Chromium 109 and below have no issues with hardware decoding). |
I looked through some old commits and realized that the D3D11 video decoder was never used on Windows 7 as it was blocked by an explicit version check; the DXVA video decoder was always being used instead. The problem is that the old decoder has a very different structure compared to the current decoders and can't be easily restored. I am looking into alternatives but finding the right one can be confusing. Until a few minutes ago, I was under the impression that DXVA2 was linked to D3D9Ex and thus needed Vista (as this page says: https://learn.microsoft.com/en-us/windows/win32/medfound/about-dxva-2-0), but then this example uses standard D3D9 and works on XP even though the readme for this sample says Vista is required: https://github.com/microsoft/Windows-classic-samples/blob/main/Samples/Win7Samples/multimedia/mediafoundation/dxva2_videoproc/dxva2vp.cpp Indeed the DXVA2 option looks like the most straightforward option as it works well with D3D9 and has the closest structure to the current D3D11 setup. |
I'm pretty sure that D3D11 decoding was first introduced in Windows 8 and never supplied to Windows 7. Windows 7 always used DXVA decoding instead, this is probably why @win8-png has working hardware decode as he uses Windows 8. MPC-HC cannot use D3D11 as a hardware decoder in Windows 7 either, it'll just tell you that it's only supported on Windows 8+. |
After doing some Googling for Someone said there that he runs Vivaldi with DXVA by using
On the other hand, he says that in Edge Browser it doesn't work so only |
Maybe the folks at the VLC project could help with this, or at least their code could be useful. The VLC player appropriately uses DXVA2 on Vista and 7 and D3D11 on Windows 8+. On another note, is the D3D11 decoder even necessary? For example, the nvidia driver's DXVA2 profiles include up to 12-bit HEVC and VP9, which covers almost everything typical and atypical in the wild. Does anyone have an authoritative list of the codecs that lack DXVA(2) support but can be decoded using D3D11? |
I also found out that the main Supermium fallback video decoder, the FFmpeg video decoder, also supports DXVA2. However this code isn't configured to build in Supermium at this time, and the documentation for the configuration script to change the build options for the build of FFmpeg is in the Google intranet. I will weigh my options. UPDATE: FFmpeg is configured properly, however there seems to be an issue receiving a valid pixel format which causes the hardware rendering to be non-functional. UPDATE II: Backing code on the Supermium side added which allows for initialization, but test Vista system has an issue decoding frames. |
Technical question; all browsers on Windows 7 always only supported DXVA2 h264 hardware decoding. However, DXVA2, even on Windows 7, is capable of leveraging h265, vp8 and vp9 (as long as the graphics processor supports those codecs) in video players and ffmpeg when using it to decode/encode. Does this mean, when Supermium uses ffmpeg for DXVA2 decoding now/at some point, that those other codecs could now be leveraged by the browser too? Big if true. |
Yes, as long as the other codecs prioritize FFmpeg, which I believe some do not, like VPx (which prefers the VpxVideoDecoder). This could be changed though. |
Are you still open for the ffmpeg implementation in the future? The D3D11VideoDecoder will obviously only work on DX11.0(+) graphics hardware and Vista(+), thus excluding older hardware and XP. |
Yes, I'll still do something for systems with weaker to no D3D11 support. But its final form has yet to be determined, and it will only be done after my WASAPI-to-winmm wrapper is completed, which should help prove the viability of wrapping modern interfaces around legacy interfaces while allowing Windows 2000/XP to use Core Audio instead of the old audio codepaths that are prone to breakage. |
It seems that D3D9 is better for gpu usage on playback?? |
and opengl without gpu-driver-bug-workarounds just break the browser |
My gpu supports directx 10.1 soo.... it wouldnt be able to use the new renderer? |
Well, I have executed this fix: https://github.com/ptrumpis/OpenCL-AMD-GPU/tree/main and now I seem to HAVE opengl |
I have installed this fix, it worked on detecting actual opengl version but Nope, Opengl Still breaks the browser...... |
wat is happening |
The GPU is always used, but a video decoder interface such as D3D11VideoDecoder or DXVA is needed to use the video rendering engine of the GPU, which is the most efficient method. Furthermore, the new binaries seem to have some issues on Windows 7 because of a codepath taken on that system and not on Vista. This will need to be corrected. |
Great! Looking forward to those fixes!!! |
And what about OpenGL? |
Edit the last post instead posting again so the thread could be kept cleaner. You can't do anything for now since your GPU doesn't support even D3D11_0 which is required for D3D11Decoder to work. You'd need to have VDAVideoDecoder in your browser to get acceleration, which seems to be removed in v117 or so. |
Describe the bug
In Windows 10 and Chromium 120, the browser is able to do GPU video decoding via D3D11VideoDecoder using NVIDIA Geforce GT 640.
However in Windows 7 and Supermium (126 R6), the browser won't use GPU for video decoding (D3D11VideoDecoder will fail).
This GPU supports HW encoding and decoding of H264.
GPU page report: GPU Internals.zip
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Supermium should initialize D3D11VideoDecoder for videos.
Screenshots
Desktop (please complete the following information):
OS: Windows 7 Enterprise x64 Service Pack 1 (Platform Update installed)
Browser: Supermium 126.0.6478.254 x86 (Shouldn't matter, right?)
GPU: NVIDIA GeForce GT 640 (475.14)
Additional context
I thought D3D11VideoDecoder actually worked in Windows 7 but for some reason I couldn't get it running (I installed DirectX Runtime to see if it makes a difference but it didn't).
The text was updated successfully, but these errors were encountered: