Digital Foundry: Hands-on with Switch's 'impossible' Doom port
And can a PC specced to match Nintendo's hybrid deliver the same experience?
Just how powerful is Nintendo Switch and what are its limits? From Digital Foundry's perspective, it's been fun - and fascinating - to see the evolution of the platform, our expectations of the core Tegra X1 processor's capabilities exceeded by several key releases. But a Switch conversion of the Doom 2016 reboot? That's on a whole new level, and we had to check it out. We went hands-on with the game for about 40 minutes last week, our key question being: just how did they do that?
There are cutbacks and compromises of course, and to be clear, one in particular is going to sting. id's intention with the title was to recreate the best-looking 60Hz console shooter and on Switch, that isn't the case, with the experience pared back to half-refresh. Our session with the game was entirely in handheld mode and it still played well, with a mostly consistent frame-rate smoothed over with the same post-process motion blur found in the original. 30fps though? It's a reduction in fidelity that many won't be able to get past - but of course, it's what makes this port possible in the first place.
Bearing in mind that our observations are limited to handheld play, along with just 25 seconds of capture shown in last week's Nintendo Direct (curiously, the Japanese broadcast had some extra footage), this preview can't be exhaustive or definitive. However, there are some basic observations here: firstly, resolution is low - possibly very low. Harsh saw-tooth edges are smoothed off with what we suspect is the 8x temporal super-sampling anti-aliasing used in the original game. Doom was always soft but the Switch rendition is its blurriest presentation yet. We can't be entirely certain, but some areas of gameplay are blurrier than others, suggesting dynamic resolution scaling - a feature in place on all console versions to date.
However, many of the features of the post-process pipeline seem to remain in place - depth of field and motion blur to name just two. GPU-driven sparks and particles are still there as well. However, adding to the blur factor are low resolution textures, which seem broadly equivalent to PC's lowest setting - and possibly even lower in places. But it's definitely Doom with the same weapons, levels and enemies. The entire single-player campaign is in there and multiplayer is a download away. We played eight levels in arcade mode and of those we completed, their length was the same as the PS4 version, with no mid-level loading - despite the Switch's reduced memory.
By and large, the Doom stays at its 30fps target, but there is momentary stutter in the game's busiest areas. We would expect frame-rate stability and resolution to increase when docked, but we harbour few hopes of a sudden jump to 60fps. And to get some idea of Switch's inherent limits, we built our own PC surrogate of the hardware, running the original PC code. Emulating the Tegra X1, we have the new GeForce GT 1030 - 384 CUDA cores vs the X1's 256, meaning some big reductions in frequency to give what we would imagine to be broadly equivalent performance. ARM cores aren't possible on a Windows build, of course, so instead we used AMD Jaguar in the form of the Athlon X4 5350, low power mobiles cores in a rare desktop outing. Four gigs of RAM completes the build.
Booting up Doom, we dip into Windows Task Manager and deny the game access to one of the CPU cores, mirroring Switch's set-up where one of the four ARM Cortex A57s is not available to developers. In-game settings are dropped to the minimums, but with post effects active, while the resolution slider is pushed down to 50 per cent - giving us a 960x540 pixel count. The Switch surrogate is only very broadly comparable, but it illustrates a couple of things: first of all, the inherent limitations imposed by what is effectively tablet hardware. And secondly, just how scalable this port is.
Limiting the game to 30fps (we did this using Nvidia's adaptive v-sync at half refresh) is essential. The Cortex A57s are faster than the Jaguars clock-for-clock, but even with the AMD cores running at their stock 2.05GHz, we're very close to getting completely tapped out across the three cores running the game. Meanwhile, our massively downclocked GT 1030 can handle the game at low settings with 540p resolution, though depth of field kills performance. However, the more we play, the more performance bottlenecks we encounter, with a 20fps low. Doom on Switch isn't perfect, but it's more consistent than this - and we were playing in handheld mode, of course.
The developers of the Switch game have access to more features though and can tune the Doom engine specifically for the Nintendo hybrid. We're fairly confident that dynamic resolution scaling is used, possibly quite aggressively in handheld mode, and there are tweaks to post-effects. For example, screenshot comparisons showing depth of field reveal a lower precision rendition of the effect that's blurrier even than PC on its lowliest setting [UPDATE: there's an interesting NeoGAF post showing the the DOF effect is running at something like quarter res - or that the effect correlates to overall resolution, which may suggest a sub-540p resolution in this case]. However, on the flipside, idtech's virtual texturing system seems to be resolving artwork faster than our surrogate PC, despite running on solid state storage.
But the fact that the PC version of Doom can run playably on enormously constricted hardware shows that the core engine has a huge amount of scalability in there - enough to make a basic port possible, with further refinements to get the most out of the Switch's hardware. And we can confirm that this version isn't being handled by id software itself. Developer Panic Button - also handling the Switch version of Rocket League - is at the conn here for this conversion, further reinforcing the notion that there's a strong foundation in the original id codebase for third parties to work with.
In short, building our own PC Switch surrogate proved highly instructive in establishing just how the port may have been possible, but equally it demonstrates the profound system limitations that make some ports impossible for the Switch hardware. Dipping into Battlefield 1, with all settings reduced at the same 540p resolution, reveals a game that maxes all available CPU cores, lurching and stuttering between 10-30fps. We'd be very pleasantly surprised to see the Frostbite engine arrive on Switch any time soon.
Some final observations on the Switch game: firstly, it's great to have a first-person shooter of this quality make its way across to the Nintendo platform. Secondly, don't go in expecting equivalence to the other console versions - aside from gameplay, even aspects such as loading times are considerably longer than PS4 and Xbox One (our PC surrogate also had this issue, suggesting the CPU does a lot of work handling the assets as they load). And finally, we played using both the Pro controller and the Joycons. There are no motion-specific controls to the latter, and we also found that precision shooting was quite difficult on the tiny little sticks. It was business as usual with the Pro controller though, which worked beautifully.
Judged on its own terms, Doom on Switch could be a winner based on our gameplay tests so far - but our hands-on was entirely handheld-based. On the one hand, we expect more consistent performance and improved resolution when docked, but on the other, playing on the big screen may highlight the cutbacks more. We'll just have to see. However, the basic idea of bringing Doom - and indeed Wolfenstein 2 - to Switch is just so ambitious, we have to applaud the developers for the effort. Hopefully the final code will deliver.