Down the Windows on ARM devkit rabbit hole
(UPDATE 2021-11-14: It's finally available on the Microsoft Store!)
Microsoft and Qualcomm recently teamed up to create a Snapdragon Developer Kit for Windows on ARM. I already have a WoA device, but it's an older processor that doesn't support hardware virtualization, and might not even support Windows 11, so I am excited to get my hands on this new devkit. It was announced first at Microsoft Build in this rather unusual presentation:
At first, I didn't understand why it was so awkward, or why these two Microsoft employees seemed to simultaneously dislike each other and not care about each other. I was incredulous, laughing and naively wondering if Microsoft had really let some passive-aggressive beef between two engineers slip out like this. Then, I showed the video to someone else, and they pointed out that it was a parody of the comedy celebrity interview series Between Two Ferns. That's when things clicked, and I appreciated the presentation even more. The devkit is only announced and shown off at the very end of the presentation, but the parody is worth a watch in its entirety as it is well-done.
Amusing presentations aside, every news source I could find simply said that the devkit would be available "later this summer". Well, it's currently very late into the summer, but we do still have an entire month left before "summer" "ends" according to a quick search. My excitement is palpable though as it feels like this summer never ends. So, I've been searching every week to see if the devkit was released without me knowing about it, and so far nothing. But, I did find some interesting things!
Firstly, there's these official pages on Qualcomm's website:
They don't really provide much more info, but they do have an option at the bottom of the page to sign up for the developer newsletter. This could be how I find out the release date! Sure enough, there's an option for Windows developers on the sign-up form. So, I signed up, and then waited. As luck would have it, I very soon received an email with more info about WoA!
Awesome! Except... the links in the email just led to 404 pages. Hoping they'd fix the issue after a few days, I retreated back to searching for info every now and then. Recently, on one of my searches, I came across this video that had slightly more information than the Microsoft video did about the devkit:
This reminded me to check the email again to see if the links were fixed. Sadly, they were not. Out of curiosity, I looked at the URL in the address bar to see if I could glean any useful info. The big button at the top of the email links to a .html page, but then it has a slash after that, and a query string. Surely it couldn't be that simple? Well, it was, as simply removing the slash fixed the URL and I got an actual webpage!! I am not sure how Qualcomm still hasn't fixed this, as it is their click tracker that redirects to this bad URL, but it should be easy for them to fix. Anyway, here's the working URL:
Tada! Lots of goodies and useful information. I have no idea how you are supposed to find this documentation otherwise. Two entries in the sidebar caught my eye: Adreno SDK for Vulkan, and Windows on Arm64. I decided to check out the Vulkan stuff first to see if there was perhaps finally a Vulkan SDK for WoA. After some clicking I got to this page:
Interesting! Two downloads look worthwhile, an "Adreno SDK v5.0 - Windows Installer" and an "Adreno SDK for Vulkan v1.05", totaling 371 and 115 megabytes respectively. I immediately opened both in new tabs, and then... got an Access Restricted message in each. Apparently I needed to create a Qualcomm Developer account in order to download these! Well, no matter, I'll use the same email I subscribed to the Developer Newsletter with. Sure enough, I got an account confirmation link, and I was able to proceed to a typical account creation form. Amusingly, clicking into the password field and then unfocusing it immediately shows all password requirements, and despite not having typed anything, it tells me I entered an invalid character, just to show me all the valid symbols. Pasting in a generated password from my password manager gets me through the sign up process and... wait. I have to wait, apparently.
This takes a good minute, and I almost think it's stuck and I'll have to break open devtools to see which of my extensions conflicted with it, but then I get redirected to another page! Which just says my registration is still in progress. Uh, I already knew it was in progress? Well, I guess it's better than waiting even longer on the previous page and not knowing if something broke. Interestingly, it lists which "applications" I have access to, which include Qualcomm.com, Qualcomm Developer Network, CreatePoint, and Chipcode. I have no idea what those last two are. Also, it's saying I'll be given a Qualcomm ID... does this mean I'll need to replace my registration email with a different ID in my password manager in order to log in? Only one way to find out, I suppose.
While waiting for the email to arrive telling me that my account had finally been created, I decided to go back to the documentation from earlier and check the other link for Windows on Arm64. Immediately, I am surprised in a good way! A major game engine is listed as one of the tutorials for Windows on Arm64. This gives me hope that we will see some games get native ARM64 builds. I'm not sure if Steam has backend options for ARM64 yet like they do with x86-32 vs x86-64, but I expect we'll get it eventually.
But anyway, above the tutorial for that game engine is a more general tutorial, "Getting Started with Windows on Arm64 Development". Looks like all the usual stuff I'd expect for setting up Visual Studio, though there is no mention of ARM64EC from what I can tell. I suppose that makes sense, given that ARM64EC will only work on Windows 11, whereas ARM64 will work on both Windows 10 and 11.
There is, however, interesting terminology in relation to the different types of cores within the processor. The high performance and high efficiency cores are referred to as "Gold" and "Silver" cores, respectively. There's also some good advice about memory barriers and Neon. Apparently Visual Studio supports Neon intrinsics, which I didn't know but I guess I should have assumed.
Back to my email, I got one! "You Qualcomm ID Registration has been approved" - uh, it was being scrutinized?? At this hour of the night? I sure hope not. The email also contains a password reset link for the password I literally just set in case I forgot it between now and then, and it contains my email address with the same casing as I entered it instead of lowercased. Hmm... I'm going to edit my password manager entry to match that case as well, just in case. My developer senses are tingling in a bad way.
Anyway, now back to downloading those SDKs! I click the Log In button from the Access Restricted page, use my password manager to fill the login info, and... excuse me?
This is the most frightening login process I have ever experienced. My bank isn't even this arcane. Warning? Do not close this screen? Verification code? My account could be disabled? Make sure my transaction ID matches the one shown here? WTF are they guarding here? I mean, I appreciate having 2FA on by default, but this is such an abrasive implementation. Well, anyway, I got the code and submitted it, so now I should start downloading the SDK, right? It's sure taking a long time to load the next page, that could be the download, right?
NOPE! Time to "Complete Your Profile" on a webpage brilliantly titled "qualcomm22" according to the tab name.
Should I even be sharing this screenshot? I mean, my account had to be "approved" and then I had to go through a risky sign-in process with a verification code just to get here. They really wanted to protect this from hackers. Or maybe they just really don't want people to even get this far. Anyway, I ticked some boxes and clicked Save, and waited another agonizing amount of time for the page to load.
Finally... Adreno GPU Product Kit License Agreement, or rather "PKLA PRODUCT KIT LICENSE AGREEMENT" in case ATM Machine and PIN Number weren't annoying enough. "YOU ARE ADVISED TO PRINT THIS AGREEMENT FOR YOUR RECORDS AND/OR SAVE IT TO YOUR COMPUTER." Alright, print to PDF, save to cloud storage, done. Right? Wrong. The entire first two pages of the PDF preview are taken up by nested links from the menu at the top of the page, with default CSS. The license agreement doesn't start until page 3, and it goes down to page 24. After that, there are two more pages of nested links from the footer, also without CSS, partially covered up by the Qualcomm logo in this horrific display:
Well, I mean, it contains the entire license agreement I guess, so I'll just save it and get on with things without reading it fully, like you do. Time to scroll to the bottom, click accept, and... wait, is that a Decline button? Haha, it's not often you see those!
I am morbidly curious as to what that Decline button does, but given the prior threat of disabling my account, I'm not going to risk it tonight. I tick the box, click Accept, and finally I get redirected to download the zip file. Success! Well, for one download anyway. Oh, on the download page, there's an option to opt-in for updates to receive a notification when the file is updated.
I assume that will notify me of new releases automatically? That's cool! So I click it and... oh. It just takes me to the developer newsletter signup. The one I got here from in the first place. Seriously?? You got my hopes up there! Well, I suppose the developer newsletters will still contain information about updates. Anyway, both downloads are done (and I didn't need to accept a second agreement), so it's time for me to experiment with these SDKs and see what's what.
I am most curious to find WoA binaries for Vulkan somewhere in these SDKs. The Vulkan SDK sadly only has Linux shared object files in 32 and 64 bit flavors (and presumably ARM in both cases), so let's try this Windows installer instead.
It's the mythical DOUBLE LICENSE for a single software download! Two completely different licenses for the same piece of software! I guess I shall abide by both simultaneously despite reading neither. After all, I do not have an option to Decline this time, I can only Cancel the installer. Or would that Cancel the license agreement? I know I know, I'll get on with it. Out of curiosity I scrolled to the bottom just in case it would nag me for not doing that, and based on the very ending, I am apparently also making an agreement not just with Qualcomm, but also with ARM. As in, the company ARM. The one nVidia is trying to buy. I suppose it makes sense they'd both be in here. I just hope nVidia doesn't try inserting itself into the relationship we have going here between me, Qualcomm, and ARM. That'd be too many unread license agreements for me. Anyway, upon clicking Agree...
Excuse me? You want to install to my DESKTOP?? Well that just won't do. You see, I moved my Desktop folder into my cloud sync folder. I don't want to sync this entire SDK to the cloud. But also, even if I hadn't done that... who installs software to their Desktop directory?? This is utterly bizarre. The entire experience from start to finish has been bumpy and obtuse, but this is just pushing it. This has to be an intentional ploy to sabotage the WoA initiative. Well, you won't stop me! I'll go through the arduous and arcane task of selecting a different directory to install to. I've heard only a few people have ever had to do this in their lives, and only when they prefer to install to a different drive letter, if that's even presented as an option. In fact, let me just see which drive of mine has the most storage... er... wait, this can't be right. It says at the bottom there, just above the Cancel button, that the space required is 0.0KB... this is a 375 MB installer using an off-the-shelf installer software, how did they get this wrong? Hm... perhaps my sabotage theory can be reworked into an incompetence theory. Never attribute to malice, they say...
And it's done! Although, it also installed some Qt files and a Desktop shortcut. Two things I did not want. Hm... actually, where does that Desktop shortcut even go to? What does it launch? Apparently, "AdrenoSDK\Bin\Browser.exe" - is that what the Qt stuff was for? Let's launch it and find out!
Uh... nothing's happening. Did I imagine the mouse cursor changing to the wait cursor after my second click? Let's try that again.
Nope, I definitely double-clicked and it definitely changed my cursor, and then did nothing. Let's open Process Explorer... no "Browser.exe" process showing up, I'll watch for it and try a third time.
You're kidding. It spawns a child process of itself, and immediately crashes on startup. It happens so fast I don't even have time to suspend it. But, I can see that the child process was launched with no command line arguments. Guess it communicates with the parent via stdin and stdout? Or some other IPC? Either way it's not working. Well, time to nuke that useless desktop shortcut I didn't want in the first place. It doesn't even have a custom icon. Guess we'll have to be our own Browser for now.
A quick search reveals what I had feared... nothing resembling Vulkan at all. Just a bunch of OpenGL libs, and they seem to be for x86-32 and x86-64 only. Where's the ARM stuff? And... oh no... is that... a Visual Studio 2010 directory? The more I examine the installed files the more I am regretting this. A lot of the file dates are from 2016. I don't know what I expected but it absolutely was not this. At least all of this is free for literally anyone to download and view for themselves, assuming they can get past the above gauntlet.
Wait... a glimmer of hope... in the Docs directory there's a file named "Adreno_DirectX_Developer_Guide.pdf"... could this be it? My WoA savior?
OH NO IT'S WINDOWS RT! AAAAAAAAAAAAAAAAAAAAAAAAAAAAA! The sabotage, the incompetence, the gauntlet, it all makes sense! No wonder they were guarding this with such intense security and had made every step of obtaining this so difficult and confusing, the entire download is cursed! Quick, uninstall it, before it's too late!
Actually I am curious to read more. (No, stop you fool, don't listen to it!) I've always been curious about Windows RT since I never got to try it. (Don't let it tell you sweet nothings, uninstall it!) It was discontinued before I even heard about it, and apparently it was 32-bit ARM only, and back before there was any x86 emulation, and you couldn't even sideload Win32 apps. (All good reasons to run the uninstaller, now!) I wonder... (No! Don't lose yourself!)
Wow, they had games running on it? (You've gone too deep!) This is fascinating... I need to look this up. This predates the Nintendo Switch? Amazing! Uh, I guess this is the end... of this blog post. I'll report back when I get the Snapdragon Developer Kit for Windows on ARM. Later this summer! I hope!