Mesa (main): radv/winsys: allow to reserve a VMID
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Fri Jun 4 15:09:03 UTC 2021
Module: Mesa
Branch: main
Commit: b786c16365b7ad4f8211b4eb1d6c069686650a44
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=b786c16365b7ad4f8211b4eb1d6c069686650a44
Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date: Fri Jun 4 15:35:35 2021 +0200
radv/winsys: allow to reserve a VMID
This will be used by SPM and also for configuring the trap handler.
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11128>
---
src/amd/vulkan/radv_device.c | 2 +-
src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c | 14 +++++++++++++-
src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h | 1 +
src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h | 3 ++-
4 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
index 19b9becdd27..055bbced9a2 100644
--- a/src/amd/vulkan/radv_device.c
+++ b/src/amd/vulkan/radv_device.c
@@ -589,7 +589,7 @@ radv_physical_device_try_create(struct radv_instance *instance, drmDevicePtr drm
device->ws = radv_null_winsys_create();
#else
if (drm_device) {
- device->ws = radv_amdgpu_winsys_create(fd, instance->debug_flags, instance->perftest_flags);
+ device->ws = radv_amdgpu_winsys_create(fd, instance->debug_flags, instance->perftest_flags, false);
} else {
device->ws = radv_null_winsys_create();
}
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
index 11cf51a0c86..beb237b21b1 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.c
@@ -170,6 +170,9 @@ radv_amdgpu_winsys_destroy(struct radeon_winsys *rws)
u_rwlock_destroy(&ws->global_bo_list.lock);
free(ws->global_bo_list.bos);
+ if (ws->reserve_vmid)
+ amdgpu_vm_unreserve_vmid(ws->dev, 0);
+
pthread_mutex_destroy(&ws->syncobj_lock);
u_rwlock_destroy(&ws->log_bo_list_lock);
ac_addrlib_destroy(ws->addrlib);
@@ -178,7 +181,7 @@ radv_amdgpu_winsys_destroy(struct radeon_winsys *rws)
}
struct radeon_winsys *
-radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags)
+radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags, bool reserve_vmid)
{
uint32_t drm_major, drm_minor, r;
amdgpu_device_handle dev;
@@ -223,6 +226,13 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags)
if (debug_flags & RADV_DEBUG_NO_IBS)
ws->use_ib_bos = false;
+ ws->reserve_vmid = reserve_vmid;
+ if (ws->reserve_vmid) {
+ r = amdgpu_vm_reserve_vmid(dev, 0);
+ if (r)
+ goto vmid_fail;
+ }
+
ws->perftest = perftest_flags;
ws->zero_all_vram_allocs = debug_flags & RADV_DEBUG_ZERO_VRAM;
u_rwlock_init(&ws->global_bo_list.lock);
@@ -243,6 +253,8 @@ radv_amdgpu_winsys_create(int fd, uint64_t debug_flags, uint64_t perftest_flags)
return &ws->base;
+vmid_fail:
+ ac_addrlib_destroy(ws->addrlib);
winsys_fail:
free(ws);
fail:
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
index 0739f246d1d..06ca90564f0 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys.h
@@ -47,6 +47,7 @@ struct radv_amdgpu_winsys {
bool debug_log_bos;
bool use_ib_bos;
bool zero_all_vram_allocs;
+ bool reserve_vmid;
uint64_t perftest;
uint64_t allocated_vram;
diff --git a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h
index 84fe347ec3e..47c18f373c2 100644
--- a/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h
+++ b/src/amd/vulkan/winsys/amdgpu/radv_amdgpu_winsys_public.h
@@ -30,7 +30,8 @@
#define RADV_AMDGPU_WINSYS_PUBLIC_H
struct radeon_winsys *radv_amdgpu_winsys_create(int fd, uint64_t debug_flags,
- uint64_t perftest_flags);
+ uint64_t perftest_flags,
+ bool reserve_vmid);
struct radeon_winsys *radv_dummy_winsys_create(void);
More information about the mesa-commit
mailing list