vbo/dlist: implement primitive merging
Merge consecutive primitives using the same mode while constructing the index buffer.
This improves performance a lot (x3 - x10) SPECviewperf13 snx-03 test by reducing the
number of draw calls per frame.
Here are some numbers for 4 of the tests:
| Num draw calls | GPU-load |
------|----------------|-----------------|
| Before | After | Before | After |
------|--------|-------|---------|-------|
test1 | 390k | 16k | 68% | 90% |
test2 | 370k | 16k | 40% | 90% |
test3 | 1.2M | 35k | 38% | 78% |
test10| 3.5M | 35k | 36% | 58% |
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7078>