mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-04-12 08:21:33 -04:00
render/pixel_format: generate opaque substitute table via kdfs
This commit is contained in:
parent
e69e1b5f7a
commit
e00171d871
3 changed files with 70 additions and 32 deletions
|
|
@ -28,6 +28,17 @@ gen_opaque() {
|
|||
'
|
||||
}
|
||||
|
||||
gen_opaque_substitute() {
|
||||
"$KDFS" compat --json --with 'DRM_FORMAT_*' --filter-channel=a --strip-channel=a 'DRM_FORMAT_*' | jq -r '
|
||||
to_entries[]
|
||||
| select((.value | to_entries[] | select(.value.little_endian and .value.big_endian) | length) > 0)
|
||||
| (.key as $format | .value | to_entries[] | { format: $format, opaque_substitute: .key })
|
||||
|
|
||||
" case \(.format):\n" +
|
||||
" return \(.opaque_substitute);"
|
||||
'
|
||||
}
|
||||
|
||||
gen_ycbcr() {
|
||||
"$KDFS" show --json 'DRM_FORMAT_*' | jq -r '
|
||||
to_entries[]
|
||||
|
|
@ -57,6 +68,14 @@ $(gen_opaque)
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t pixel_format_get_opaque_substitute(uint32_t format) {
|
||||
switch (format) {
|
||||
$(gen_opaque_substitute)
|
||||
default:
|
||||
return DRM_FORMAT_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
bool pixel_format_is_ycbcr(uint32_t format) {
|
||||
switch (format) {
|
||||
$(gen_ycbcr)
|
||||
|
|
|
|||
|
|
@ -81,35 +81,3 @@ bool pixel_format_info_check_stride(const struct wlr_pixel_format_info *fmt,
|
|||
bool pixel_format_has_alpha(uint32_t fmt) {
|
||||
return !pixel_format_is_opaque(fmt);
|
||||
}
|
||||
|
||||
uint32_t pixel_format_get_opaque_substitute(uint32_t fmt) {
|
||||
switch (fmt) {
|
||||
case DRM_FORMAT_ARGB8888:
|
||||
return DRM_FORMAT_XRGB8888;
|
||||
case DRM_FORMAT_ABGR8888:
|
||||
return DRM_FORMAT_XBGR8888;
|
||||
case DRM_FORMAT_RGBA8888:
|
||||
return DRM_FORMAT_RGBX8888;
|
||||
case DRM_FORMAT_BGRA8888:
|
||||
return DRM_FORMAT_BGRX8888;
|
||||
case DRM_FORMAT_RGBA4444:
|
||||
return DRM_FORMAT_RGBX4444;
|
||||
case DRM_FORMAT_BGRA4444:
|
||||
return DRM_FORMAT_BGRX4444;
|
||||
case DRM_FORMAT_RGBA5551:
|
||||
return DRM_FORMAT_RGBX5551;
|
||||
case DRM_FORMAT_BGRA5551:
|
||||
return DRM_FORMAT_BGRX5551;
|
||||
case DRM_FORMAT_ARGB1555:
|
||||
return DRM_FORMAT_XRGB1555;
|
||||
case DRM_FORMAT_ARGB2101010:
|
||||
return DRM_FORMAT_XRGB2101010;
|
||||
case DRM_FORMAT_ABGR2101010:
|
||||
return DRM_FORMAT_XBGR2101010;
|
||||
case DRM_FORMAT_ABGR16161616F:
|
||||
return DRM_FORMAT_XBGR16161616F;
|
||||
case DRM_FORMAT_ABGR16161616:
|
||||
return DRM_FORMAT_XBGR16161616;
|
||||
}
|
||||
return DRM_FORMAT_INVALID;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -518,6 +518,57 @@ bool pixel_format_is_opaque(uint32_t format) {
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t pixel_format_get_opaque_substitute(uint32_t format) {
|
||||
switch (format) {
|
||||
case DRM_FORMAT_ABGR1555:
|
||||
return DRM_FORMAT_XBGR1555;
|
||||
case DRM_FORMAT_ABGR16161616:
|
||||
return DRM_FORMAT_XBGR16161616;
|
||||
case DRM_FORMAT_ABGR16161616F:
|
||||
return DRM_FORMAT_XBGR16161616F;
|
||||
case DRM_FORMAT_ABGR2101010:
|
||||
return DRM_FORMAT_XBGR2101010;
|
||||
case DRM_FORMAT_ABGR4444:
|
||||
return DRM_FORMAT_XBGR4444;
|
||||
case DRM_FORMAT_ABGR8888:
|
||||
return DRM_FORMAT_XBGR8888;
|
||||
case DRM_FORMAT_ARGB1555:
|
||||
return DRM_FORMAT_XRGB1555;
|
||||
case DRM_FORMAT_ARGB16161616:
|
||||
return DRM_FORMAT_XRGB16161616;
|
||||
case DRM_FORMAT_ARGB16161616F:
|
||||
return DRM_FORMAT_XRGB16161616F;
|
||||
case DRM_FORMAT_ARGB2101010:
|
||||
return DRM_FORMAT_XRGB2101010;
|
||||
case DRM_FORMAT_ARGB4444:
|
||||
return DRM_FORMAT_XRGB4444;
|
||||
case DRM_FORMAT_ARGB8888:
|
||||
return DRM_FORMAT_XRGB8888;
|
||||
case DRM_FORMAT_AVUY8888:
|
||||
return DRM_FORMAT_XVUY8888;
|
||||
case DRM_FORMAT_AYUV:
|
||||
return DRM_FORMAT_XYUV8888;
|
||||
case DRM_FORMAT_BGRA1010102:
|
||||
return DRM_FORMAT_BGRX1010102;
|
||||
case DRM_FORMAT_BGRA4444:
|
||||
return DRM_FORMAT_BGRX4444;
|
||||
case DRM_FORMAT_BGRA5551:
|
||||
return DRM_FORMAT_BGRX5551;
|
||||
case DRM_FORMAT_BGRA8888:
|
||||
return DRM_FORMAT_BGRX8888;
|
||||
case DRM_FORMAT_RGBA1010102:
|
||||
return DRM_FORMAT_RGBX1010102;
|
||||
case DRM_FORMAT_RGBA4444:
|
||||
return DRM_FORMAT_RGBX4444;
|
||||
case DRM_FORMAT_RGBA5551:
|
||||
return DRM_FORMAT_RGBX5551;
|
||||
case DRM_FORMAT_RGBA8888:
|
||||
return DRM_FORMAT_RGBX8888;
|
||||
default:
|
||||
return DRM_FORMAT_INVALID;
|
||||
}
|
||||
}
|
||||
|
||||
bool pixel_format_is_ycbcr(uint32_t format) {
|
||||
switch (format) {
|
||||
case DRM_FORMAT_AVUY8888:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue