diff options
author | Vlad Zahorodnii <vlad.zahorodnii@kde.org> | 2022-05-18 22:14:00 +0300 |
---|---|---|
committer | Marge Bot <emma+marge@anholt.net> | 2022-05-25 14:15:30 +0000 |
commit | f4de4453cfd2be2fc97ac08562cf8fcf20ddda02 (patch) | |
tree | 4d0f998684cc141c13de75b8830e71ba88059cf0 /src/gallium/winsys | |
parent | 91e41181f6f43761dd2e9ee9c45161d489205d7d (diff) |
winsys/amdgpu-radeon: Allow specifying context priority
This is needed to implement EGL_IMG_context_priority in radeonsi.
Signed-off-by: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16594>
Diffstat (limited to 'src/gallium/winsys')
-rw-r--r-- | src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 25 | ||||
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_cs.c | 3 |
2 files changed, 24 insertions, 4 deletions
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index 73b4f03d294..0e372a5a155 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -273,11 +273,30 @@ amdgpu_cs_get_next_fence(struct radeon_cmdbuf *rcs) /* CONTEXTS */ -static struct radeon_winsys_ctx *amdgpu_ctx_create(struct radeon_winsys *ws) +static uint32_t +radeon_to_amdgpu_priority(enum radeon_ctx_priority radeon_priority) +{ + switch (radeon_priority) { + case RADEON_CTX_PRIORITY_REALTIME: + return AMDGPU_CTX_PRIORITY_VERY_HIGH; + case RADEON_CTX_PRIORITY_HIGH: + return AMDGPU_CTX_PRIORITY_HIGH; + case RADEON_CTX_PRIORITY_MEDIUM: + return AMDGPU_CTX_PRIORITY_NORMAL; + case RADEON_CTX_PRIORITY_LOW: + return AMDGPU_CTX_PRIORITY_LOW; + default: + unreachable("Invalid context priority"); + } +} + +static struct radeon_winsys_ctx *amdgpu_ctx_create(struct radeon_winsys *ws, + enum radeon_ctx_priority priority) { struct amdgpu_ctx *ctx = CALLOC_STRUCT(amdgpu_ctx); int r; struct amdgpu_bo_alloc_request alloc_buffer = {}; + uint32_t amdgpu_priority = radeon_to_amdgpu_priority(priority); amdgpu_bo_handle buf_handle; if (!ctx) @@ -287,9 +306,9 @@ static struct radeon_winsys_ctx *amdgpu_ctx_create(struct radeon_winsys *ws) ctx->refcount = 1; ctx->initial_num_total_rejected_cs = ctx->ws->num_total_rejected_cs; - r = amdgpu_cs_ctx_create(ctx->ws->dev, &ctx->ctx); + r = amdgpu_cs_ctx_create2(ctx->ws->dev, amdgpu_priority, &ctx->ctx); if (r) { - fprintf(stderr, "amdgpu: amdgpu_cs_ctx_create failed. (%i)\n", r); + fprintf(stderr, "amdgpu: amdgpu_cs_ctx_create2 failed. (%i)\n", r); goto error_create; } diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c index 2e3991aa076..51864a31ae5 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c @@ -70,7 +70,8 @@ static struct pipe_fence_handle *radeon_cs_create_fence(struct radeon_cmdbuf *rc static void radeon_fence_reference(struct pipe_fence_handle **dst, struct pipe_fence_handle *src); -static struct radeon_winsys_ctx *radeon_drm_ctx_create(struct radeon_winsys *ws) +static struct radeon_winsys_ctx *radeon_drm_ctx_create(struct radeon_winsys *ws, + enum radeon_ctx_priority priority) { struct radeon_ctx *ctx = CALLOC_STRUCT(radeon_ctx); if (!ctx) |