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;
       }

Reply via email to