I recently had issues with the precision of my depth render target (not the depth buffer itself), but that was related to lighting, not shadows. In general I believe you should have 24 bits or more to avoid error. What platform are you compiling your hlsl for? Different platforms have different data types available, but you can also encode a 32-bit float as a 32-bit color (rgba) or a 24-bit float as a 24-bit color (rgb), with an extra 8 bits you can use for something else.
Here’s my post about encoding a higher precision depth into a color render target if that’s what you need: [Solved] iOS 32-bit SurfaceFormat