Technically there's also a driver layer sitting between the DirectX 'client-side' API and the hardware, so it's even worse ;)
(the whole point of more modern 3D APIs, which move most of the expensive "abstraction-layer translation work" into the initialization phase is to "cut through" all those layers in the frame loop though)
Owie