Module: Mesa Branch: main Commit: 5f7c2b0e1676100ff3098731424165afa5edf7aa URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=5f7c2b0e1676100ff3098731424165afa5edf7aa
Author: José Roberto de Souza <[email protected]> Date: Thu Oct 27 09:55:39 2022 -0700 intel/common: Add and use intel_gem_create_context_ext() v2: - added flag mask bit to enable context protected and recoverable v3: - added enum intel_gem_create_context_flags Signed-off-by: José Roberto de Souza <[email protected]> Reviewed-by: Lionel Landwerlin <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18974> --- src/gallium/drivers/iris/iris_bufmgr.c | 30 +++--------------------------- src/intel/common/intel_gem.c | 28 +++++++++++++++++++++------- src/intel/common/intel_gem.h | 7 +++++++ 3 files changed, 31 insertions(+), 34 deletions(-) diff --git a/src/gallium/drivers/iris/iris_bufmgr.c b/src/gallium/drivers/iris/iris_bufmgr.c index 5e65a6def61..c720d08a6ea 100644 --- a/src/gallium/drivers/iris/iris_bufmgr.c +++ b/src/gallium/drivers/iris/iris_bufmgr.c @@ -2216,36 +2216,12 @@ iris_create_hw_context(struct iris_bufmgr *bufmgr, bool protected) uint32_t ctx_id; if (protected) { - struct drm_i915_gem_context_create_ext_setparam recoverable_param = { - .param = { - .param = I915_CONTEXT_PARAM_RECOVERABLE, - .value = false, - }, - }; - struct drm_i915_gem_context_create_ext_setparam protected_param = { - .param = { - .param = I915_CONTEXT_PARAM_PROTECTED_CONTENT, - .value = true, - }, - }; - struct drm_i915_gem_context_create_ext create = { - .flags = I915_CONTEXT_CREATE_FLAGS_USE_EXTENSIONS, - }; - - intel_gem_add_ext(&create.extensions, - I915_CONTEXT_CREATE_EXT_SETPARAM, - &recoverable_param.base); - intel_gem_add_ext(&create.extensions, - I915_CONTEXT_CREATE_EXT_SETPARAM, - &protected_param.base); - - int ret = intel_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &create); - if (ret == -1) { + if (!intel_gem_create_context_ext(bufmgr->fd, + INTEL_GEM_CREATE_CONTEXT_EXT_PROTECTED_FLAG, + &ctx_id)) { DBG("DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT failed: %s\n", strerror(errno)); return 0; } - - ctx_id = create.ctx_id; } else { struct drm_i915_gem_context_create create = { }; int ret = intel_ioctl(bufmgr->fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE, &create); diff --git a/src/intel/common/intel_gem.c b/src/intel/common/intel_gem.c index 6550c02afc4..ea0b7b8a17b 100644 --- a/src/intel/common/intel_gem.c +++ b/src/intel/common/intel_gem.c @@ -155,18 +155,19 @@ bool intel_gem_read_render_timestamp(int fd, uint64_t *value) } bool -intel_gem_supports_protected_context(int fd) +intel_gem_create_context_ext(int fd, enum intel_gem_create_context_flags flags, + uint32_t *ctx_id) { struct drm_i915_gem_context_create_ext_setparam recoverable_param = { .param = { .param = I915_CONTEXT_PARAM_RECOVERABLE, - .value = false, + .value = flags & INTEL_GEM_CREATE_CONTEXT_EXT_RECOVERABLE_FLAG, }, }; struct drm_i915_gem_context_create_ext_setparam protected_param = { .param = { .param = I915_CONTEXT_PARAM_PROTECTED_CONTENT, - .value = true, + .value = flags & INTEL_GEM_CREATE_CONTEXT_EXT_PROTECTED_FLAG, }, }; struct drm_i915_gem_context_create_ext create = { @@ -180,14 +181,27 @@ intel_gem_supports_protected_context(int fd) I915_CONTEXT_CREATE_EXT_SETPARAM, &protected_param.base); - int ret = intel_ioctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &create); - if (ret == -1) + if (intel_ioctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_CREATE_EXT, &create)) return false; + *ctx_id = create.ctx_id; + return true; +} + +bool +intel_gem_supports_protected_context(int fd) +{ + uint32_t ctx_id; + bool ret = intel_gem_create_context_ext(fd, + INTEL_GEM_CREATE_CONTEXT_EXT_PROTECTED_FLAG, + &ctx_id); + if (!ret) + return ret; + struct drm_i915_gem_context_destroy destroy = { - .ctx_id = create.ctx_id, + .ctx_id = ctx_id, }; intel_ioctl(fd, DRM_IOCTL_I915_GEM_CONTEXT_DESTROY, &destroy); - return ret == 0; + return ret; } diff --git a/src/intel/common/intel_gem.h b/src/intel/common/intel_gem.h index 252f3e3ae05..eb40172ed94 100644 --- a/src/intel/common/intel_gem.h +++ b/src/intel/common/intel_gem.h @@ -39,6 +39,7 @@ extern "C" { #include <sys/ioctl.h> #include "intel_engine.h" +#include "util/macros.h" static inline uint64_t intel_canonical_address(uint64_t v) @@ -168,6 +169,12 @@ bool intel_gem_read_render_timestamp(int fd, uint64_t *value); } #endif +enum intel_gem_create_context_flags { + INTEL_GEM_CREATE_CONTEXT_EXT_RECOVERABLE_FLAG = BITFIELD_BIT(0), + INTEL_GEM_CREATE_CONTEXT_EXT_PROTECTED_FLAG = BITFIELD_BIT(1), +}; +bool intel_gem_create_context_ext(int fd, enum intel_gem_create_context_flags flags, + uint32_t *ctx_id); bool intel_gem_supports_protected_context(int fd); static inline void
