mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-30 00:15:58 +01:00
backend/wayland: query render formats
This commit is contained in:
parent
858a1940b5
commit
16a51bbab2
1 changed files with 23 additions and 4 deletions
|
@ -19,6 +19,7 @@
|
||||||
#include "backend/wayland.h"
|
#include "backend/wayland.h"
|
||||||
#include "render/drm_format_set.h"
|
#include "render/drm_format_set.h"
|
||||||
#include "render/gbm_allocator.h"
|
#include "render/gbm_allocator.h"
|
||||||
|
#include "render/wlr_renderer.h"
|
||||||
#include "util/signal.h"
|
#include "util/signal.h"
|
||||||
|
|
||||||
#include "linux-dmabuf-unstable-v1-client-protocol.h"
|
#include "linux-dmabuf-unstable-v1-client-protocol.h"
|
||||||
|
@ -351,12 +352,30 @@ struct wlr_backend *wlr_wl_backend_create(struct wl_display *display,
|
||||||
const struct wlr_drm_format *remote_format =
|
const struct wlr_drm_format *remote_format =
|
||||||
wlr_drm_format_set_get(&wl->linux_dmabuf_v1_formats, fmt);
|
wlr_drm_format_set_get(&wl->linux_dmabuf_v1_formats, fmt);
|
||||||
if (remote_format == NULL) {
|
if (remote_format == NULL) {
|
||||||
wlr_log(WLR_ERROR, "Remote compositor doesn't support ARGB8888 "
|
wlr_log(WLR_ERROR, "Remote compositor doesn't support format "
|
||||||
"via linux-dmabuf-unstable-v1");
|
"0x%"PRIX32" via linux-dmabuf-unstable-v1", fmt);
|
||||||
goto error_event;
|
goto error_event;
|
||||||
}
|
}
|
||||||
// TODO: intersect with render formats
|
|
||||||
wl->format = wlr_drm_format_dup(remote_format);
|
const struct wlr_drm_format_set *render_formats =
|
||||||
|
wlr_renderer_get_dmabuf_render_formats(wl->renderer);
|
||||||
|
if (render_formats == NULL) {
|
||||||
|
wlr_log(WLR_ERROR, "Failed to get available DMA-BUF formats from renderer");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const struct wlr_drm_format *render_format =
|
||||||
|
wlr_drm_format_set_get(render_formats, fmt);
|
||||||
|
if (render_format == NULL) {
|
||||||
|
wlr_log(WLR_ERROR, "Renderer doesn't support DRM format 0x%"PRIX32, fmt);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
wl->format = wlr_drm_format_intersect(remote_format, render_format);
|
||||||
|
if (wl->format == NULL) {
|
||||||
|
wlr_log(WLR_ERROR, "Failed to intersect remote and render modifiers "
|
||||||
|
"for format 0x%"PRIX32, fmt);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
wl->local_display_destroy.notify = handle_display_destroy;
|
wl->local_display_destroy.notify = handle_display_destroy;
|
||||||
wl_display_add_destroy_listener(display, &wl->local_display_destroy);
|
wl_display_add_destroy_listener(display, &wl->local_display_destroy);
|
||||||
|
|
Loading…
Reference in a new issue