[Mesa-dev] [PATCH v2] egl/dri2: Allow modifiers to add FDs to imports

Tapani Pälli tapani.palli at intel.com
Fri Aug 11 07:05:42 UTC 2017


LGTM, now existence of fd is checked foreach plane_n;

Reviewed-by: Tapani Pälli <tapani.palli at intel.com>

On 08/09/2017 01:53 PM, Daniel Stone wrote:
> When using dmabuf import, make sure that the modifier is actually
> allowed to add planes to the base format, as implied by the comment.
> 
> Signed-off-by: Daniel Stone <daniels at collabora.com>
> ---
>   src/egl/drivers/dri2/egl_dri2.c | 38 +++++++++++++++++++-------------------
>   1 file changed, 19 insertions(+), 19 deletions(-)
> 
> diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
> index f0d1ded408..14decfed99 100644
> --- a/src/egl/drivers/dri2/egl_dri2.c
> +++ b/src/egl/drivers/dri2/egl_dri2.c
> @@ -2120,6 +2120,24 @@ dri2_check_dma_buf_format(const _EGLImageAttribs *attrs)
>         return 0;
>      }
>   
> +   for (unsigned i = plane_n; i < DMA_BUF_MAX_PLANES; i++) {
> +      /**
> +       * The modifiers extension spec says:
> +       *
> +       * "Modifiers may modify any attribute of a buffer import, including
> +       *  but not limited to adding extra planes to a format which
> +       *  otherwise does not have those planes. As an example, a modifier
> +       *  may add a plane for an external compression buffer to a
> +       *  single-plane format. The exact meaning and effect of any
> +       *  modifier is canonically defined by drm_fourcc.h, not as part of
> +       *  this extension."
> +       */
> +      if (attrs->DMABufPlaneModifiersLo[i].IsPresent &&
> +          attrs->DMABufPlaneModifiersHi[i].IsPresent) {
> +         plane_n = i + 1;
> +      }
> +   }
> +
>      /**
>        * The spec says:
>        *
> @@ -2146,25 +2164,7 @@ dri2_check_dma_buf_format(const _EGLImageAttribs *attrs)
>      for (unsigned i = plane_n; i < DMA_BUF_MAX_PLANES; ++i) {
>         if (attrs->DMABufPlaneFds[i].IsPresent ||
>             attrs->DMABufPlaneOffsets[i].IsPresent ||
> -          attrs->DMABufPlanePitches[i].IsPresent ||
> -          attrs->DMABufPlaneModifiersLo[i].IsPresent ||
> -          attrs->DMABufPlaneModifiersHi[i].IsPresent) {
> -
> -         /**
> -          * The modifiers extension spec says:
> -          *
> -          * "Modifiers may modify any attribute of a buffer import, including
> -          *  but not limited to adding extra planes to a format which
> -          *  otherwise does not have those planes. As an example, a modifier
> -          *  may add a plane for an external compression buffer to a
> -          *  single-plane format. The exact meaning and effect of any
> -          *  modifier is canonically defined by drm_fourcc.h, not as part of
> -          *  this extension."
> -          */
> -         if (attrs->DMABufPlaneModifiersLo[i].IsPresent &&
> -             attrs->DMABufPlaneModifiersHi[i].IsPresent)
> -            continue;
> -
> +          attrs->DMABufPlanePitches[i].IsPresent) {
>            _eglError(EGL_BAD_ATTRIBUTE, "too many plane attributes");
>            return 0;
>         }
> 


More information about the mesa-dev mailing list