diff --git a/.pick_status.json b/.pick_status.json index d6050baa230..8a166da19b7 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2623,7 +2623,7 @@ "description": "gbm: Don't pass default usage flags on ABIs < 1", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "ad50b47a14e94751cd59ad5892ad795d508557f0" }, diff --git a/src/gbm/main/gbm.c b/src/gbm/main/gbm.c index 2d646e0e515..f0e650efe39 100644 --- a/src/gbm/main/gbm.c +++ b/src/gbm/main/gbm.c @@ -497,8 +497,22 @@ gbm_bo_create_with_modifiers(struct gbm_device *gbm, const uint64_t *modifiers, const unsigned int count) { + uint32_t flags = 0; + + /* + * ABI version 1 added the modifiers+flags capability. Backends from + * prior versions may fail if "unknown" flags are provided along with + * modifiers, but assume scanout is required when modifiers are used. + * Newer backends expect scanout to be explicitly requested if required, + * but applications using this older interface rely on the older implied + * requirement, so that behavior must be preserved. + */ + if (gbm->v0.backend_version >= 1) { + flags |= GBM_BO_USE_SCANOUT; + } + return gbm_bo_create_with_modifiers2(gbm, width, height, format, modifiers, - count, GBM_BO_USE_SCANOUT); + count, flags); } GBM_EXPORT struct gbm_bo * @@ -648,9 +662,23 @@ gbm_surface_create_with_modifiers(struct gbm_device *gbm, const uint64_t *modifiers, const unsigned int count) { + uint32_t flags = 0; + + /* + * ABI version 1 added the modifiers+flags capability. Backends from + * prior versions may fail if "unknown" flags are provided along with + * modifiers, but assume scanout is required when modifiers are used. + * Newer backends expect scanout to be explicitly requested if required, + * but applications using this older interface rely on the older implied + * requirement, so that behavior must be preserved. + */ + if (gbm->v0.backend_version >= 1) { + flags |= GBM_BO_USE_SCANOUT; + } + return gbm_surface_create_with_modifiers2(gbm, width, height, format, modifiers, count, - GBM_BO_USE_SCANOUT); + flags); } GBM_EXPORT struct gbm_surface *