drm_hwcomposer: Add support for Arm Framebuffer Compression (AFBC) modifiers.

One needs to translate the Gralloc buffer flags for AFBC (eg
MALI_GRALLOC_INTFMT_AFBC_BASIC) to the corresponding linux kernel drm modifiers.
This gets passed to libdrm via drmModeAddFB2WithModifiers.

Changes from v1:-
- Moved ConvertGrallocFormatToDrmModifiers() and IsDrmFormatRgb() from 'DrmGenericImporter'
to 'HisiImporter' as suggested by Sean paul
- Check if the format is rgb and set AFBC_FORMAT_MOD_YTR only if any of the AFBC related
Gralloc flags are set.

Changes from v2:-
- Changed ConvertGrallocFormatToDrmModifiers() and IsDrmFormatRgb() from 'public' to 'private'
(suggested by Sean Paul)

Changes from v3:-
- Reordered the members of 'class HisiImporter'. Functions should go above member variables.
(suggested by Sean Paul)

Changes from v4:-
- Rebased and some style changes (as suggested by gitlab-ci-checkcommit.sh)

Signed-off-by: Ayan Kumar Halder <ayan.halder@arm.com>
Reviewed-by: Sean Paul <seanpaul@chromium.org>

/-- Note for reviewer
I was able to get this working for hikey960 with aosp/master for kernel 4.14. The libdrm
headers need to be updated as the AFBC modifiers are missing in the aosp/master's external/libdrm.
--/

Change-Id: I66abaa08d19ce88169cc40522b167dfe5efc7036
2 files changed
tree: 2ee8dfb7ebc6baf91b2ba84d0fc7fc190e4c3f6f
  1. tests/
  2. .clang-format
  3. .gitlab-ci-checkcommit.sh
  4. .gitlab-ci.yml
  5. Android.mk
  6. autofd.h
  7. autolock.cpp
  8. autolock.h
  9. drmconnector.cpp
  10. drmconnector.h
  11. drmcrtc.cpp
  12. drmcrtc.h
  13. drmdevice.cpp
  14. drmdevice.h
  15. drmdisplaycomposition.cpp
  16. drmdisplaycomposition.h
  17. drmdisplaycompositor.cpp
  18. drmdisplaycompositor.h
  19. drmencoder.cpp
  20. drmencoder.h
  21. drmeventlistener.cpp
  22. drmeventlistener.h
  23. drmframebuffer.h
  24. drmhwcgralloc.h
  25. drmhwcomposer.h
  26. drmhwctwo.cpp
  27. drmhwctwo.h
  28. drmmode.cpp
  29. drmmode.h
  30. drmplane.cpp
  31. drmplane.h
  32. drmproperty.cpp
  33. drmproperty.h
  34. hwcutils.cpp
  35. MODULE_LICENSE_APACHE2
  36. NOTICE
  37. platform.cpp
  38. platform.h
  39. platformdrmgeneric.cpp
  40. platformdrmgeneric.h
  41. platformhisi.cpp
  42. platformhisi.h
  43. platformminigbm.cpp
  44. platformminigbm.h
  45. README.md
  46. resourcemanager.cpp
  47. resourcemanager.h
  48. vsyncworker.cpp
  49. vsyncworker.h
  50. worker.cpp
  51. worker.h
README.md

drm_hwcomposer

Patches to drm_hwcomposer are very much welcome, we really want this to be the universal HW composer implementation for Android and similar platforms So please bring on porting patches, bugfixes, improvements for documentation and new features.

A short list of contribution guidelines:

  • Submit changes via gitlab merge requests on gitlab.freedesktop.org

  • drm_hwcomposer is Apache 2.0 Licensed and we require contributions to follow the developer's certificate of origin: http://developercertificate.org/

  • When submitting new code please follow the naming conventions documented in the generated documentation. Also please make full use of all the helpers and convenience macros provided by drm_hwcomposer. The below command can help you with formatting of your patches:

    `git diff | clang-format-diff-5.0 -p 1 -style=file`
    
  • Hardware specific changes should be tested on relevant platforms before committing.

If you need inspiration, please checkout our TODO issues

Happy hacking!