Noo, there is now variable in both functions that i don't understand. P1.PP in first code and m_Plane.D in C++ source. They must be some single floating point value from plane but what is it?

Maybe means this from plane equation:

function GetD(const p,n: P3f): single;
begin
//result:=-(a*x+b*y+c*z);
result:=-(n.x*p.x + n.y*p.y + n.z*p.z);
end;

Getting some results finally with the C++ function Not all perfect yet but now there is adjustments to do on test application...

Final edit: It all works now, all versions of now 3 different ones Of course it was faulty test application to cause. Properly rendered plane again after drawing its normal that didn't appear where it should've been...

Thanks all.

This being the fastest:
[pascal]function rayPlaneCollision(const rayOrigin, rayDirection,
planeOrigin, planeNormal: P3f; intersection: pP3f): single;
var d,numer,denom: single;
begin
result:=-1;
d:=planeNormal.x*planeOrigin.x+planeNormal.y*plane Origin.y+planeNormal.z*planeOrigin.z;
numer:=-planeNormal.x*rayOrigin.x-planeNormal.y*rayOrigin.y-planeNormal.z*rayOrigin.z+d;
denom:=planeNormal.x*rayDirection.x+planeNormal.y* rayDirection.y+planeNormal.z*rayDirection.z;
if denom=0 then exit;
result:=numer/denom;
if intersection<>nil then begin
intersection.x:=rayOrigin.x+result*rayDirection.x;
intersection.y:=rayOrigin.y+result*rayDirection.y;
intersection.z:=rayOrigin.z+result*rayDirection.z;
end;[/pascal]