From nobody Wed Dec 31 01:12:13 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id A74BCC4167D for ; Thu, 9 Nov 2023 17:26:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344668AbjKIR0I (ORCPT ); Thu, 9 Nov 2023 12:26:08 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344553AbjKIR0A (ORCPT ); Thu, 9 Nov 2023 12:26:00 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6015830FA for ; Thu, 9 Nov 2023 09:25:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699550715; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=3EBII1piFhjDdYePPF4sEFQnIWSSXfwKWEcUhw8jHaI=; b=AkaT3X+C70YZEDmRr1fQuX43C3XgcEcpKuh2fPki+Wonco1CQavsnFjR7S6aQz3qZXrDPs pG5p5rID5c3DKwke8OD8ASj+9adTCcXaYyYTfm8jnYm+QMTo763dQXYS1LxQV64GbBt1AI Ve5ryFHrhfKkMGDNtFPcyflnFOlearM= Received: from mail-lf1-f72.google.com (mail-lf1-f72.google.com [209.85.167.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-214-NUZBN8a4O5G8MitdLp5h2g-1; Thu, 09 Nov 2023 12:25:10 -0500 X-MC-Unique: NUZBN8a4O5G8MitdLp5h2g-1 Received: by mail-lf1-f72.google.com with SMTP id 2adb3069b0e04-507d2e150c2so1103324e87.3 for ; Thu, 09 Nov 2023 09:25:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699550708; x=1700155508; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3EBII1piFhjDdYePPF4sEFQnIWSSXfwKWEcUhw8jHaI=; b=MKFyGxZqkwEO1YeBW9qznMkZ4SEM6BDk7tEiwPH2wqjNxDQV6QcGEtowd9/8pCjz2/ 1JqJZ9gtI4uDwShwrvrEUF3rD8JL5eHh/4xnz9Y5M27fxvAqmIzIlffsd4JfO6F9Z3gR 9eB7nM9fNOwovwyCstom040rnLoZr1cdnciZJpC0SixJiCkqrUhw8rq+4lHrEEFg/5XW nT+N3EnFI7QEjSG+jii/PX6K8TzdgxgwkoTiJBNFj0so1cEhUFICfcJeFZv+TAalI1Fo GyPYhtDOL7Ev+oQOg05b3U1OZPNk6u3iQLny11lO7YYf1oBuZNHNNYiOchqGmlR+zqnb buqQ== X-Gm-Message-State: AOJu0YwuS2+GPTQebDrF+UE/Q/y4qF7kcLTcuO8leY8dZfyEDyWOcMEA OT8xvk6v0Ai3hIZjnexp8GaqHVO7RppiEM2sTlsxCVCA2c4dEK0OovXOj/S1DmB0R2VBjZYwC08 jzkLGLn3nlqSJMc5SGeZ63lElRc0R55vfv+BxhXaUSEfDHlLTF8L/yv0UVPBHhs8kXi+2PexDq2 Eoc8i8S50= X-Received: by 2002:a19:e00d:0:b0:503:32bb:d5ca with SMTP id x13-20020a19e00d000000b0050332bbd5camr1864097lfg.31.1699550708448; Thu, 09 Nov 2023 09:25:08 -0800 (PST) X-Google-Smtp-Source: AGHT+IH47EfQ6rX+t1XL8dC+Is/tx0yp1WtqPF4aXtdXPWPqw3Pqau19ZWSC5+9vmC1RAuAaGC1wqw== X-Received: by 2002:a19:e00d:0:b0:503:32bb:d5ca with SMTP id x13-20020a19e00d000000b0050332bbd5camr1864072lfg.31.1699550707984; Thu, 09 Nov 2023 09:25:07 -0800 (PST) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id q14-20020a05600000ce00b003143c9beeaesm133795wrx.44.2023.11.09.09.25.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Nov 2023 09:25:07 -0800 (PST) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Simon Ser , Sima Vetter , Pekka Paalanen , Maxime Ripard , Bilal Elmoussaoui , Erico Nunes , Javier Martinez Canillas , stable@vger.kernel.org, nerdopolis , Daniel Vetter , David Airlie , Gerd Hoffmann , Maarten Lankhorst , Thomas Zimmermann , dri-devel@lists.freedesktop.org Subject: [PATCH 1/6] drm: Move drm_atomic_helper_damage_{iter_init,merged}() to helpers Date: Thu, 9 Nov 2023 18:24:35 +0100 Message-ID: <20231109172449.1599262-2-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231109172449.1599262-1-javierm@redhat.com> References: <20231109172449.1599262-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" We need a similar drm_atomic_helper_buffer_damage_merged() helper function that takes into account if a framebuffer attached to the plane has changed since the last plane update (page-flip). Since both damage helpers will share most of the current logic, move it to an internal helper. The drm_atomic_helper_buffer_damage_merged() will have to use a different drm_atomic_helper_buffer_damage_iter_init() function so move that logic also to an internal helper. Fixes: 01f05940a9a7 ("drm/virtio: Enable fb damage clips property for the p= rimary plane") Cc: # v6.4+ Reported-by: nerdopolis Closes: https://bugzilla.kernel.org/show_bug.cgi?id=3D218115 Suggested-by: Sima Vetter Signed-off-by: Javier Martinez Canillas --- drivers/gpu/drm/drm_damage_helper.c | 95 +++++++++++++++++------------ 1 file changed, 55 insertions(+), 40 deletions(-) diff --git a/drivers/gpu/drm/drm_damage_helper.c b/drivers/gpu/drm/drm_dama= ge_helper.c index d8b2955e88fd..aa2325567918 100644 --- a/drivers/gpu/drm/drm_damage_helper.c +++ b/drivers/gpu/drm/drm_damage_helper.c @@ -201,28 +201,10 @@ int drm_atomic_helper_dirtyfb(struct drm_framebuffer = *fb, } EXPORT_SYMBOL(drm_atomic_helper_dirtyfb); =20 -/** - * drm_atomic_helper_damage_iter_init - Initialize the damage iterator. - * @iter: The iterator to initialize. - * @old_state: Old plane state for validation. - * @state: Plane state from which to iterate the damage clips. - * - * Initialize an iterator, which clips plane damage - * &drm_plane_state.fb_damage_clips to plane &drm_plane_state.src. This it= erator - * returns full plane src in case damage is not present because either - * user-space didn't sent or driver discarded it (it want to do full plane - * update). Currently this iterator returns full plane src in case plane s= rc - * changed but that can be changed in future to return damage. - * - * For the case when plane is not visible or plane update should not happe= n the - * first call to iter_next will return false. Note that this helper use cl= ipped - * &drm_plane_state.src, so driver calling this helper should have called - * drm_atomic_helper_check_plane_state() earlier. - */ -void -drm_atomic_helper_damage_iter_init(struct drm_atomic_helper_damage_iter *i= ter, - const struct drm_plane_state *old_state, - const struct drm_plane_state *state) +static void +__drm_atomic_helper_damage_iter_init(struct drm_atomic_helper_damage_iter = *iter, + const struct drm_plane_state *old_state, + const struct drm_plane_state *state) { struct drm_rect src; memset(iter, 0, sizeof(*iter)); @@ -247,6 +229,32 @@ drm_atomic_helper_damage_iter_init(struct drm_atomic_h= elper_damage_iter *iter, iter->full_update =3D true; } } + +/** + * drm_atomic_helper_damage_iter_init - Initialize the damage iterator. + * @iter: The iterator to initialize. + * @old_state: Old plane state for validation. + * @state: Plane state from which to iterate the damage clips. + * + * Initialize an iterator, which clips plane damage + * &drm_plane_state.fb_damage_clips to plane &drm_plane_state.src. This it= erator + * returns full plane src in case damage is not present because either + * user-space didn't sent or driver discarded it (it want to do full plane + * update). Currently this iterator returns full plane src in case plane s= rc + * changed but that can be changed in future to return damage. + * + * For the case when plane is not visible or plane update should not happe= n the + * first call to iter_next will return false. Note that this helper use cl= ipped + * &drm_plane_state.src, so driver calling this helper should have called + * drm_atomic_helper_check_plane_state() earlier. + */ +void +drm_atomic_helper_damage_iter_init(struct drm_atomic_helper_damage_iter *i= ter, + const struct drm_plane_state *old_state, + const struct drm_plane_state *state) +{ + __drm_atomic_helper_damage_iter_init(iter, old_state, state); +} EXPORT_SYMBOL(drm_atomic_helper_damage_iter_init); =20 /** @@ -291,24 +299,9 @@ drm_atomic_helper_damage_iter_next(struct drm_atomic_h= elper_damage_iter *iter, } EXPORT_SYMBOL(drm_atomic_helper_damage_iter_next); =20 -/** - * drm_atomic_helper_damage_merged - Merged plane damage - * @old_state: Old plane state for validation. - * @state: Plane state from which to iterate the damage clips. - * @rect: Returns the merged damage rectangle - * - * This function merges any valid plane damage clips into one rectangle and - * returns it in @rect. - * - * For details see: drm_atomic_helper_damage_iter_init() and - * drm_atomic_helper_damage_iter_next(). - * - * Returns: - * True if there is valid plane damage otherwise false. - */ -bool drm_atomic_helper_damage_merged(const struct drm_plane_state *old_sta= te, - struct drm_plane_state *state, - struct drm_rect *rect) +static bool __drm_atomic_helper_damage_merged(const struct drm_plane_state= *old_state, + struct drm_plane_state *state, + struct drm_rect *rect) { struct drm_atomic_helper_damage_iter iter; struct drm_rect clip; @@ -330,4 +323,26 @@ bool drm_atomic_helper_damage_merged(const struct drm_= plane_state *old_state, =20 return valid; } + +/** + * drm_atomic_helper_damage_merged - Merged plane damage + * @old_state: Old plane state for validation. + * @state: Plane state from which to iterate the damage clips. + * @rect: Returns the merged damage rectangle + * + * This function merges any valid plane damage clips into one rectangle and + * returns it in @rect. + * + * For details see: drm_atomic_helper_damage_iter_init() and + * drm_atomic_helper_damage_iter_next(). + * + * Returns: + * True if there is valid plane damage otherwise false. + */ +bool drm_atomic_helper_damage_merged(const struct drm_plane_state *old_sta= te, + struct drm_plane_state *state, + struct drm_rect *rect) +{ + return __drm_atomic_helper_damage_merged(old_state, state, rect); +} EXPORT_SYMBOL(drm_atomic_helper_damage_merged); --=20 2.41.0 From nobody Wed Dec 31 01:12:13 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 701A0C4332F for ; Thu, 9 Nov 2023 17:26:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344614AbjKIR0P (ORCPT ); Thu, 9 Nov 2023 12:26:15 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59060 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344567AbjKIR0A (ORCPT ); Thu, 9 Nov 2023 12:26:00 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A0813325A for ; Thu, 9 Nov 2023 09:25:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699550713; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DyicNWwvae7/KcxXuwMP09NutaVYwbuAqWEUxMoKBKk=; b=QDVyWOw/W6wRlaBdHmdcmUPEjG7LojXpIj2xapR2qW6svpfGLuOx25LEF02ftFC9VdfyhP M76BXmxauNl5jbXf7AXyM9iagcwNWqEMyBDxuOTaMnTKF9Vq/ob7efcjAJrhqyQF/rKls+ xCsDqUUEf/ABV1J+vRXwTaezFrZdVew= Received: from mail-wm1-f72.google.com (mail-wm1-f72.google.com [209.85.128.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-689-w-xB_HvlOZGVvNG5vDzm4Q-1; Thu, 09 Nov 2023 12:25:12 -0500 X-MC-Unique: w-xB_HvlOZGVvNG5vDzm4Q-1 Received: by mail-wm1-f72.google.com with SMTP id 5b1f17b1804b1-4084001846eso7294995e9.1 for ; Thu, 09 Nov 2023 09:25:12 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699550710; x=1700155510; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DyicNWwvae7/KcxXuwMP09NutaVYwbuAqWEUxMoKBKk=; b=nS78Vkbkz0rN2lpsEP81Gz4e0l8CPgE9R+cIT8HfwawpBHiiGUURNL/TEfvwQYz5X0 5wln118yE4jk2MSt4JpVbTjJwjsyRz9YpFZKzFaVCjU3bYhbsM7y+V8tPBGBcQ53FzUn +SULJ/Zx8nPGLKpsrh05GAWn8M0UlZuBKcA97m2aXq3gUGB/16Zhx9kFzQYROe+SYs0n FyogNI+AVT5Q8So6RjNr/7nWqjx4G/9OX/ykExriHo1w2ZfWtz5ivxA7sy/0Vhz3mra1 CVYkmwENTClGXWLAOmvP1CVJ79BYIuhcUC/QoE/NG0ji9NOYUBS2+txZ45l2GpQwsF41 E/Xg== X-Gm-Message-State: AOJu0YwK8NRNrEoFAe7iY7gg0tbYd5CDaL8KEC31zRCDtAyfhS0LmY+s NKMmr2UQgdV5NIxIEFn8wxFeNHlNOUwjisx4JjxQe6py1ULoRlabT+E+U7ssalIT2C/i1ddwikF g8n93sP0LU5LHHosk4Qul8HGFCeoHD+o4NvO3CtGECZmraHMFgdo1zDmrxcGekf5KEa3hBlBnSS 0x17v0aSw= X-Received: by 2002:a05:600c:4f03:b0:3fe:687a:abb8 with SMTP id l3-20020a05600c4f0300b003fe687aabb8mr4840961wmq.7.1699550710549; Thu, 09 Nov 2023 09:25:10 -0800 (PST) X-Google-Smtp-Source: AGHT+IGyv55FyLGeotT59GTBCN3nwc/tDWDit/kRjBLJAT9nbsysM1eR/y8bcel6P26gupJ3OsvuqQ== X-Received: by 2002:a05:600c:4f03:b0:3fe:687a:abb8 with SMTP id l3-20020a05600c4f0300b003fe687aabb8mr4840926wmq.7.1699550710072; Thu, 09 Nov 2023 09:25:10 -0800 (PST) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id b11-20020a05600c4e0b00b004054dcbf92asm2767377wmq.20.2023.11.09.09.25.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Nov 2023 09:25:09 -0800 (PST) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Simon Ser , Sima Vetter , Pekka Paalanen , Maxime Ripard , Bilal Elmoussaoui , Erico Nunes , Javier Martinez Canillas , stable@vger.kernel.org, nerdopolis , Daniel Vetter , David Airlie , Gerd Hoffmann , Maarten Lankhorst , Thomas Zimmermann , dri-devel@lists.freedesktop.org Subject: [PATCH 2/6] drm: Add drm_atomic_helper_buffer_damage_{iter_init,merged}() helpers Date: Thu, 9 Nov 2023 18:24:36 +0100 Message-ID: <20231109172449.1599262-3-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231109172449.1599262-1-javierm@redhat.com> References: <20231109172449.1599262-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" To be used by drivers that do per-buffer (e.g: virtio-gpu) uploads (rather than per-plane uploads), since these type of drivers need to handle buffer damages instead of frame damages. The drm_atomic_helper_buffer_damage_iter_init() has the same logic than drm_atomic_helper_damage_iter_init() but it also takes into account if the framebuffer attached to plane's state has changed since the last update. And the drm_atomic_helper_buffer_damage_merged() is just a version of the drm_atomic_helper_damage_merged() helper, but it uses the iter_init helper that is mentioned above. Fixes: 01f05940a9a7 ("drm/virtio: Enable fb damage clips property for the p= rimary plane") Cc: # v6.4+ Reported-by: nerdopolis Closes: https://bugzilla.kernel.org/show_bug.cgi?id=3D218115 Suggested-by: Sima Vetter Signed-off-by: Javier Martinez Canillas --- drivers/gpu/drm/drm_damage_helper.c | 79 ++++++++++++++++++++++++++--- include/drm/drm_damage_helper.h | 7 +++ 2 files changed, 80 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_damage_helper.c b/drivers/gpu/drm/drm_dama= ge_helper.c index aa2325567918..b72062c9d31c 100644 --- a/drivers/gpu/drm/drm_damage_helper.c +++ b/drivers/gpu/drm/drm_damage_helper.c @@ -204,7 +204,8 @@ EXPORT_SYMBOL(drm_atomic_helper_dirtyfb); static void __drm_atomic_helper_damage_iter_init(struct drm_atomic_helper_damage_iter = *iter, const struct drm_plane_state *old_state, - const struct drm_plane_state *state) + const struct drm_plane_state *state, + bool buffer_damage) { struct drm_rect src; memset(iter, 0, sizeof(*iter)); @@ -223,7 +224,8 @@ __drm_atomic_helper_damage_iter_init(struct drm_atomic_= helper_damage_iter *iter, iter->plane_src.x2 =3D (src.x2 >> 16) + !!(src.x2 & 0xFFFF); iter->plane_src.y2 =3D (src.y2 >> 16) + !!(src.y2 & 0xFFFF); =20 - if (!iter->clips || !drm_rect_equals(&state->src, &old_state->src)) { + if (!iter->clips || !drm_rect_equals(&state->src, &old_state->src) || + (buffer_damage && old_state->fb !=3D state->fb)) { iter->clips =3D NULL; iter->num_clips =3D 0; iter->full_update =3D true; @@ -243,6 +245,10 @@ __drm_atomic_helper_damage_iter_init(struct drm_atomic= _helper_damage_iter *iter, * update). Currently this iterator returns full plane src in case plane s= rc * changed but that can be changed in future to return damage. * + * Note that this helper is for drivers that do per-plane uploads and expe= ct + * to handle frame damages. Drivers that do per-buffer uploads instead sho= uld + * use @drm_atomic_helper_buffer_damage_iter_init() that handles buffer da= mages. + * * For the case when plane is not visible or plane update should not happe= n the * first call to iter_next will return false. Note that this helper use cl= ipped * &drm_plane_state.src, so driver calling this helper should have called @@ -253,10 +259,37 @@ drm_atomic_helper_damage_iter_init(struct drm_atomic_= helper_damage_iter *iter, const struct drm_plane_state *old_state, const struct drm_plane_state *state) { - __drm_atomic_helper_damage_iter_init(iter, old_state, state); + __drm_atomic_helper_damage_iter_init(iter, old_state, state, false); } EXPORT_SYMBOL(drm_atomic_helper_damage_iter_init); =20 +/** + * drm_atomic_helper_buffer_damage_iter_init - Initialize the buffer damag= e iterator. + * @iter: The iterator to initialize. + * @old_state: Old plane state for validation. + * @state: Plane state from which to iterate the damage clips. + * + * Initialize an iterator, which clips buffer damage + * &drm_plane_state.fb_damage_clips to plane &drm_plane_state.src. This it= erator + * returns full plane src in case buffer damage is not present because use= r-space + * didn't sent, driver discarded it (it want to do full plane update) or t= he plane + * @state has an attached framebuffer that is different than the one in @s= tate (it + * has changed since the last plane update). + * + * For the case when plane is not visible or plane update should not happe= n the + * first call to iter_next will return false. Note that this helper use cl= ipped + * &drm_plane_state.src, so driver calling this helper should have called + * drm_atomic_helper_check_plane_state() earlier. + */ +void +drm_atomic_helper_buffer_damage_iter_init(struct drm_atomic_helper_damage_= iter *iter, + const struct drm_plane_state *old_state, + const struct drm_plane_state *state) +{ + __drm_atomic_helper_damage_iter_init(iter, old_state, state, true); +} +EXPORT_SYMBOL(drm_atomic_helper_buffer_damage_iter_init); + /** * drm_atomic_helper_damage_iter_next - Advance the damage iterator. * @iter: The iterator to advance. @@ -301,7 +334,8 @@ EXPORT_SYMBOL(drm_atomic_helper_damage_iter_next); =20 static bool __drm_atomic_helper_damage_merged(const struct drm_plane_state= *old_state, struct drm_plane_state *state, - struct drm_rect *rect) + struct drm_rect *rect, + bool buffer_damage) { struct drm_atomic_helper_damage_iter iter; struct drm_rect clip; @@ -312,7 +346,7 @@ static bool __drm_atomic_helper_damage_merged(const str= uct drm_plane_state *old_ rect->x2 =3D 0; rect->y2 =3D 0; =20 - drm_atomic_helper_damage_iter_init(&iter, old_state, state); + __drm_atomic_helper_damage_iter_init(&iter, old_state, state, buffer_dama= ge); drm_atomic_for_each_plane_damage(&iter, &clip) { rect->x1 =3D min(rect->x1, clip.x1); rect->y1 =3D min(rect->y1, clip.y1); @@ -336,6 +370,10 @@ static bool __drm_atomic_helper_damage_merged(const st= ruct drm_plane_state *old_ * For details see: drm_atomic_helper_damage_iter_init() and * drm_atomic_helper_damage_iter_next(). * + * Note that this helper is for drivers that do per-plane uploads and expe= ct + * to handle frame damages. Drivers that do per-buffer uploads instead sho= uld + * use @drm_atomic_helper_buffer_damage_merged() that handles buffer damag= es. + * * Returns: * True if there is valid plane damage otherwise false. */ @@ -343,6 +381,35 @@ bool drm_atomic_helper_damage_merged(const struct drm_= plane_state *old_state, struct drm_plane_state *state, struct drm_rect *rect) { - return __drm_atomic_helper_damage_merged(old_state, state, rect); + return __drm_atomic_helper_damage_merged(old_state, state, rect, false); } EXPORT_SYMBOL(drm_atomic_helper_damage_merged); + +/** + * drm_atomic_helper_buffer_damage_merged - Merged buffer damage + * @old_state: Old plane state for validation. + * @state: Plane state from which to iterate the damage clips. + * @rect: Returns the merged buffer damage rectangle + * + * This function merges any valid buffer damage clips into one rectangle a= nd + * returns it in @rect. It checks if the framebuffers attached to @old_sta= te + * and @state are the same. If that is not the case then the returned dama= ge + * rectangle is the &drm_plane_state.src, since a full update should happe= n. + * + * Note that &drm_plane_state.fb_damage_clips =3D=3D NULL in plane state m= eans that + * full plane update should happen. It also ensure helper iterator will re= turn + * &drm_plane_state.src as damage. + * + * For details see: drm_atomic_helper_buffer_damage_iter_init() and + * drm_atomic_helper_damage_iter_next(). + * + * Returns: + * True if there is valid buffer damage otherwise false. + */ +bool drm_atomic_helper_buffer_damage_merged(const struct drm_plane_state *= old_state, + struct drm_plane_state *state, + struct drm_rect *rect) +{ + return __drm_atomic_helper_damage_merged(old_state, state, rect, true); +} +EXPORT_SYMBOL(drm_atomic_helper_buffer_damage_merged); diff --git a/include/drm/drm_damage_helper.h b/include/drm/drm_damage_helpe= r.h index effda42cce31..328bb249d68f 100644 --- a/include/drm/drm_damage_helper.h +++ b/include/drm/drm_damage_helper.h @@ -74,11 +74,18 @@ void drm_atomic_helper_damage_iter_init(struct drm_atomic_helper_damage_iter *i= ter, const struct drm_plane_state *old_state, const struct drm_plane_state *new_state); +void +drm_atomic_helper_buffer_damage_iter_init(struct drm_atomic_helper_damage_= iter *iter, + const struct drm_plane_state *old_state, + const struct drm_plane_state *new_state); bool drm_atomic_helper_damage_iter_next(struct drm_atomic_helper_damage_iter *i= ter, struct drm_rect *rect); bool drm_atomic_helper_damage_merged(const struct drm_plane_state *old_sta= te, struct drm_plane_state *state, struct drm_rect *rect); +bool drm_atomic_helper_buffer_damage_merged(const struct drm_plane_state *= old_state, + struct drm_plane_state *state, + struct drm_rect *rect); =20 #endif --=20 2.41.0 From nobody Wed Dec 31 01:12:13 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5F4E2C4167B for ; Thu, 9 Nov 2023 17:26:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344725AbjKIR0M (ORCPT ); Thu, 9 Nov 2023 12:26:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43714 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344556AbjKIR0A (ORCPT ); Thu, 9 Nov 2023 12:26:00 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 18C4235BC for ; Thu, 9 Nov 2023 09:25:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699550716; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Y0steN0/ACKFTtJOvpHMkiOMUe7bddz5OgwOILeHxPA=; b=LZutde8nifGetZOoGaJyDm42ry3qHT2mwHdnmjQtynnXKrvWeUHcvrFBL0jLk7R+gwaZuc /EJFpLVc6xE9g8aUNrNmPxyv706CICodU/WFtFmmdg2mh2UZ47th0TZcm4AqW72UhZN/nW /RrdSR02s5CMW3g91yZZ/XZDRR8z338= Received: from mail-lf1-f70.google.com (mail-lf1-f70.google.com [209.85.167.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-592-LzTXkVDwMW60EJV4my14Iw-1; Thu, 09 Nov 2023 12:25:14 -0500 X-MC-Unique: LzTXkVDwMW60EJV4my14Iw-1 Received: by mail-lf1-f70.google.com with SMTP id 2adb3069b0e04-5079c865541so1062148e87.3 for ; Thu, 09 Nov 2023 09:25:13 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699550712; x=1700155512; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Y0steN0/ACKFTtJOvpHMkiOMUe7bddz5OgwOILeHxPA=; b=RZCBPlinFfAhcIzNRMxw/w2s/f3Ht1rPifcg61xsePvplRiFJNQt/tw8MOkJTmazRp hYrhuUWoVkOeuzb6e393kFzUc99AtjDW1bwKye4COULYl+ug4pDR454PTIZ28zxTO6FW 81ARI3m8mQtaontKTvx8DfbKiH2R4a9OKAoHzHqLbGYNnR3a27tD5fQOd0+9HfvCiAgE yPTUVplW9twoCj53Tek+H49kF9SGbnjkzdnhq3pMq76AfUA8vkb279Zh25ht2tZL8NNl rtnotI/xyPuAX7anS/3IpS6NSoQQ0BboJZoD/z9hu1v6CbMn41NzHp2hZL9H6Ug/5ueE behA== X-Gm-Message-State: AOJu0YxtCOptIksOwHAjAQFwpuJnQOVdpyTqV54vMscN3oddbsLpoAt7 3yWfxqcvzADGaVx8TNYEqD/FIvNq+IsFoeaTRs6JDm5806erk1Zd76F33NkqHi6fZBL1k3tAtj0 No45yFUbzHOENHaKq+CEgangdR1plV5z4EZxgCRWqO4bmK+kNw9fWl4KVGtS0LT2TVRLITAmga2 W8H03cEMs= X-Received: by 2002:a19:e007:0:b0:507:b935:9f5f with SMTP id x7-20020a19e007000000b00507b9359f5fmr1877882lfg.24.1699550712376; Thu, 09 Nov 2023 09:25:12 -0800 (PST) X-Google-Smtp-Source: AGHT+IENtuNNft+jXRPbq2qJhlZT81jWdLguxD1V9O4aFnQJMyc+8VWIMEbR49N4zRWK0Yg8oNcUMw== X-Received: by 2002:a19:e007:0:b0:507:b935:9f5f with SMTP id x7-20020a19e007000000b00507b9359f5fmr1877857lfg.24.1699550712088; Thu, 09 Nov 2023 09:25:12 -0800 (PST) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id f15-20020a056000128f00b00323293bd023sm135806wrx.6.2023.11.09.09.25.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Nov 2023 09:25:11 -0800 (PST) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Simon Ser , Sima Vetter , Pekka Paalanen , Maxime Ripard , Bilal Elmoussaoui , Erico Nunes , Javier Martinez Canillas , stable@vger.kernel.org, nerdopolis , Chia-I Wu , Daniel Vetter , David Airlie , Gerd Hoffmann , Gurchetan Singh , Maarten Lankhorst , Thomas Zimmermann , dri-devel@lists.freedesktop.org, virtualization@lists.linux-foundation.org Subject: [PATCH 3/6] drm/virtio: Use drm_atomic_helper_buffer_damage_merged() for buffer damage Date: Thu, 9 Nov 2023 18:24:37 +0100 Message-ID: <20231109172449.1599262-4-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231109172449.1599262-1-javierm@redhat.com> References: <20231109172449.1599262-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The driver does per-buffer uploads. It needs to use the damage helper that handles buffer damages, rather than the helper that handles frame damages. Fixes: 01f05940a9a7 ("drm/virtio: Enable fb damage clips property for the p= rimary plane") Cc: # v6.4+ Reported-by: nerdopolis Closes: https://bugzilla.kernel.org/show_bug.cgi?id=3D218115 Suggested-by: Sima Vetter Signed-off-by: Javier Martinez Canillas --- drivers/gpu/drm/virtio/virtgpu_plane.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virti= o/virtgpu_plane.c index a2e045f3a000..1adfd9813cde 100644 --- a/drivers/gpu/drm/virtio/virtgpu_plane.c +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c @@ -183,7 +183,7 @@ static void virtio_gpu_primary_plane_update(struct drm_= plane *plane, return; } =20 - if (!drm_atomic_helper_damage_merged(old_state, plane->state, &rect)) + if (!drm_atomic_helper_buffer_damage_merged(old_state, plane->state, &rec= t)) return; =20 bo =3D gem_to_virtio_gpu_obj(plane->state->fb->obj[0]); --=20 2.41.0 From nobody Wed Dec 31 01:12:13 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id BC120C04E85 for ; Thu, 9 Nov 2023 17:26:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344591AbjKIR0C (ORCPT ); Thu, 9 Nov 2023 12:26:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43720 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344550AbjKIR0A (ORCPT ); Thu, 9 Nov 2023 12:26:00 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C7D2835BD for ; Thu, 9 Nov 2023 09:25:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699550718; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7sDHSqMuo7yUORgn5WByoTm7yhsDzWS7QFyd4p9GXpM=; b=gWvE5NG129QJ6Oit0WT325wdq/TCrLsRFmtdEYG5nG568XM5h4FHAo5PQ4Dl7NsUMZZjha t3WdnG+haBmQpW6gVQgNs6E2SMUjy0g+pHhinraY8bP6oldZsYi8WFZfAESt30pbgKaIaH /XF7zX25ZTe4WmvGK0Mz0f/akXv5Ryw= Received: from mail-lf1-f70.google.com (mail-lf1-f70.google.com [209.85.167.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-583-yIkP4aZEMuGzMNw-xdDCAg-1; Thu, 09 Nov 2023 12:25:16 -0500 X-MC-Unique: yIkP4aZEMuGzMNw-xdDCAg-1 Received: by mail-lf1-f70.google.com with SMTP id 2adb3069b0e04-507d2e150c2so1103390e87.3 for ; Thu, 09 Nov 2023 09:25:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699550714; x=1700155514; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7sDHSqMuo7yUORgn5WByoTm7yhsDzWS7QFyd4p9GXpM=; b=rAYrrF803IHYRk9HJmkmvM5Q5mGyWAom1IwrUrd8WL+wRRzsBPjelrQWnLOKdwZZmo BH1rFywNSpzOZc5J/kURICwBJQVtvvTParg4dKBEQWehpK0VkgsWNZtKGU+s7j/hRNsN whThczLRhH5+C6ZLvb1eFQN1kCcHUZf48eOWwODTwmZXi1UFruTmC6izmpOjJUs/hHUG ykNSOurLASBVXXibNZkh0Bkvfd6o7LwRBbq1lDkAh6VF88EwqwWS1/AtxymE3t5T7pQP RwnHWxcLOENBoPZVR8AJhwVGYzoIXzBdxs0OMPaL3sJg6ZmhCsFCnKrXYFlZ7oFPDnZh vpUQ== X-Gm-Message-State: AOJu0YwSxNeJsf+9TIDKQjhxdNqsXNUDqm6F8zBnhhEvoXYkKBb6QXR+ qxICub6y/VdesJ0tkEWxGblnAI0QHAl0RdufOXvrPtPA39w4y8xPR3fogW/fvLN0OcrDTrf2tzE vkv1l0/7pkPh2vTACKQ42A14io0exrDdilnhYaQQvrWxC1Yo23KxkApdPodMEmp80EO1TWrMnZ0 lqkl8GzIQ= X-Received: by 2002:ac2:5e9e:0:b0:507:a6a5:a87b with SMTP id b30-20020ac25e9e000000b00507a6a5a87bmr1916881lfq.51.1699550714324; Thu, 09 Nov 2023 09:25:14 -0800 (PST) X-Google-Smtp-Source: AGHT+IEJVNz0Dz1HSXbQ0UB49yuozjenPpk3U6wkuD6qjSBnU9rrxSOmkfygjO1wSFqzgZsRaJXpyw== X-Received: by 2002:ac2:5e9e:0:b0:507:a6a5:a87b with SMTP id b30-20020ac25e9e000000b00507a6a5a87bmr1916854lfq.51.1699550714038; Thu, 09 Nov 2023 09:25:14 -0800 (PST) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id c1-20020adfed81000000b0032fab28e9c9sm119847wro.73.2023.11.09.09.25.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Nov 2023 09:25:13 -0800 (PST) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Simon Ser , Sima Vetter , Pekka Paalanen , Maxime Ripard , Bilal Elmoussaoui , Erico Nunes , Javier Martinez Canillas , Daniel Vetter , David Airlie , Maarten Lankhorst , Thomas Zimmermann , VMware Graphics Reviewers , Zack Rusin , dri-devel@lists.freedesktop.org Subject: [PATCH 4/6] drm/vmwgfx: Use drm_atomic_helper_buffer_damage_iter_init() for buffer damage Date: Thu, 9 Nov 2023 18:24:38 +0100 Message-ID: <20231109172449.1599262-5-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231109172449.1599262-1-javierm@redhat.com> References: <20231109172449.1599262-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The driver does per-buffer uploads. It needs to use the damage helper that handles buffer damages, rather than the helper that handles frame damages. Suggested-by: Sima Vetter Signed-off-by: Javier Martinez Canillas --- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/v= mwgfx_kms.c index 1489ad73c103..91cda125784e 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -2912,7 +2912,7 @@ int vmw_du_helper_plane_update(struct vmw_du_update_p= lane *update) * Iterate in advance to check if really need plane update and find the * number of clips that actually are in plane src for fifo allocation. */ - drm_atomic_helper_damage_iter_init(&iter, old_state, state); + drm_atomic_helper_buffer_damage_iter_init(&iter, old_state, state); drm_atomic_for_each_plane_damage(&iter, &clip) num_hits++; =20 --=20 2.41.0 From nobody Wed Dec 31 01:12:13 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1E2B3C4167D for ; Thu, 9 Nov 2023 17:26:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344803AbjKIR0S (ORCPT ); Thu, 9 Nov 2023 12:26:18 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43744 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344669AbjKIR0I (ORCPT ); Thu, 9 Nov 2023 12:26:08 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5FAF235AE for ; Thu, 9 Nov 2023 09:25:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699550719; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=I7tI1v3g4YDcTR34UtN17p6cKRPxCtoGaa2HZ2e5M58=; b=KK7Riq2KYMBru1Rk3duHY1otL91m67JKuA1567kQhFbOohEU/cw2G5TU3F9QyD3hZUeCv1 J5LdspFgMmNXjiwDPL/7emo5TDAHY66iSNtGnj+Fv/MW8j6i4brWbAGWulc6TrdgCnd9nj ANq9gh2+FJeUMAhFxur+TOlDEf30VN4= Received: from mail-lj1-f197.google.com (mail-lj1-f197.google.com [209.85.208.197]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-696-naX2DB-FN96uVHzC996Idg-1; Thu, 09 Nov 2023 12:25:18 -0500 X-MC-Unique: naX2DB-FN96uVHzC996Idg-1 Received: by mail-lj1-f197.google.com with SMTP id 38308e7fff4ca-2c52cbb64c9so10985231fa.1 for ; Thu, 09 Nov 2023 09:25:18 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699550716; x=1700155516; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=I7tI1v3g4YDcTR34UtN17p6cKRPxCtoGaa2HZ2e5M58=; b=WC8+Y284HbDHJdWMidukrALyg6TGYPl7pWrGB4MDzrLY1lFLM7m1LNOZuwW17l0YWK 0PJH0UHZbz5Dgt7BOudt4mpULl+koNllZE5wWdcu8p1IEp7JqPgxV03oAzEiSKqIBS24 qDlsjCfMI/eKBlylFtA4jXPQ7wLOFBOA2dDd9/Lhw1DvXoj/ZNqBGJ9MoUkbRtzLJcVs gK5Vxqnjgj/0/Kxj5RQEUch2tAFJsIacYXWiJWIc08R5OA/8onEOx7NsdLYXenHN8YKr z7mvdVFL7/OrXn72FEKxtMFaFirqA9MTO5PNkqQLPXNWgGrMBT842XaoLxnbEZje4EPk 8grQ== X-Gm-Message-State: AOJu0YyXus4m7BCsr2LqdV/Xbaf+RJepcTaOrC1IpZELLKX69mbs55mW lCmwP2VTxx2K0PYn9xqVMYOYT9UNW2zTVTeVxWTDQhbx0KuPkUnbGLU0L5KVwTNrc4/gvn40dJs 7K3pkhx+LdUsCCuuDfN/OoAwha8J7A2ETd1bLiokJ7f53Z4bXCBlUJrE1nSfs9Cn+rHonRmKfat +yDC+iUVk= X-Received: by 2002:ac2:549c:0:b0:500:b2f6:592 with SMTP id t28-20020ac2549c000000b00500b2f60592mr1983268lfk.50.1699550716579; Thu, 09 Nov 2023 09:25:16 -0800 (PST) X-Google-Smtp-Source: AGHT+IGse4RCF/67oKfST0CFHyjm+cpu2Cvl4v5lpvsxPTmc5ZS8cA1s3XNc9fBMoe6L+fz5hMsbpg== X-Received: by 2002:ac2:549c:0:b0:500:b2f6:592 with SMTP id t28-20020ac2549c000000b00500b2f60592mr1983244lfk.50.1699550716301; Thu, 09 Nov 2023 09:25:16 -0800 (PST) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id n8-20020a5d6608000000b0032da75af3easm119414wru.80.2023.11.09.09.25.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Nov 2023 09:25:15 -0800 (PST) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Simon Ser , Sima Vetter , Pekka Paalanen , Maxime Ripard , Bilal Elmoussaoui , Erico Nunes , Javier Martinez Canillas , Daniel Vetter , David Airlie , Maarten Lankhorst , Thomas Zimmermann , dri-devel@lists.freedesktop.org Subject: [PATCH 5/6] drm/plane: Extend damage tracking kernel-doc Date: Thu, 9 Nov 2023 18:24:39 +0100 Message-ID: <20231109172449.1599262-6-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231109172449.1599262-1-javierm@redhat.com> References: <20231109172449.1599262-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The "Damage Tracking Properties" section in the documentation doesn't have info about the two type of damage handling: frame damage vs buffer damage. Add that to the section, mention the different helpers that should be used by drivers depending on the damage handling type used and refer to sites that have more content about damage types and damage tracking in general. Suggested-by: Simon Ser Signed-off-by: Javier Martinez Canillas Reviewed-by: Simon Ser --- drivers/gpu/drm/drm_damage_helper.c | 10 ++++++---- drivers/gpu/drm/drm_plane.c | 22 +++++++++++++++++++--- 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/drm_damage_helper.c b/drivers/gpu/drm/drm_dama= ge_helper.c index b72062c9d31c..ac9986da7d7c 100644 --- a/drivers/gpu/drm/drm_damage_helper.c +++ b/drivers/gpu/drm/drm_damage_helper.c @@ -367,8 +367,9 @@ static bool __drm_atomic_helper_damage_merged(const str= uct drm_plane_state *old_ * This function merges any valid plane damage clips into one rectangle and * returns it in @rect. * - * For details see: drm_atomic_helper_damage_iter_init() and - * drm_atomic_helper_damage_iter_next(). + * For details see: drm_atomic_helper_damage_iter_init(), + * drm_atomic_helper_damage_iter_next() and + * `Damage Tracking Properties`_. * * Note that this helper is for drivers that do per-plane uploads and expe= ct * to handle frame damages. Drivers that do per-buffer uploads instead sho= uld @@ -400,8 +401,9 @@ EXPORT_SYMBOL(drm_atomic_helper_damage_merged); * full plane update should happen. It also ensure helper iterator will re= turn * &drm_plane_state.src as damage. * - * For details see: drm_atomic_helper_buffer_damage_iter_init() and - * drm_atomic_helper_damage_iter_next(). + * For details see: drm_atomic_helper_buffer_damage_iter_init(), + * drm_atomic_helper_damage_iter_next() and + * `Damage Tracking Properties`_. * * Returns: * True if there is valid buffer damage otherwise false. diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c index 24e7998d1731..f137a99b3435 100644 --- a/drivers/gpu/drm/drm_plane.c +++ b/drivers/gpu/drm/drm_plane.c @@ -1439,9 +1439,25 @@ int drm_mode_page_flip_ioctl(struct drm_device *dev, * * Drivers that are interested in damage interface for plane should enable * FB_DAMAGE_CLIPS property by calling drm_plane_enable_fb_damage_clips(). - * Drivers implementing damage can use drm_atomic_helper_damage_iter_init(= ) and - * drm_atomic_helper_damage_iter_next() helper iterator function to get da= mage - * rectangles clipped to &drm_plane_state.src. + * + * Note that there are two types of damage handling: frame damage and buff= er + * damage. The drivers implementing a per-plane or per-CRTC upload target = and + * need to handle frame damage can use drm_atomic_helper_damage_iter_init(= ), + * but drivers implementing a per-buffer upload target and need to handle = buffer + * damage should use drm_atomic_helper_buffer_damage_iter_init() helper in= stead. + * + * Once the iterator has been initialized by the damage helpers mentioned = above, + * the drm_atomic_helper_damage_iter_next() helper iterator function can b= e used + * to get damage rectangles clipped to &drm_plane_state.src. + * + * The type of damage handling implemented depends on the driver's upload = target + * but notice that when using swap buffers, the returned damage rectangle = is the + * &drm_plane_state.src, since a full plane update should happen. There is= no + * buffer age support or similar damage accumulation algorithm implemented= yet. + * + * For more information about the two type of damage, see: + * https://registry.khronos.org/EGL/extensions/KHR/EGL_KHR_swap_buffer= s_with_damage.txt + * https://emersion.fr/blog/2019/intro-to-damage-tracking/ */ =20 /** --=20 2.41.0 From nobody Wed Dec 31 01:12:13 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 67D2CC4167D for ; Thu, 9 Nov 2023 17:26:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344590AbjKIR0V (ORCPT ); Thu, 9 Nov 2023 12:26:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43724 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1344661AbjKIR0H (ORCPT ); Thu, 9 Nov 2023 12:26:07 -0500 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5961F35BE for ; Thu, 9 Nov 2023 09:25:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1699550722; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=LQsLMrBO0s8gsbhcurrkAKTlTUKc8bmHZW0Ex5lVbpk=; b=DMX+sItOYcOs2cnMjOd+jDBrke9M0RGB+HrRhlxbT7+7jJO56EtgSPoQsmTkxZGlTjATOU fEEcfi+Lf9JeWfVgxc7eLo2OClzUH9JDHfpJaL7iX5x7y8EFqUcXMNQVCBVe/XskL9WY+I MfvGhv0DNRtsZZDAukNfsZ49dYijGqs= Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-639-KgoYNOBQOmajo8gOq3HdxA-1; Thu, 09 Nov 2023 12:25:21 -0500 X-MC-Unique: KgoYNOBQOmajo8gOq3HdxA-1 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-32f7cfab43eso568415f8f.1 for ; Thu, 09 Nov 2023 09:25:20 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699550718; x=1700155518; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LQsLMrBO0s8gsbhcurrkAKTlTUKc8bmHZW0Ex5lVbpk=; b=o6uNIIPzwIPdrtwqwzztt9OLKbVZUAkww/dCcQVaZVBSwc+MD582EoaZu8Q8pbqWD9 coaOMiY3grqBtBjEe1wiOLA11TAMxrCHxzTADb/JRRcN2gQ/Z6VUjjNfsUvu/QRfvQjs uUHdFKA1cC57QoztAGEB0s4R6PjE3dRYdlZ8PzH5EmflZTemPqnjS2VUNP+sgIP3UU1o idmz2s2Lb7y8trOUTCvxIgrrTNEu6viMLKE4gkqRljsAqBEEV+U3UGz/8YxyVHss3NVN bUcow1LNezdom88yDzGmSIZ/2F2cv5OrTgjJ7nAif18EDyd9wQgbplqBPjfs7IRz0pb2 H3uQ== X-Gm-Message-State: AOJu0YyelwCDyUzVesQmpLh7vraUE8LIXHb+tXyX8Dgbomp99AevqBUu pg5QO7Iz6A0YvR0Rz/kvAyxRS+/XvAsk4gT8D1Vvc+Dj+0TprjiA5ekJNHRIOYjRWTobjJCC1IM 6BbyWXHO9enx6iCk4Q3SOXm6VhDcuGp7O65rYHcFdz5r0PPQqA1u/rUh95IYeIZixfelT5aCKSi biPPcf+nw= X-Received: by 2002:a05:6000:1cb:b0:32f:7963:8493 with SMTP id t11-20020a05600001cb00b0032f79638493mr4461568wrx.37.1699550718246; Thu, 09 Nov 2023 09:25:18 -0800 (PST) X-Google-Smtp-Source: AGHT+IGD/Ij413ZeKujXk6kJlWHHEPZiWIxqmSIPmvd4/ZL4FLHzk3PoQZkslp1/W1fbI9IJfywcfQ== X-Received: by 2002:a05:6000:1cb:b0:32f:7963:8493 with SMTP id t11-20020a05600001cb00b0032f79638493mr4461536wrx.37.1699550717778; Thu, 09 Nov 2023 09:25:17 -0800 (PST) Received: from localhost (205.pool92-176-231.dynamic.orange.es. [92.176.231.205]) by smtp.gmail.com with ESMTPSA id k8-20020a5d6e88000000b0032db430fb9bsm121425wrz.68.2023.11.09.09.25.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 09 Nov 2023 09:25:17 -0800 (PST) From: Javier Martinez Canillas To: linux-kernel@vger.kernel.org Cc: Simon Ser , Sima Vetter , Pekka Paalanen , Maxime Ripard , Bilal Elmoussaoui , Erico Nunes , Javier Martinez Canillas , Daniel Vetter , David Airlie , Jonathan Corbet , Maarten Lankhorst , Thomas Zimmermann , dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org Subject: [PATCH 6/6] drm/todo: Add entry about implementing buffer age for damage tracking Date: Thu, 9 Nov 2023 18:24:40 +0100 Message-ID: <20231109172449.1599262-7-javierm@redhat.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231109172449.1599262-1-javierm@redhat.com> References: <20231109172449.1599262-1-javierm@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Currently, only damage tracking for frame damage is supported. If a driver needs to do buffer damage (e.g: the framebuffer attached to plane's state has changed since the last page-flip), the damage helpers just fallback to a full plane update. Add en entry in the TODO about implementing buffer age or any other damage accumulation algorithm for buffer damage handling. Suggested-by: Simon Ser Signed-off-by: Javier Martinez Canillas Reviewed-by: Simon Ser --- Documentation/gpu/todo.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Documentation/gpu/todo.rst b/Documentation/gpu/todo.rst index 03fe5d1247be..adaa154210a0 100644 --- a/Documentation/gpu/todo.rst +++ b/Documentation/gpu/todo.rst @@ -765,6 +765,26 @@ Contact: Hans de Goede =20 Level: Advanced =20 +Buffer age or other damage accumulation algorithm for buffer damage handli= ng +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D + +Drivers that do per-buffer uploads, need a buffer damage handling (rather = than +frame damage like drivers that do per-plane or per-CRTC uploads), but ther= e is +no support to get the buffer age or any other damage accumulation algorith= m. + +For this reason, the damage helpers just fallback to a full plane update i= f the +framebuffer attached to a plane has changed since the last page-flip. + +This should be improved to get damage tracking properly working on drivers= that +do per-buffer uploads. + +More information about damage tracking and references to learning material= s in +`Damage Tracking Properties `_ + +Contact: Javier Martinez Canillas + +Level: Advanced + Outside DRM =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 --=20 2.41.0