From a3b773a963adc57dfb0b22ca02ae7b5e30bdb716 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Mon, 15 Jul 2024 21:55:16 +0200 Subject: Show warning when capture monitor on intel and the plane is compressed. The warning tells the user to capture on x11 instead or use -w portal option --- src/capture/kms.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src') diff --git a/src/capture/kms.c b/src/capture/kms.c index e7b0b59..3e66bdb 100644 --- a/src/capture/kms.c +++ b/src/capture/kms.c @@ -8,6 +8,8 @@ #include #include +#include + #include #include @@ -266,6 +268,24 @@ static vec2i swap_vec2i(vec2i value) { return value; } +static bool is_plane_compressed(uint64_t modifier) { + switch(modifier) { + case I915_FORMAT_MOD_Y_TILED_CCS: + case I915_FORMAT_MOD_Yf_TILED_CCS: + case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS: + case I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS: + case I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC: + case I915_FORMAT_MOD_4_TILED_DG2_RC_CCS: + case I915_FORMAT_MOD_4_TILED_DG2_MC_CCS: + case I915_FORMAT_MOD_4_TILED_DG2_RC_CCS_CC: + case I915_FORMAT_MOD_4_TILED_MTL_RC_CCS: + case I915_FORMAT_MOD_4_TILED_MTL_MC_CCS: + case I915_FORMAT_MOD_4_TILED_MTL_RC_CCS_CC: + return true; + } + return false; +} + static int gsr_capture_kms_capture(gsr_capture *cap, AVFrame *frame, gsr_color_conversion *color_conversion) { gsr_capture_kms *self = cap->priv; const bool screen_plane_use_modifiers = self->params.egl->gpu_info.vendor != GSR_GPU_VENDOR_AMD; @@ -346,6 +366,14 @@ static int gsr_capture_kms_capture(gsr_capture *cap, AVFrame *frame, gsr_color_c EGL_DMA_BUF_PLANE0_PITCH_EXT, drm_fd->pitch, }; + if(is_plane_compressed(drm_fd->modifier)) { + static bool compressed_plane_warning_shown = false; + if(!compressed_plane_warning_shown) { + compressed_plane_warning_shown = true; + fprintf(stderr, "gsr warning: gsr_capture_kms_capture: the monitor plane is compressed. The video will likely be glitched/black. Try recording on X11 instead (maybe capturing a single window) or use the \"-w portal\" capture option on Wayland.\n"); + } + } + if(screen_plane_use_modifiers) { img_attr[12] = EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT; img_attr[13] = drm_fd->modifier & 0xFFFFFFFFULL; -- cgit v1.2.3