On Wed, Oct 26, 2016 at 4:14 AM, Samuel Pitoiset <samuel.pitoi...@gmail.com> wrote: > > > On 10/25/2016 09:49 PM, Ilia Mirkin wrote: >> >> What if instance_count = 1M? (It can happen.) > > > We allocate a giant space in the pushbuf in one shot. Well, anyways this is > not the optimization of the year, so I can drop it. :-)
There are limits to pushbuf sizes. Either drop it, or batch the instance draws. There's really very limited advantage to doing it this way though, since PUSH_SPACE is a no-op unless the pushbuf is full. > > >> >> On Tue, Oct 25, 2016 at 3:41 PM, Samuel Pitoiset >> <samuel.pitoi...@gmail.com> wrote: >>> >>> This might help CPU-bounds applications but should not have >>> any real effects for GPU-bounds ones. >>> >>> Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com> >>> --- >>> src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c | 8 +++----- >>> 1 file changed, 3 insertions(+), 5 deletions(-) >>> >>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c >>> b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c >>> index 69ca091..bc4ab9e 100644 >>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c >>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_vbo.c >>> @@ -598,8 +598,8 @@ nvc0_draw_arrays(struct nvc0_context *nvc0, >>> >>> prim = nvc0_prim_gl(mode); >>> >>> + PUSH_SPACE(push, 6 * instance_count); >>> while (instance_count--) { >>> - PUSH_SPACE(push, 6); >>> BEGIN_NVC0(push, NVC0_3D(VERTEX_BEGIN_GL), 1); >>> PUSH_DATA (push, prim); >>> BEGIN_NVC0(push, NVC0_3D(VERTEX_BUFFER_FIRST), 2); >>> @@ -730,10 +730,9 @@ nvc0_draw_elements(struct nvc0_context *nvc0, bool >>> shorten, >>> } >>> >>> if (nvc0->idxbuf.buffer) { >>> - PUSH_SPACE(push, 1); >>> + PUSH_SPACE(push, 1 + 7 * instance_count); >>> IMMED_NVC0(push, NVC0_3D(VERTEX_BEGIN_GL), prim); >>> do { >>> - PUSH_SPACE(push, 7); >>> BEGIN_NVC0(push, NVC0_3D(INDEX_BATCH_FIRST), 2); >>> PUSH_DATA (push, start); >>> PUSH_DATA (push, count); >>> @@ -747,8 +746,8 @@ nvc0_draw_elements(struct nvc0_context *nvc0, bool >>> shorten, >>> } else { >>> const void *data = nvc0->idxbuf.user_buffer; >>> >>> + PUSH_SPACE(push, 3 * instance_count); >>> while (instance_count--) { >>> - PUSH_SPACE(push, 2); >>> BEGIN_NVC0(push, NVC0_3D(VERTEX_BEGIN_GL), 1); >>> PUSH_DATA (push, prim); >>> switch (index_size) { >>> @@ -768,7 +767,6 @@ nvc0_draw_elements(struct nvc0_context *nvc0, bool >>> shorten, >>> assert(0); >>> return; >>> } >>> - PUSH_SPACE(push, 1); >>> IMMED_NVC0(push, NVC0_3D(VERTEX_END_GL), 0); >>> >>> prim |= NVC0_3D_VERTEX_BEGIN_GL_INSTANCE_NEXT; >>> -- >>> 2.10.1 >>> >>> _______________________________________________ >>> mesa-dev mailing list >>> mesa-dev@lists.freedesktop.org >>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev > > > -- > -Samuel _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev