@ -1577,7 +1577,7 @@ import_simple_dmabuf(struct gl_renderer *gr,
struct dmabuf_attributes * attributes )
struct dmabuf_attributes * attributes )
{
{
struct egl_image * image ;
struct egl_image * image ;
EGLint attribs [ 3 0] ;
EGLint attribs [ 4 0] ;
int atti = 0 ;
int atti = 0 ;
/* This requires the Mesa commit in
/* This requires the Mesa commit in
@ -1594,7 +1594,6 @@ import_simple_dmabuf(struct gl_renderer *gr,
attribs [ atti + + ] = attributes - > height ;
attribs [ atti + + ] = attributes - > height ;
attribs [ atti + + ] = EGL_LINUX_DRM_FOURCC_EXT ;
attribs [ atti + + ] = EGL_LINUX_DRM_FOURCC_EXT ;
attribs [ atti + + ] = attributes - > format ;
attribs [ atti + + ] = attributes - > format ;
/* XXX: Add modifier here when supported */
if ( attributes - > n_planes > 0 ) {
if ( attributes - > n_planes > 0 ) {
attribs [ atti + + ] = EGL_DMA_BUF_PLANE0_FD_EXT ;
attribs [ atti + + ] = EGL_DMA_BUF_PLANE0_FD_EXT ;
@ -1603,6 +1602,12 @@ import_simple_dmabuf(struct gl_renderer *gr,
attribs [ atti + + ] = attributes - > offset [ 0 ] ;
attribs [ atti + + ] = attributes - > offset [ 0 ] ;
attribs [ atti + + ] = EGL_DMA_BUF_PLANE0_PITCH_EXT ;
attribs [ atti + + ] = EGL_DMA_BUF_PLANE0_PITCH_EXT ;
attribs [ atti + + ] = attributes - > stride [ 0 ] ;
attribs [ atti + + ] = attributes - > stride [ 0 ] ;
if ( gr - > has_dmabuf_import_modifiers ) {
attribs [ atti + + ] = EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT ;
attribs [ atti + + ] = attributes - > modifier [ 0 ] & 0xFFFFFFFF ;
attribs [ atti + + ] = EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT ;
attribs [ atti + + ] = attributes - > modifier [ 0 ] > > 32 ;
}
}
}
if ( attributes - > n_planes > 1 ) {
if ( attributes - > n_planes > 1 ) {
@ -1612,6 +1617,12 @@ import_simple_dmabuf(struct gl_renderer *gr,
attribs [ atti + + ] = attributes - > offset [ 1 ] ;
attribs [ atti + + ] = attributes - > offset [ 1 ] ;
attribs [ atti + + ] = EGL_DMA_BUF_PLANE1_PITCH_EXT ;
attribs [ atti + + ] = EGL_DMA_BUF_PLANE1_PITCH_EXT ;
attribs [ atti + + ] = attributes - > stride [ 1 ] ;
attribs [ atti + + ] = attributes - > stride [ 1 ] ;
if ( gr - > has_dmabuf_import_modifiers ) {
attribs [ atti + + ] = EGL_DMA_BUF_PLANE1_MODIFIER_LO_EXT ;
attribs [ atti + + ] = attributes - > modifier [ 1 ] & 0xFFFFFFFF ;
attribs [ atti + + ] = EGL_DMA_BUF_PLANE1_MODIFIER_HI_EXT ;
attribs [ atti + + ] = attributes - > modifier [ 1 ] > > 32 ;
}
}
}
if ( attributes - > n_planes > 2 ) {
if ( attributes - > n_planes > 2 ) {
@ -1621,6 +1632,12 @@ import_simple_dmabuf(struct gl_renderer *gr,
attribs [ atti + + ] = attributes - > offset [ 2 ] ;
attribs [ atti + + ] = attributes - > offset [ 2 ] ;
attribs [ atti + + ] = EGL_DMA_BUF_PLANE2_PITCH_EXT ;
attribs [ atti + + ] = EGL_DMA_BUF_PLANE2_PITCH_EXT ;
attribs [ atti + + ] = attributes - > stride [ 2 ] ;
attribs [ atti + + ] = attributes - > stride [ 2 ] ;
if ( gr - > has_dmabuf_import_modifiers ) {
attribs [ atti + + ] = EGL_DMA_BUF_PLANE2_MODIFIER_LO_EXT ;
attribs [ atti + + ] = attributes - > modifier [ 2 ] & 0xFFFFFFFF ;
attribs [ atti + + ] = EGL_DMA_BUF_PLANE2_MODIFIER_HI_EXT ;
attribs [ atti + + ] = attributes - > modifier [ 2 ] > > 32 ;
}
}
}
attribs [ atti + + ] = EGL_NONE ;
attribs [ atti + + ] = EGL_NONE ;
@ -1944,8 +1961,14 @@ gl_renderer_import_dmabuf(struct weston_compositor *ec,
assert ( gr - > has_dmabuf_import ) ;
assert ( gr - > has_dmabuf_import ) ;
for ( i = 0 ; i < dmabuf - > attributes . n_planes ; i + + ) {
for ( i = 0 ; i < dmabuf - > attributes . n_planes ; i + + ) {
/* EGL import does not have modifiers */
/* return if EGL doesn't support import modifiers */
if ( dmabuf - > attributes . modifier [ i ] ! = 0 )
if ( dmabuf - > attributes . modifier [ i ] ! = 0 )
if ( ! gr - > has_dmabuf_import_modifiers )
return false ;
/* return if modifiers passed are unequal */
if ( dmabuf - > attributes . modifier [ i ] ! =
dmabuf - > attributes . modifier [ 0 ] )
return false ;
return false ;
}
}