Announcing the OpenCL™ and OpenGL® Compatibility Pack for Windows 10 on ARM
Earlier this year, we announced a partnership with Collabora to build OpenCL and OpenGL mapping layers to DirectX 12, with the goal of supporting more OpenCL- and OpenGL-based productivity and creative apps where native drivers are not available. We have made tremendous progress since then, and today, we’re excited to talk more about the project and share one specific use case: Photoshop on Windows 10 on ARM.
In September, Chief Product Officer of Windows + Devices Panos Panay talked about the momentum from app partners embracing Windows 10 on ARM in a blog post. Today, Adobe has released a beta version of Photoshop—built natively for ARM64—for developers to bring their Photoshop plug-ins to Windows on ARM. Developers will need a paid subscription to Photoshop to discover and install this beta version through the Creative Cloud desktop app.
We’re excited to share that we are partnering with Adobe to bring GPU acceleration to Photoshop on ARM using the OpenCL and OpenGL mapping layers. The mapping layers are now available for download in the Microsoft Store as the OpenCL™ and OpenGL® Compatibility Pack. When you install the compatibility pack alongside your Qualcomm DirectX 12 driver, the ARM-native version of Photoshop can use the compatibility pack to take advantage of the GPU capabilities on your ARM device:
What’s in the OpenCL and OpenGL Compatibility Pack?
Unlike a traditional application that you’d find in the Store, this compatibility package isn’t actually an application, so you won’t find it in the Start menu. Instead, it’s a bundle of DLLs, all of which are produced by open source projects.
The OpenCL and OpenGL Compatibility Pack includes an OpenGL ICD implementation and an OpenCL compiler stack from the Mesa project, as well as an OpenCL ICD implementation from our own open source repository. The OpenCL compiler stack leverages even more open source components: It uses Clang/LLVM 10.0, the SPIRV-LLVM-Translator project, and the SPIRV-Tools project before converting OpenCL SPIR-V into Mesa’s NIR format and finally to D3D’s DXIL format.
The Mesa code currently comes from a fork. We’ll be working with the Mesa community to contribute this new driver upstream over the coming months – stay tuned.
What system requirements do I need to meet to be able to use the OpenCL and OpenGL Compatibility Pack?
To use the compatibility package on your Windows on ARM device, you’ll need to meet two requirements:
- Your OS version must be 19041.488 or higher. In practice, this means you should be on the latest version of the Windows 10 May 2020 Update (version 2004), or on the latest version of the Windows 10 October 2020 Update (version 20H2), or on the latest Insider build.
- The OpenCL and OpenGL Compatibility Pack must be installed on your ARM device. You can download it from the Microsoft Store. You can also check what version of the compatibility package you have installed by going to Settings > Apps > Apps & features > OpenCL and OpenGL Compatibility Pack > Advanced options.
Additionally, for the compatibility pack to support GPU acceleration, you will need an up-to-date DirectX 12 driver installed.
What OpenCL and OpenGL versions does the compatibility package support?
As mentioned in our initial announce, the OpenCL and OpenGL Compatibility Pack will support apps using OpenCL version 1.2 and earlier and OpenGL version 3.3 and earlier.
Can I use the OpenCL and OpenGL Compatibility Pack with apps other than Photoshop on ARM64?
The OpenCL and OpenGL Compatibility Pack is currently generally available only for use with the ARM-native version of Photoshop. We are investigating adding support for additional apps at a later date.
If you’re excited about more of your favorite OpenCL and OpenGL apps working on your Windows on ARM device and don’t want to wait, we have good news: Windows Insiders on all channels can download an Insider version of the compatibility package that allows more apps to use it. In fact, all apps using OpenCL version 1.2 and earlier and OpenGL version 3.3 and earlier can use the Insider version of the compatibility package.
Can I use the OpenCL and OpenGL Compatibility Pack on my x64 system as well?
We recommend using native OpenCL and OpenGL drivers on your x64 system. The OpenCL and OpenGL Compatibility Pack is intended to support more OpenCL and OpenGL apps in environments where native drivers are not available, such as on Windows on ARM. If you install the compatibility package in an environment where native OpenCL and OpenGL drivers are already available, the OpenCL and OpenGL mapping layers will have the following behavior:
- The OpenGL mapping layer will not be used. The native OpenGL driver will be used instead.
- The OpenCL mapping layer will be listed last on the list of OpenCL platforms. The app selects the OpenCL platform to use, and it is likely that the native OpenCL driver will be selected.
How can I give the team feedback on the OpenCL and OpenGL Compatibility Pack?
We’d love to hear from you, whether you’re using the generally available version or the Insider version of the compatibility package. The easiest way to share your issues and suggestions with us is by using Feedback Hub and including “OpenCL and OpenGL Compatibility Pack” in the feedback title.
Product is based on a published Khronos Specification and has been submitted to, and is expected to pass, the Khronos Conformance Process. Current conformance status can be found at www.khronos.org/conformance.
OpenCL and the OpenCL logo are trademarks of Apple Inc. used with permission by Khronos. Complete license details are available on the Apple website (https://developer.apple.com/softwarelicensing/opencl/).
OpenGL® and the oval logo are trademarks or registered trademarks of Hewlett Packard Enterprise in the United States and/or other countries worldwide.
Hello, can we expected that this will work with uwp on Xbox one? Thanks!
I did test this with several games on my Surface Pro X, both native ARM64 and x86 (emulated) and it is working great! Thanks! For reference i am getting 42fps in Doom3 timedemo1 at Full HD resolution and ultra settings (ARM64 version of Doom 3, which i compiled myself from the sources).
The quality of all native OpenGL driver is a waste, all OpenGL application should be mapped to DirectX.
nvoglv32.dll/nvoglv64.dll would say otherwise.
Why just OpenGL 3.3? It was released 10+ years ago. When macOS still supports OpenGL, it was 4.1. People blamed macOS’s “forever 4.1” for years.
So how in the world do we get the Insider version of the compatibility pack? Is it just as simple as signing up for the Windows Insider Program and clicking the download link in the Windows Store? I don’t know enough to know how to confirm that I got the correct version, so that’s why I’m asking.
Is there any chance this could be used to work around session 0 isolation to allow OpenGL rendering to be run from a headless server in a service (on an x86 machine with a server GPU running Windows server)? I am guessing not as no doubt the DirectX underlying it won’t be able to get a device context, but worth an ask. We have a specific use case for this and having to have a user logged in and EDID emulation turned on causes us quite a few headaches.