panfrost: Implement instanced rendering
authorAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Thu, 27 Jun 2019 21:13:10 +0000 (14:13 -0700)
committerAlyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Mon, 1 Jul 2019 14:50:57 +0000 (07:50 -0700)
commit8d74749f812e64968d37266061293e204fea252c
treedf6d072cef24746172e57214b5a06d1cb4689749
parente9e22546ffd76c6d0738f12d702c54e7758d9e1f
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>
src/gallium/drivers/panfrost/include/panfrost-job.h
src/gallium/drivers/panfrost/meson.build
src/gallium/drivers/panfrost/midgard/midgard_compile.c
src/gallium/drivers/panfrost/pan_context.c
src/gallium/drivers/panfrost/pan_context.h
src/gallium/drivers/panfrost/pan_instancing.c [new file with mode: 0644]
src/gallium/drivers/panfrost/pan_invocation.c
src/gallium/drivers/panfrost/pan_screen.c
src/gallium/drivers/panfrost/pandecode/decode.c