[Mesa-dev] [PATCH v2] egl_dri2: add support for using modifier attributes in eglCreateImageKHR

Emil Velikov emil.l.velikov at gmail.com
Fri Nov 18 14:50:14 UTC 2016


On 16 November 2016 at 09:28, Varad Gautam <varadgautam at gmail.com> wrote:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
>
> allow creating EGLImages with dmabuf format modifiers when target is
> EGL_LINUX_DMA_BUF_EXT for EGL_EXT_image_dma_buf_import_modifiers.
>
> v2: clear modifier assembling and error label name (Eric Engestrom)
>
> Signed-off-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
> Signed-off-by: Varad Gautam <varad.gautam at collabora.com>
> Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>
> ---

> +   int nonzero_modifier_found = 0;
>     unsigned error;
>
>     /**
> @@ -2106,18 +2125,44 @@ dri2_create_image_dma_buf(_EGLDisplay *disp, _EGLContext *ctx,
>        fds[i] = attrs.DMABufPlaneFds[i].Value;
>        pitches[i] = attrs.DMABufPlanePitches[i].Value;
>        offsets[i] = attrs.DMABufPlaneOffsets[i].Value;
> +      if (attrs.DMABufPlaneModifiersLo[i].IsPresent) {
> +         modifiers[i] = (attrs.DMABufPlaneModifiersHi[i].Value << 32) |
> +                        attrs.DMABufPlaneModifiersLo[i].Value;
> +         if (modifiers[i] != 0)
> +            nonzero_modifier_found = EGL_TRUE;
integer storage and EGL_TRUE -> bool and true/false ?


> +   if (nonzero_modifier_found && dri2_dpy->image->createImageFromDmaBufs2) {
> +      dri_image =
> +         dri2_dpy->image->createImageFromDmaBufs2(dri2_dpy->dri_screen,
> +            attrs.Width, attrs.Height, attrs.DMABufFourCC.Value,
> +            fds, num_fds, pitches, offsets, modifiers,
> +            attrs.DMABufYuvColorSpaceHint.Value,
> +            attrs.DMABufSampleRangeHint.Value,
> +            attrs.DMABufChromaHorizontalSiting.Value,
> +            attrs.DMABufChromaVerticalSiting.Value,
> +            &error,
> +            NULL);
> +   } else {
> +      if (nonzero_modifier_found) {
> +         _eglError(EGL_BAD_MATCH, "unsupported dma_buf format modifier");
> +         return EGL_NO_IMAGE_KHR;
> +      }
> +
Using something like the following might be better?

if (nonzero_modifier_found) {
   if (!dri2_dpy->image->createImageFromDmaBufs2)
     # assert should never reach here, since the extension should be
advertised only if the API is available.
   use new API
else
   use old API


> +      case EGL_DMA_BUF_PLANE3_MODIFIER_LO_EXT:
> +         if (!dpy->Extensions.EXT_image_dma_buf_import_modifiers)
> +            goto bad_param;
> +         attrs->DMABufPlaneModifiersLo[3].Value = val;
> +         attrs->DMABufPlaneModifiersLo[3].IsPresent = EGL_TRUE;
> +         break;
> +      case EGL_DMA_BUF_PLANE3_MODIFIER_HI_EXT:
> +         if (!dpy->Extensions.EXT_image_dma_buf_import_modifiers)
> +            goto bad_param;
> +         attrs->DMABufPlaneModifiersHi[3].Value = val;
> +         attrs->DMABufPlaneModifiersHi[3].IsPresent = EGL_TRUE;
> +         break;
>        case EGL_YUV_COLOR_SPACE_HINT_EXT:
>           if (val != EGL_ITU_REC601_EXT && val != EGL_ITU_REC709_EXT &&
>               val != EGL_ITU_REC2020_EXT) {
> @@ -181,6 +229,7 @@ _eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *dpy,
>           }
>           break;
>
> +bad_param:
Using goto to jump to another case statement is "evil". Please don't use them.


Thanks
Emil


More information about the mesa-dev mailing list