Discovered Problems with Eyefinity

Hopefully you followed (or just read) our previous Frame Rating stories and learned about the problems that AMD CrossFire had with runt frames and artificial performance results.  As it turns out though in a CrossFire + Eyefinity system, the issues are very different and likely not as simple to fix.  I found three individual concerns when running our AMD Radeon HD 7970s in CrossFire at 5760×1080: dropped frames, frame interleaving and stepped tearing. 


Dropped Frames

This is the easiest problem to understand and demonstrate.  With our overlay that is applied to game frames as they leave the game engine, but before the graphics system takes hold of them, we are not only to accurately measure performance on the screen but discover missing frames.  This is possible simply because we know the expected pattern of colors and can easily detect when one of them is missing. 

Our test pattern follows a sequence of white, lime, blue, red, teal, navy, green, aqua, maroon, silver, purple, olive, grey, fuchsia, yellow, and orange.  These colors then loop and we can use the scan line length of them to measure frame rates very accurately.  But if a color is missing in the order, say white then blue, we know that lime was missing and completely dropped from user’s point of view.

Thanks to The Tech Report for the tiled screenshot idea!

These successive captured frames from Bioshock Infinite skip the lime, red, navy, aqua and silver colors indicated that every other frame in this sequence that is being rendered by the game is NOT being displayed.  With single display testing we would see RUNT frames in those places but it appears that with Eyefinity the problem is worse and those frames that the game engine submits are never displayed.

Why is this important?  Tools like FRAPS that measure performance at the same point as our overlay is applied are essentially DOUBLING the frame rate in this instance, giving unfair and unrepresentative results.  In our Observed FPS metrics those missing frames are accounted for correctly with lower frame rates.


Interleaved Frames

Dropped frames were easy to understand but we are about to get more complicated with our discussion.  Look at this:

Click to Enlarge

What you are seeing is one frame being displayed at the same time as another, interwoven together.  This new problem is being dubbed “interleaved frames” and is unique to Eyefinity.  I have witnessed this happening in every game we have tested though the games do shift between dropping frames completely and interleaving them together in this way. 

This problem not only causes lower perceived frame rates but also can cause some visual anomalies.

Click to Enlarge

This image from Skyrim shows the problem at work once again and if you look at the vertical lines of the structure you can clearly see the result of an interleaved frame: portions of the image alternate between positions back and forth rather than once with typical Vsync tearing.

After seeing this specific issue I spent a lot of time making sure it was not caused by or influenced by the overlay itself.  To double check we captured the output of the screens without the overlay enabled and through simple frame grabs we found interleaving continued. 

Click to Enlarge

This animated image shows (in a very slow motion fashion) how the frame interleaving is seen in gameplay.

For a full resolution of the above image, click here. (5MB)


Stepped Tearing

As it turns out, the interleaved frames also result in another visual anomaly we are calling stepped tearing.  Take a look at the image below:

Click to Enlarge

Not only are there intermixed frames in this screenshot but the horizontal tears are NOT level, instead they appear to grow or shrink.  As a result, and combined with the interleaving, these tears are more noticeable to the end user than the standard vertical sync tears and also are affecting observed frame rates.

Click to Enlarge

Look at this same Skyrim screenshot from above.  Notice on the left hand side you’ll see there are clearly five different frames slices (looking at the left side wood strut).  But the color bars on the overlay on the far left hand side only see three frames.  The first “slice” of that wooden support doesn’t start until somewhere in the middle of the mountain range area in the background. 


I was also fearful that perhaps our capture equipment was responsible for the errors and problems seen in these screen grabs and recordings.  To enforce the problem I picked up a camera that could record 120 FPS at 1280×720 resolution and recorded the Eyefinity configuration.  In this image below you can obviously still see the frame interleaving as well as the stepped tears.

Click to Enlarge

Clearly this problem is real and isn’t a result of our testing methods.  It was just nearly impossible to find before the creation of this overlay and the testing methodologies at work here. 


We have developed a working theory of what is happening and why we are seeing these interleaving and stepped pattern issues.  When running in a multi-GPU configuration of any kind the contents of the buffer from each of the secondary GPUs must be copied back to the primary card that has the display physically connected to it.  That card’s frame output buffer is then scanned out to the displays.

I believe that interleaving is caused by incomplete frame buffer copies from the secondary GPU to the primary GPU.  If the copy is slow or stalls at any point, the current scan out process (being drawn at the screen at that specific moment) starts to re-read the primary GPU’s frame buffer rather than the secondary GPU’s as it simply didn’t make it in time.  When you see a back and forth pattern of frame interleaving it indicates that the copy is actually “catching up” a bit but then falling behind yet again.  This may happen a few times before a third frame (from the primary GPU) is ready and is pushed to the buffer easily.

This is likely also the reason that we see dropped frames – the copy of data from the second GPU to the primary is slow enough that the next frame from the primary GPU is ready before a copy takes place.

It is also possible that the interleaving is an issue of synchronization and not bandwidth, but without more data and information from AMD it is hard to tell as an outside observer.

I do want to note before anyone comments ask this question: no enabling Vsync in the game or the control panel does NOT fix or change these problems.

The stepped tearing issue is caused by a different but related property – AMD does not appear to have a synchronization step on each scan line but instead on each pixel.  Rather than wait for each scan line to output before updating the frame buffer AMD allows the buffer to update at any point which would cause the variable height frame results we are showing you above.

I asked AMD for more information on why or how this is happening but they decided not to comment at this time.  When I approached NVIDIA they said only that they have enabled “locks and syncs” for their frame copies and scan line outputs on SLI.

UPDATE: We did finally get some feedback from AMD on the subject after quite a bit of back and forth.  Essentially, AMD claims the problems we are seeing are due only to synchronization issues and NOT from bandwidth limitations.  Since the file copies are done over the PCIe bus, only an instance of near 100% utilization on it would cause degradation – and the only instances of that would be from heavy system memory access.  However, if you are accessing main system memory with the GPUs in your PC then other performance bottlenecks are going to creep up before CrossFire scaling.

If that is the case then AMD should be able to fix the CrossFire + Eyefinity issues in the coming weeks or months.  A bandwidth issue would be much harder to deal with and could mean a fix would have never arrived for HD 7000-series users.

« PreviousNext »