mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 07:28:11 +02:00
Revert "egl/wayland: deprecate drm_handle_format() and drm_handle_capabilities()"
Commit af1ee8e010 dropped support to
wl_drm, as we thought that most compositors from active projects were
already supporting zwp_linux_dmabuf_v1.
But that's not true, so revert this commit in order to give these
projects a longer transition period.
Note that we didn't add back the support to GEM name API, and that was
on purpose.
Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
Reviewed-by: Simon Ser <contact@emersion.fr>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15822>
This commit is contained in:
parent
f267000240
commit
c60fea8c22
2 changed files with 47 additions and 13 deletions
|
|
@ -284,6 +284,7 @@ struct dri2_egl_display
|
||||||
struct zwp_linux_dmabuf_feedback_v1 *wl_dmabuf_feedback;
|
struct zwp_linux_dmabuf_feedback_v1 *wl_dmabuf_feedback;
|
||||||
struct dmabuf_feedback_format_table format_table;
|
struct dmabuf_feedback_format_table format_table;
|
||||||
bool authenticated;
|
bool authenticated;
|
||||||
|
uint32_t capabilities;
|
||||||
char *device_name;
|
char *device_name;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1344,7 +1344,7 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
|
||||||
struct dri2_egl_surface *dri2_surf,
|
struct dri2_egl_surface *dri2_surf,
|
||||||
__DRIimage *image)
|
__DRIimage *image)
|
||||||
{
|
{
|
||||||
struct wl_buffer *ret;
|
struct wl_buffer *ret = NULL;
|
||||||
EGLBoolean query;
|
EGLBoolean query;
|
||||||
int width, height, fourcc, num_planes;
|
int width, height, fourcc, num_planes;
|
||||||
uint64_t modifier = DRM_FORMAT_MOD_INVALID;
|
uint64_t modifier = DRM_FORMAT_MOD_INVALID;
|
||||||
|
|
@ -1448,11 +1448,28 @@ create_wl_buffer(struct dri2_egl_display *dri2_dpy,
|
||||||
ret = zwp_linux_buffer_params_v1_create_immed(params, width, height,
|
ret = zwp_linux_buffer_params_v1_create_immed(params, width, height,
|
||||||
fourcc, 0);
|
fourcc, 0);
|
||||||
zwp_linux_buffer_params_v1_destroy(params);
|
zwp_linux_buffer_params_v1_destroy(params);
|
||||||
|
} else {
|
||||||
|
struct wl_drm *wl_drm =
|
||||||
|
dri2_surf ? dri2_surf->wl_drm_wrapper : dri2_dpy->wl_drm;
|
||||||
|
int fd = -1, stride;
|
||||||
|
|
||||||
return ret;
|
if (num_planes > 1)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
query = dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_FD, &fd);
|
||||||
|
query &= dri2_dpy->image->queryImage(image, __DRI_IMAGE_ATTRIB_STRIDE, &stride);
|
||||||
|
if (!query) {
|
||||||
|
if (fd >= 0)
|
||||||
|
close(fd);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = wl_drm_create_prime_buffer(wl_drm, fd, width, height, fourcc, 0,
|
||||||
|
stride, 0, 0, 0, 0);
|
||||||
|
close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static EGLBoolean
|
static EGLBoolean
|
||||||
|
|
@ -1699,16 +1716,21 @@ drm_handle_device(void *data, struct wl_drm *drm, const char *device)
|
||||||
static void
|
static void
|
||||||
drm_handle_format(void *data, struct wl_drm *drm, uint32_t format)
|
drm_handle_format(void *data, struct wl_drm *drm, uint32_t format)
|
||||||
{
|
{
|
||||||
/* deprecated, as compositors already support the dma-buf protocol extension
|
struct dri2_egl_display *dri2_dpy = data;
|
||||||
* and so we can rely on dmabuf_handle_modifier() to receive formats and
|
int visual_idx = dri2_wl_visual_idx_from_fourcc(format);
|
||||||
* modifiers */
|
|
||||||
|
if (visual_idx == -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
BITSET_SET(dri2_dpy->formats.formats_bitmap, visual_idx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
drm_handle_capabilities(void *data, struct wl_drm *drm, uint32_t value)
|
drm_handle_capabilities(void *data, struct wl_drm *drm, uint32_t value)
|
||||||
{
|
{
|
||||||
/* deprecated, as compositors already support the dma-buf protocol extension
|
struct dri2_egl_display *dri2_dpy = data;
|
||||||
* and so we can rely on it to create wl_buffer's */
|
|
||||||
|
dri2_dpy->capabilities = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
@ -2077,13 +2099,12 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
|
||||||
wl_registry_add_listener(dri2_dpy->wl_registry,
|
wl_registry_add_listener(dri2_dpy->wl_registry,
|
||||||
®istry_listener_drm, dri2_dpy);
|
®istry_listener_drm, dri2_dpy);
|
||||||
|
|
||||||
/* The compositor must expose the dma-buf interface. */
|
if (roundtrip(dri2_dpy) < 0)
|
||||||
if (roundtrip(dri2_dpy) < 0 || dri2_dpy->wl_dmabuf == NULL)
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
/* Get default dma-buf feedback */
|
/* Get default dma-buf feedback */
|
||||||
if (zwp_linux_dmabuf_v1_get_version(dri2_dpy->wl_dmabuf) >=
|
if (dri2_dpy->wl_dmabuf && zwp_linux_dmabuf_v1_get_version(dri2_dpy->wl_dmabuf) >=
|
||||||
ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION) {
|
ZWP_LINUX_DMABUF_V1_GET_DEFAULT_FEEDBACK_SINCE_VERSION) {
|
||||||
dmabuf_feedback_format_table_init(&dri2_dpy->format_table);
|
dmabuf_feedback_format_table_init(&dri2_dpy->format_table);
|
||||||
dri2_dpy->wl_dmabuf_feedback =
|
dri2_dpy->wl_dmabuf_feedback =
|
||||||
zwp_linux_dmabuf_v1_get_default_feedback(dri2_dpy->wl_dmabuf);
|
zwp_linux_dmabuf_v1_get_default_feedback(dri2_dpy->wl_dmabuf);
|
||||||
|
|
@ -2091,7 +2112,6 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
|
||||||
&dmabuf_feedback_listener, dri2_dpy);
|
&dmabuf_feedback_listener, dri2_dpy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Receive events from the interfaces */
|
|
||||||
if (roundtrip(dri2_dpy) < 0)
|
if (roundtrip(dri2_dpy) < 0)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
|
|
@ -2178,6 +2198,19 @@ dri2_initialize_wayland_drm(_EGLDisplay *disp)
|
||||||
|
|
||||||
dri2_wl_setup_swap_interval(disp);
|
dri2_wl_setup_swap_interval(disp);
|
||||||
|
|
||||||
|
if (dri2_dpy->wl_drm) {
|
||||||
|
/* To use Prime, we must have _DRI_IMAGE v7 at least. createImageFromFds
|
||||||
|
* support indicates that Prime export/import is supported by the driver.
|
||||||
|
* We deprecated the support to GEM names API, so we bail out if the
|
||||||
|
* driver does not suport Prime. */
|
||||||
|
if (!(dri2_dpy->capabilities & WL_DRM_CAPABILITY_PRIME) ||
|
||||||
|
(dri2_dpy->image->base.version < 7) ||
|
||||||
|
(dri2_dpy->image->createImageFromFds == NULL)) {
|
||||||
|
_eglLog(_EGL_WARNING, "wayland-egl: display does not support prime");
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (dri2_dpy->is_different_gpu &&
|
if (dri2_dpy->is_different_gpu &&
|
||||||
(dri2_dpy->image->base.version < 9 ||
|
(dri2_dpy->image->base.version < 9 ||
|
||||||
dri2_dpy->image->blitImage == NULL)) {
|
dri2_dpy->image->blitImage == NULL)) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue