D3D11 gave no explicit control over batching query resolve operations, so it appears that 'EndQuery' is the place that ResolveQueryData operations are inserted.
The D3D11 pattern of:
- Begin(query)
- Draw
- End(query)
For tasks such as Occlusion Culling results in this pattern in D3D12:
- BeginQuery
- Draw
- EndQuery
- ResolveQueryData
This appears to inhibit draw-level parallelism as a ResolveQueryData operation sits between every draw. Some means (waves hands) of batching up Resolves into one operation before first use would help immeasurably!