Mesa (master): radeonsi/sqtt: keep a copy of the uploaded shader code

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Mar 5 13:21:11 UTC 2021


Module: Mesa
Branch: master
Commit: a27ea38d2ae5721f761ff230392796912711d092
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=a27ea38d2ae5721f761ff230392796912711d092

Author: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Date:   Tue Feb 23 15:05:19 2021 +0100

radeonsi/sqtt: keep a copy of the uploaded shader code

Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9277>

---

 src/gallium/drivers/radeonsi/si_shader.c | 15 +++++++++++++--
 src/gallium/drivers/radeonsi/si_shader.h |  3 +++
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
index 917b1475b3a..705e6e54c00 100644
--- a/src/gallium/drivers/radeonsi/si_shader.c
+++ b/src/gallium/drivers/radeonsi/si_shader.c
@@ -874,12 +874,19 @@ bool si_shader_binary_upload(struct si_screen *sscreen, struct si_shader *shader
    if (!u.rx_ptr)
       return false;
 
-   bool ok = ac_rtld_upload(&u);
+   int size = ac_rtld_upload(&u);
+
+   if (sscreen->debug_flags & DBG(SQTT)) {
+      /* Remember the uploaded code */
+      shader->binary.uploaded_code_size = size;
+      shader->binary.uploaded_code = malloc(size);
+      memcpy(shader->binary.uploaded_code, u.rx_ptr, size);
+   }
 
    sscreen->ws->buffer_unmap(shader->bo->buf);
    ac_rtld_close(&binary);
 
-   return ok;
+   return size >= 0;
 }
 
 static void si_shader_dump_disassembly(struct si_screen *screen,
@@ -2143,6 +2150,10 @@ void si_shader_binary_clean(struct si_shader_binary *binary)
 
    free(binary->llvm_ir_string);
    binary->llvm_ir_string = NULL;
+
+   free(binary->uploaded_code);
+   binary->uploaded_code = NULL;
+   binary->uploaded_code_size = 0;
 }
 
 void si_shader_destroy(struct si_shader *shader)
diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h
index 07615fa87c7..d2d5718f201 100644
--- a/src/gallium/drivers/radeonsi/si_shader.h
+++ b/src/gallium/drivers/radeonsi/si_shader.h
@@ -723,6 +723,9 @@ struct si_shader_binary {
    const char *elf_buffer;
    size_t elf_size;
 
+   char *uploaded_code;
+   size_t uploaded_code_size;
+
    char *llvm_ir_string;
 };
 



More information about the mesa-commit mailing list