DX 9_3 hardware requirements:
http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876(v=vs.85).aspx
Quick recap of important features:
- SM 2.0+ (VS 2.a, PS 2.b)
- Texture size 4096x4096
- 16x anisotropic filtering
- 4x MRT rendering (very useful for deferred rendering)
- Occlusion queries
- Instancing
Here's the texture format support table:
http://msdn.microsoft.com/en-us/library/windows/desktop/ff471324(v=vs.85).aspx
Recap on supported formats (for 9_3):
- 32 bit float (4d, 2d, 1d)*1 + 3d only for vertex input
- 16 bit float (4d, 2d, 1d)*1
- 16 bit int (4d, 2d, 1d)*1
- Depth buffer only supported as render target (no depth texture reading)
- BC1, BC2 and BC3 (DXT1, DXT3 and DXT5)
- R8G8B8A8_UINT is the only supported 8 bit per channel format for vertex input (1d and 2d are only supported in texture sampling)
- No support for 10 bit per channel formats (vertex or texture)
*1) When used as render target, alpha blending is required in: 4d 16 bit float, 2d 32 bit float and 8888 formats only. Texture filtering is required in: 4d, 2d and 1d 16 bit integer formats + 8888 formats and DXT formats. Float formats do not require filtering.
Four render target simultaneous MRT rendering likely requires changes to mobile hardware. So far only Tegra drivers expose this functionality on mobile devices (not sure if others support it by hardware, but not have required OpenGL ES extensions). Tegra is also the only one supporting DXT compression. 32 bit per channel (128 bits per pixel) floating point textures, 16 bit integer textures/rendertargets can also require hardware changes (blending is required for 16f and 32f render targets, and filtering for 16 bit integers). Otherwise there doesn't seem to be anything the current mobile hardware isn't capable of.