From 8d74749f812e64968d37266061293e204fea252c Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Thu, 27 Jun 2019 14:13:10 -0700 Subject: 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 --- src/gallium/drivers/panfrost/pan_invocation.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/gallium/drivers/panfrost/pan_invocation.c') diff --git a/src/gallium/drivers/panfrost/pan_invocation.c b/src/gallium/drivers/panfrost/pan_invocation.c index 0d4945d05b1..1d1a301d67c 100644 --- a/src/gallium/drivers/panfrost/pan_invocation.c +++ b/src/gallium/drivers/panfrost/pan_invocation.c @@ -120,6 +120,7 @@ panfrost_pack_work_groups_fused( 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; -- cgit v1.2.3