From 78dee83d77b14180c75386523b5dc877bebbebbd Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Fri, 14 Apr 2023 17:14:41 +0100 Subject: [PATCH] screencast: add fallback for linear modifier --- src/screencast/pipewire_screencast.c | 3 +++ src/screencast/screencast_common.c | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/src/screencast/pipewire_screencast.c b/src/screencast/pipewire_screencast.c index 17f4c27..28b7716 100644 --- a/src/screencast/pipewire_screencast.c +++ b/src/screencast/pipewire_screencast.c @@ -241,6 +241,9 @@ static void pwr_handle_stream_param_changed(void *data, uint32_t id, flags = cast->ctx->state->config->screencast_conf.force_mod_linear ? GBM_BO_USE_RENDERING | GBM_BO_USE_LINEAR : GBM_BO_USE_RENDERING; break; + case DRM_FORMAT_MOD_LINEAR: + flags = GBM_BO_USE_RENDERING | GBM_BO_USE_LINEAR; + break; default: continue; } diff --git a/src/screencast/screencast_common.c b/src/screencast/screencast_common.c index 2cf4976..58cdf97 100644 --- a/src/screencast/screencast_common.c +++ b/src/screencast/screencast_common.c @@ -153,6 +153,12 @@ struct xdpw_buffer *xdpw_buffer_create(struct xdpw_screencast_instance *cast, frame_info->format, flags); } + // Fallback for linear buffers via the implicit api + if (buffer->bo == NULL && cast->pwr_format.modifier == DRM_FORMAT_MOD_LINEAR) { + buffer->bo = gbm_bo_create(cast->ctx->gbm, frame_info->width, frame_info->height, + frame_info->format, flags | GBM_BO_USE_LINEAR); + } + if (buffer->bo == NULL) { logprint(ERROR, "xdpw: failed to create gbm_bo"); free(buffer);