[Mesa-dev] [PATCH] st/dri: fix winsys handle stride calculation for block formats

Philipp Zabel p.zabel at pengutronix.de
Thu May 26 12:00:36 UTC 2016


Am Donnerstag, den 26.05.2016, 12:43 +0100 schrieb Emil Velikov:
> Hi gents,
> 
> On 26 May 2016 at 11:28, Philipp Zabel <p.zabel at pengutronix.de> wrote:
> > Hi Michel,
> >
> > Am Donnerstag, den 26.05.2016, 17:59 +0900 schrieb Michel Dänzer:
> >> On 25.05.2016 22:20, Philipp Zabel wrote:
> >> > This fixes the stride calculation for pipe formats with a block width
> >> > larger than one.
> >> >
> >> > Signed-off-by: Philipp Zabel <p.zabel at pengutronix.de>
> >> > ---
> >> >  src/gallium/state_trackers/dri/dri2.c | 2 +-
> >> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >> >
> >> > diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c
> >> > index 0c84baf..c0b0d21 100644
> >> > --- a/src/gallium/state_trackers/dri/dri2.c
> >> > +++ b/src/gallium/state_trackers/dri/dri2.c
> >> > @@ -804,7 +804,7 @@ dri2_create_image_from_name(__DRIscreen *_screen,
> >> >     if (pf == PIPE_FORMAT_NONE)
> >> >        return NULL;
> >> >
> >> > -   whandle.stride = pitch * util_format_get_blocksize(pf);
> >> > +   whandle.stride = util_format_get_stride(pf, pitch);
> >> >
> >> >     return dri2_create_image_from_winsys(_screen, width, height, format,
> >> >                                          &whandle, loaderPrivate);
> >> >
> >>
> >> Reviewed-by: Michel Dänzer <michel.daenzer at amd.com>
> >>
> >> Do you need somebody to push this patch for you?
> >
> > Yes, thank you.
> >
> Can we add a note if this fixes a real world case (on which driver
> and/or format) ? Is it worth adding this patch in stable releases ?

I encountered this when trying to import YUYV buffers via
EGL_EXT_image_dma_buf_import into the (still out of tree) etnaviv
gallium driver. Since I currently still have the following patch
applied, I don't think this is a stable issue, at least regarding YUYV:

----------8<----------
Subject: [PATCH] WIP: st/dri: Allow YUYV import
    
Unclear whether this is the right way, but this allows to import
dma-buffers with YUYV pixel format.
    
Signed-off-by: Philipp Zabel <p.zabel at pengutronix.de>

diff --git a/src/gallium/state_trackers/dri/dri2.c
b/src/gallium/state_trackers/dri/dri2.c
index e07389c..bad1d90 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -70,6 +70,10 @@ static int convert_fourcc(int format, int
*dri_components_p)
       format = __DRI_IMAGE_FORMAT_XBGR8888;
       dri_components = __DRI_IMAGE_COMPONENTS_RGB;
       break;
+   case __DRI_IMAGE_FOURCC_YUYV:
+      format = __DRI_IMAGE_FOURCC_YUYV;
+      dri_components = __DRI_IMAGE_COMPONENTS_Y_XUXV;
+      break;
    default:
       return -1;
    }
@@ -118,6 +122,9 @@ static enum pipe_format dri2_format_to_pipe_format
(int format)
    case __DRI_IMAGE_FORMAT_ABGR8888:
       pf = PIPE_FORMAT_RGBA8888_UNORM;
       break;
+   case __DRI_IMAGE_FOURCC_YUYV:
+      pf = PIPE_FORMAT_YUYV;
+      break;
    default:
       pf = PIPE_FORMAT_NONE;
       break;
---------->8----------

While I have your attention, should the above be handled by adding a
__DRI_IMAGE_FORMAT_YUYV instead?

regards
Philipp



More information about the mesa-dev mailing list