Mesa (main): anv: Wrapper around I915_GEM_CREATE_EXT_MEMORY_REGIONS

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jun 24 16:52:04 UTC 2021


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

Author: Sagar Ghuge <sagar.ghuge at intel.com>
Date:   Tue Mar 31 18:26:20 2020 -0700

anv: Wrapper around I915_GEM_CREATE_EXT_MEMORY_REGIONS

v2 (Jordan Justin):
 - add anv_gem_stubs.c impl

v3 (Jason Ekstrand):
 - Use the upstream uAPI
 - Rework the interface a bit

Signed-off-by: Sagar Ghuge <sagar.ghuge at intel.com>
Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5599>

---

 src/intel/vulkan/anv_gem.c       | 25 +++++++++++++++++++++++++
 src/intel/vulkan/anv_gem_stubs.c |  8 ++++++++
 src/intel/vulkan/anv_private.h   |  3 +++
 3 files changed, 36 insertions(+)

diff --git a/src/intel/vulkan/anv_gem.c b/src/intel/vulkan/anv_gem.c
index f78070a645b..2d4b207bf0f 100644
--- a/src/intel/vulkan/anv_gem.c
+++ b/src/intel/vulkan/anv_gem.c
@@ -65,6 +65,31 @@ anv_gem_close(struct anv_device *device, uint32_t gem_handle)
    intel_ioctl(device->fd, DRM_IOCTL_GEM_CLOSE, &close);
 }
 
+uint32_t
+anv_gem_create_regions(struct anv_device *device, uint64_t anv_bo_size,
+                       uint32_t num_regions,
+                       struct drm_i915_gem_memory_class_instance *regions)
+{
+   struct drm_i915_gem_create_ext_memory_regions ext_regions = {
+      .base = { .name = I915_GEM_CREATE_EXT_MEMORY_REGIONS },
+      .num_regions = num_regions,
+      .regions = (uintptr_t)regions,
+   };
+
+   struct drm_i915_gem_create_ext gem_create = {
+      .size = anv_bo_size,
+      .extensions = (uintptr_t) &ext_regions,
+   };
+
+   int ret = intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_CREATE_EXT,
+                         &gem_create);
+   if (ret != 0) {
+      return 0;
+   }
+
+   return gem_create.handle;
+}
+
 /**
  * Wrapper around DRM_IOCTL_I915_GEM_MMAP. Returns MAP_FAILED on error.
  */
diff --git a/src/intel/vulkan/anv_gem_stubs.c b/src/intel/vulkan/anv_gem_stubs.c
index 10e57419ab1..c552b7c6dc2 100644
--- a/src/intel/vulkan/anv_gem_stubs.c
+++ b/src/intel/vulkan/anv_gem_stubs.c
@@ -45,6 +45,14 @@ anv_gem_close(struct anv_device *device, uint32_t gem_handle)
    close(gem_handle);
 }
 
+uint32_t
+anv_gem_create_regions(struct anv_device *device, uint64_t anv_bo_size,
+                       uint32_t num_regions,
+                       struct drm_i915_gem_memory_class_instance *regions)
+{
+   return 0;
+}
+
 void*
 anv_gem_mmap(struct anv_device *device, uint32_t gem_handle,
              uint64_t offset, uint64_t size, uint32_t flags)
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 0e7e3962c6e..5202d43f257 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -1452,6 +1452,9 @@ void* anv_gem_mmap(struct anv_device *device,
 void anv_gem_munmap(struct anv_device *device, void *p, uint64_t size);
 uint32_t anv_gem_create(struct anv_device *device, uint64_t size);
 void anv_gem_close(struct anv_device *device, uint32_t gem_handle);
+uint32_t anv_gem_create_regions(struct anv_device *device, uint64_t anv_bo_size,
+                                uint32_t num_regions,
+                                struct drm_i915_gem_memory_class_instance *regions);
 uint32_t anv_gem_userptr(struct anv_device *device, void *mem, size_t size);
 int anv_gem_busy(struct anv_device *device, uint32_t gem_handle);
 int anv_gem_wait(struct anv_device *device, uint32_t gem_handle, int64_t *timeout_ns);



More information about the mesa-commit mailing list