Mesa (main): radeonsi: Add support for EGL_IMG_context_priority
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed May 25 14:38:52 UTC 2022
Module: Mesa
Branch: main
Commit: e20718e8fa69bace9d5acf0ea484df6ca9421b98
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=e20718e8fa69bace9d5acf0ea484df6ca9421b98
Author: Vlad Zahorodnii <vlad.zahorodnii at kde.org>
Date: Thu May 19 21:42:57 2022 +0300
radeonsi: Add support for EGL_IMG_context_priority
This allows creating high priority contexts when using radeonsi. It's
primarily intended for apps whose rendering commands must be processed
as soon as possible, e.g. wayland compositors.
Signed-off-by: Vlad Zahorodnii <vlad.zahorodnii at kde.org>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer at amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16594>
---
src/gallium/drivers/radeonsi/si_get.c | 7 +++++++
src/gallium/drivers/radeonsi/si_pipe.c | 17 ++++++++++++++++-
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c
index 05023665383..84d6e67bdbf 100644
--- a/src/gallium/drivers/radeonsi/si_get.c
+++ b/src/gallium/drivers/radeonsi/si_get.c
@@ -254,6 +254,13 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
case PIPE_CAP_PREFER_IMM_ARRAYS_AS_CONSTBUF:
return 0;
+ case PIPE_CAP_CONTEXT_PRIORITY_MASK:
+ if (!(sscreen->info.is_amdgpu && sscreen->info.drm_minor >= 22))
+ return 0;
+ return PIPE_CONTEXT_PRIORITY_LOW |
+ PIPE_CONTEXT_PRIORITY_MEDIUM |
+ PIPE_CONTEXT_PRIORITY_HIGH;
+
case PIPE_CAP_FENCE_SIGNAL:
return sscreen->info.has_syncobj;
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
index 70b49394a66..161f1a73320 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -501,10 +501,25 @@ static struct pipe_context *si_create_context(struct pipe_screen *screen, unsign
}
}
- priority = RADEON_CTX_PRIORITY_MEDIUM;
+ if (flags & PIPE_CONTEXT_HIGH_PRIORITY) {
+ priority = RADEON_CTX_PRIORITY_HIGH;
+ } else if (flags & PIPE_CONTEXT_LOW_PRIORITY) {
+ priority = RADEON_CTX_PRIORITY_LOW;
+ } else {
+ priority = RADEON_CTX_PRIORITY_MEDIUM;
+ }
/* Initialize the context handle and the command stream. */
sctx->ctx = sctx->ws->ctx_create(sctx->ws, priority);
+ if (!sctx->ctx && priority != RADEON_CTX_PRIORITY_MEDIUM) {
+ /* Context priority should be treated as a hint. If context creation
+ * fails with the requested priority, for example because the caller
+ * lacks CAP_SYS_NICE capability or other system resource constraints,
+ * fallback to normal priority.
+ */
+ priority = RADEON_CTX_PRIORITY_MEDIUM;
+ sctx->ctx = sctx->ws->ctx_create(sctx->ws, priority);
+ }
if (!sctx->ctx) {
fprintf(stderr, "radeonsi: can't create radeon_winsys_ctx\n");
goto fail;
More information about the mesa-commit
mailing list