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);