mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 11:18:08 +02:00
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@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11128>
This commit is contained in:
parent
20d8324a1b
commit
b786c16365
4 changed files with 17 additions and 3 deletions
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue