diff options
| -rw-r--r-- | .gitlab-ci/build/gitlab-ci.yml | 1 | ||||
| -rw-r--r-- | docs/relnotes/new_features.txt | 1 | ||||
| -rw-r--r-- | meson.build | 1 | ||||
| -rw-r--r-- | meson.options | 10 | ||||
| -rw-r--r-- | src/egl/drivers/dri2/egl_dri2.c | 12 | ||||
| -rw-r--r-- | src/egl/drivers/dri2/egl_dri2.h | 8 | ||||
| -rw-r--r-- | src/egl/drivers/dri2/platform_wayland.c | 58 | ||||
| -rw-r--r-- | src/egl/generate/gen_egl_dispatch.py | 6 | ||||
| -rw-r--r-- | src/egl/main/eglapi.c | 2 | ||||
| -rw-r--r-- | src/egl/main/egldriver.h | 2 | ||||
| -rw-r--r-- | src/egl/main/eglentrypoint.h | 8 | ||||
| -rw-r--r-- | src/egl/main/eglimage.c | 4 | ||||
| -rw-r--r-- | src/egl/meson.build | 23 | ||||
| -rw-r--r-- | src/gbm/backends/dri/gbm_dri.c | 4 | ||||
| -rw-r--r-- | src/gbm/backends/dri/meson.build | 7 | ||||
| -rw-r--r-- | src/meson.build | 2 | ||||
| -rw-r--r-- | src/vulkan/device-select-layer/device_select_wayland.c | 23 | ||||
| -rw-r--r-- | src/vulkan/device-select-layer/meson.build | 5 |
18 files changed, 143 insertions, 34 deletions
diff --git a/.gitlab-ci/build/gitlab-ci.yml b/.gitlab-ci/build/gitlab-ci.yml index a5b3a9e8813..f4007031138 100644 --- a/.gitlab-ci/build/gitlab-ci.yml +++ b/.gitlab-ci/build/gitlab-ci.yml @@ -193,6 +193,7 @@ debian-build-x86_64: -D gallium-vdpau=enabled -D gallium-va=enabled -D gallium-rusticl=false + -D legacy-wayland=bind-wayland-display GALLIUM_DRIVERS: "i915,iris,nouveau,r300,r600,freedreno,llvmpipe,softpipe,svga,v3d,vc4,virgl,etnaviv,panfrost,lima,zink,d3d12,asahi,crocus" VULKAN_DRIVERS: "intel_hasvk,imagination-experimental,microsoft-experimental,nouveau,swrast" BUILDTYPE: "debugoptimized" diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index f9b76496a08..7fc7306d628 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -66,3 +66,4 @@ VK_ARM_shader_core_properties on panvk/v10+ removed X11 DRI2 support removed EGL_MESA_drm_image removed pre-dmabuf wl_drm support +deprecated EGL_WL_bind_wayland_display diff --git a/meson.build b/meson.build index d187e18968e..d7407a6d067 100644 --- a/meson.build +++ b/meson.build @@ -1977,6 +1977,7 @@ endif # TODO: symbol mangling +with_wayland_bind_display = with_platform_wayland and get_option('legacy-wayland').contains('bind-wayland-display') if with_platform_wayland dep_wl_scanner = dependency('wayland-scanner', native: true) prog_wl_scanner = find_program(dep_wl_scanner.get_variable(pkgconfig : 'wayland_scanner')) diff --git a/meson.options b/meson.options index 6f2a0a5035a..b1cdb06fcc9 100644 --- a/meson.options +++ b/meson.options @@ -778,6 +778,16 @@ option( ) option( + 'legacy-wayland', + type : 'array', + value : [], + description : 'Build legacy Wayland support features.', + choices : [ + 'bind-wayland-display', + ], +) + +option( 'legacy-x11', type : 'array', value : [], diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c index e38e4067a8f..da39ce2ef0f 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c @@ -49,8 +49,10 @@ #ifdef HAVE_WAYLAND_PLATFORM #include "linux-dmabuf-unstable-v1-client-protocol.h" +#if HAVE_BIND_WL_DISPLAY #include "wayland-drm-client-protocol.h" #include "wayland-drm.h" +#endif #include <wayland-client.h> #endif @@ -1892,7 +1894,7 @@ dri2_create_image_khr_renderbuffer(_EGLDisplay *disp, _EGLContext *ctx, return dri2_create_image_from_dri(disp, dri_image); } -#ifdef HAVE_WAYLAND_PLATFORM +#ifdef HAVE_BIND_WL_DISPLAY static _EGLImage * dri2_create_image_wayland_wl_buffer(_EGLDisplay *disp, _EGLContext *ctx, EGLClientBuffer _buffer, @@ -2608,7 +2610,7 @@ dri2_create_image_khr(_EGLDisplay *disp, _EGLContext *ctx, EGLenum target, case EGL_LINUX_DMA_BUF_EXT: return dri2_create_image_dma_buf(disp, ctx, buffer, attr_list); #endif -#ifdef HAVE_WAYLAND_PLATFORM +#ifdef HAVE_BIND_WL_DISPLAY case EGL_WAYLAND_BUFFER_WL: return dri2_create_image_wayland_wl_buffer(disp, ctx, buffer, attr_list); #endif @@ -2632,7 +2634,7 @@ dri2_destroy_image_khr(_EGLDisplay *disp, _EGLImage *image) return EGL_TRUE; } -#ifdef HAVE_WAYLAND_PLATFORM +#ifdef HAVE_BIND_WL_DISPLAY static void dri2_wl_reference_buffer(void *user_data, int fd, struct wl_drm_buffer *buffer) @@ -3147,7 +3149,6 @@ const _EGLDriver _eglDriver = { .QueryBufferAge = dri2_query_buffer_age, .CreateImageKHR = dri2_create_image, .DestroyImageKHR = dri2_destroy_image_khr, - .CreateWaylandBufferFromImageWL = dri2_create_wayland_buffer_from_image, .QuerySurface = dri2_query_surface, .QueryDriverName = dri2_query_driver_name, .QueryDriverConfig = dri2_query_driver_config, @@ -3158,10 +3159,11 @@ const _EGLDriver _eglDriver = { .QueryDmaBufFormatsEXT = dri2_query_dma_buf_formats, .QueryDmaBufModifiersEXT = dri2_query_dma_buf_modifiers, #endif -#ifdef HAVE_WAYLAND_PLATFORM +#ifdef HAVE_BIND_WL_DISPLAY .BindWaylandDisplayWL = dri2_bind_wayland_display_wl, .UnbindWaylandDisplayWL = dri2_unbind_wayland_display_wl, .QueryWaylandBufferWL = dri2_query_wayland_buffer_wl, + .CreateWaylandBufferFromImageWL = dri2_create_wayland_buffer_from_image, #endif .GetSyncValuesCHROMIUM = dri2_get_sync_values_chromium, .GetMscRateANGLE = dri2_get_msc_rate_angle, diff --git a/src/egl/drivers/dri2/egl_dri2.h b/src/egl/drivers/dri2/egl_dri2.h index c1045774853..1682a9c6eb5 100644 --- a/src/egl/drivers/dri2/egl_dri2.h +++ b/src/egl/drivers/dri2/egl_dri2.h @@ -271,9 +271,13 @@ struct dri2_egl_display { struct wl_display *wl_dpy; struct wl_display *wl_dpy_wrapper; struct wl_registry *wl_registry; +#ifdef HAVE_BIND_WL_DISPLAY struct wl_drm *wl_server_drm; struct wl_drm *wl_drm; uint32_t wl_drm_version, wl_drm_name; + bool authenticated; + uint32_t capabilities; +#endif struct wl_shm *wl_shm; struct wl_event_queue *wl_queue; struct zwp_linux_dmabuf_v1 *wl_dmabuf; @@ -281,8 +285,6 @@ struct dri2_egl_display { struct dri2_wl_formats formats; struct zwp_linux_dmabuf_feedback_v1 *wl_dmabuf_feedback; struct dmabuf_feedback_format_table format_table; - bool authenticated; - uint32_t capabilities; char *device_name; bool is_render_node; clockid_t presentation_clock_id; @@ -590,7 +592,7 @@ dri2_get_dri_config(struct dri2_egl_config *conf, EGLint surface_type, static inline void dri2_set_WL_bind_wayland_display(_EGLDisplay *disp) { -#ifdef HAVE_WAYLAND_PLATFORM +#ifdef HAVE_BIND_WL_DISPLAY struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); disp->Extensions.WL_bind_wayland_display = diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index 6937e84d942..ab5bc16b30f 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -57,7 +57,9 @@ #include <loader_wayland_helper.h> #include "linux-dmabuf-unstable-v1-client-protocol.h" +#ifdef HAVE_BIND_WL_DISPLAY #include "wayland-drm-client-protocol.h" +#endif #include <wayland-client.h> #include <wayland-egl-backend.h> @@ -724,7 +726,11 @@ dri2_wl_create_window_surface(_EGLDisplay *disp, _EGLConfig *conf, assert(visual_idx != -1); assert(dri2_wl_visuals[visual_idx].pipe_format != PIPE_FORMAT_NONE); - if (dri2_dpy->wl_dmabuf || dri2_dpy->wl_drm) { + if (dri2_dpy->wl_dmabuf +#ifdef HAVE_BIND_WL_DISPLAY + || dri2_dpy->wl_drm +#endif + ) { dri2_surf->format = dri2_wl_visuals[visual_idx].wl_drm_format; } else { assert(dri2_dpy->wl_shm); @@ -752,6 +758,7 @@ dri2_wl_create_window_surface(_EGLDisplay *disp, _EGLConfig *conf, goto cleanup_surf; } +#ifdef HAVE_BIND_WL_DISPLAY if (dri2_dpy->wl_drm) { dri2_surf->wl_drm_wrapper = wl_proxy_create_wrapper(dri2_dpy->wl_drm); if (!dri2_surf->wl_drm_wrapper) { @@ -761,6 +768,7 @@ dri2_wl_create_window_surface(_EGLDisplay *disp, _EGLConfig *conf, wl_proxy_set_queue((struct wl_proxy *)dri2_surf->wl_drm_wrapper, dri2_surf->wl_queue); } +#endif dri2_surf->wl_dpy_wrapper = wl_proxy_create_wrapper(dri2_dpy->wl_dpy); if (!dri2_surf->wl_dpy_wrapper) { @@ -840,9 +848,11 @@ cleanup_surf_wrapper: cleanup_dpy_wrapper: wl_proxy_wrapper_destroy(dri2_surf->wl_dpy_wrapper); cleanup_drm: +#ifdef HAVE_BIND_WL_DISPLAY if (dri2_surf->wl_drm_wrapper) wl_proxy_wrapper_destroy(dri2_surf->wl_drm_wrapper); cleanup_queue: +#endif wl_event_queue_destroy(dri2_surf->wl_queue); cleanup_surf: free(dri2_surf); @@ -900,8 +910,10 @@ dri2_wl_destroy_surface(_EGLDisplay *disp, _EGLSurface *surf) loader_wayland_surface_destroy(&dri2_surf->wayland_surface); wl_proxy_wrapper_destroy(dri2_surf->wl_dpy_wrapper); +#ifdef HAVE_BIND_WL_DISPLAY if (dri2_surf->wl_drm_wrapper) wl_proxy_wrapper_destroy(dri2_surf->wl_drm_wrapper); +#endif if (dri2_surf->wl_dmabuf_feedback) { zwp_linux_dmabuf_feedback_v1_destroy(dri2_surf->wl_dmabuf_feedback); dmabuf_feedback_fini(&dri2_surf->dmabuf_feedback); @@ -1657,7 +1669,9 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy, ret = zwp_linux_buffer_params_v1_create_immed(params, width, height, fourcc, 0); zwp_linux_buffer_params_v1_destroy(params); - } else if (dri2_dpy->wl_drm) { + } +#ifdef HAVE_BIND_WL_DISPLAY + else if (dri2_dpy->wl_drm) { struct wl_drm *wl_drm = dri2_surf ? dri2_surf->wl_drm_wrapper : dri2_dpy->wl_drm; int fd = -1, stride; @@ -1684,6 +1698,7 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy, stride, 0, 0, 0, 0); close(fd); } +#endif return ret; } @@ -1877,6 +1892,7 @@ dri2_wl_swap_buffers(_EGLDisplay *disp, _EGLSurface *draw) return dri2_wl_swap_buffers_with_damage(disp, draw, NULL, 0); } +#ifdef HAVE_BIND_WL_DISPLAY static struct wl_buffer * dri2_wl_create_wayland_buffer_from_image(_EGLDisplay *disp, _EGLImage *img) { @@ -2003,6 +2019,7 @@ static const struct wl_drm_listener drm_listener = { .authenticated = drm_handle_authenticated, .capabilities = drm_handle_capabilities, }; +#endif static void dmabuf_ignore_format(void *data, struct zwp_linux_dmabuf_v1 *dmabuf, @@ -2041,6 +2058,7 @@ static const struct zwp_linux_dmabuf_v1_listener dmabuf_listener = { .modifier = dmabuf_handle_modifier, }; +#ifdef HAVE_BIND_WL_DISPLAY static void wl_drm_bind(struct dri2_egl_display *dri2_dpy) { @@ -2049,6 +2067,7 @@ wl_drm_bind(struct dri2_egl_display *dri2_dpy) &wl_drm_interface, dri2_dpy->wl_drm_version); wl_drm_add_listener(dri2_dpy->wl_drm, &drm_listener, dri2_dpy); } +#endif static void default_dmabuf_feedback_format_table( @@ -2088,7 +2107,9 @@ default_dmabuf_feedback_main_device( dri2_dpy->device_name = node; dri2_dpy->fd_render_gpu = fd; +#ifdef HAVE_BIND_WL_DISPLAY dri2_dpy->authenticated = true; +#endif } static void @@ -2192,10 +2213,13 @@ registry_handle_global_drm(void *data, struct wl_registry *registry, { struct dri2_egl_display *dri2_dpy = data; +#ifdef HAVE_BIND_WL_DISPLAY if (strcmp(interface, wl_drm_interface.name) == 0) { dri2_dpy->wl_drm_version = MIN2(version, 2); dri2_dpy->wl_drm_name = name; - } else if (strcmp(interface, zwp_linux_dmabuf_v1_interface.name) == 0 && + } else +#endif + if (strcmp(interface, zwp_linux_dmabuf_v1_interface.name) == 0 && version >= 3) { dri2_dpy->wl_dmabuf = wl_registry_bind( registry, name, &zwp_linux_dmabuf_v1_interface, @@ -2233,7 +2257,10 @@ dri2_wl_setup_swap_interval(_EGLDisplay *disp) } static const struct dri2_egl_display_vtbl dri2_wl_display_vtbl = { +#ifdef HAVE_BIND_WL_DISPLAY .authenticate = dri2_wl_authenticate, + .create_wayland_buffer_from_image = dri2_wl_create_wayland_buffer_from_image, +#endif .create_window_surface = dri2_wl_create_window_surface, .create_pixmap_surface = dri2_wl_create_pixmap_surface, .destroy_surface = dri2_wl_destroy_surface, @@ -2242,7 +2269,6 @@ static const struct dri2_egl_display_vtbl dri2_wl_display_vtbl = { .swap_buffers = dri2_wl_swap_buffers, .swap_buffers_with_damage = dri2_wl_swap_buffers_with_damage, .query_buffer_age = dri2_wl_query_buffer_age, - .create_wayland_buffer_from_image = dri2_wl_create_wayland_buffer_from_image, .get_dri_drawable = dri2_surface_get_dri_drawable, }; @@ -2334,6 +2360,7 @@ dri2_initialize_wayland_drm_extensions(struct dri2_egl_display *dri2_dpy) dmabuf_feedback_format_table_fini(&dri2_dpy->format_table); } +#ifdef HAVE_BIND_WL_DISPLAY /* We couldn't retrieve a render node from the dma-buf feedback (or the * feedback was not advertised at all), so we must fallback to wl_drm. */ if (dri2_dpy->fd_render_gpu == -1) { @@ -2351,6 +2378,7 @@ dri2_initialize_wayland_drm_extensions(struct dri2_egl_display *dri2_dpy) (roundtrip(dri2_dpy) < 0 || !dri2_dpy->authenticated)) return false; } +#endif return true; } @@ -2436,6 +2464,7 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp) dri2_wl_setup_swap_interval(disp); +#ifdef HAVE_BIND_WL_DISPLAY if (dri2_dpy->wl_drm) { /* To use Prime, we must have _DRI_IMAGE v7 at least. * createImageFromDmaBufs support indicates that Prime export/import is @@ -2448,8 +2477,6 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp) } } - dri2_wl_add_configs_for_visuals(disp); - dri2_set_WL_bind_wayland_display(disp); /* When cannot convert EGLImage to wl_buffer when on a different gpu, * because the buffer of the EGLImage has likely a tiling mode the server @@ -2457,11 +2484,12 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp) * the extension */ if (dri2_dpy->fd_render_gpu == dri2_dpy->fd_display_gpu) disp->Extensions.WL_create_wayland_buffer_from_image = EGL_TRUE; +#endif - disp->Extensions.EXT_buffer_age = EGL_TRUE; + dri2_wl_add_configs_for_visuals(disp); + disp->Extensions.EXT_buffer_age = EGL_TRUE; disp->Extensions.EXT_swap_buffers_with_damage = EGL_TRUE; - disp->Extensions.EXT_present_opaque = EGL_TRUE; /* Fill vtbl last to prevent accidentally calling virtual function during @@ -2941,13 +2969,15 @@ registry_handle_global_kopper(void *data, struct wl_registry *registry, { struct dri2_egl_display *dri2_dpy = data; - if (strcmp(interface, wl_shm_interface.name) == 0) { - dri2_dpy->wl_shm = wl_registry_bind(registry, name, &wl_shm_interface, 1); - wl_shm_add_listener(dri2_dpy->wl_shm, &shm_listener, dri2_dpy); - } +#ifdef HAVE_BIND_WL_DISPLAY if (strcmp(interface, wl_drm_interface.name) == 0) { dri2_dpy->wl_drm_version = MIN2(version, 2); dri2_dpy->wl_drm_name = name; + } else +#endif + if (strcmp(interface, wl_shm_interface.name) == 0) { + dri2_dpy->wl_shm = wl_registry_bind(registry, name, &wl_shm_interface, 1); + wl_shm_add_listener(dri2_dpy->wl_shm, &shm_listener, dri2_dpy); } else if (strcmp(interface, zwp_linux_dmabuf_v1_interface.name) == 0 && version >= 3) { dri2_dpy->wl_dmabuf = wl_registry_bind( @@ -3202,9 +3232,11 @@ dri2_initialize_wayland_swrast(_EGLDisplay *disp) dri2_wl_add_configs_for_visuals(disp); +#ifdef HAVE_BIND_WL_DISPLAY if (disp->Options.Zink && dri2_dpy->fd_render_gpu >= 0 && (dri2_dpy->wl_dmabuf || dri2_dpy->wl_drm)) dri2_set_WL_bind_wayland_display(disp); +#endif disp->Extensions.EXT_buffer_age = EGL_TRUE; disp->Extensions.EXT_swap_buffers_with_damage = EGL_TRUE; disp->Extensions.EXT_present_opaque = EGL_TRUE; @@ -3235,8 +3267,10 @@ dri2_teardown_wayland(struct dri2_egl_display *dri2_dpy) dri2_wl_formats_fini(&dri2_dpy->formats); if (dri2_dpy->wp_presentation) wp_presentation_destroy(dri2_dpy->wp_presentation); +#ifdef HAVE_BIND_WL_DISPLAY if (dri2_dpy->wl_drm) wl_drm_destroy(dri2_dpy->wl_drm); +#endif if (dri2_dpy->wl_dmabuf) zwp_linux_dmabuf_v1_destroy(dri2_dpy->wl_dmabuf); if (dri2_dpy->wl_shm) diff --git a/src/egl/generate/gen_egl_dispatch.py b/src/egl/generate/gen_egl_dispatch.py index 950ef01d8a0..af14ddfe94c 100644 --- a/src/egl/generate/gen_egl_dispatch.py +++ b/src/egl/generate/gen_egl_dispatch.py @@ -45,6 +45,8 @@ import genCommon def main(): parser = argparse.ArgumentParser() + parser.add_argument("--bind-wl-display", action="store_true", + help="Include EGL_WL_bind_wayland_display") parser.add_argument("target", choices=("header", "source"), help="Whether to build the source or header file.") parser.add_argument("xml_files", nargs="+", @@ -56,9 +58,11 @@ def main(): xmlByName = dict((f.name, f) for f in xmlFunctions) functions = [] for (name, eglFunc) in eglFunctionList.EGL_FUNCTIONS: + if not args.bind_wl_display and "Wayland" in name: + continue func = xmlByName[name] eglFunc = fixupEglFunc(func, eglFunc) - functions.append((func, eglFunc)) + functions.append((func, eglFunc)) # Sort the function list by name. functions = sorted(functions, key=lambda f: f[0].name) diff --git a/src/egl/main/eglapi.c b/src/egl/main/eglapi.c index d687c0cc842..76f6e4cd2df 100644 --- a/src/egl/main/eglapi.c +++ b/src/egl/main/eglapi.c @@ -2239,6 +2239,7 @@ eglDupNativeFenceFDANDROID(EGLDisplay dpy, EGLSync sync) RETURN_EGL_SUCCESS(disp, ret); } +#ifdef HAVE_BIND_WL_DISPLAY struct wl_display; static EGLBoolean EGLAPIENTRY @@ -2327,6 +2328,7 @@ eglCreateWaylandBufferFromImageWL(EGLDisplay dpy, EGLImage image) RETURN_EGL_EVAL(disp, ret); } +#endif static EGLBoolean EGLAPIENTRY eglGetSyncValuesCHROMIUM(EGLDisplay dpy, EGLSurface surface, EGLuint64KHR *ust, diff --git a/src/egl/main/egldriver.h b/src/egl/main/egldriver.h index 32c7cc29372..0cdeb90fac4 100644 --- a/src/egl/main/egldriver.h +++ b/src/egl/main/egldriver.h @@ -158,6 +158,7 @@ struct _egl_driver { /* for EGL_ANDROID_native_fence_sync */ EGLint (*DupNativeFenceFDANDROID)(_EGLDisplay *disp, _EGLSync *sync); +#ifdef HAVE_BIND_WL_DISPLAY /* for EGL_WL_bind_wayland_display */ EGLBoolean (*BindWaylandDisplayWL)(_EGLDisplay *disp, struct wl_display *display); @@ -170,6 +171,7 @@ struct _egl_driver { /* for EGL_WL_create_wayland_buffer_from_image */ struct wl_buffer *(*CreateWaylandBufferFromImageWL)(_EGLDisplay *disp, _EGLImage *img); +#endif /* for EGL_EXT_swap_buffers_with_damage */ EGLBoolean (*SwapBuffersWithDamageEXT)(_EGLDisplay *disp, diff --git a/src/egl/main/eglentrypoint.h b/src/egl/main/eglentrypoint.h index 52efc370308..a6def87dead 100644 --- a/src/egl/main/eglentrypoint.h +++ b/src/egl/main/eglentrypoint.h @@ -5,7 +5,9 @@ /* alphabetical order */ EGL_ENTRYPOINT(eglBindAPI) EGL_ENTRYPOINT(eglBindTexImage) +#ifdef HAVE_BIND_WL_DISPLAY EGL_ENTRYPOINT(eglBindWaylandDisplayWL) +#endif EGL_ENTRYPOINT(eglChooseConfig) EGL_ENTRYPOINT(eglClientWaitSync) EGL_ENTRYPOINT(eglClientWaitSyncKHR) @@ -23,7 +25,9 @@ EGL_ENTRYPOINT(eglCreatePlatformWindowSurfaceEXT) EGL_ENTRYPOINT(eglCreateSync) EGL_ENTRYPOINT(eglCreateSync64KHR) EGL_ENTRYPOINT(eglCreateSyncKHR) +#ifdef HAVE_BIND_WL_DISPLAY EGL_ENTRYPOINT(eglCreateWaylandBufferFromImageWL) +#endif EGL_ENTRYPOINT(eglCreateWindowSurface) EGL_ENTRYPOINT(eglDebugMessageControlKHR) EGL_ENTRYPOINT(eglDestroyContext) @@ -70,7 +74,9 @@ EGL_ENTRYPOINT(eglQueryDmaBufModifiersEXT) EGL_ENTRYPOINT(eglQueryString) EGL_ENTRYPOINT(eglQuerySupportedCompressionRatesEXT) EGL_ENTRYPOINT(eglQuerySurface) +#ifdef HAVE_BIND_WL_DISPLAY EGL_ENTRYPOINT(eglQueryWaylandBufferWL) +#endif EGL_ENTRYPOINT(eglReleaseTexImage) EGL_ENTRYPOINT(eglReleaseThread) EGL_ENTRYPOINT(eglSetBlobCacheFuncsANDROID) @@ -82,7 +88,9 @@ EGL_ENTRYPOINT(eglSwapBuffersWithDamageEXT) EGL_ENTRYPOINT(eglSwapBuffersWithDamageKHR) EGL_ENTRYPOINT(eglSwapInterval) EGL_ENTRYPOINT(eglTerminate) +#ifdef HAVE_BIND_WL_DISPLAY EGL_ENTRYPOINT(eglUnbindWaylandDisplayWL) +#endif EGL_ENTRYPOINT(eglWaitClient) EGL_ENTRYPOINT(eglWaitGL) EGL_ENTRYPOINT(eglWaitNative) diff --git a/src/egl/main/eglimage.c b/src/egl/main/eglimage.c index 27ec3b755ae..4ff1f96478f 100644 --- a/src/egl/main/eglimage.c +++ b/src/egl/main/eglimage.c @@ -71,6 +71,7 @@ _eglParseKHRImageAttribs(_EGLImageAttribs *attrs, _EGLDisplay *disp, return EGL_SUCCESS; } +#ifdef HAVE_BIND_WL_DISPLAY static EGLint _eglParseWLBindWaylandDisplayAttribs(_EGLImageAttribs *attrs, _EGLDisplay *disp, EGLint attr, EGLint val) @@ -88,6 +89,7 @@ _eglParseWLBindWaylandDisplayAttribs(_EGLImageAttribs *attrs, _EGLDisplay *disp, return EGL_SUCCESS; } +#endif static EGLint _eglParseEXTImageDmaBufImportAttribs(_EGLImageAttribs *attrs, _EGLDisplay *disp, @@ -266,9 +268,11 @@ _eglParseImageAttribList(_EGLImageAttribs *attrs, _EGLDisplay *disp, if (err == EGL_SUCCESS) continue; +#ifdef HAVE_BIND_WL_DISPLAY err = _eglParseWLBindWaylandDisplayAttribs(attrs, disp, attr, val); if (err == EGL_SUCCESS) continue; +#endif err = _eglParseEXTImageDmaBufImportAttribs(attrs, disp, attr, val); if (err == EGL_SUCCESS) diff --git a/src/egl/meson.build b/src/egl/meson.build index b49c5ece3a0..746e935c3f4 100644 --- a/src/egl/meson.build +++ b/src/egl/meson.build @@ -49,6 +49,13 @@ files_egl = files( 'main/egltypedefs.h', ) +# Remove the argument parsing from gen_egl_dispatch.py when removing this +# option +gen_args = [] +if with_wayland_bind_display + gen_args += [ '--bind-wl-display' ] +endif + g_egldispatchstubs_c = custom_target( 'g_egldispatchstubs.c', input : [ @@ -57,7 +64,7 @@ g_egldispatchstubs_c = custom_target( ], output : 'g_egldispatchstubs.c', command : [ - prog_python, '@INPUT0@', 'source', '@INPUT1@', '@INPUT2@', + prog_python, '@INPUT0@', gen_args, 'source', '@INPUT1@', '@INPUT2@' ], depend_files : [ 'generate/eglFunctionList.py', glapi_xml_py_deps], capture : true, @@ -71,7 +78,7 @@ g_egldispatchstubs_h = custom_target( ], output : 'g_egldispatchstubs.h', command : [ - prog_python, '@INPUT0@', 'header', '@INPUT1@', '@INPUT2@', + prog_python, '@INPUT0@', gen_args, 'header', '@INPUT1@', '@INPUT2@' ], depend_files : [ 'generate/eglFunctionList.py', glapi_xml_py_deps], capture : true, @@ -113,11 +120,17 @@ if with_dri endif if with_platform_wayland deps_for_egl += [dep_wayland_client, dep_wayland_server, dep_wayland_egl_headers] - link_for_egl += [libwayland_drm, libloader_wayland_helper] + link_for_egl += libloader_wayland_helper files_egl += files('drivers/dri2/platform_wayland.c') files_egl += wp_files['linux-dmabuf-unstable-v1'] - files_egl += [wayland_drm_client_protocol_h] - incs_for_egl += include_directories('wayland/wayland-drm') + if with_wayland_bind_display + files_egl += [wayland_drm_client_protocol_h] + link_for_egl += [libwayland_drm] + incs_for_egl += include_directories('wayland/wayland-drm') + c_args_for_egl += [ + '-DHAVE_BIND_WL_DISPLAY' + ] + endif endif if with_platform_android deps_for_egl += [dep_android, idep_u_gralloc] diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c index 3887d81be9d..5c19f166abc 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -56,7 +56,7 @@ #include "gbm_backend_abi.h" /* For importing wl_buffer */ -#if HAVE_WAYLAND_PLATFORM +#if HAVE_BIND_WL_DISPLAY #include "wayland-drm.h" #endif @@ -659,7 +659,7 @@ gbm_dri_bo_import(struct gbm_device *gbm, } switch (type) { -#if HAVE_WAYLAND_PLATFORM +#if HAVE_BIND_WL_DISPLAY case GBM_BO_IMPORT_WL_BUFFER: { struct wl_drm_buffer *wb; diff --git a/src/gbm/backends/dri/meson.build b/src/gbm/backends/dri/meson.build index 84a40656980..5c33a3a907e 100644 --- a/src/gbm/backends/dri/meson.build +++ b/src/gbm/backends/dri/meson.build @@ -1,17 +1,22 @@ deps_gbm_dri = [] +flags_gbm_dri = [] # TODO: fix includes to delete this incs_gbm_dri = [inc_mesa] if with_platform_wayland deps_gbm_dri += dep_wayland_server - incs_gbm_dri += inc_wayland_drm + if with_wayland_bind_display + flags_gbm_dri += ['-DHAVE_BIND_WL_DISPLAY'] + incs_gbm_dri += inc_wayland_drm + endif endif shared_library( 'dri_gbm', files('gbm_dri.c', 'gbm_driint.h'), include_directories : [inc_gallium, incs_gbm_dri, inc_loader, inc_st_dri, inc_gallium_aux], + c_args : [flags_gbm_dri], link_args : [ld_args_gc_sections], link_with : [libloader, libgallium_dri], dependencies : [deps_gbm_dri, dep_dl, dep_gbm, dep_libdrm, idep_mesautil, idep_xmlconfig], diff --git a/src/meson.build b/src/meson.build index 31a10f7d41f..e4cbcc89fc0 100644 --- a/src/meson.build +++ b/src/meson.build @@ -61,7 +61,7 @@ endif if with_imgui subdir('imgui') endif -if with_platform_wayland +if with_wayland_bind_display subdir('egl/wayland/wayland-drm') endif if with_any_vk or with_gallium_zink diff --git a/src/vulkan/device-select-layer/device_select_wayland.c b/src/vulkan/device-select-layer/device_select_wayland.c index 6bfcbaccf41..5826803473f 100644 --- a/src/vulkan/device-select-layer/device_select_wayland.c +++ b/src/vulkan/device-select-layer/device_select_wayland.c @@ -22,7 +22,9 @@ */ #include "util/macros.h" #include <wayland-client.h> +#ifdef HAVE_BIND_WL_DISPLAY #include "wayland-drm-client-protocol.h" +#endif #include "linux-dmabuf-unstable-v1-client-protocol.h" #include "device_select.h" #include <string.h> @@ -32,14 +34,17 @@ #include <xf86drm.h> struct device_select_wayland_info { +#ifdef HAVE_BIND_WL_DISPLAY struct wl_drm *wl_drm; drmDevicePtr drm_dev_info; +#endif struct zwp_linux_dmabuf_v1 *wl_dmabuf; struct zwp_linux_dmabuf_feedback_v1 *wl_dmabuf_feedback; drmDevicePtr dmabuf_dev_info; }; +#ifdef HAVE_BIND_WL_DISPLAY static void device_select_drm_handle_device(void *data, struct wl_drm *drm, const char *device) { @@ -79,6 +84,7 @@ static const struct wl_drm_listener ds_drm_listener = { .authenticated = device_select_drm_handle_authenticated, .capabilities = device_select_drm_handle_capabilities }; +#endif static void default_dmabuf_feedback_format_table(void *data, @@ -159,10 +165,13 @@ device_select_registry_global(void *data, struct wl_registry *registry, uint32_t const char *interface, uint32_t version) { struct device_select_wayland_info *info = data; +#if HAVE_BIND_WL_DISPLAY if (strcmp(interface, wl_drm_interface.name) == 0) { info->wl_drm = wl_registry_bind(registry, name, &wl_drm_interface, MIN2(version, 2)); wl_drm_add_listener(info->wl_drm, &ds_drm_listener, data); - } else if (strcmp(interface, zwp_linux_dmabuf_v1_interface.name) == 0 && + } else +#endif + if (strcmp(interface, zwp_linux_dmabuf_v1_interface.name) == 0 && version >= ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION) { info->wl_dmabuf = wl_registry_bind(registry, name, &zwp_linux_dmabuf_v1_interface, @@ -208,9 +217,13 @@ int device_select_find_wayland_pci_default(struct device_pci_info *devices, uint drmDevicePtr target; if (info.dmabuf_dev_info != NULL) { target = info.dmabuf_dev_info; - } else if (info.drm_dev_info != NULL) { + } +#ifdef HAVE_BIND_WL_DISPLAY + if (target == NULL && info.drm_dev_info != NULL) { target = info.drm_dev_info; - } else { + } +#endif + if (target != NULL) { goto done; } @@ -235,15 +248,19 @@ int device_select_find_wayland_pci_default(struct device_pci_info *devices, uint done: if (info.dmabuf_dev_info != NULL) drmFreeDevice(&info.dmabuf_dev_info); +#ifdef HAVE_BIND_WL_DISPLAY if (info.drm_dev_info != NULL) drmFreeDevice(&info.drm_dev_info); +#endif if (info.wl_dmabuf_feedback) zwp_linux_dmabuf_feedback_v1_destroy(info.wl_dmabuf_feedback); if (info.wl_dmabuf) zwp_linux_dmabuf_v1_destroy(info.wl_dmabuf); +#ifdef HAVE_BIND_WL_DISPLAY if (info.wl_drm) wl_drm_destroy(info.wl_drm); +#endif wl_registry_destroy(registry); wl_display_disconnect(display); diff --git a/src/vulkan/device-select-layer/meson.build b/src/vulkan/device-select-layer/meson.build index bdf9de592c6..c7aaa20495b 100644 --- a/src/vulkan/device-select-layer/meson.build +++ b/src/vulkan/device-select-layer/meson.build @@ -15,7 +15,10 @@ endif if with_platform_wayland vklayer_files += files('device_select_wayland.c') - vklayer_files += [ wayland_drm_client_protocol_h, wayland_drm_protocol_c ] + if with_wayland_bind_display + vklayer_files += [ wayland_drm_client_protocol_h, wayland_drm_protocol_c ] + vklayer_flags += [ '-DHAVE_BIND_WL_DISPLAY' ] + endif vklayer_files += wp_files['linux-dmabuf-unstable-v1'] vklayer_deps += dep_wayland_client endif |