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>
This commit is contained in:
		
							parent
							
								
									d31a7be15e
								
							
						
					
					
						commit
						f6b2109c1b
					
				| 
						 | 
				
			
			@ -187,6 +187,85 @@ xwl_eglstream_cleanup(struct xwl_screen *xwl_screen)
 | 
			
		|||
    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
 | 
			
		||||
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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
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);
 | 
			
		||||
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_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,
 | 
			
		||||
                            PixmapPtr pixmap, RegionPtr region);
 | 
			
		||||
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
 | 
			
		||||
Bool xwl_present_init(ScreenPtr screen);
 | 
			
		||||
void xwl_present_cleanup(WindowPtr window);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
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);
 | 
			
		||||
#endif /* GLAMOR_HAS_GBM */
 | 
			
		||||
 | 
			
		||||
#ifdef XV
 | 
			
		||||
/* glamor Xv Adaptor */
 | 
			
		||||
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
 | 
			
		||||
void xwlVidModeExtensionInit(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue