From efca37d4154496f9318064ff40e931233a4e5748 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 15 Apr 2022 10:34:03 -0400 Subject: [PATCH] util/draw: fix map size of indirect buffer in util_draw_indirect_read MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit this was incorrectly calculating too small of a map region if the stride was less than the size of the struct Fixes: 3eb99323172 ("aux/draw: add a util function for reading back indirect draw params") Reviewed-by: Marek Olšák Part-of: --- src/gallium/auxiliary/util/u_draw.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/gallium/auxiliary/util/u_draw.c b/src/gallium/auxiliary/util/u_draw.c index d65ac6a6497..70721586738 100644 --- a/src/gallium/auxiliary/util/u_draw.c +++ b/src/gallium/auxiliary/util/u_draw.c @@ -158,12 +158,11 @@ util_draw_indirect_read(struct pipe_context *pipe, if (!draws) return NULL; - if (indirect->stride) - num_params = MIN2(indirect->stride / 4, num_params); + unsigned map_size = (draw_count - 1) * indirect->stride + (num_params * sizeof(uint32_t)); params = pipe_buffer_map_range(pipe, indirect->buffer, indirect->offset, - (num_params * indirect->draw_count) * sizeof(uint32_t), + map_size, PIPE_MAP_READ, &transfer); if (!transfer) {