diff --git a/src/intel/vulkan/i915/anv_device.c b/src/intel/vulkan/i915/anv_device.c index d666455885c..dd02e46817b 100644 --- a/src/intel/vulkan/i915/anv_device.c +++ b/src/intel/vulkan/i915/anv_device.c @@ -321,3 +321,25 @@ anv_i915_device_check_status(struct vk_device *vk_device) return VK_SUCCESS; } + +bool +anv_i915_device_destroy_vm(struct anv_device *device) +{ + struct drm_i915_gem_vm_control destroy = { + .vm_id = device->vm_id, + }; + + return intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_VM_DESTROY, &destroy) == 0; +} + +VkResult +anv_i915_device_setup_vm(struct anv_device *device) +{ + struct drm_i915_gem_vm_control create = {}; + if (intel_ioctl(device->fd, DRM_IOCTL_I915_GEM_VM_CREATE, &create)) + return vk_errorf(device, VK_ERROR_INITIALIZATION_FAILED, + "vm creation failed"); + + device->vm_id = create.vm_id; + return VK_SUCCESS; +} diff --git a/src/intel/vulkan/i915/anv_device.h b/src/intel/vulkan/i915/anv_device.h index 5eecc0aa2d9..d77349c1cd1 100644 --- a/src/intel/vulkan/i915/anv_device.h +++ b/src/intel/vulkan/i915/anv_device.h @@ -39,3 +39,5 @@ anv_i915_device_setup_context(struct anv_device *device, const uint32_t num_queues); VkResult anv_i915_device_check_status(struct vk_device *vk_device); +bool anv_i915_device_destroy_vm(struct anv_device *device); +VkResult anv_i915_device_setup_vm(struct anv_device *device);