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

Author: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Date:   Fri Aug 25 11:04:01 2023 +0200

ac/rgp: update dumping queue event records to the capture

GPU timestamps are emitted by the GPU to a BO with CPU-access which
means the driver needs to read them back when the submission is done.

Fix this by passing a pointer to that BO, like some other records.

Signed-off-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22779>

---

 src/amd/common/ac_rgp.c | 25 ++++++++++++++++++++++++-
 src/amd/common/ac_rgp.h |  2 +-
 2 files changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/amd/common/ac_rgp.c b/src/amd/common/ac_rgp.c
index 71c61f54975..06b38bfc2a6 100644
--- a/src/amd/common/ac_rgp.c
+++ b/src/amd/common/ac_rgp.c
@@ -1105,7 +1105,30 @@ ac_sqtt_dump_data(const struct radeon_info *rad_info, 
struct ac_sqtt_trace *sqtt
       /* Queue event. */
       list_for_each_entry_safe(struct rgp_queue_event_record, record,
                                &rgp_queue_event->record, list) {
-         fwrite(record, sizeof(struct sqtt_queue_event_record), 1, output);
+         struct sqtt_queue_event_record queue_event = {
+            .event_type = record->event_type,
+            .sqtt_cb_id = record->sqtt_cb_id,
+            .frame_index = record->frame_index,
+            .queue_info_index = record->queue_info_index,
+            .submit_sub_index = record->submit_sub_index,
+            .api_id = record->api_id,
+            .cpu_timestamp = record->cpu_timestamp,
+         };
+
+         switch (queue_event.event_type)
+         case SQTT_QUEUE_TIMING_EVENT_CMDBUF_SUBMIT: {
+            queue_event.gpu_timestamps[0] = *record->gpu_timestamps[0];
+            queue_event.gpu_timestamps[1] = *record->gpu_timestamps[1];
+            break;
+         case SQTT_QUEUE_TIMING_EVENT_PRESENT:
+            queue_event.gpu_timestamps[0] = *record->gpu_timestamps[0];
+            break;
+         default:
+            /* GPU timestamps are ignored for other queue events. */
+            break;
+         }
+
+         fwrite(&queue_event, sizeof(struct sqtt_queue_event_record), 1, 
output);
       }
       file_offset += (rgp_queue_event->record_count *
                       sizeof(struct sqtt_queue_event_record));
diff --git a/src/amd/common/ac_rgp.h b/src/amd/common/ac_rgp.h
index ce31b9417db..3966fa9b3ed 100644
--- a/src/amd/common/ac_rgp.h
+++ b/src/amd/common/ac_rgp.h
@@ -153,7 +153,7 @@ struct rgp_queue_event_record {
    uint32_t submit_sub_index;
    uint64_t api_id;
    uint64_t cpu_timestamp;
-   uint64_t gpu_timestamps[2];
+   uint64_t *gpu_timestamps[2];
    struct list_head list;
 };
 

Reply via email to