Realtime (75fps+) raw image streaming

I’ve been experimenting with ways to get a 1080p or higher raw (RGBA buffer data) texture stream captured off-thread (10-20ms operation) and streamed on to a UTexture2D for use as a texture on a quad in the game world. This is a VR project so it needs as close as possible 0 impact on frame rates.

I almost have it working well enough for 75fps VR, but I’m struggling to lower the impact on the Game Thread and RenderThread, since Lock MemCopy and Unlock is taking around 5ms for 1080p which is too large percentage of a 13ms frame. Is there a way to prepare a UTexture2D object completely off-thread and just mark it ready to read on the render thread? If not what is the lowest possible impact architecture to achieve something like this?

I’ve gotten nearly acceptable results using the
ENQUEUE_UNIQUE_RENDER_COMMAND_ONEPARAMETER
function to do the final memory copy directly in the render thread, but if anyone else has any other great optimizations, I’m all ears!

NB: memory locks can do some weird things to your frame stability. Also stat UnitGraph is king in profiling subtle changes.