Conditional Rendering and Batch Counts


Would it be correct to assume that conditional rendering can only be used to reduce work on the GPU (vertex and fragment processing) but that all overhead introduced by batches, even if they might not be rendered, will stay the same?

So, when i use occlusion queries to prevent rendering non-visible geometry, i could use conditional rendering, if i only want to lower the GPU work-load, but if i also want to remove the overhead of additional batches, i would need to check the OQ result myself and don’t send the batches in the first place.

Or is the driver/GPU actually able to lower the overhead of batches which are discarded due to conditional rendering?


With my experience of using conditional rendering, I noticed not only GPU render time decreases, but also CPU time does.
So, I may assume, that these clipped batches overhead is decreased also. This is not surprising, considering driver’s commands queuing scheme.

That would be great news! I don’t expect the drawcalls to magically have no overhead at all, anymore, but if it is at least decreased, that would make conditional rendering a more widely applicable technique for optimization.


I started to play with conditional render about 2 years ago, while it was only as undocumented extension NVX_conditional_render and has only restricted Enable()/Disable() behaviour.
Even at that times conditional render gave us about 25-35 percents decreasing of total rendering time.
For now for some complex scenes with lots of trees/stones/etc sometimes it even twices FPS, and gave average boost of about 35-45 percents, even for CPU time.
For geo rendering of landscapes with high trees/bushes/buildings complexity it is really needed feature.