I have a basic initial fix for the grass issue. It works as follows. The GLSL discard call site sets a flag that the pixel should be killed, but doesn't kill the thread. The thread is killed at the end of the shader.