diff options
author | Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com> | 2020-07-23 15:05:27 +0200 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2020-09-24 14:51:16 +0000 |
commit | 55b018b634be8409a8a3f421082827509d23ac03 (patch) | |
tree | 1457b9ca96adbc5f2f446d9ce20dc5cc8b4037c5 /src/gallium/winsys/amdgpu/drm | |
parent | 1b0d660cbc7a0b4e856295eeb5350dfa9b45f405 (diff) |
amd/winsys: add RADEON_FLUSH_TOGGLE_SECURE_SUBMISSION
Instead of exposing a cs_set_secure() callback that always needs a call
to si_flush_gfx_cs before a switch, this commit introduces a new
flag to switch between secure and non-secure on submissions.
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6049>
Diffstat (limited to 'src/gallium/winsys/amdgpu/drm')
-rw-r--r-- | src/gallium/winsys/amdgpu/drm/amdgpu_cs.c | 10 | ||||
-rw-r--r-- | src/gallium/winsys/amdgpu/drm/amdgpu_cs.h | 1 | ||||
-rw-r--r-- | src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c | 7 |
3 files changed, 9 insertions, 9 deletions
diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c index 319c58cd200..ded4c57f5e9 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.c @@ -1420,7 +1420,7 @@ static bool amdgpu_add_sparse_backing_buffers(struct amdgpu_cs_context *cs) return true; } -void amdgpu_cs_submit_ib(void *job, int thread_index) +static void amdgpu_cs_submit_ib(void *job, int thread_index) { struct amdgpu_cs *acs = (struct amdgpu_cs*)job; struct amdgpu_winsys *ws = acs->ctx->ws; @@ -1839,6 +1839,12 @@ static int amdgpu_cs_flush(struct radeon_cmdbuf *rcs, /* Submit. */ util_queue_add_job(&ws->cs_queue, cs, &cs->flush_completed, amdgpu_cs_submit_ib, NULL, 0); + + if (flags & RADEON_FLUSH_TOGGLE_SECURE_SUBMISSION) + cs->csc->secure = !cs->cst->secure; + else + cs->csc->secure = cs->cst->secure; + /* The submission has been queued, unlock the fence now. */ simple_mtx_unlock(&ws->bo_fence_lock); @@ -1847,6 +1853,8 @@ static int amdgpu_cs_flush(struct radeon_cmdbuf *rcs, error_code = cur->error_code; } } else { + if (flags & RADEON_FLUSH_TOGGLE_SECURE_SUBMISSION) + cs->csc->secure = !cs->csc->secure; amdgpu_cs_context_cleanup(cs->csc); } diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h index 138e0b0adcc..5c8ba753609 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_cs.h @@ -282,6 +282,5 @@ void amdgpu_add_fences(struct amdgpu_winsys_bo *bo, struct pipe_fence_handle **fences); void amdgpu_cs_sync_flush(struct radeon_cmdbuf *rcs); void amdgpu_cs_init_functions(struct amdgpu_screen_winsys *ws); -void amdgpu_cs_submit_ib(void *job, int thread_index); #endif diff --git a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c index e5db23aa109..9f0724047ab 100644 --- a/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c +++ b/src/gallium/winsys/amdgpu/drm/amdgpu_winsys.c @@ -339,12 +339,6 @@ static bool amdgpu_cs_is_secure(struct radeon_cmdbuf *rcs) return cs->csc->secure; } -static void amdgpu_cs_set_secure(struct radeon_cmdbuf *rcs, bool secure) -{ - struct amdgpu_cs *cs = amdgpu_cs(rcs); - cs->csc->secure = secure; -} - PUBLIC struct radeon_winsys * amdgpu_winsys_create(int fd, const struct pipe_screen_config *config, radeon_screen_create_t screen_create) @@ -520,7 +514,6 @@ amdgpu_winsys_create(int fd, const struct pipe_screen_config *config, ws->base.pin_threads_to_L3_cache = amdgpu_pin_threads_to_L3_cache; ws->base.ws_uses_secure_bo = amdgpu_ws_uses_secure_bo; ws->base.cs_is_secure = amdgpu_cs_is_secure; - ws->base.cs_set_secure = amdgpu_cs_set_secure; amdgpu_bo_init_functions(ws); amdgpu_cs_init_functions(ws); |