A Direct3D software rendering device can only be used with explicit system-memory vertex buffers. To create a vertex buffer in system memory, include the D3DVBDESC_SYSTEMMEMORY flag in the description structure that you provide to the IDirect3D3::CreateVertexBuffer method.
If your application uses a hardware accelerated device, it's best to omit the D3DVBDESC_SYSTEMMEMORY flag. This allows the system to place the vertex buffer in memory for best performance, but hardware devices can work with vertex buffers regardless of their location.