DirectX 5 introduced a radically new way to use Direct3D Immediate Mode. Previously, you had to fill and execute the execute buffers to accomplish any task. Now, you can use the DrawPrimitive methods, which allow you to draw primitives directly.
The IDirect3DDevice interface supports execute buffers. The IDirect3DDevice2 interface supports the DrawPrimitive methods. Despite the names of these interfaces, IDirect3DDevice2 is not a COM iteration of the IDirect3DDevice interface. Although there is some overlap in the functionality of the interfaces, they are separate implementations. This means that you cannot call IDirect3DDevice::QueryInterface to retrieve an IDirect3DDevice2 interface. You must call the IDirect3D2::CreateDevice method, instead.
For more information about the DrawPrimitive methods, see The DrawPrimitive Methods. For more information about working with execute buffers, see Using Execute Buffers. For more information about device objects, see Objects and Interfaces.