diff options
author | Marcin Radomski <dextero@google.com> | 2024-03-07 13:46:36 +0000 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2024-03-12 11:19:37 +0000 |
commit | 40b28f098a29589b3f72de1ba6753d46a616c48b (patch) | |
tree | 24d6a273cf197f7c60eca451be539ed4087caa1a | |
parent | 3b508e145f1acfd3895daab0089ebd54cd924bb2 (diff) | |
download | minigbm-40b28f098a29589b3f72de1ba6753d46a616c48b.tar.gz |
minigbm: add gbm_{bo,surface}_create_with_modifiers2
Rationale: this will help get Rust gbm bindings into Android
(go/drm-gbm-rust-crates-for-android) without needing minigbm-specific
patches to upstream Rust code.
Upstream Mesa gbm defines those functions as variants with an extra
"flags" argument[2][3] (these don't exist in the mesa version checked
into Chromium though). The definitions added in this CL provide variants
that fail for any non-zero flags.
[1] https://crates.io/crates/gbm
[2] https://gitlab.freedesktop.org/mesa/mesa/-/blob/b7d6d90dabad885c2578e2195901f60ac6ac4e7c/src/gbm/main/gbm.h#L303
[3] https://gitlab.freedesktop.org/mesa/mesa/-/blob/b7d6d90dabad885c2578e2195901f60ac6ac4e7c/src/gbm/main/gbm.h#L443
Bug: 328363177
Test: cros build-packages --board=amd64-generic minigbm drm-tests
Change-Id: I9284d597e2d4de5ff9b677db0a0ffe6d274e4f57
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/5352371
Reviewed-by: Dominik Behr <dbehr@chromium.org>
Reviewed-by: Gurchetan Singh <gurchetansingh@chromium.org>
Commit-Queue: Marcin Radomski <dextero@google.com>
Tested-by: Marcin Radomski <dextero@google.com>
-rw-r--r-- | gbm.c | 24 | ||||
-rw-r--r-- | gbm.h | 19 |
2 files changed, 42 insertions, 1 deletions
@@ -87,10 +87,21 @@ PUBLIC struct gbm_surface *gbm_surface_create_with_modifiers(struct gbm_device * const uint64_t *modifiers, const unsigned int count) { + return gbm_surface_create_with_modifiers2(gbm, width, height, format, modifiers, count, 0); +} + +PUBLIC struct gbm_surface * +gbm_surface_create_with_modifiers2(struct gbm_device *gbm, uint32_t width, uint32_t height, + uint32_t format, const uint64_t *modifiers, + const unsigned int count, uint32_t flags) +{ if (count != 0 || modifiers != NULL) return NULL; - return gbm_surface_create(gbm, width, height, format, 0); + if (flags != 0) + return NULL; + + return gbm_surface_create(gbm, width, height, format, flags); } PUBLIC struct gbm_bo *gbm_surface_lock_front_buffer(struct gbm_surface *surface) @@ -161,8 +172,19 @@ PUBLIC struct gbm_bo *gbm_bo_create_with_modifiers(struct gbm_device *gbm, uint3 uint32_t height, uint32_t format, const uint64_t *modifiers, uint32_t count) { + return gbm_bo_create_with_modifiers2(gbm, width, height, format, modifiers, count, 0); +} + +PUBLIC struct gbm_bo *gbm_bo_create_with_modifiers2(struct gbm_device *gbm, uint32_t width, + uint32_t height, uint32_t format, + const uint64_t *modifiers, + const unsigned int count, uint32_t flags) +{ struct gbm_bo *bo; + if (flags != 0) + return NULL; + bo = gbm_bo_new(gbm, format); if (!bo) @@ -339,6 +339,16 @@ gbm_bo_create_with_modifiers(struct gbm_device *gbm, uint32_t format, const uint64_t *modifiers, const unsigned int count); + +struct gbm_bo * +gbm_bo_create_with_modifiers2(struct gbm_device *gbm, + uint32_t width, + uint32_t height, + uint32_t format, + const uint64_t *modifiers, + const unsigned int count, + uint32_t flags); + #define GBM_BO_IMPORT_WL_BUFFER 0x5501 #define GBM_BO_IMPORT_EGL_IMAGE 0x5502 #define GBM_BO_IMPORT_FD 0x5503 @@ -491,6 +501,15 @@ gbm_surface_create_with_modifiers(struct gbm_device *gbm, const uint64_t *modifiers, const unsigned int count); +struct gbm_surface * +gbm_surface_create_with_modifiers2(struct gbm_device *gbm, + uint32_t width, + uint32_t height, + uint32_t format, + const uint64_t *modifiers, + const unsigned int count, + uint32_t flags); + struct gbm_bo * gbm_surface_lock_front_buffer(struct gbm_surface *surface); |