Don't expand normals and positions to floats unless necessary.
Fix sign of Z component of position in through mode.
GCC fix