[Mesa-dev] [PATCH kmscube 1/2] helper to check for egl entrypoints

Eric Engestrom eric.engestrom at imgtec.com
Thu May 4 14:39:53 UTC 2017


On Thursday, 2017-05-04 09:39:15 -0400, Rob Clark wrote:
> Remove some boilerplate and check more specifically for all the entry-
> points that different modules need.
> 
> Signed-off-by: Rob Clark <robdclark at gmail.com>
> ---
> 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.

Agreed. Both are
Reviewed-by: Eric Engestrom <eric.engestrom at imgtec.com>

> 
>  common.h      | 11 +++++++++++
>  cube-tex.c    |  6 +++---
>  cube-video.c  |  4 +---
>  drm-atomic.c  |  8 +++++---
>  gst-decoder.c |  4 ++++
>  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 65caacd..dd91bbb 100644
> --- a/drm-atomic.c
> +++ b/drm-atomic.c
> @@ -180,10 +180,12 @@ static int atomic_run(const struct gbm *gbm, const struct egl *egl)
>  	uint32_t i = 0;
>  	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;
> -	}
>  
>  	eglSwapBuffers(egl->display, egl->surface);
>  	bo = gbm_surface_lock_front_buffer(gbm->surface);
> 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;
> -- 
> 2.9.3
> 


More information about the mesa-dev mailing list