turnip/kgsl: Add support for importing dma-bufs.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7015>
diff --git a/src/freedreno/vulkan/tu_kgsl.c b/src/freedreno/vulkan/tu_kgsl.c
index d4166ff..96fd043 100644
--- a/src/freedreno/vulkan/tu_kgsl.c
+++ b/src/freedreno/vulkan/tu_kgsl.c
@@ -109,7 +109,38 @@
                   uint64_t size,
                   int fd)
 {
-   tu_stub();
+   struct kgsl_gpuobj_import_dma_buf import_dmabuf = {
+      .fd = fd,
+   };
+   struct kgsl_gpuobj_import req = {
+      .priv = (uintptr_t)&import_dmabuf,
+      .priv_len = sizeof(import_dmabuf),
+      .flags = 0,
+      .type = KGSL_USER_MEM_TYPE_DMABUF,
+   };
+   int ret;
+
+   ret = safe_ioctl(dev->physical_device->local_fd,
+                    IOCTL_KGSL_GPUOBJ_IMPORT, &req);
+   if (ret)
+      return vk_errorf(dev->instance, VK_ERROR_OUT_OF_DEVICE_MEMORY,
+                       "Failed to import dma-buf (%s)\n", strerror(errno));
+
+   struct kgsl_gpuobj_info info_req = {
+      .id = req.id,
+   };
+
+   ret = safe_ioctl(dev->physical_device->local_fd,
+                    IOCTL_KGSL_GPUOBJ_INFO, &info_req);
+   if (ret)
+      return vk_errorf(dev->instance, VK_ERROR_OUT_OF_DEVICE_MEMORY,
+                       "Failed to get dma-buf info (%s)\n", strerror(errno));
+
+   *bo = (struct tu_bo) {
+      .gem_handle = req.id,
+      .size = info_req.size,
+      .iova = info_req.gpuaddr,
+   };
 
    return VK_SUCCESS;
 }