The discard keyword (and depth-test for the same reasons) is discouraged on any GPU that performs early-z testing (generally, any modern GPU). This is because it causes a write to the depth buffer at the fragment shading stage at the end of the pipeline, as opposed to in the ISP near the beginning of the pipeline. This depth write causes the pipeline to stall as vertex processing must be halted to update the depth buffer.
An alternative is to use alpha blending, where fragments that should fail the depth test have their alpha set to 0 instead of discarding. This potentially may have some artifacting in the transition between fragments of differing alpha values. Because of the heavy performance implications of discard, it should only be used after carefully considering the performance/quality balance.
We have a section in our Performance Recommendations document that discusses our recommendations for the discard keyword. This document is in the process of being expanded and improved in areas including this.
The PowerVR Graphics SDK also has our Water demo, which includes source code, you may find that useful for your purposes.