950-0051-drm-vc4-Add-3-3-2-and-4-4-4-4-RGB-RGBX-RGBA-formats.patch 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. From db4cb2248e9d98cc513300964c3ecdc80b8bc364 Mon Sep 17 00:00:00 2001
  2. From: Dave Stevenson <[email protected]>
  3. Date: Fri, 3 Jun 2022 16:57:04 +0100
  4. Subject: [PATCH] drm: vc4: Add 3:3:2 and 4:4:4:4 RGB/RGBX/RGBA formats
  5. The hardware supports the 332 8bpp and 4:4:4:4 16bpp formats,
  6. but the table of supported formats didn't include them.
  7. Add them in.
  8. In theory they are supported for T-format as well as linear,
  9. but without a way to test them just add them as linear for now.
  10. Suggested-by: vrazzer <[email protected]>
  11. Signed-off-by: Dave Stevenson <[email protected]>
  12. ---
  13. drivers/gpu/drm/vc4/vc4_plane.c | 70 +++++++++++++++++++++++++++++++++
  14. 1 file changed, 70 insertions(+)
  15. --- a/drivers/gpu/drm/vc4/vc4_plane.c
  16. +++ b/drivers/gpu/drm/vc4/vc4_plane.c
  17. @@ -175,6 +175,66 @@ static const struct hvs_format {
  18. .pixel_order_hvs5 = HVS_PIXEL_ORDER_ABGR,
  19. .hvs5_only = true,
  20. },
  21. + {
  22. + .drm = DRM_FORMAT_RGB332,
  23. + .hvs = HVS_PIXEL_FORMAT_RGB332,
  24. + .pixel_order = HVS_PIXEL_ORDER_ARGB,
  25. + .pixel_order_hvs5 = HVS_PIXEL_ORDER_ARGB,
  26. + },
  27. + {
  28. + .drm = DRM_FORMAT_BGR233,
  29. + .hvs = HVS_PIXEL_FORMAT_RGB332,
  30. + .pixel_order = HVS_PIXEL_ORDER_ABGR,
  31. + .pixel_order_hvs5 = HVS_PIXEL_ORDER_ABGR,
  32. + },
  33. + {
  34. + .drm = DRM_FORMAT_XRGB4444,
  35. + .hvs = HVS_PIXEL_FORMAT_RGBA4444,
  36. + .pixel_order = HVS_PIXEL_ORDER_ABGR,
  37. + .pixel_order_hvs5 = HVS_PIXEL_ORDER_ARGB,
  38. + },
  39. + {
  40. + .drm = DRM_FORMAT_ARGB4444,
  41. + .hvs = HVS_PIXEL_FORMAT_RGBA4444,
  42. + .pixel_order = HVS_PIXEL_ORDER_ABGR,
  43. + .pixel_order_hvs5 = HVS_PIXEL_ORDER_ARGB,
  44. + },
  45. + {
  46. + .drm = DRM_FORMAT_XBGR4444,
  47. + .hvs = HVS_PIXEL_FORMAT_RGBA4444,
  48. + .pixel_order = HVS_PIXEL_ORDER_ARGB,
  49. + .pixel_order_hvs5 = HVS_PIXEL_ORDER_ABGR,
  50. + },
  51. + {
  52. + .drm = DRM_FORMAT_ABGR4444,
  53. + .hvs = HVS_PIXEL_FORMAT_RGBA4444,
  54. + .pixel_order = HVS_PIXEL_ORDER_ARGB,
  55. + .pixel_order_hvs5 = HVS_PIXEL_ORDER_ABGR,
  56. + },
  57. + {
  58. + .drm = DRM_FORMAT_BGRX4444,
  59. + .hvs = HVS_PIXEL_FORMAT_RGBA4444,
  60. + .pixel_order = HVS_PIXEL_ORDER_RGBA,
  61. + .pixel_order_hvs5 = HVS_PIXEL_ORDER_BGRA,
  62. + },
  63. + {
  64. + .drm = DRM_FORMAT_BGRA4444,
  65. + .hvs = HVS_PIXEL_FORMAT_RGBA4444,
  66. + .pixel_order = HVS_PIXEL_ORDER_RGBA,
  67. + .pixel_order_hvs5 = HVS_PIXEL_ORDER_BGRA,
  68. + },
  69. + {
  70. + .drm = DRM_FORMAT_RGBX4444,
  71. + .hvs = HVS_PIXEL_FORMAT_RGBA4444,
  72. + .pixel_order = HVS_PIXEL_ORDER_BGRA,
  73. + .pixel_order_hvs5 = HVS_PIXEL_ORDER_RGBA,
  74. + },
  75. + {
  76. + .drm = DRM_FORMAT_RGBA4444,
  77. + .hvs = HVS_PIXEL_FORMAT_RGBA4444,
  78. + .pixel_order = HVS_PIXEL_ORDER_BGRA,
  79. + .pixel_order_hvs5 = HVS_PIXEL_ORDER_RGBA,
  80. + },
  81. };
  82. static const struct hvs_format *vc4_get_hvs_format(u32 drm_format)
  83. @@ -1572,6 +1632,16 @@ static bool vc4_format_mod_supported(str
  84. case DRM_FORMAT_BGRX1010102:
  85. case DRM_FORMAT_RGBA1010102:
  86. case DRM_FORMAT_BGRA1010102:
  87. + case DRM_FORMAT_XRGB4444:
  88. + case DRM_FORMAT_ARGB4444:
  89. + case DRM_FORMAT_XBGR4444:
  90. + case DRM_FORMAT_ABGR4444:
  91. + case DRM_FORMAT_RGBX4444:
  92. + case DRM_FORMAT_RGBA4444:
  93. + case DRM_FORMAT_BGRX4444:
  94. + case DRM_FORMAT_BGRA4444:
  95. + case DRM_FORMAT_RGB332:
  96. + case DRM_FORMAT_BGR233:
  97. case DRM_FORMAT_YUV422:
  98. case DRM_FORMAT_YVU422:
  99. case DRM_FORMAT_YUV420: