This is the code review that follows on to D6945 and D6952, see those for
details on the overall status and how to test.
Only the volume draw code should be considered ready. Hair plugs into the
existing hair rendering code and is fairly straightforward. The pointcloud
drawing is a hack using overlays rather than Eevee / workbench.
The most tricky part in this code is the case where each volume grid has
a different transform, which requires an additional matrix in the shader and
non-trivial logic in Eevee volume drawing. In the common case were all the
transforms match we don't use the additional per-grid matrix in the shader.
There is some room for optimization and simplification here. The orco
transform for meshes could be changed to a matrix (but where to store the
matrix since there exists no DRW_shgroup_uniform_mat4_copy?). Even if the
transforms are different, it is most likely only a translation difference
so we could avoid doing the full transform in that case.