@ -413,33 +413,32 @@ static uint32_t
drm_output_check_scanout_format ( struct drm_output * output ,
drm_output_check_scanout_format ( struct drm_output * output ,
struct weston_surface * es , struct gbm_bo * bo )
struct weston_surface * es , struct gbm_bo * bo )
{
{
struct drm_compositor * c =
( struct drm_compositor * ) output - > base . compositor ;
uint32_t format ;
uint32_t format ;
pixman_region32_t r ;
pixman_region32_t r ;
format = gbm_bo_get_format ( bo ) ;
format = gbm_bo_get_format ( bo ) ;
switch ( format ) {
if ( format = = GBM_FORMAT_ARGB8888 ) {
case GBM_FORMAT_XRGB8888 :
/* We can scanout an ARGB buffer if the surface's
return format ;
* opaque region covers the whole output , but we have
case GBM_FORMAT_ARGB8888 :
* to use XRGB as the KMS format code . */
/* We can only scanout an ARGB buffer if the surface's
* opaque region covers the whole output */
pixman_region32_init ( & r ) ;
pixman_region32_init ( & r ) ;
pixman_region32_subtract ( & r , & output - > base . region ,
pixman_region32_subtract ( & r , & output - > base . region ,
& es - > opaque ) ;
& es - > opaque ) ;
if ( ! pixman_region32_not_empty ( & r ) )
if ( ! pixman_region32_not_empty ( & r ) )
format = GBM_FORMAT_XRGB8888 ;
format = GBM_FORMAT_XRGB8888 ;
else
format = 0 ;
pixman_region32_fini ( & r ) ;
pixman_region32_fini ( & r ) ;
}
if ( c - > format = = format )
return format ;
return format ;
default :
return 0 ;
return 0 ;
}
}
}
static struct weston_plane *
static struct weston_plane *
drm_output_prepare_scanout_surface ( struct weston_output * _output ,
drm_output_prepare_scanout_surface ( struct weston_output * _output ,