I changed the x,y based loop to a simple loop just moving pixels & that did not improve things so I turned to Lock & Unlock. The major speed improvement came when I changed over to using:-
Lock(buffer,true);
instead of just Lock(buffer);
The routine is 30% faster now
I don't know if a simple copy loop works on all hardware but for the moment I'm using
for(int y = 0; y < 76800; y++)
{
buffer.pixels[offset] = VScreen[offset];
VScreen[offset] = 0;
ZBuffer[offset] = FAR_CLIP;
offset++;
}