From 1272c2e05246cad647324ffdccf56435b97dec1c Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 18 May 2021 19:55:01 -0400 Subject: [PATCH] util/prim_restart: fix util_translate_prim_restart_ib this was broken for the indirect case if the indirect draw count or firstIndex was nonzero and also would rewrite the index buffer onto the wrong offset of the dst buffer Fixes: 0c85d6c523f ("gallium/util: factor out primitive-restart rewriting logic") Fixes: 330d0607ed6 ("gallium: remove pipe_index_buffer and set_index_buffer") Reviewed-by: Erik Faye-Lund Part-of: --- src/gallium/auxiliary/util/u_prim_restart.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/gallium/auxiliary/util/u_prim_restart.c b/src/gallium/auxiliary/util/u_prim_restart.c index aea0c0c..be31163 100644 --- a/src/gallium/auxiliary/util/u_prim_restart.c +++ b/src/gallium/auxiliary/util/u_prim_restart.c @@ -125,13 +125,14 @@ util_translate_prim_restart_ib(struct pipe_context *context, /* Create new index buffer */ *dst_buffer = pipe_buffer_create(screen, PIPE_BIND_INDEX_BUFFER, PIPE_USAGE_STREAM, - count * dst_index_size); + (start + count) * dst_index_size); if (!*dst_buffer) goto error; /* Map new / dest index buffer */ - dst_map = pipe_buffer_map(context, *dst_buffer, - PIPE_MAP_WRITE, &dst_transfer); + dst_map = pipe_buffer_map_range(context, *dst_buffer, + start * dst_index_size, count * dst_index_size, + PIPE_MAP_WRITE, &dst_transfer); if (!dst_map) goto error; @@ -148,7 +149,7 @@ util_translate_prim_restart_ib(struct pipe_context *context, goto error; util_translate_prim_restart_data(src_index_size, src_map, dst_map, - draw->count, info->restart_index); + count, info->restart_index); if (src_transfer) pipe_buffer_unmap(context, src_transfer); -- 2.7.4