Not sure if this or has been suggested before, but:
Query buffer object - a buffer object that asynchronously stores the results of a given type of query carried out once per primitive or a given number (divisor) of primitives on a single rendering call.
I'm suggesting this mostly with occlusion queries in mind, though timer and sync queries might be useful too...
Pseudo-code:
CreateMultiQueryBufferObject(MQBO,OcclusionQuery)
BeginMultiQuery(MQBO,1)
DrawSomePrimitives()
EndMultiQuery



