We had to prove to ourselves that direct, unbuffered output of various GDI primitives (the geometric shapes) for the Radeon HD 5870 and the Radeon HD 5750 took much longer under Windows 7 than it did on other graphics cards. Before we tried to isolate the causes more precisely, we needed to examine the symptoms more carefully, because that'd determine the users most likely to be affected, and thus, whether or not anyone is likely to run into trouble as a result. This is not the kind of problem that every user is bound to encounter, but those who do have to cope with reduced 2D functionality can’t help but feel like helpless bystanders in the middle of a demolition derby.
Problems with Direct Drawing
As reported in Part 1 of this story, the main performance issue for the latest ATI cards centers on the output of lines, curves, ellipses, and polygons. We could only measure about 4,000 curves per second on the Radeon HD 5870 running under Windows 7, without individual buffers for the display device. When we moved a single graphics object consisting of 50 curves in real-time with help from the ROP, it could only redraw 25 individual instances per second while it was in motion (remember, though, that the XOR technique used to make objects disappear from their previous position requires a second redraw, so this is actually 50 operations).
If the object to be moved exceeds 100 curves, then the total number of curves to redraw (5,000 per second, given 100 curves at 50 operations per second) exceeded what the Radeon HD 5870 could handle! Ornaments and clip art elements normally consist of more than 100 curves, making a flicker-free drag of such objects (“float”) impossible. This causes major problems for productivity and functionality, even for the most basic graphics programs.
In addition, many applications use such simple graphics commands that developers see no need to buffer them, as long as direct output to the display behaves reasonably well. These are the programs hardest hit on the Radeon HD 5780.
Problems Drawing to a Buffer
Even when programs use their own internal buffers and handle updates for various types of geometric forms, you may encounter noticeable performance issues that lead to slow output. Likewise, the block-level transfer of buffer contents (called BitBlt, pronounced “bit blit”) also slows to a crawl.
Which Types of Programs Are Affected?
In short, every 2D program that emits GDI commands to draw objects on-screen can fall prey to this issue, particular when they must render lots of drawing objects. This also holds true for programs that manipulate graphics information, such as drawing programs, project planning software, and even productivity applications (like elements of the Microsoft Office suite).
For Which Programs Did We Find Concrete Issues?
- CorelDraw, Adobe illustrator, Adobe Freehand MX, Nemetschek AllPlan (2D functions)
- Adobe Photoshop CS3/CS4 (general vector objects on various layers)
- Microsoft Publisher, Microsoft PowerPoint, and various home layout packages
- Microsoft Excel when rendering larger charts, or big spreadsheets with area fills
- Various construction tools, including those for electrical, plumbing, and HVAC drawings
- Various industry-specific tools (drawing annotations, site plans, landscaping plans, etc.)
We’d also like to observe that all of these programs run reasonably well on other current consumer-level graphics cards. We’re not trying to suggest that these applications need workstation-class cards from the FireGL or Quadro families, either. In fact, we got satisfactory results from numerous low-cost graphics cards priced under $50. Neither craftsmen nor real estate companies need buy ATI's or Nvidia's stack to solve these problems.
Which Programs Are Generally NOT Affected?
- All 2D programs that use Direct2D to render 2D graphics (and don’t work in XP)
- All 3D programs that use Direct3D and that don’t output 2D content
- All programs that use OpenGL for 2D rendering
Summary and First Set of Conclusions
Our best advice to you is to patiently wait for new drivers (which we have in-house and are currently testing), and only then decide which of the problems we document will affect your apps. There’s no need for an emotional response. These issues affect only 2D performance for Windows 7 when GDI or GDI+ are called upon to render 2D graphics info. Apps that run under Windows XP, on the other hand, will almost always fall prey to these problems. Finally, there’s the issue of which graphics primitives actually benefit from hardware acceleration (some do, some don’t).
Because the Radeon HD 5750 is also subject to these troubles, suggesting a driver issue rather than a more fundamental hardware issue (a suspicion ATI confirmed for us in Part 1), it's very likely that the entry-level 5000-series cards launched last month are subject to the same conclusions. Thus, even if what we've covered is not a widespread epidemic among all new graphics cards, it can still be a serious problem for those affected. This is why we believe it’s so important for the vendors to address their software as soon as possible.
- Introduction: Why GDI Output For 2D Graphics Remains Relevant
- The 2D GDI For Windows XP Through Windows 7, In Detail
- 2D Graphics Output Using GDI: Direct Or Buffered?
- The Radeon HD 5000's Symptoms And Their Relevance To Windows 7
- Tom2D: Our Simple 2D GDI Benchmark
- Tom2D: Text Output
- Tom2D: Line Output
- Tom2D Splines/Bézier Curves
- Tom2D: Polygons
- Tom2D: Rectangles
- Tom2D: Ellipses
- Tom2D: Blitting
- Tom2D: Stretching
- UPDATE: ATI Steps Up With A Hotfixed Driver