if (display->dmabuf.formats.element_size == 0)
return;
- if (modifier_hi == (DRM_FORMAT_MOD_INVALID >> 32) &&
- modifier_lo == (DRM_FORMAT_MOD_INVALID & 0xffffffff))
- return;
-
switch (format) {
case WL_DRM_FORMAT_ARGB8888:
modifiers = &display->dmabuf.modifiers.argb8888;
wsi_wl_display_add_wl_format(display, &display->dmabuf.formats, format);
+ if (modifier_hi == (DRM_FORMAT_MOD_INVALID >> 32) &&
+ modifier_lo == (DRM_FORMAT_MOD_INVALID & 0xffffffff))
+ return;
+
mod = u_vector_add(modifiers);
if (!mod)
return;
display->drm.wl_drm =
wl_registry_bind(registry, name, &wl_drm_interface, 2);
wl_drm_add_listener(display->drm.wl_drm, &drm_listener, display);
- } else if (strcmp(interface, "zwp_linux_dmabuf_v1") == 0 && version >= 3 &&
- display->wsi_wl->wsi->supports_modifiers) {
+ } else if (strcmp(interface, "zwp_linux_dmabuf_v1") == 0 && version >= 3) {
display->dmabuf.wl_dmabuf =
wl_registry_bind(registry, name, &zwp_linux_dmabuf_v1_interface, 3);
zwp_linux_dmabuf_v1_add_listener(display->dmabuf.wl_dmabuf,
}
}
- /* We need prime support for wl_drm */
- if (display->drm.wl_drm &&
+ /* Prefer the linux-dmabuf protocol if available */
+ if (display->dmabuf.wl_dmabuf) {
+ display->formats = &display->dmabuf.formats;
+ } else if (display->drm.wl_drm &&
(display->drm.capabilities & WL_DRM_CAPABILITY_PRIME)) {
+ /* We need prime support for wl_drm */
display->formats = &display->drm.formats;
- } else if (display->dmabuf.wl_dmabuf) {
- display->formats = &display->dmabuf.formats;
}
if (!display->formats) {
struct wl_surface * surface;
- /* non-NULL when wl_drm should be used for wl_buffer creation; otherwise,
- * zwp_linux_dmabuf_v1 should be used.
- */
struct wl_drm * drm_wrapper;
struct wl_callback * frame;
if (result != VK_SUCCESS)
return result;
- if (!chain->drm_wrapper) {
- /* Only request modifiers if we have dmabuf, else it must be implicit. */
- assert(display->dmabuf.wl_dmabuf);
- assert(image->base.drm_modifier != DRM_FORMAT_MOD_INVALID);
-
+ if (display->dmabuf.wl_dmabuf) {
struct zwp_linux_buffer_params_v1 *params =
zwp_linux_dmabuf_v1_create_params(display->dmabuf.wl_dmabuf);
wl_proxy_set_queue((struct wl_proxy *) params, chain->display->queue);
}
}
- /* When there are explicit DRM format modifiers, we must use
- * zwp_linux_dmabuf_v1 for wl_buffer creation. Otherwise, we must use
- * wl_drm.
- */
- if (!chain->num_drm_modifiers) {
- assert(chain->display->drm.wl_drm);
-
+ if (chain->display->drm.wl_drm) {
chain->drm_wrapper =
wl_proxy_create_wrapper(chain->display->drm.wl_drm);
if (!chain->drm_wrapper) {