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: 0c85d6c523 ("gallium/util: factor out primitive-restart rewriting logic")
Fixes: 330d0607ed ("gallium: remove pipe_index_buffer and set_index_buffer")

Reviewed-by: Erik Faye-Lund <erik.faye-lund@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10909>
This commit is contained in:
Mike Blumenkrantz 2021-05-18 19:55:01 -04:00 committed by Marge Bot
parent 77fcf70082
commit 1272c2e052

View file

@ -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);