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

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-10-31 11:40:12 -04:00 committed by Marek Olšák
parent 5c2ff5773a
commit f03b7c9ad9
7 changed files with 16 additions and 1 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.86
LIBDRM_INTEL_REQUIRED=2.4.75
LIBDRM_NVVIEUX_REQUIRED=2.4.66
LIBDRM_NOUVEAU_REQUIRED=2.4.66

View File

@ -851,6 +851,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

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

View File

@ -256,6 +256,14 @@ static struct radeon_winsys_ctx *amdgpu_ctx_create(struct radeon_winsys *ws)
goto error_create;
}
if (ctx->ws->reserve_vmid) {
r = amdgpu_vm_reserve_vmid(ctx->ctx, 0);
if (r) {
fprintf(stderr, "amdgpu: amdgpu_vm_reserve_vmid failed. (%i)\n", r);
goto error_create;
}
}
alloc_buffer.alloc_size = ctx->ws->info.gart_page_size;
alloc_buffer.phys_alignment = ctx->ws->info.gart_page_size;
alloc_buffer.preferred_heap = AMDGPU_GEM_DOMAIN_GTT;

View File

@ -162,6 +162,9 @@ static inline bool amdgpu_fence_is_syncobj(struct amdgpu_fence *fence)
static inline void amdgpu_ctx_unref(struct amdgpu_ctx *ctx)
{
if (p_atomic_dec_zero(&ctx->refcount)) {
if (ctx->ws->reserve_vmid)
amdgpu_vm_unreserve_vmid(ctx->ctx, 0);
amdgpu_cs_ctx_free(ctx->ctx);
amdgpu_bo_free(ctx->user_fence_bo);
FREE(ctx);

View File

@ -73,6 +73,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;

View File

@ -81,6 +81,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;