[PATCH xserver 01/10] xwayland: move glamor specific routines
Olivier Fourdan
ofourdan at redhat.com
Tue Jun 5 17:38:36 UTC 2018
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 at redhat.com>
---
hw/xwayland/xwayland-glamor-eglstream.c | 79 ++++++++++++++++++++++++
hw/xwayland/xwayland-glamor.c | 80 -------------------------
hw/xwayland/xwayland.h | 24 ++++----
3 files changed, 89 insertions(+), 94 deletions(-)
diff --git a/hw/xwayland/xwayland-glamor-eglstream.c b/hw/xwayland/xwayland-glamor-eglstream.c
index 8dd1cc304..89c531f4a 100644
--- a/hw/xwayland/xwayland-glamor-eglstream.c
+++ b/hw/xwayland/xwayland-glamor-eglstream.c
@@ -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)
{
diff --git a/hw/xwayland/xwayland-glamor.c b/hw/xwayland/xwayland-glamor.c
index f543f321d..c7ae51336 100644
--- a/hw/xwayland/xwayland-glamor.c
+++ b/hw/xwayland/xwayland-glamor.c
@@ -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)
{
diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
index 39bc20a7e..0d4afdf8a 100644
--- a/hw/xwayland/xwayland.h
+++ b/hw/xwayland/xwayland.h
@@ -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);
--
2.17.1
More information about the xorg-devel
mailing list