Avoid using magma_buffer_get_id and magma_buffer_get_size
Convert to using magma_virt_connection_create_image2
magma_connection_create_buffer2, and magma_connection_import_buffer2 to
retrieve this information.
Bug: 121902
Change-Id: Ia042c8ba6bf8f796fd586c235b7b96c671598586
Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/mesa/+/804707
Reviewed-by: Craig Stout <cstout@google.com>
diff --git a/src/gbm/backends/magma/gbm_magma.c b/src/gbm/backends/magma/gbm_magma.c
index 474e769..5d0c581 100644
--- a/src/gbm/backends/magma/gbm_magma.c
+++ b/src/gbm/backends/magma/gbm_magma.c
@@ -48,6 +48,7 @@
struct gbm_bo base;
magma_buffer_t image;
magma_image_info_t info;
+ uint64_t size;
};
static struct gbm_magma_device* magma_device(struct gbm_device* device)
@@ -123,8 +124,10 @@
}
magma_buffer_t image;
- magma_status_t status =
- magma_virt_connection_create_image(magma_device(device)->connection, &create_info, &image);
+ uint64_t size;
+ magma_buffer_id_t buffer_id;
+ magma_status_t status = magma_virt_connection_create_image2(
+ magma_device(device)->connection, &create_info, &size, &image, &buffer_id);
if (status != MAGMA_STATUS_OK) {
LOG_VERBOSE("magma_virt_create_image failed: %d", status);
return NULL;
@@ -141,6 +144,7 @@
struct gbm_magma_bo* bo = malloc(sizeof(struct gbm_magma_bo));
bo->image = image;
bo->info = info;
+ bo->size = size;
bo->base.gbm = device;
bo->base.v0.width = width;
@@ -197,8 +201,10 @@
}
magma_buffer_t image;
- magma_status_t status =
- magma_connection_import_buffer(magma_device(device)->connection, import_data.fds[0], &image);
+ uint64_t size;
+ magma_buffer_id_t buffer_id;
+ magma_status_t status = magma_connection_import_buffer2(
+ magma_device(device)->connection, import_data.fds[0], &size, &image, &buffer_id);
if (status != MAGMA_STATUS_OK) {
LOG_VERBOSE("magma_import failed: %d", status);
return NULL;
@@ -215,6 +221,7 @@
bo->image = image;
// don't use the client given modifier
bo->info = info;
+ bo->size = size;
bo->base.gbm = device;
bo->base.v0.width = import_data.width;
@@ -348,7 +355,7 @@
if (addr == MAP_FAILED) {
LOG_VERBOSE("mmap failed: errno %d offset %lu length %lu buffer size %lu\n", errno, offset,
- length, magma_buffer_get_size(magma_bo(bo)->image));
+ length, magma_bo(bo)->size);
return MAP_FAILED;
}
diff --git a/src/intel/vulkan/anv_magma.c b/src/intel/vulkan/anv_magma.c
index 8a36de7..7b6e640 100644
--- a/src/intel/vulkan/anv_magma.c
+++ b/src/intel/vulkan/anv_magma.c
@@ -110,8 +110,9 @@
{
magma_buffer_t buffer;
uint64_t magma_size = size;
- magma_status_t status =
- magma_connection_create_buffer(magma_connection(device), magma_size, &magma_size, &buffer);
+ magma_buffer_id_t buffer_id;
+ magma_status_t status = magma_connection_create_buffer2(magma_connection(device), magma_size,
+ &magma_size, &buffer, &buffer_id);
if (status != MAGMA_STATUS_OK) {
mesa_logd("magma_create_buffer failed (%d) size 0x%" PRIx64, status, magma_size);
return 0;
@@ -119,7 +120,7 @@
struct anv_connection* connection = get_anv_connection(device->vk.magma_connection);
- struct anv_magma_buffer* buffer_object = AnvMagmaCreateBuffer(connection, buffer);
+ struct anv_magma_buffer* buffer_object = AnvMagmaCreateBuffer(connection, buffer, buffer_id);
uint32_t gem_handle = new_buffer_handle(connection->buffer_map, buffer_object);
@@ -362,13 +363,15 @@
{
uint32_t handle = (uint32_t)fd;
magma_buffer_t buffer;
- magma_status_t result = magma_connection_import_buffer(
- magma_connection(device), handle, &buffer);
+ uint64_t size;
+ magma_buffer_id_t buffer_id;
+ magma_status_t result = magma_connection_import_buffer2(magma_connection(device), handle, &size,
+ &buffer, &buffer_id);
assert(result == MAGMA_STATUS_OK);
struct anv_connection* connection = get_anv_connection(device->vk.magma_connection);
- struct anv_magma_buffer* buffer_object = AnvMagmaCreateBuffer(connection, buffer);
+ struct anv_magma_buffer* buffer_object = AnvMagmaCreateBuffer(connection, buffer, buffer_id);
uint32_t gem_handle = new_buffer_handle(connection->buffer_map, buffer_object);
@@ -387,8 +390,10 @@
uint32_t* gem_handle_out, uint64_t* size_out)
{
magma_buffer_t buffer;
- magma_status_t status = magma_connection_import_buffer(
- magma_connection(device), handle, &buffer);
+ uint64_t size;
+ magma_buffer_id_t buffer_id;
+ magma_status_t status = magma_connection_import_buffer2(magma_connection(device), handle, &size,
+ &buffer, &buffer_id);
if (status != MAGMA_STATUS_OK) {
mesa_logd("magma_import failed: %d", status);
return -EINVAL;
@@ -396,11 +401,11 @@
struct anv_connection* connection = get_anv_connection(device->vk.magma_connection);
- struct anv_magma_buffer* buffer_object = AnvMagmaCreateBuffer(connection, buffer);
+ struct anv_magma_buffer* buffer_object = AnvMagmaCreateBuffer(connection, buffer, buffer_id);
uint32_t gem_handle = new_buffer_handle(connection->buffer_map, buffer_object);
- *size_out = magma_buffer_get_size(buffer);
+ *size_out = size;
*gem_handle_out = gem_handle;
return 0;
@@ -516,8 +521,10 @@
info.drm_format_modifiers[index] = DRM_FORMAT_MOD_INVALID;
magma_buffer_t image;
- magma_status_t status = magma_virt_connection_create_image(
- magma_connection(device), &info, &image);
+ uint64_t size;
+ magma_buffer_id_t buffer_id;
+ magma_status_t status = magma_virt_connection_create_image2(magma_connection(device), &info,
+ &size, &image, &buffer_id);
if (status != MAGMA_STATUS_OK) {
mesa_logd("magma_virt_create_image failed (%d)", status);
return 0;
@@ -525,7 +532,7 @@
struct anv_connection* connection = get_anv_connection(device->vk.magma_connection);
- struct anv_magma_buffer* buffer_object = AnvMagmaCreateBuffer(connection, image);
+ struct anv_magma_buffer* buffer_object = AnvMagmaCreateBuffer(connection, image, buffer_id);
uint32_t gem_handle = new_buffer_handle(connection->buffer_map, buffer_object);
diff --git a/src/intel/vulkan/anv_magma.h b/src/intel/vulkan/anv_magma.h
index 370b3fd..5257e00 100644
--- a/src/intel/vulkan/anv_magma.h
+++ b/src/intel/vulkan/anv_magma.h
@@ -81,7 +81,7 @@
// Transfers ownership of the |buffer|.
struct anv_magma_buffer* AnvMagmaCreateBuffer(struct anv_connection* connection,
- magma_buffer_t buffer);
+ magma_buffer_t buffer, magma_buffer_id_t buffer_id);
void AnvMagmaReleaseBuffer(struct anv_connection* connection, struct anv_magma_buffer* buffer);
diff --git a/src/intel/vulkan/anv_magma_connection.cc b/src/intel/vulkan/anv_magma_connection.cc
index 3d0165f..6c0881d 100644
--- a/src/intel/vulkan/anv_magma_connection.cc
+++ b/src/intel/vulkan/anv_magma_connection.cc
@@ -294,9 +294,10 @@
return 0;
}
-anv_magma_buffer* AnvMagmaCreateBuffer(anv_connection* connection, magma_buffer_t buffer)
+anv_magma_buffer* AnvMagmaCreateBuffer(anv_connection* connection, magma_buffer_t buffer,
+ magma_buffer_id_t buffer_id)
{
- return new Buffer(buffer, magma_buffer_get_id(buffer));
+ return new Buffer(buffer, buffer_id);
}
void AnvMagmaReleaseBuffer(anv_connection* connection, anv_magma_buffer* anv_buffer)