diff options
author | Emil Velikov <emil.velikov@collabora.com> | 2018-03-30 15:17:11 +0100 |
---|---|---|
committer | Christian Gmeiner <christian.gmeiner@gmail.com> | 2018-04-02 13:55:57 +0200 |
commit | 4f7cec00b6e2ccf8ee3b8575b77303e65c1acea9 (patch) | |
tree | 518eccd9576b0529c166721cdf335e87e51e2a90 /common.c | |
parent | aac3788d2844872a0b66eb2994f773e13326d642 (diff) | |
download | kmscube-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.c | 32 |
1 files changed, 21 insertions, 11 deletions
@@ -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"); |