radv/winsys: Report VA mappings in bo_log too.

Signed-off-by: Hans-Kristian Arntzen <post@arntzen-software.no>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32146>
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
index 93ba410..69a8960 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.c
@@ -97,6 +97,31 @@
    return VK_SUCCESS;
 }
 
+static void
+radv_amdgpu_log_va_op(struct radv_amdgpu_winsys *ws,
+                      struct radv_amdgpu_winsys_bo *bo, uint64_t offset, uint64_t size,
+                      uint64_t virtual_va)
+{
+   struct radv_amdgpu_winsys_bo_log *bo_log = NULL;
+
+   if (!ws->debug_log_bos)
+      return;
+
+   bo_log = calloc(1, sizeof(*bo_log));
+   if (!bo_log)
+      return;
+
+   bo_log->va = virtual_va;
+   bo_log->size = size;
+   bo_log->timestamp = os_time_get_nano();
+   bo_log->virtual_mapping = 1;
+   bo_log->mapped_va = bo ? (bo->base.va + offset) : 0;
+
+   u_rwlock_wrlock(&ws->log_bo_list_lock);
+   list_addtail(&bo_log->list, &ws->log_bo_list);
+   u_rwlock_wrunlock(&ws->log_bo_list_lock);
+}
+
 static VkResult
 radv_amdgpu_winsys_bo_virtual_bind(struct radeon_winsys *_ws, struct radeon_winsys_bo *_parent, uint64_t offset,
                                    uint64_t size, struct radeon_winsys_bo *_bo, uint64_t bo_offset)
@@ -119,8 +144,10 @@
    if (bo) {
       r =
          radv_amdgpu_bo_va_op(ws, bo->bo_handle, bo_offset, size, parent->base.va + offset, 0, 0, AMDGPU_VA_OP_REPLACE);
+      radv_amdgpu_log_va_op(ws, bo, bo_offset, size, parent->base.va + offset);
    } else {
       r = radv_amdgpu_bo_va_op(ws, 0, 0, size, parent->base.va + offset, 0, AMDGPU_VM_PAGE_PRT, AMDGPU_VA_OP_REPLACE);
+      radv_amdgpu_log_va_op(ws, NULL, 0, size, parent->base.va + offset);
    }
 
    if (r) {
@@ -249,7 +276,7 @@
    if (!ws->debug_log_bos)
       return;
 
-   bo_log = malloc(sizeof(*bo_log));
+   bo_log = calloc(1, sizeof(*bo_log));
    if (!bo_log)
       return;
 
@@ -1046,9 +1073,19 @@
 
    u_rwlock_rdlock(&ws->log_bo_list_lock);
    LIST_FOR_EACH_ENTRY (bo_log, &ws->log_bo_list, list) {
-      fprintf(file, "timestamp=%llu, VA=%.16llx-%.16llx, destroyed=%d, is_virtual=%d\n", (long long)bo_log->timestamp,
-              (long long)radv_amdgpu_canonicalize_va(bo_log->va),
-              (long long)radv_amdgpu_canonicalize_va(bo_log->va + bo_log->size), bo_log->destroyed, bo_log->is_virtual);
+      if (bo_log->virtual_mapping) {
+         fprintf(file, "timestamp=%llu, VA=%.16llx-%.16llx, mapped_to=%.16llx\n",
+                 (long long)bo_log->timestamp,
+                 (long long)radv_amdgpu_canonicalize_va(bo_log->va),
+                 (long long)radv_amdgpu_canonicalize_va(bo_log->va + bo_log->size),
+                 (long long)radv_amdgpu_canonicalize_va(bo_log->mapped_va));
+      } else {
+         fprintf(file, "timestamp=%llu, VA=%.16llx-%.16llx, destroyed=%d, is_virtual=%d\n",
+                 (long long)bo_log->timestamp,
+                 (long long)radv_amdgpu_canonicalize_va(bo_log->va),
+                 (long long)radv_amdgpu_canonicalize_va(bo_log->va + bo_log->size), bo_log->destroyed,
+                 bo_log->is_virtual);
+      }
    }
    u_rwlock_rdunlock(&ws->log_bo_list_lock);
 }
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h
index 2130c49..4cde39d 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_bo.h
@@ -19,8 +19,10 @@
    uint64_t va;
    uint64_t size;
    uint64_t timestamp; /* CPU timestamp */
+   uint64_t mapped_va;
    uint8_t is_virtual : 1;
    uint8_t destroyed : 1;
+   uint8_t virtual_mapping : 1;
 };
 
 struct radv_amdgpu_map_range {