summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Clark <robdclark@gmail.com>2017-05-03 12:50:00 -0400
committerRob Clark <robdclark@gmail.com>2017-05-08 13:47:26 -0400
commitb98f30e99d2650cde62c861eadb73e47e3a285ef (patch)
tree952bbca7bcab481467dd88ac8719950cd83f4c30
parent4d322e94f08c567a5ff467e21f5b41dab4160bdb (diff)
downloadkmscube-b98f30e99d2650cde62c861eadb73e47e3a285ef.tar.gz
helper to check for egl entrypoints
Remove some boilerplate and check more specifically for all the entry- points that different modules need. Ok, I guess it isn't likely for a driver to expose eglCreateImageKHR but not eglDeleteImageKHR.. but otoh kmscube is useful for bringing up drivers. Signed-off-by: Rob Clark <robdclark@gmail.com> Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
-rw-r--r--common.h11
-rw-r--r--cube-tex.c6
-rw-r--r--cube-video.c4
-rw-r--r--drm-atomic.c8
-rw-r--r--gst-decoder.c4
5 files changed, 24 insertions, 9 deletions
diff --git a/common.h b/common.h
index 0acf4c0..11ec26e 100644
--- a/common.h
+++ b/common.h
@@ -85,6 +85,17 @@ struct egl {
void (*draw)(unsigned i);
};
+static inline int __egl_check(void *ptr, const char *name)
+{
+ if (!ptr) {
+ printf("no %s\n", name);
+ return -1;
+ }
+ return 0;
+}
+
+#define egl_check(egl, name) __egl_check((egl)->name, #name)
+
int init_egl(struct egl *egl, const struct gbm *gbm);
int create_program(const char *vs_src, const char *fs_src);
int link_program(unsigned program);
diff --git a/cube-tex.c b/cube-tex.c
index 9316ffb..9e38ae8 100644
--- a/cube-tex.c
+++ b/cube-tex.c
@@ -507,10 +507,10 @@ const struct egl * init_cube_tex(const struct gbm *gbm, enum mode mode)
if (ret)
return NULL;
- if (!gl.egl.eglCreateImageKHR) {
- printf("no eglCreateImageKHR\n");
+ if (egl_check(&gl.egl, eglCreateImageKHR) ||
+ egl_check(&gl.egl, glEGLImageTargetTexture2DOES) ||
+ egl_check(&gl.egl, eglDestroyImageKHR))
return NULL;
- }
gl.aspect = (GLfloat)(gbm->height) / (GLfloat)(gbm->width);
gl.mode = mode;
diff --git a/cube-video.c b/cube-video.c
index 6ce20da..095544d 100644
--- a/cube-video.c
+++ b/cube-video.c
@@ -300,10 +300,8 @@ const struct egl * init_cube_video(const struct gbm *gbm, const char *filenames)
if (ret)
return NULL;
- if (!gl.egl.eglCreateImageKHR) {
- printf("no eglCreateImageKHR\n");
+ if (egl_check(&gl.egl, glEGLImageTargetTexture2DOES))
return NULL;
- }
fnames = strdup(filenames);
while ((s = strstr(fnames, ","))) {
diff --git a/drm-atomic.c b/drm-atomic.c
index 2548979..82531d3 100644
--- a/drm-atomic.c
+++ b/drm-atomic.c
@@ -181,10 +181,12 @@ static int atomic_run(const struct gbm *gbm, const struct egl *egl)
uint32_t flags = DRM_MODE_ATOMIC_NONBLOCK;
int ret;
- if (!egl->eglDupNativeFenceFDANDROID) {
- printf("no eglDupNativeFenceFDANDROID\n");
+ if (egl_check(egl, eglDupNativeFenceFDANDROID) ||
+ egl_check(egl, eglCreateSyncKHR) ||
+ egl_check(egl, eglDestroySyncKHR) ||
+ egl_check(egl, eglWaitSyncKHR) ||
+ egl_check(egl, eglClientWaitSyncKHR))
return -1;
- }
/* Allow a modeset change for the first commit only. */
flags |= DRM_MODE_ATOMIC_ALLOW_MODESET;
diff --git a/gst-decoder.c b/gst-decoder.c
index deffad5..2d6d581 100644
--- a/gst-decoder.c
+++ b/gst-decoder.c
@@ -260,6 +260,10 @@ video_init(const struct egl *egl, const struct gbm *gbm, const char *filename)
GstPad *pad;
GstBus *bus;
+ if (egl_check(egl, eglCreateImageKHR) ||
+ egl_check(egl, eglDestroyImageKHR))
+ return NULL;
+
dec = calloc(1, sizeof(*dec));
dec->loop = g_main_loop_new(NULL, FALSE);
dec->gbm = gbm;