Module: Mesa Branch: main Commit: 56a6bc758d5be2c6e137369590c9cfdc247242b5 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=56a6bc758d5be2c6e137369590c9cfdc247242b5
Author: Danylo Piliaiev <dpilia...@igalia.com> Date: Thu Nov 2 14:00:44 2023 +0100 freedreno/replay: Delete all buffers after each submission We expect all buffers to be dumped before each submission, so tracking whether buffer is used is wrong. Signed-off-by: Danylo Piliaiev <dpilia...@igalia.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26101> --- src/freedreno/decode/replay.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/freedreno/decode/replay.c b/src/freedreno/decode/replay.c index 6081640c711..8955dcd88b1 100644 --- a/src/freedreno/decode/replay.c +++ b/src/freedreno/decode/replay.c @@ -245,14 +245,12 @@ device_mark_buffers(struct device *dev) } static void -device_free_unused_buffers(struct device *dev) +device_free_buffers(struct device *dev) { rb_tree_foreach_safe (struct buffer, buf, &dev->buffers, node) { - if (!buf->used) { - buffer_mem_free(dev, buf); - rb_tree_remove(&dev->buffers, &buf->node); - free(buf); - } + buffer_mem_free(dev, buf); + rb_tree_remove(&dev->buffers, &buf->node); + free(buf); } } @@ -451,11 +449,10 @@ device_create() static void device_submit_cmdstreams(struct device *dev) { - device_free_unused_buffers(dev); - device_mark_buffers(dev); - - if (!u_vector_length(&dev->cmdstreams)) + if (!u_vector_length(&dev->cmdstreams)) { + device_free_buffers(dev); return; + } struct drm_msm_gem_submit_cmd cmds[u_vector_length(&dev->cmdstreams)]; @@ -566,6 +563,8 @@ device_submit_cmdstreams(struct device *dev) device_print_cp_log(dev); device_dump_wrbuf(dev); + + device_free_buffers(dev); } static void @@ -709,11 +708,10 @@ device_create() static void device_submit_cmdstreams(struct device *dev) { - device_free_unused_buffers(dev); - device_mark_buffers(dev); - - if (!u_vector_length(&dev->cmdstreams)) + if (!u_vector_length(&dev->cmdstreams)) { + device_free_buffers(dev); return; + } struct kgsl_command_object cmds[u_vector_length(&dev->cmdstreams)]; @@ -761,6 +759,8 @@ device_submit_cmdstreams(struct device *dev) device_print_cp_log(dev); device_dump_wrbuf(dev); + + device_free_buffers(dev); } static void @@ -988,10 +988,10 @@ handle_file(const char *filename, uint32_t first_submit, uint32_t last_submit, cs->iova = gpuaddr; cs->size = sizedwords * sizeof(uint32_t); } - - need_submit = true; } + need_submit = true; + submit++; break; }