[Mesa-dev] Viability of Mesa 21.0.2 with Windows 10 ARM - Snapdragon/Adreno

Jesse Natalie jenatali at microsoft.com
Mon Apr 19 01:48:37 UTC 2021

Like I said previously, most titles you'll find on Windows are not going to be OpenGL titles, and as such there's nothing to be gained for those titles by trying to leverage Mesa3D or the compatibility pack.

If you do have an app that uses OpenGL or OpenCL, I personally don't think there's going to be much value trying to build this code from source, for three reasons:

  1.  Unlike Linux, Windows includes in an inbox version of OpenGL32.dll. There's not a simple way to override such a thing. There is an ICD mechanism, but trying to use it involves some nonstandard steps (it's not just "ninja install" like it could be on Linux).
  2.  The compatibility pack is pretty up-to-date. As it's still early-in-life, we're currently updating it frequently, picking up the latest master branch with bugfixes (and new bugs), rather than keeping long-lived branches with back-ported targeted fixes only.
  3.  There's no additional functionality to be gained by building it yourself. There's nothing in the current distribution mechanism to disable any available functionality.

That said, currently if you're on a retail version of Win10, the compat pack that you'll have only works with Photoshop (to avoid potentially breaking other apps). If you're on an insider build, however, then it'll work for any app that you have. Feel free to let us know if you find OpenGL or OpenCL apps that don't work with it.

There's also https://github.com/pal1000/mesa-dist-win, which provides pre-built versions of Mesa3D code (or a framework making it easier to build) for Windows, if you do decide you want your own things.


From: Will Gaines <uatu2021 at outlook.com>
Sent: Sunday, April 18, 2021 6:25 PM
To: mesa-dev at lists.freedesktop.org; Jesse Natalie <jenatali at microsoft.com>
Subject: [EXTERNAL] Re: Viability of Mesa 21.0.2 with Windows 10 ARM - Snapdragon/Adreno

Hi Jesse, first I want to thank you for providing the most cogent and clear assessment of the problem because all the information I've found to date is piecemeal and I'm the first to admit I am not a professional or have extensive experience with these issues. I am approaching it from being a casual lifelong PC gaming hobbyist so the learning curve has been steeped.

To the third point first, WL3 was just an example. The first two points are the bulk of what I am trying to figure out.

1) Is it worth attempting to install/compile the full Mesa3D build on the system specifications detailed compared to what is already available via the OpenCL and OpenGL Compatibility Pack (I have this along with the preview Adreno 680 GPU driver)? Not necessarily specific to a title like WL3, but would I at least have more options to tweak graphics settings?

2) If the former point is affirmative and there could be more potential in an independent installation of Mesa3D, is there anything to consider outside the standard Windows installation guide given the ARM architecture to set it up? I guess what I'm getting at is that if I can experiment more with a separate install than the pack, I want to know if I can just follow the basic instructions or need to approach it differently like with WSL.

I very much appreciate you bearing with me particularly as I am not coming at this from someone with experience and practice but just a side project to see if I can do more with what I have. Any additional information is greatly appreciated; thank you again.

From: Jesse Natalie <jenatali at microsoft.com<mailto:jenatali at microsoft.com>>
Sent: Sunday, April 18, 2021 8:06:00 PM
To: Will Gaines <uatu2021 at outlook.com<mailto:uatu2021 at outlook.com>>; mesa-dev at lists.freedesktop.org<mailto:mesa-dev at lists.freedesktop.org> <mesa-dev at lists.freedesktop.org<mailto:mesa-dev at lists.freedesktop.org>>
Subject: RE: Viability of Mesa 21.0.2 with Windows 10 ARM - Snapdragon/Adreno


I think there's a bit of a misconception here.

First, Microsoft has recently been engaging with Mesa3D to build the OpenCL(tm) and OpenGL(r) Compatibility Pack<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.microsoft.com%2Fen-us%2Fp%2Fopencl-and-opengl-compatibility-pack%2F9nqpsl29bfff%3Factivetab%3Dpivot%3Aoverviewtab&data=04%7C01%7Cjenatali%40microsoft.com%7C70fdfce463bf4e211ed608d902d1e5e5%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637543923527528454%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=OfnwSJRBQ0P8AoMWgdQ%2Bze12UHvn0Fi1zzzo%2FxftQiA%3D&reserved=0>. This provides some level of x86, x64, arm32, and arm64 support for OpenGL (and OpenCL) on Windows devices with no native drivers for these APIs (e.g. the Samsung Galaxy Book S).

Second, in any given application process, the host code executing on the CPU all needs to be the same architecture. So, if you're running an x86 game, you'd also need to be running an x86 graphics driver, all of which need to be emulated. There's some exceptions to this rule, where we've enabled some high-frequency code to be specially-compiled to the native platform instruction set (called CHPE [Compiled Hybrid Portable Executable] for x86, or ARM64EC for x64). If you're running a DirectX game, both the D3D runtime and driver should've been built this way, but the application code would still need to be translated at runtime. The compatibility pack mentioned above doesn't yet have CHPE/ARM64EC builds, but we're looking into it.

Third, I doubt Wasteland 3 is an OpenGL game. PCGamingWiki<https://nam06.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.pcgamingwiki.com%2Fwiki%2FWasteland_3&data=04%7C01%7Cjenatali%40microsoft.com%7C70fdfce463bf4e211ed608d902d1e5e5%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637543923527538446%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=G9D0qCo%2FRgEZiGXa7tgKDVEXtnqRS1OBgaapaYARtwg%3D&reserved=0> indicates it's D3D11. Mesa3D currently only has API implementations for OpenGL, Vulkan, and D3D9, and on Windows, the only drivers available are software (swrast/llvmpipe) for GL/VK or layered (zink/d3d12) for GL.


From: mesa-dev <mesa-dev-bounces at lists.freedesktop.org<mailto:mesa-dev-bounces at lists.freedesktop.org>> On Behalf Of Will Gaines
Sent: Sunday, April 18, 2021 5:51 PM
To: mesa-dev at lists.freedesktop.org<mailto:mesa-dev at lists.freedesktop.org>
Subject: [EXTERNAL] [Mesa-dev] Viability of Mesa 21.0.2 with Windows 10 ARM - Snapdragon/Adreno

Hello and greetings; please indulge me as I'll probably come across as an idiot, but I can't seem to get a straight answer regarding what I've been trying to do. I sincerely hope someone will be able to lay out clearly if I'm on a fool's errand which is fine because I can stop wasting my time.

Briefly, I picked up a Samsung Galaxy Book S with the Snapdragon 8cx/Adreno 680 build running Windows 10 on ARM. Based on everything I've understood, while the hardware isn't terrible, the architecture and MS struggling with 64-bit x86 emulation is what could be holding it back from being a serviceable machine for some gaming. I didn't really get on this until I hopped on Windows Insider and went to the 21359 build in the Dev Channel. I've gotten stable runs of games like Wasteland 3 on low settings but feel like there's either a solution or someone has looked and found it a dead-end to get better performance.

Long story short, I think Mesa3D might work but I've combed through documents and logs regarding compatibility with Windows 10 ARM and an Adreno GPU. The latest release suggests it's possible, but before I put any more time into it I wanted to know if anyone had experience along these lines: can the dev build features support everything needed to set up and has there been any roadblocks? Thanks for hearing me out, I appreciate it.

Scott free
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20210419/15dfa915/attachment-0001.htm>

More information about the mesa-dev mailing list