panfrost: Implement instanced rendering

We implement GLES3.0 instanced rendering with full support for instanced
arrays (via instance divisors). To do so, we use the new invocation
helpers to invoke a triplet of (1, vertex_count, instance_count), rather
than simply (1, vertex_count, 1). We rewrite the attribute handling code
into a new pan_instancing.c file which handles both the simple LINEAR
case for non-instanced as well as each of the new instancing cases:
MODULO (for per-vertex attributes), POT and NPOT divisors.

As a side effect, we rework how vertex buffers are handled, duplicating
them to be 1:1 with vertex descriptors to simplify instancing code paths
dramatically. This might be a performance regression, but this remains
to be seen; if so, we can always deduplicate later with some added logic
in pan_instancing.c

Signed-off-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
diff --git a/src/gallium/drivers/panfrost/pan_invocation.c b/src/gallium/drivers/panfrost/pan_invocation.c
index 0d4945d..1d1a301 100644
--- a/src/gallium/drivers/panfrost/pan_invocation.c
+++ b/src/gallium/drivers/panfrost/pan_invocation.c
@@ -120,6 +120,7 @@
         tiler->size_y_shift = vertex->size_y_shift;
         tiler->size_z_shift = vertex->size_z_shift;
         tiler->workgroups_x_shift = vertex->workgroups_x_shift;
+        tiler->workgroups_x_shift_2 = vertex->workgroups_x_shift_2;
         tiler->workgroups_y_shift = vertex->workgroups_y_shift;
         tiler->workgroups_z_shift = vertex->workgroups_z_shift;