Just to note. D3DX9 gives you free and DEBUGGED code what in most easy usage scenario do the next things:
1) Allocates texture with most close to your original bitmap format
2) Convert your data if no matched texture format found
3) Handles cases then your texture is
3a. either larger then supported by video-card dimentions of texture - then D3DX downsamples your data
3b. ether your texture dimentions are not power of 2 and current videocard do not support such textures - then D3DX stretches original data to fill square texture
4) Generated mip-map chain on your original data.

But you can still disable any of the "features" above.

PS. You can point in what memory pool texture should be allocated.