"I've written a lengthy article covering what I learned during the last two years building the Xegl display server. Topics include the current X server, framebuffer, Xgl, graphics drivers, multiuser support, using the GPU, and a new display server design. Hopefully it will help you fill in the pieces and build an overall picture of the graphics landscape."

You're missing one important thing here. D3D can fail to initialize, forcing things into a fallback mode. This is common with DirectX apps, where if you've got more than one window. Window A could be accelerated, Window B could be stuck in GDI mode, and you're not guaranteed that either or both or which will be accelerated or not, so you've got to code for both cases. Oh, and DirectX can tounce the GDI state and GDI can trounce the DirectX state due to no driver locking mechanism to synchronize state between seperate subsystems.