gl-renderer: Move get_platform_display to EGL client setup

This is to put more of the EGL client extension handling in the same
place. This also adds a boolean to check if EGL_EXT_platform_base is
supported, similar to other extensions we check.

Signed-off-by: Scott Anderson <scott.anderson@collabora.com>
dev
Scott Anderson 5 years ago
parent dddb592cfb
commit 7725415478
  1. 8
      libweston/renderer-gl/egl-glue.c
  2. 3
      libweston/renderer-gl/gl-renderer-internal.h
  3. 24
      libweston/renderer-gl/gl-renderer.c

@ -466,11 +466,15 @@ gl_renderer_setup_egl_client_extensions(struct gl_renderer *gr)
return; return;
} }
if (weston_check_egl_extension(extensions, "EGL_EXT_platform_base")) if (weston_check_egl_extension(extensions, "EGL_EXT_platform_base")) {
gr->get_platform_display =
(void *) eglGetProcAddress("eglGetPlatformDisplayEXT");
gr->create_platform_window = gr->create_platform_window =
(void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT"); (void *) eglGetProcAddress("eglCreatePlatformWindowSurfaceEXT");
else gr->has_platform_base = true;
} else {
weston_log("warning: EGL_EXT_platform_base not supported.\n"); weston_log("warning: EGL_EXT_platform_base not supported.\n");
}
} }
int int

@ -63,7 +63,10 @@ struct gl_renderer {
PFNEGLCREATEIMAGEKHRPROC create_image; PFNEGLCREATEIMAGEKHRPROC create_image;
PFNEGLDESTROYIMAGEKHRPROC destroy_image; PFNEGLDESTROYIMAGEKHRPROC destroy_image;
PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC swap_buffers_with_damage; PFNEGLSWAPBUFFERSWITHDAMAGEEXTPROC swap_buffers_with_damage;
PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display;
PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window; PFNEGLCREATEPLATFORMWINDOWSURFACEEXTPROC create_platform_window;
bool has_platform_base;
bool has_unpack_subimage; bool has_unpack_subimage;

@ -209,8 +209,6 @@ struct timeline_render_point {
struct wl_event_source *event_source; struct wl_event_source *event_source;
}; };
static PFNEGLGETPLATFORMDISPLAYEXTPROC get_platform_display = NULL;
static inline const char * static inline const char *
dump_format(uint32_t format, char out[4]) dump_format(uint32_t format, char out[4])
{ {
@ -3495,22 +3493,10 @@ gl_renderer_display_create(struct weston_compositor *ec,
gr->egl_display = NULL; gr->egl_display = NULL;
/* extension_suffix is supported */ /* extension_suffix is supported */
if (supports) { if (gr->has_platform_base && supports)
if (!get_platform_display) { gr->egl_display = gr->get_platform_display(platform,
get_platform_display = (void *) eglGetProcAddress( native_display,
"eglGetPlatformDisplayEXT"); NULL);
}
/* also wrap this in the supports check because
* eglGetProcAddress can return non-NULL and still not
* support the feature at runtime, so ensure the
* appropriate extension checks have been done. */
if (get_platform_display && platform) {
gr->egl_display = get_platform_display(platform,
native_display,
NULL);
}
}
if (!gr->egl_display) { if (!gr->egl_display) {
weston_log("warning: either no EGL_EXT_platform_base " weston_log("warning: either no EGL_EXT_platform_base "
@ -3519,7 +3505,7 @@ gl_renderer_display_create(struct weston_compositor *ec,
gr->egl_display = eglGetDisplay(native_display); gr->egl_display = eglGetDisplay(native_display);
} }
if (gr->egl_display == EGL_NO_DISPLAY) { if (!gr->egl_display) {
weston_log("failed to create display\n"); weston_log("failed to create display\n");
goto fail; goto fail;
} }

Loading…
Cancel
Save