# Can GPU draw from one VB and upload to another VB at the same time? (OpenGL)

We have a working implementation of vertex double buffering, rendering from one buffer and uploading vertex data to next frame buffer at the same time.

However I am concerned that CPU spends quite a lot of time uploading vertex data. Is the upload blocked by video driver because it's busy with drawing?

Or is it caused by driver's pipeline using the frame N+1 buffers for internal rendering of the frame N-1 frame while the drawing thread is issuing commands for frame N and I should consider switching to triple buffering (however I seriously doubt that it can improve FPS)?

Or should I rather queue the frame N+1 vertex uploads and do them after frame N commands have been issued so that there are no blocks in driver?

It's just that the thread that uploads vertex data also does much other work and is now a bottleneck and I want to offload it as much as possible and definitely don't want to see it blocked by driver.

What you need is buffer orphaning. Before uploading new data, you first orphan the old buffer by passing NULL to a glBufferData() call.
Right after the glBufferData with NULL, you call it again with the actual new data.