xwayland: move glamor specific routines
Functions such as:
xwl_glamor_egl_supports_device_probing()
xwl_glamor_egl_get_devices()
xwl_glamor_egl_device_has_egl_extensions()
Are of no use outside of EGLStream support, move them to the relevant
source file.
Similarly, the other glamor functions such as:
xwl_glamor_init()
xwl_screen_set_drm_interface()
xwl_screen_set_dmabuf_interface()
xwl_glamor_pixmap_get_wl_buffer()
xwl_glamor_init_wl_registry()
xwl_glamor_post_damage()
xwl_glamor_allow_commits()
xwl_glamor_egl_make_current()
Are useless without glamor support enabled, move those within a
a "#ifdef XWL_HAS_GLAMOR" in xwayland.h
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
(cherry picked from commit f6b2109c1b
)
This commit is contained in:
parent
dea40be935
commit
443e3348bb
|
@ -187,6 +187,85 @@ xwl_eglstream_cleanup(struct xwl_screen *xwl_screen)
|
||||||
free(xwl_eglstream);
|
free(xwl_eglstream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
xwl_glamor_egl_supports_device_probing(void)
|
||||||
|
{
|
||||||
|
return epoxy_has_egl_extension(NULL, "EGL_EXT_device_base");
|
||||||
|
}
|
||||||
|
|
||||||
|
static void **
|
||||||
|
xwl_glamor_egl_get_devices(int *num_devices)
|
||||||
|
{
|
||||||
|
EGLDeviceEXT *devices;
|
||||||
|
Bool ret;
|
||||||
|
int drm_dev_count = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!xwl_glamor_egl_supports_device_probing())
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
/* Get the number of devices */
|
||||||
|
ret = eglQueryDevicesEXT(0, NULL, num_devices);
|
||||||
|
if (!ret || *num_devices < 1)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
devices = calloc(*num_devices, sizeof(EGLDeviceEXT));
|
||||||
|
if (!devices)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
ret = eglQueryDevicesEXT(*num_devices, devices, num_devices);
|
||||||
|
if (!ret)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
/* We're only ever going to care about devices that support
|
||||||
|
* EGL_EXT_device_drm, so filter out the ones that don't
|
||||||
|
*/
|
||||||
|
for (i = 0; i < *num_devices; i++) {
|
||||||
|
const char *extension_str =
|
||||||
|
eglQueryDeviceStringEXT(devices[i], EGL_EXTENSIONS);
|
||||||
|
|
||||||
|
if (!epoxy_extension_in_string(extension_str, "EGL_EXT_device_drm"))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
devices[drm_dev_count++] = devices[i];
|
||||||
|
}
|
||||||
|
if (!drm_dev_count)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
*num_devices = drm_dev_count;
|
||||||
|
devices = realloc(devices, sizeof(EGLDeviceEXT) * drm_dev_count);
|
||||||
|
|
||||||
|
return devices;
|
||||||
|
|
||||||
|
error:
|
||||||
|
free(devices);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
xwl_glamor_egl_device_has_egl_extensions(void *device,
|
||||||
|
const char **ext_list, size_t size)
|
||||||
|
{
|
||||||
|
EGLDisplay egl_display;
|
||||||
|
int i;
|
||||||
|
Bool has_exts = TRUE;
|
||||||
|
|
||||||
|
egl_display = glamor_egl_get_display(EGL_PLATFORM_DEVICE_EXT, device);
|
||||||
|
if (!egl_display || !eglInitialize(egl_display, NULL, NULL))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
for (i = 0; i < size; i++) {
|
||||||
|
if (!epoxy_has_egl_extension(egl_display, ext_list[i])) {
|
||||||
|
has_exts = FALSE;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
eglTerminate(egl_display);
|
||||||
|
return has_exts;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
xwl_eglstream_unref_pixmap_stream(struct xwl_pixmap *xwl_pixmap)
|
xwl_eglstream_unref_pixmap_stream(struct xwl_pixmap *xwl_pixmap)
|
||||||
{
|
{
|
||||||
|
|
|
@ -52,86 +52,6 @@ xwl_glamor_egl_make_current(struct xwl_screen *xwl_screen)
|
||||||
xwl_screen->glamor_ctx->make_current(xwl_screen->glamor_ctx);
|
xwl_screen->glamor_ctx->make_current(xwl_screen->glamor_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
Bool
|
|
||||||
xwl_glamor_egl_supports_device_probing(void)
|
|
||||||
{
|
|
||||||
return epoxy_has_egl_extension(NULL, "EGL_EXT_device_base");
|
|
||||||
}
|
|
||||||
|
|
||||||
void **
|
|
||||||
xwl_glamor_egl_get_devices(int *num_devices)
|
|
||||||
{
|
|
||||||
#ifdef XWL_HAS_EGLSTREAM
|
|
||||||
EGLDeviceEXT *devices;
|
|
||||||
Bool ret;
|
|
||||||
int drm_dev_count = 0;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!xwl_glamor_egl_supports_device_probing())
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
/* Get the number of devices */
|
|
||||||
ret = eglQueryDevicesEXT(0, NULL, num_devices);
|
|
||||||
if (!ret || *num_devices < 1)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
devices = calloc(*num_devices, sizeof(EGLDeviceEXT));
|
|
||||||
if (!devices)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
ret = eglQueryDevicesEXT(*num_devices, devices, num_devices);
|
|
||||||
if (!ret)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
/* We're only ever going to care about devices that support
|
|
||||||
* EGL_EXT_device_drm, so filter out the ones that don't
|
|
||||||
*/
|
|
||||||
for (i = 0; i < *num_devices; i++) {
|
|
||||||
const char *extension_str =
|
|
||||||
eglQueryDeviceStringEXT(devices[i], EGL_EXTENSIONS);
|
|
||||||
|
|
||||||
if (!epoxy_extension_in_string(extension_str, "EGL_EXT_device_drm"))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
devices[drm_dev_count++] = devices[i];
|
|
||||||
}
|
|
||||||
if (!drm_dev_count)
|
|
||||||
goto error;
|
|
||||||
|
|
||||||
*num_devices = drm_dev_count;
|
|
||||||
devices = realloc(devices, sizeof(EGLDeviceEXT) * drm_dev_count);
|
|
||||||
|
|
||||||
return devices;
|
|
||||||
|
|
||||||
error:
|
|
||||||
free(devices);
|
|
||||||
#endif
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bool
|
|
||||||
xwl_glamor_egl_device_has_egl_extensions(void *device,
|
|
||||||
const char **ext_list, size_t size)
|
|
||||||
{
|
|
||||||
EGLDisplay egl_display;
|
|
||||||
int i;
|
|
||||||
Bool has_exts = TRUE;
|
|
||||||
|
|
||||||
egl_display = glamor_egl_get_display(EGL_PLATFORM_DEVICE_EXT, device);
|
|
||||||
if (!egl_display || !eglInitialize(egl_display, NULL, NULL))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
for (i = 0; i < size; i++) {
|
|
||||||
if (!epoxy_has_egl_extension(egl_display, ext_list[i])) {
|
|
||||||
has_exts = FALSE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
eglTerminate(egl_display);
|
|
||||||
return has_exts;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
glamor_egl_screen_init(ScreenPtr screen, struct glamor_context *glamor_ctx)
|
glamor_egl_screen_init(ScreenPtr screen, struct glamor_context *glamor_ctx)
|
||||||
{
|
{
|
||||||
|
|
|
@ -414,7 +414,7 @@ PixmapPtr xwl_shm_create_pixmap(ScreenPtr screen, int width, int height,
|
||||||
Bool xwl_shm_destroy_pixmap(PixmapPtr pixmap);
|
Bool xwl_shm_destroy_pixmap(PixmapPtr pixmap);
|
||||||
struct wl_buffer *xwl_shm_pixmap_get_wl_buffer(PixmapPtr pixmap);
|
struct wl_buffer *xwl_shm_pixmap_get_wl_buffer(PixmapPtr pixmap);
|
||||||
|
|
||||||
|
#ifdef XWL_HAS_GLAMOR
|
||||||
Bool xwl_glamor_init(struct xwl_screen *xwl_screen);
|
Bool xwl_glamor_init(struct xwl_screen *xwl_screen);
|
||||||
|
|
||||||
Bool xwl_screen_set_drm_interface(struct xwl_screen *xwl_screen,
|
Bool xwl_screen_set_drm_interface(struct xwl_screen *xwl_screen,
|
||||||
|
@ -432,27 +432,23 @@ void xwl_glamor_init_wl_registry(struct xwl_screen *xwl_screen,
|
||||||
void xwl_glamor_post_damage(struct xwl_window *xwl_window,
|
void xwl_glamor_post_damage(struct xwl_window *xwl_window,
|
||||||
PixmapPtr pixmap, RegionPtr region);
|
PixmapPtr pixmap, RegionPtr region);
|
||||||
Bool xwl_glamor_allow_commits(struct xwl_window *xwl_window);
|
Bool xwl_glamor_allow_commits(struct xwl_window *xwl_window);
|
||||||
|
void xwl_glamor_egl_make_current(struct xwl_screen *xwl_screen);
|
||||||
|
|
||||||
#ifdef GLAMOR_HAS_GBM
|
#ifdef GLAMOR_HAS_GBM
|
||||||
Bool xwl_present_init(ScreenPtr screen);
|
Bool xwl_present_init(ScreenPtr screen);
|
||||||
void xwl_present_cleanup(WindowPtr window);
|
void xwl_present_cleanup(WindowPtr window);
|
||||||
#endif
|
#endif /* GLAMOR_HAS_GBM */
|
||||||
|
|
||||||
void xwl_screen_release_tablet_manager(struct xwl_screen *xwl_screen);
|
|
||||||
|
|
||||||
void xwl_screen_init_xdg_output(struct xwl_screen *xwl_screen);
|
|
||||||
|
|
||||||
void xwl_glamor_egl_make_current(struct xwl_screen *xwl_screen);
|
|
||||||
Bool xwl_glamor_egl_supports_device_probing(void);
|
|
||||||
void **xwl_glamor_egl_get_devices(int *num_devices);
|
|
||||||
Bool xwl_glamor_egl_device_has_egl_extensions(void *device,
|
|
||||||
const char **ext_list,
|
|
||||||
size_t size);
|
|
||||||
|
|
||||||
#ifdef XV
|
#ifdef XV
|
||||||
/* glamor Xv Adaptor */
|
/* glamor Xv Adaptor */
|
||||||
Bool xwl_glamor_xv_init(ScreenPtr pScreen);
|
Bool xwl_glamor_xv_init(ScreenPtr pScreen);
|
||||||
#endif
|
#endif /* XV */
|
||||||
|
|
||||||
|
#endif /* XWL_HAS_GLAMOR */
|
||||||
|
|
||||||
|
void xwl_screen_release_tablet_manager(struct xwl_screen *xwl_screen);
|
||||||
|
|
||||||
|
void xwl_screen_init_xdg_output(struct xwl_screen *xwl_screen);
|
||||||
|
|
||||||
#ifdef XF86VIDMODE
|
#ifdef XF86VIDMODE
|
||||||
void xwlVidModeExtensionInit(void);
|
void xwlVidModeExtensionInit(void);
|
||||||
|
|
Loading…
Reference in New Issue