Hardware acceleration of GDI Bézier curves?

Discussion created by ckorda on Feb 5, 2008
Does the ATI driver "hook" or "punt" filled Bézier curves drawn by Windows GDI?

I have been trying for some time now to answer a question about ATI's GDI driver implementation. My question is: does the ATI driver accelerate filled Bézier curves drawn by Windows GDI? My experiments with various ATI devices suggest that while linear filled shapes are accelerated, curved filled shapes are not. The crucial evidence is that the CPU exhibits unexpectedly high usage during the filling of Bézier curves, which it doesn't exhibit during linear fills.

At the core of this question is the DrvStrokeAndFillPath function. According to the DDK documentation, this function allows the driver to "punt", i.e. reject shapes it deems too complex. The driver may do this even though it has notified GDI that it can handle Bézier curves. In this case GDI simplifies the shape--e.g. by converting curves to lines--and resubmits the simplified shape to DrvStrokeAndFillPath. GDI repeats this simplification process as needed until the fill operation succeeds. I hypothesize that this simplification process is the cause of the unexpected CPU usage, and the resulting unsatisfactory fill rate.

Best regards,

Chris Korda
Z Corporation


CPU: AMD Athlon 64 4000+, Pentium Core Duo
GPU: ATI Radeon X800XL and similar devices
OS: Windows 2000, XP