diff --git a/include/sway/desktop/fx_renderer/fx_renderer.h b/include/sway/desktop/fx_renderer/fx_renderer.h index 6ab26aa9..bfa7b1a2 100644 --- a/include/sway/desktop/fx_renderer/fx_renderer.h +++ b/include/sway/desktop/fx_renderer/fx_renderer.h @@ -173,8 +173,8 @@ struct fx_renderer { GLuint wlr_main_buffer_fbo; struct wlr_gles2_texture_attribs wlr_main_texture_attribs; - // The framebuffer used by wlroots - struct fx_framebuffer wlr_buffer; + const struct wlr_drm_format *drm_format; + // Contains the blurred background for tiled windows struct fx_framebuffer blur_buffer; // Contains the original pixels to draw over the areas where artifact are visible diff --git a/sway/desktop/fx_renderer/fx_framebuffer.c b/sway/desktop/fx_renderer/fx_framebuffer.c index 63da23d0..5be58ab1 100644 --- a/sway/desktop/fx_renderer/fx_framebuffer.c +++ b/sway/desktop/fx_renderer/fx_framebuffer.c @@ -3,7 +3,6 @@ #include #include #include -#include #include "log.h" #include "render/egl.h" @@ -53,7 +52,7 @@ void fx_framebuffer_update(struct fx_renderer *fx_renderer, struct fx_framebuffe fx_buffer->wlr_buffer->height != height) { wlr_buffer_drop(fx_buffer->wlr_buffer); fx_buffer->wlr_buffer = wlr_allocator_create_buffer(output->allocator, - width, height, output->swapchain->format); + width, height, fx_renderer->drm_format); first_alloc = true; } diff --git a/sway/desktop/fx_renderer/fx_renderer.c b/sway/desktop/fx_renderer/fx_renderer.c index 5b1eadab..d6850746 100644 --- a/sway/desktop/fx_renderer/fx_renderer.c +++ b/sway/desktop/fx_renderer/fx_renderer.c @@ -7,8 +7,10 @@ #include #include #include +#include #include #include +#include #include #include @@ -264,6 +266,17 @@ struct fx_renderer *fx_renderer_create(struct wlr_egl *egl, struct wlr_output *w renderer->wlr_output = wlr_output; renderer->egl = egl; + // Get DRM format + const struct wlr_drm_format_set *display_formats = + wlr_output_get_primary_formats(wlr_output, wlr_output->allocator->buffer_caps); + if (!(renderer->drm_format = + wlr_drm_format_set_get(display_formats, wlr_output->render_format))) { + sway_log(SWAY_ERROR, + "FX RENDERER: Could not get drm format: %u", + wlr_output->render_format); + return NULL; + } + // TODO: wlr_egl_make_current or eglMakeCurrent? // TODO: assert instead of conditional statement? if (!eglMakeCurrent(wlr_egl_get_display(egl), EGL_NO_SURFACE, EGL_NO_SURFACE,