Still having problem with specular... floating point problem?
The specular bug might relates to floating point error.

I've changed the way calculating eye ray. I think it is correct now. But the depth is stored in RGB texture which might produce some error causing the specular shows up even on the face parallel to light direction!