No description
Find a file
Roman Stratiienko e297f9bacd minigbm: Add gbm_mesa backend
This is adaptation of the Rob Herring's gbm_gralloc HAL [1] to work
as minigbm backend, optimised to work in modern Android conditions.

gbm_gralloc has a huge potential and can provide more-or-less optimal
allocation by using mesa3d allocation APIs. It should work out of the
box for the all hardware mesa3d is supported.

Limitations:
This backend doesn't care of any other SOC-specific graphical components
such as camera, hardware video codecs, etc.

Differences between gbm_gralloc:
1. Designed to distinguish between Allocator and Mapper-sphal users.
   For Allocator gbm driver is initialized using standalone KMS card
   node (but only if 'lima', 'panfrost' or 'v3d' GPU was detected).
   For Mapper requests driver is initialized only using GPU render node.
   (which require less permissions for regular apps but suffitient
    for mapping).
2. GBM driver is initialized and bo is imported into gbm_mesa only
   if Mapper imports bo with software usage flags.
   (no time wasted in case SW access isn't required)
3. gbm_gralloc supported only HAL_PIXEL_FORMAT_YV12 video format. This
   driver aims to support more formats (using linear modifier only).

* NOTE:
This may also require:
1. Adding secomp rule into the mediaswcodec.policy file
"sched_getaffinity: 1"
2. Adding records to selinux vendor/file_contexts file
"/vendor/lib{64}?/libgbm_mesa_wrapper.so
 u:object_r:same_process_hal_file:s0"
"/vendor/bin/hw/android\.hardware\.graphics\.allocator@4\.0-service\.minigbm_gbm_mesa
 u:object_r:hal_graphics_allocator_default_exec:s0"
3. Kernel v5.3+ for using fstat(dma-buf)->inode as unique buffer id

[1]: https://github.com/robherring/gbm_gralloc

v2:
- Fixed incorrect size calculations for NV12 buffers
- Add etnaviv, freedreno and vc4 to gpus list which require kmsro entry
- Rebased

v3:
Squashed local fix commits:
- RPI4: Add alignment for CSI camera
- gbm_mesa: Handle DRM_FORMAT_R8 format to handle BLOBS
- gbm_mesa: Always use DRM_FORMAT_R8 for buffers that unsupported by GBM
- gbm_mesa: Add RGB888 format support for CPU access
- gbm_mesa: Remove incorrect negation
- gbm_mesa: Fallback COMPOSER buffers into VRAM
- gbm_mesa: Add combinations to support external camera

v4:
- Use dlopen/dlsym to access gbm_wrapper
- Add fallback allocation for unsupported by mesa3d formats

v5:
- Obtain map-time stride and report it to Android as pixel-stride.
  Map-time strides are different after gbm_create and gbm_import.
  Use map stride after gbm_import.
  This fixes artifacts on Intel and Nouveau.
- GBM wrapper has been converted from cpp to c
- Code refactor and cleanup
- Licence headers added

Signed-off-by: Roman Stratiienko <r.stratiienko@gmail.com>
Change-Id: If0f3dac42bea74f97a87e5a682380c33f4ff6837
2026-07-15 22:36:25 -04:00
cros_gralloc minigbm: Add drv_bo_get_pixel_stride function 2026-07-15 22:36:25 -04:00
external add dma-heap.h to external 2025-05-09 14:05:18 -07:00
gbm_mesa_driver minigbm: Add gbm_mesa backend 2026-07-15 22:36:25 -04:00
rust minigbm: add bindgen-generated Rust bindings 2024-03-18 18:48:46 +00:00
.clang-format minigbm: add clang-format and presubmit hooks 2017-03-31 10:40:27 -07:00
amdgpu.c Revert^2 "Merge remote-tracking branch 'aosp/upstream-main'" 2024-10-16 19:19:47 +00:00
Android.bp ANDROID: drop arcvm targets from blueprint 2025-06-30 23:08:29 +00:00
backend_mock.c Revert^2 "Merge upstream-main into main" 2024-07-03 18:21:13 +00:00
CleanSpec.mk minigbm: add a CleanSpec 2025-05-03 02:34:02 +00:00
common.mk Revert^2 "Merge remote-tracking branch 'aosp/upstream-main'" 2024-10-16 19:19:47 +00:00
DIR_METADATA DIR_METADATA: Add V2 Test Plans. 2022-11-30 01:25:57 +00:00
dri.c Revert^2 "Merge remote-tracking branch 'aosp/upstream-main'" 2024-10-16 19:19:47 +00:00
dri.h Revert^2 "Merge remote-tracking branch 'aosp/upstream-main'" 2024-10-16 19:19:47 +00:00
drv.c minigbm: Add drv_bo_get_pixel_stride function 2026-07-15 22:36:25 -04:00
drv.h minigbm: Add drv_bo_get_pixel_stride function 2026-07-15 22:36:25 -04:00
drv_array_helpers.c minigbm: refactor driver helpers 2021-10-01 18:35:11 +00:00
drv_array_helpers.h minigbm: refactor driver helpers 2021-10-01 18:35:11 +00:00
drv_helpers.c cros_gralloc: AIDL fixes for pixelformats and getMetadata 2025-04-21 16:47:40 -07:00
drv_helpers.h Revert "gralloc: Error when locking buffer alloc'd without CPU_ usage" 2024-10-08 20:42:45 +00:00
drv_priv.h minigbm: Add drv_bo_get_pixel_stride function 2026-07-15 22:36:25 -04:00
dumb_driver.c minigbm: Add more dumb drivers 2022-12-07 14:36:24 +00:00
gbm.c minigbm: add gbm_{bo,surface}_create_with_modifiers2 2024-03-12 11:19:37 +00:00
gbm.h Revert^2 "Merge upstream-main into main" 2024-07-03 18:21:13 +00:00
gbm_helpers.c minigbm: passthrough SENSOR_DIRECT_DATA via gbm frontend 2022-07-26 23:41:35 +00:00
gbm_helpers.h minigbm: standardize naming of buffer creation flags 2017-10-02 17:27:17 -07:00
gbm_priv.h minigbm: add clang-format and presubmit hooks 2017-03-31 10:40:27 -07:00
gbm_unittest.cc Revert^2 "Merge upstream-main into main" 2024-07-03 18:21:13 +00:00
i915.c UPSTREAM: presubmit: switch to cros format 2025-06-24 17:37:57 -07:00
intel_defines.h UPSTREAM: add pciids to support wildcatlake 2025-09-11 16:46:40 +00:00
LICENSE minigbm: Add a LICENSE file 2017-04-21 21:57:32 -07:00
Makefile xe: add initial Xe kmd support for gen12 xelp 2025-02-10 11:07:50 -08:00
mediatek.c mediatek: Open restricted_mtk_cma in O_RDONLY 2025-07-22 18:40:05 -07:00
METADATA Upgrade minigbm to 3dd534cca2 2025-03-20 08:18:23 -07:00
minigbm_helpers.c minigbm: clean up legacy gbm_get_default_device_fd usage 2023-03-09 05:06:53 +00:00
minigbm_helpers.h minigbm: clean up legacy gbm_get_default_device_fd usage 2023-03-09 05:06:53 +00:00
MODULE_LICENSE_BSD Add OWNERS and METADATA. 2018-06-25 14:40:05 -07:00
msm.c Revert^2 "Merge upstream-main into main" 2024-07-03 18:21:13 +00:00
OWNERS Merge "Revert "Add janitors to the OWNERS file"" into main 2025-02-18 13:55:55 -08:00
OWNERS.android minigbm: expand owners for desktop development 2025-03-26 05:59:00 +00:00
PRESUBMIT.cfg minigbm: fix typo in PRESUBMIT.cfg 2017-05-20 03:55:21 -07:00
presubmit.sh UPSTREAM: presubmit: switch to cros format 2025-06-24 17:37:57 -07:00
rockchip.c minigbm: clean up bo.handles 2023-04-09 18:57:40 +00:00
TEST_MAPPING ANDROID: Add CfVkmsCursorTest to desktop-presubmit TEST_MAPPING 2025-07-31 14:44:18 +00:00
testrunner.cc minigbm: add unit test for minigbm public apis 2024-01-30 20:59:57 +00:00
util.h UPSTREAM: presubmit: switch to cros format 2025-06-24 17:37:57 -07:00
vc4.c minigbm: clean up bo.handles 2023-04-09 18:57:40 +00:00
virtgpu.c drv/virtgpu: add log level for logging 2022-07-14 08:48:27 +00:00
virtgpu.h Add format filtering for virgl gfxstream 2024-08-01 15:42:33 +00:00
virtgpu_cross_domain.c virtgpu_cross_domain: Hold a lock for all of bo_create 2025-02-25 04:26:53 -08:00
virtgpu_virgl.c UPSTREAM: virtgpu_virgl: default to enable blob mem for compatible cases 2025-06-30 22:58:00 +00:00
xe.c UPSTREAM: presubmit: switch to cros format 2025-06-24 17:37:57 -07:00