summaryrefslogtreecommitdiff
path: root/common.c
diff options
context:
space:
mode:
authorEmil Velikov <emil.velikov@collabora.com>2018-03-30 15:17:11 +0100
committerChristian Gmeiner <christian.gmeiner@gmail.com>2018-04-02 13:55:57 +0200
commit4f7cec00b6e2ccf8ee3b8575b77303e65c1acea9 (patch)
tree518eccd9576b0529c166721cdf335e87e51e2a90 /common.c
parentaac3788d2844872a0b66eb2994f773e13326d642 (diff)
downloadkmscube-4f7cec00b6e2ccf8ee3b8575b77303e65c1acea9.tar.gz
Use weak functions to handle lack of gbm modifiers
Add weak function declaration and check if they're valid prior to calling the functions. This allows us to remove conditional compilation, yet allowing the modifiers codepath to work if API is available. Cc: Christian Gmeiner <christian.gmeiner@gmail.com> Cc: Rob Clark <robdclark@gmail.com> Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Christian Gmeiner <christian.gmeiner@gmail.com> Reviewed-by: Rob Clark <robdclark@gmail.com>
Diffstat (limited to 'common.c')
-rw-r--r--common.c32
1 files changed, 21 insertions, 11 deletions
diff --git a/common.c b/common.c
index 332e3e9..1d97c91 100644
--- a/common.c
+++ b/common.c
@@ -33,23 +33,33 @@
static struct gbm gbm;
+WEAK struct gbm_surface *
+gbm_surface_create_with_modifiers(struct gbm_device *gbm,
+ uint32_t width, uint32_t height,
+ uint32_t format,
+ const uint64_t *modifiers,
+ const unsigned int count);
+
const struct gbm * init_gbm(int drm_fd, int w, int h, uint64_t modifier)
{
gbm.dev = gbm_create_device(drm_fd);
gbm.format = GBM_FORMAT_XRGB8888;
-#ifndef HAVE_GBM_MODIFIERS
- if (modifier != DRM_FORMAT_MOD_LINEAR) {
- fprintf(stderr, "Modifiers requested but support isn't available\n");
- return NULL;
+ if (gbm_surface_create_with_modifiers) {
+ gbm.surface = gbm_surface_create_with_modifiers(gbm.dev, w, h,
+ gbm.format,
+ &modifier, 1);
+
+ } else {
+ if (modifier != DRM_FORMAT_MOD_LINEAR) {
+ fprintf(stderr, "Modifiers requested but support isn't available\n");
+ return NULL;
+ }
+ gbm.surface = gbm_surface_create(gbm.dev, w, h,
+ gbm.format,
+ GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING);
+
}
- gbm.surface = gbm_surface_create(gbm.dev, w, h,
- gbm.format,
- GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING);
-#else
- gbm.surface = gbm_surface_create_with_modifiers(gbm.dev, w, h,
- gbm.format, &modifier, 1);
-#endif
if (!gbm.surface) {
printf("failed to create gbm surface\n");