I'm interested in game development and 3D graphics; however, I'm not very experienced, so I apologize in advance if this comes across as ignorant or overly general.
The impression I get is that quite often the bottleneck in 3D games comes from the CPU having to make draw calls to the GPU. Culling seems to generally be performed on the CPU and then, for each frame, the CPU has to transfer the culled scene graph over to the GPU memory for rendering and display.
However, why can't culling be done on the GPU? It seems to be a very repetitive and predictable task that has to be done for every frame and would benefit from parallelization. Why not store the whole active scene graph in the GPU RAM; let the CPU just update what needs to be updated each frame (due to physics, animation, scripting, whatever); then fire a single 'draw' call to the GPU and have it cull and render everything? It seems to me it should be more efficient, because it would hugely reduce the amount of data transfer going on between CPU/GPU.