-
Notifications
You must be signed in to change notification settings - Fork 2.3k
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
Add Widevine support in Arm64 Windows #28318
Comments
@marcpems mentioned Arm64EC as a potential option for loading the Widevine x64 DLL. |
Worth noting up front that Arm64EC is only MSVC today will produce that ABI although the Clang-cl tool has some work to support it. For linking it must be MSVC linker today. Arm64EC will compile and link both intel and Arm instructions to use and x64 compatible ABI, so calling directly from Arm code to intel will just work within the same binary or across binaries. That has the potential to allow the widevine x64 dll to load and run within an Brave browser built for Arm64EC. Performance of EC is much better than X64 emulated because all system calls (from Arm or X64) are direct and not going through a shim. Arm64EC is considered a native ABI for Windows on Arm. Would this be an option to explore for Brave? |
@marcpems we'd need VS 2022 for that, right? We're currently on 2019. |
It will work with Visual Studio 2019, but for the best compatibility VS 2022 is the way to go (especially when targeting Windows 11). You should see The Component ID for installing the workload is |
Do I understand correctly that with Arm64EC we'd compile the entire Brave browser with MS's toolchains instead of clang? If yes, that seems like a hefty price to pay just to get one DLL working. |
|
Thank you @snickler. Could it be that LLD doesn't yet support Arm64EC? At least I'm getting
|
Hmmm which triple are you using? Also, I wonder if this is more of a Rust issue? |
|
I'm assuming it also causes issues if you strip off the msvc version? |
Yes. I need to check whether it's even possible to compile a simple Hello World program to Arm64EC with llvm. |
It appears to me that at least parts of llvm don't yet support Arm64EC. The machine type |
Well Darn, it DOES seem that's the case for llvm-lib. There's a PR for it, which makes me wonder just which parts of llvm support targeting arm64ec since there's many references to it in the source, along with the referenced urls showing such. |
Yes, that PR seems to add the constant precisely to the place I linked to. I wonder whether they will merge it soon, whether that is the only change that's missing, and then how stable/production ready it will be. |
Qualcomm is working on adding ARM64EC support to LLVM. https://discourse.llvm.org/t/initial-patches-for-arm64ec-windows-11-now-posted/62449 I've reached out to Qualcomm and they have asked if we have any build recipes for Brave available so they can try to validate the implementation. |
@nsait-linaro yes - follow the instructions at https://github.com/brave/brave-browser/ and additionally install |
Comment from Pedro Justo about how Edge does it with Widevine:
|
There seems to be movement on the Chromium side for Widevine Windows Arm64 support: chromium/chromium@77efb41 |
And this is the latest widevine binary for win-arm64! https://dl.google.com/widevine-cdm/4.10.2557.0-win-arm64.zip |
That's great! And I just tested that the binary can in fact be loaded into Arm64 Brave :) At the moment, this is a manual process. We need to make it so it happens automatically for users. |
Great news! @mherrmann just to confirm, this probably means we are not blocked on ARM64EC support for LLVM? And #29112 is no longer relevant |
@nsait-linaro
As a general statement, I'd say this is correct. More specifically, we no longer need Arm64EC for Widevine. We may still decide to use it for on-demand updates (see #28380). But I'd say that's unlikely.
That's not correct. #29112 is the fix Microsoft are using for #28380, and I think we should follow it. |
Yes. :) |
@mherrmann @mihaiplesa Just wanted to follow up on the Windows Arm64 status. Any further updates on Widevine support? |
@nsait-linaro we've had some other more important issues come up. We've not forgotten about this and will update this issue as we make progress. |
Verification
Bitmovin.com -
Confirmed the content was streamed in High-Definition (HD) quality (through visual inspection)
Netflix - PASSED 1.new profile Confirmed the content was streamed in High-Definition (HD) quality (through visual inspection)
Hbomax.com - PASSED
Confirmed the content was streamed in High-Definition (HD) quality, through visual inspection
|
On Arm64 Windows, 32-bit Brave supports Widevine. But Arm64 Brave does not. The goal of this issue is to fix this.
This issue is important because it is a blocker for full native Arm64 support on Windows. For example, it is a pre-requisite for #29112.
A good URL for testing whether a browser supports Widevine is https://bitmovin.com/demos/drm.
Other browsers
Chrome doesn't offer a native Arm64 binary. Its 32-bit package supports Widevine.
Edge does offer a native Arm64 binary. It supports Widevine. Edge's installation directory contains a file called
widevinecdm_proxy.dll
. This gets loaded when a page with Widevine is opened in the browser. It's likely an Arm64 DLL that proxies the x86 Widevine implementation.The text was updated successfully, but these errors were encountered: