@ -12,7 +12,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_ARGB8888 ,
. drm_format = DRM_FORMAT_ARGB8888 ,
. opaque_substitute = DRM_FORMAT_XRGB8888 ,
. opaque_substitute = DRM_FORMAT_XRGB8888 ,
. bytes_per_block = 4 ,
. bytes_per_block = 4 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_XBGR8888 ,
. drm_format = DRM_FORMAT_XBGR8888 ,
@ -22,7 +21,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_ABGR8888 ,
. drm_format = DRM_FORMAT_ABGR8888 ,
. opaque_substitute = DRM_FORMAT_XBGR8888 ,
. opaque_substitute = DRM_FORMAT_XBGR8888 ,
. bytes_per_block = 4 ,
. bytes_per_block = 4 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_RGBX8888 ,
. drm_format = DRM_FORMAT_RGBX8888 ,
@ -32,7 +30,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_RGBA8888 ,
. drm_format = DRM_FORMAT_RGBA8888 ,
. opaque_substitute = DRM_FORMAT_RGBX8888 ,
. opaque_substitute = DRM_FORMAT_RGBX8888 ,
. bytes_per_block = 4 ,
. bytes_per_block = 4 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_BGRX8888 ,
. drm_format = DRM_FORMAT_BGRX8888 ,
@ -42,7 +39,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_BGRA8888 ,
. drm_format = DRM_FORMAT_BGRA8888 ,
. opaque_substitute = DRM_FORMAT_BGRX8888 ,
. opaque_substitute = DRM_FORMAT_BGRX8888 ,
. bytes_per_block = 4 ,
. bytes_per_block = 4 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_R8 ,
. drm_format = DRM_FORMAT_R8 ,
@ -68,7 +64,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_RGBA4444 ,
. drm_format = DRM_FORMAT_RGBA4444 ,
. opaque_substitute = DRM_FORMAT_RGBX4444 ,
. opaque_substitute = DRM_FORMAT_RGBX4444 ,
. bytes_per_block = 2 ,
. bytes_per_block = 2 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_BGRX4444 ,
. drm_format = DRM_FORMAT_BGRX4444 ,
@ -78,7 +73,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_BGRA4444 ,
. drm_format = DRM_FORMAT_BGRA4444 ,
. opaque_substitute = DRM_FORMAT_BGRX4444 ,
. opaque_substitute = DRM_FORMAT_BGRX4444 ,
. bytes_per_block = 2 ,
. bytes_per_block = 2 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_RGBX5551 ,
. drm_format = DRM_FORMAT_RGBX5551 ,
@ -88,7 +82,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_RGBA5551 ,
. drm_format = DRM_FORMAT_RGBA5551 ,
. opaque_substitute = DRM_FORMAT_RGBX5551 ,
. opaque_substitute = DRM_FORMAT_RGBX5551 ,
. bytes_per_block = 2 ,
. bytes_per_block = 2 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_BGRX5551 ,
. drm_format = DRM_FORMAT_BGRX5551 ,
@ -98,7 +91,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_BGRA5551 ,
. drm_format = DRM_FORMAT_BGRA5551 ,
. opaque_substitute = DRM_FORMAT_BGRX5551 ,
. opaque_substitute = DRM_FORMAT_BGRX5551 ,
. bytes_per_block = 2 ,
. bytes_per_block = 2 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_XRGB1555 ,
. drm_format = DRM_FORMAT_XRGB1555 ,
@ -108,7 +100,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_ARGB1555 ,
. drm_format = DRM_FORMAT_ARGB1555 ,
. opaque_substitute = DRM_FORMAT_XRGB1555 ,
. opaque_substitute = DRM_FORMAT_XRGB1555 ,
. bytes_per_block = 2 ,
. bytes_per_block = 2 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_RGB565 ,
. drm_format = DRM_FORMAT_RGB565 ,
@ -126,7 +117,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_ARGB2101010 ,
. drm_format = DRM_FORMAT_ARGB2101010 ,
. opaque_substitute = DRM_FORMAT_XRGB2101010 ,
. opaque_substitute = DRM_FORMAT_XRGB2101010 ,
. bytes_per_block = 4 ,
. bytes_per_block = 4 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_XBGR2101010 ,
. drm_format = DRM_FORMAT_XBGR2101010 ,
@ -136,7 +126,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_ABGR2101010 ,
. drm_format = DRM_FORMAT_ABGR2101010 ,
. opaque_substitute = DRM_FORMAT_XBGR2101010 ,
. opaque_substitute = DRM_FORMAT_XBGR2101010 ,
. bytes_per_block = 4 ,
. bytes_per_block = 4 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_XBGR16161616F ,
. drm_format = DRM_FORMAT_XBGR16161616F ,
@ -146,7 +135,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_ABGR16161616F ,
. drm_format = DRM_FORMAT_ABGR16161616F ,
. opaque_substitute = DRM_FORMAT_XBGR16161616F ,
. opaque_substitute = DRM_FORMAT_XBGR16161616F ,
. bytes_per_block = 8 ,
. bytes_per_block = 8 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_XBGR16161616 ,
. drm_format = DRM_FORMAT_XBGR16161616 ,
@ -156,7 +144,6 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
. drm_format = DRM_FORMAT_ABGR16161616 ,
. drm_format = DRM_FORMAT_ABGR16161616 ,
. opaque_substitute = DRM_FORMAT_XBGR16161616 ,
. opaque_substitute = DRM_FORMAT_XBGR16161616 ,
. bytes_per_block = 8 ,
. bytes_per_block = 8 ,
. has_alpha = true ,
} ,
} ,
{
{
. drm_format = DRM_FORMAT_YVYU ,
. drm_format = DRM_FORMAT_YVYU ,
@ -172,9 +159,38 @@ static const struct wlr_pixel_format_info pixel_format_info[] = {
} ,
} ,
} ;
} ;
static const uint32_t opaque_pixel_formats [ ] = {
DRM_FORMAT_XRGB8888 ,
DRM_FORMAT_XBGR8888 ,
DRM_FORMAT_RGBX8888 ,
DRM_FORMAT_BGRX8888 ,
DRM_FORMAT_R8 ,
DRM_FORMAT_GR88 ,
DRM_FORMAT_RGB888 ,
DRM_FORMAT_BGR888 ,
DRM_FORMAT_RGBX4444 ,
DRM_FORMAT_BGRX4444 ,
DRM_FORMAT_RGBX5551 ,
DRM_FORMAT_BGRX5551 ,
DRM_FORMAT_XRGB1555 ,
DRM_FORMAT_RGB565 ,
DRM_FORMAT_BGR565 ,
DRM_FORMAT_XRGB2101010 ,
DRM_FORMAT_XBGR2101010 ,
DRM_FORMAT_XBGR16161616F ,
DRM_FORMAT_XBGR16161616 ,
DRM_FORMAT_YVYU ,
DRM_FORMAT_VYUY ,
DRM_FORMAT_NV12 ,
DRM_FORMAT_P010 ,
} ;
static const size_t pixel_format_info_size =
static const size_t pixel_format_info_size =
sizeof ( pixel_format_info ) / sizeof ( pixel_format_info [ 0 ] ) ;
sizeof ( pixel_format_info ) / sizeof ( pixel_format_info [ 0 ] ) ;
static const size_t opaque_pixel_formats_size =
sizeof ( opaque_pixel_formats ) / sizeof ( opaque_pixel_formats [ 0 ] ) ;
const struct wlr_pixel_format_info * drm_get_pixel_format_info ( uint32_t fmt ) {
const struct wlr_pixel_format_info * drm_get_pixel_format_info ( uint32_t fmt ) {
for ( size_t i = 0 ; i < pixel_format_info_size ; + + i ) {
for ( size_t i = 0 ; i < pixel_format_info_size ; + + i ) {
if ( pixel_format_info [ i ] . drm_format = = fmt ) {
if ( pixel_format_info [ i ] . drm_format = = fmt ) {
@ -250,3 +266,12 @@ bool pixel_format_info_check_stride(const struct wlr_pixel_format_info *fmt,
return true ;
return true ;
}
}
bool pixel_format_has_alpha ( uint32_t fmt ) {
for ( size_t i = 0 ; i < opaque_pixel_formats_size ; i + + ) {
if ( fmt = = opaque_pixel_formats [ i ] ) {
return false ;
}
}
return true ;
}