[magma] Cache buffer id to improve virtualization perf

Change-Id: Ieb2fe396140cda9a39c514298c1c8e967a644c93
Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/mesa/+/455417
Reviewed-by: John Bauman <jbauman@google.com>
diff --git a/src/intel/vulkan/anv_magma.c b/src/intel/vulkan/anv_magma.c
index a3ef534..6b29345 100644
--- a/src/intel/vulkan/anv_magma.c
+++ b/src/intel/vulkan/anv_magma.c
@@ -151,7 +151,7 @@
    entry->buffer = AnvMagmaCreateBuffer(device->connection, buffer);
 
    LOG_VERBOSE("magma_create_buffer size 0x%zx returning buffer %lu gem_handle %u", magma_size,
-               magma_get_buffer_id(buffer), entry->gem_handle);
+               entry->buffer->id, entry->gem_handle);
 
    return entry->gem_handle;
 }
@@ -217,11 +217,11 @@
    close(fd);
 
 #else
-   #error Unsupported
+#error Unsupported
 #endif
 
    LOG_VERBOSE("anv_gem_mmap gem_handle %u buffer %lu offset %lu size 0x%zx returning %p",
-               gem_handle, magma_get_buffer_id(buffer), offset, size, addr);
+               gem_handle, entry->buffer->id, offset, size, addr);
 
    return addr;
 }
@@ -282,12 +282,11 @@
       return -1;
    }
 
-   uint64_t buffer_id = magma_get_buffer_id(entry->buffer->buffer);
+   LOG_VERBOSE("anv_gem_wait gem_handle %u buffer_id %lu timeout_ns %lu", gem_handle,
+               entry->buffer->id, *timeout_ns);
 
-   LOG_VERBOSE("anv_gem_wait gem_handle %u buffer_id %lu timeout_ns %lu", gem_handle, buffer_id,
-               *timeout_ns);
-
-   magma_status_t status = AnvMagmaConnectionWait(device->connection, buffer_id, *timeout_ns);
+   magma_status_t status =
+       AnvMagmaConnectionWait(device->connection, entry->buffer->id, *timeout_ns);
    switch (status) {
    case MAGMA_STATUS_OK:
       break;
@@ -314,9 +313,8 @@
       return -1;
    }
 
-   uint64_t buffer_id = magma_get_buffer_id(entry->buffer->buffer);
-
-   magma_status_t status = AnvMagmaConnectionWait(device->connection, buffer_id, 0 /*timeout_ns*/);
+   magma_status_t status =
+       AnvMagmaConnectionWait(device->connection, entry->buffer->id, 0 /*timeout_ns*/);
    switch (status) {
    case MAGMA_STATUS_TIMED_OUT:
       return 1;
diff --git a/src/intel/vulkan/anv_magma.h b/src/intel/vulkan/anv_magma.h
index d1a413d..a1f125f 100644
--- a/src/intel/vulkan/anv_magma.h
+++ b/src/intel/vulkan/anv_magma.h
@@ -32,16 +32,13 @@
 
 #include <stdio.h>
 
-#define ANV_MAGMA_DRET(ret)                                                                    \
-  (ret != 0                                                                                    \
-   ? intel_loge("%s:%d Returning error %ld", __FILE__, __LINE__, (int64_t)ret),                \
-   ret : ret)
+#define ANV_MAGMA_DRET(ret)                                                                        \
+   (ret != 0 ? intel_loge("%s:%d Returning error %ld", __FILE__, __LINE__, (int64_t)ret), ret : ret)
 
-#define ANV_MAGMA_DRET_MSG(ret, format, ...)                                              \
-  (ret != 0                                                                               \
-   ? intel_loge("%s:%d Returning error %ld: " format, __FILE__, __LINE__,                 \
-                                (int64_t)ret, ##__VA_ARGS__),                             \
-   ret : ret)
+#define ANV_MAGMA_DRET_MSG(ret, format, ...)                                                       \
+   (ret != 0 ? intel_loge("%s:%d Returning error %ld: " format, __FILE__, __LINE__, (int64_t)ret,  \
+                          ##__VA_ARGS__),                                                          \
+    ret : ret)
 
 struct anv_connection {
    magma_connection_t connection;
@@ -50,6 +47,7 @@
 
 struct anv_magma_buffer {
    magma_buffer_t buffer;
+   uint64_t id;
 };
 
 #ifdef __cplusplus
diff --git a/src/intel/vulkan/anv_magma_connection.cc b/src/intel/vulkan/anv_magma_connection.cc
index cc39b35..6e082ff 100644
--- a/src/intel/vulkan/anv_magma_connection.cc
+++ b/src/intel/vulkan/anv_magma_connection.cc
@@ -54,7 +54,11 @@
 
 class Buffer : public anv_magma_buffer {
 public:
-   Buffer(magma_buffer_t buffer) { anv_magma_buffer::buffer = buffer; }
+   Buffer(magma_buffer_t buffer, uint64_t id)
+   {
+      anv_magma_buffer::buffer = buffer;
+      anv_magma_buffer::id = id;
+   }
 
    ~Buffer() { assert(!get()); }
 
@@ -190,12 +194,11 @@
    for (uint32_t i = 0; i < execbuf->buffer_count; i++) {
       auto buffer = reinterpret_cast<Buffer*>(exec_objects[i].handle);
 
-      uint64_t buffer_id = magma_get_buffer_id(buffer->get());
       uint64_t offset = exec_objects[i].rsvd1;
       uint64_t length = exec_objects[i].rsvd2;
 
       resources.push_back({
-          .buffer_id = buffer_id,
+          .buffer_id = buffer->id,
           .offset = offset,
           .length = length,
       });
@@ -222,7 +225,7 @@
 
       if (!has_mapping) {
          LOG_VERBOSE("mapping to gpu addr 0x%lx: id %lu page_offset %lu page_count %lu", gpu_addr,
-                     buffer_id, page_offset, page_count);
+                     buffer->id, page_offset, page_count);
          magma_map_buffer_gpu(Connection::cast(connection)->magma_connection(), buffer->get(),
                               page_offset, page_count, gpu_addr, 0);
 
@@ -272,7 +275,7 @@
 
 anv_magma_buffer* AnvMagmaCreateBuffer(anv_connection* connection, magma_buffer_t buffer)
 {
-   return new Buffer(buffer);
+   return new Buffer(buffer, magma_get_buffer_id(buffer));
 }
 
 void AnvMagmaReleaseBuffer(anv_connection* connection, anv_magma_buffer* anv_buffer)