winsys/amdgpu: Add R600_DEBUG flag to reserve VMID per ctx.

Fixes reverted patch f03b7c9 by doing VMID reservation per
process and not per context.
Also updates required amdgpu libdrm version since the change
involved interface updates in amdgpu libdrm.

Signed-off-by: Andrey Grodzovsky <andrey.grodzovsky@amd.com>
Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Andrey Grodzovsky
2017-11-02 10:50:39 -04:00
committed by Marek Olšák
parent 24ec29b919
commit 19fc3cdcfb
6 changed files with 17 additions and 2 deletions

View File

@@ -74,7 +74,7 @@ AC_SUBST([OPENCL_VERSION])
# in the first entry.
LIBDRM_REQUIRED=2.4.75
LIBDRM_RADEON_REQUIRED=2.4.71
LIBDRM_AMDGPU_REQUIRED=2.4.85
LIBDRM_AMDGPU_REQUIRED=2.4.88
LIBDRM_INTEL_REQUIRED=2.4.75
LIBDRM_NVVIEUX_REQUIRED=2.4.66
LIBDRM_NOUVEAU_REQUIRED=2.4.66

View File

@@ -638,7 +638,7 @@ dep_libdrm_nouveau = []
dep_libdrm_etnaviv = []
dep_libdrm_freedreno = []
if with_amd_vk or with_gallium_radeonsi
dep_libdrm_amdgpu = dependency('libdrm_amdgpu', version : '>= 2.4.85')
dep_libdrm_amdgpu = dependency('libdrm_amdgpu', version : '>= 2.4.88')
endif
if with_gallium_radeonsi or with_dri_r100 or with_dri_r200
dep_libdrm_radeon = dependency('libdrm_radeon', version : '>= 2.4.71')

View File

@@ -848,6 +848,7 @@ static const struct debug_named_value common_debug_options[] = {
{ "dpbb", DBG(DPBB), "Enable DPBB." },
{ "dfsm", DBG(DFSM), "Enable DFSM." },
{ "nooutoforder", DBG(NO_OUT_OF_ORDER), "Disable out-of-order rasterization" },
{ "reserve_vmid", DBG(RESERVE_VMID), "Force VMID reservation per context." },
DEBUG_NAMED_VALUE_END /* must be last */
};

View File

@@ -104,6 +104,7 @@ enum {
DBG_NO_DISCARD_RANGE,
DBG_NO_WC,
DBG_CHECK_VM,
DBG_RESERVE_VMID,
/* 3D engine options: */
DBG_SWITCH_ON_EOP,

View File

@@ -69,6 +69,7 @@ static bool do_winsys_init(struct amdgpu_winsys *ws, int fd)
ws->check_vm = strstr(debug_get_option("R600_DEBUG", ""), "check_vm") != NULL;
ws->debug_all_bos = debug_get_option_all_bos();
ws->reserve_vmid = strstr(debug_get_option("R600_DEBUG", ""), "reserve_vmid") != NULL;
return true;
@@ -88,6 +89,9 @@ static void amdgpu_winsys_destroy(struct radeon_winsys *rws)
{
struct amdgpu_winsys *ws = (struct amdgpu_winsys*)rws;
if (ws->reserve_vmid)
amdgpu_vm_unreserve_vmid(ws->dev, 0);
if (util_queue_is_initialized(&ws->cs_queue))
util_queue_destroy(&ws->cs_queue);
@@ -338,6 +342,14 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config,
util_hash_table_set(dev_tab, dev, ws);
if (ws->reserve_vmid) {
r = amdgpu_vm_reserve_vmid(dev, 0);
if (r) {
fprintf(stderr, "amdgpu: amdgpu_vm_reserve_vmid failed. (%i)\n", r);
goto fail_cache;
}
}
/* We must unlock the mutex once the winsys is fully initialized, so that
* other threads attempting to create the winsys from the same fd will
* get a fully initialized winsys and not just half-way initialized. */

View File

@@ -77,6 +77,7 @@ struct amdgpu_winsys {
bool check_vm;
bool debug_all_bos;
bool reserve_vmid;
/* List of all allocated buffers */
mtx_t global_bo_list_lock;