Since it was first announced last fall, we've been waiting with anticipation for our first up-close look at Mantle, the new graphics programming layer being produced by AMD in collaboration with the folks at DICE. Mantle's aim is to offer game developers access to graphics hardware in a way that fits with how today's GPUs really work. Mantle promises to reduce the overhead involved in producing each frame of animation, potentially unlocking higher performance and smoother gameplay than the standard PC graphics API, Microsoft's Direct3D. If you're unfamiliar with Mantle and the hype around it, the best starting place is Cyril's intro to the topic.
Taking up the . . .
I think it's safe to say Mantle has incited an unusual amount of interest for a programming interface. PC gamers and game developers alike are intrigued to see progress on this front, probably because we all have a sense that glassy smooth animation in PC games seems to require beefier hardware than it should—and that PC gaming performance hasn't improved as rapidly as PC hardware has.
Naturally, then, we set out to test Mantle performance as soon as DICE released a patch late last week for Battlefield 4 that adds support for the new API. We had to wait a little longer for AMD to release the first Mantle-enabled graphics drivers, but the Catalyst 14.1 betas are now available to anyone who wants to try them.
Because these are beta drivers for an all-new API, they come with a host of caveats. AMD tells us the best performance is limited to some of its newest GPUs, particularly the Radeon R9 290 and 290X. The firm expects similar performance gains from any Mantle-capable GPU eventually—that is, anything based on the Graphics Core Next architecture, dating back to the Radeon HD 7000 series—but we're not quite there yet. Also, although Mantle generally performs well in BF4, there is a known issue with occasional stuttering and potential instability. Furthermore, a number of hardware configurations aren't supported with Mantle just yet, including the Enduro and Dual Graphics configs for laptops and Eyefinity multi-display setups with monitors in portrait mode. In other words, AMD has a lot of work left to do, and this first beta driver is just an early preview of what's to come.
Mantle isn't the only new capability in this driver, either. Catalyst 14.1 also includes frame pacing for multi-GPU solutions based on older GPUs, like the Radeon HD 7000 series and the R9 280X, when connected to Eyefinity multi-monitor setups and 4K displays. That feature remains limited to DirectX 10 and 11, not DX9, but we're happy to see it. We'll have to test it separately.
You may have gathered from the list of caveats for this driver that Mantle is an all-new thing. A lot of things we take for granted from Direct3D and OpenGL won't yet work with Mantle. AMD says it's been rebuilding all sorts of functionality, like multi-GPU and multi-display support, from scratch. One causalty of Mantle's novelty is our usual suite of graphics performance tools. Programs like Fraps and the FCAT overlay are built for Direct3D, so when we switch BF4 into Mantle mode, we lose the ability to monitor performance using those tools.
Happily, the folks at DICE have built some good instrumentation into the latest version of BF4, as Johan Andersson explains in this blog post. The screenshot above shows the plot the game can display in the corner of the screen depicting frame rendering times as they happen. Frame production times for the CPU and GPU are tracked separately in different colors, so it's easy to tell whether performance is mainly CPU-bound or GPU-bound. For instance, in the few seconds represented above, the CPU and GPU are pretty evenly matched, but the CPU is responsible for a few slower frames.
You can tell the game to log performance to a file, in which case it writes out a series of values for each frame: the CPU time, the GPU time, and the overall frame time. That's it. We're getting exactly the right raw data, and there's not an FPS average in sight. This is progress, folks. When I commended Andersson for these tools on Twitter, he said FCAT support will be coming in a later update. That should allow us to do proper multi-GPU testing. For now, we have what we need to do frame-time-based testing with single GPUs and Mantle right out of the gate.
Enabling Mantle is as simple as setting an option in the BF4 video menu and then restarting the game. Once it's up and running, Mantle seems to be almost entirely seamless. We were able to swich between windowed and full-screen modes without issue, so the API appears to play well with the rest of Windows, even as it's bypassing the Direct3D rendering path.
Although we haven't yet done any sort of detailed comparison, at least superficially, image quality in BF4 isn't altered substantially by switching between the Direct3D and Mantle renderers. Everything looks solid, well filtered, and properly rendered with Mantle, just as it does in D3D. This isn't a bad start for a new API, especially with an application as complex as Battlefield 4.
We're beginning our coverage of Mantle by focusing on CPU performance rather than GPU performance because we expect the biggest gains on the CPU side of things. AMD says most of the benefits should come in CPU-limited scenarios, mostly thanks to a reduction in the number of draw calls needed to render a scene. (Direct3D has become rather infamous for the number of draw calls it requires, and those generally translate into additional CPU overhead.) We do anticipate some more modest GPU performance gains from Mantle, as well, and we plan to explore those in another article.
|We discuss the GeForce GTX 970 memory controversy||21|
|You've goat to check out Silicon Power's new thumb drive||38|
|The TR Podcast 169 video: Win10, Elon's musk, and the gimpy GTX 970||0|
|In the lab: Dell's Venue 8 7000 tablet||22|
|Qualcomm posts record revenue, loses high-profile design||15|
|Intel refreshes high-endurance server SSDs with 20-nm NAND||15|
|The TR Podcast is live on Twitch right now||1|
|We'll be streaming the TR Podcast LIVE in one hour||1|