From nobody Sat May 18 11:46:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1713553549; cv=none; d=zohomail.com; s=zohoarc; b=LHqn7rxo4UXNeeJs8N+KNZ0wNlPLrBOcB5A+ky6hoSLVU+Tx+wZQ4yMvL6GnttfQbY4HZ4w3U69dU5wB1G5R4TFlV/5rKYK2AXL0VF9RQ4s5AO37mvdau6ztSeBkq2NDhp2VB8WK85aYzU1a7krvhuQlVdQsUoIsHQYWveQu9qI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1713553549; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=51F/IjaQ1pj9h97BFhjBIMJEMY4H1G2YxeREw/eDO+U=; b=KJ91d7D9wVknsnZClgVl+B2zlIk/ZuQjztazrUPjob9r7JFwbJCJOiDoSNvSXcQDiX5HvrJuZ2A0Uc3WIy1G5H82ulJ8CegLJa2GHV6VUQnBsXPu4x7FEBeKd0bk0gy8PLKQI7TUoKJThJXWKH5wGwK1+cseVnOi5vXNnVF/meI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1713553549155688.511193187134; Fri, 19 Apr 2024 12:05:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rxtX0-0005tB-Rt; Fri, 19 Apr 2024 15:04:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtWy-0005sb-Ux for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:17 -0400 Received: from mgamail.intel.com ([192.198.163.10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtWx-0004Dj-5I for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:16 -0400 Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Apr 2024 12:04:07 -0700 Received: from dongwonk-z390-aorus-ultra.fm.intel.com ([10.105.129.124]) by orviesa002.jf.intel.com with ESMTP; 19 Apr 2024 12:04:07 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713553455; x=1745089455; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=67NgeQ/kFsPNIg8m3af1zHaTrIuCCnTfBkPGdpoYPQc=; b=EPG464vtFn0KXoEMlSJE1SxnJjmRgIT9dierlNQHPbGgXQwONNXljVh5 iaqnu2KWLxxOsXq0qUbNbBwf7JJVCBMH2K3wEvc4KJ1PDuhDOhvUEkZ+b U1VYY1eqSfPDvIaDAhGUUJH8T/25qEbVtmceRPUX+lq0wLFa6gUY9TKN4 9f/d+AT6GtSIBTcIhuisi18n2JXsW2w27kIMNflX7XHIqJpD9Ev1C3acM /De3drpf2fg595cv6Es2g05zuMGS6ilN1TuyIDEi609Genkj8TnkQ711g 28w0BsgekDhcDaPD5u6eTO19inYsJlYTyq9hi7cl57SC78ilytp14RHlr w==; X-CSE-ConnectionGUID: iG1j5A+XS3SO0UpGK5MIGg== X-CSE-MsgGUID: SQ0nMwBGSZiaq57lM4c/Rg== X-IronPort-AV: E=McAfee;i="6600,9927,11049"; a="20564985" X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="20564985" X-CSE-ConnectionGUID: silkh8tkTJymh0GZtsDDtA== X-CSE-MsgGUID: 1jItd2arQvShSbYioY4Zvg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="54346785" From: dongwon.kim@intel.com To: qemu-devel@nongnu.org Cc: marcandre.lureau@redhat.com, berrange@redhat.com, philmd@linaro.org Subject: [PATCH v8 1/6] ui/gtk: Check if fence_fd is equal to or greater than 0 Date: Fri, 19 Apr 2024 11:59:47 -0700 Message-Id: <20240419185952.991930-2-dongwon.kim@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240419185952.991930-1-dongwon.kim@intel.com> References: <20240419185952.991930-1-dongwon.kim@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.198.163.10; envelope-from=dongwon.kim@intel.com; helo=mgamail.intel.com X-Spam_score_int: -66 X-Spam_score: -6.7 X-Spam_bar: ------ X-Spam_report: (-6.7 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.313, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1713553551268100011 From: Dongwon Kim 'fence_fd' needs to be validated always before being referenced And the passing condition should include '=3D=3D 0' as 0 is a valid value for the file descriptor. Suggested-by: Marc-Andr=C3=A9 Lureau Cc: Philippe Mathieu-Daud=C3=A9 Cc: Daniel P. Berrang=C3=A9 Cc: Vivek Kasireddy Signed-off-by: Dongwon Kim --- ui/gtk-egl.c | 2 +- ui/gtk-gl-area.c | 2 +- ui/gtk.c | 10 ++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c index 3af5ac5bcf..955234429d 100644 --- a/ui/gtk-egl.c +++ b/ui/gtk-egl.c @@ -99,7 +99,7 @@ void gd_egl_draw(VirtualConsole *vc) #ifdef CONFIG_GBM if (dmabuf) { egl_dmabuf_create_fence(dmabuf); - if (dmabuf->fence_fd > 0) { + if (dmabuf->fence_fd >=3D 0) { qemu_set_fd_handler(dmabuf->fence_fd, gd_hw_gl_flushed, NU= LL, vc); return; } diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c index 52dcac161e..7fffd0544e 100644 --- a/ui/gtk-gl-area.c +++ b/ui/gtk-gl-area.c @@ -86,7 +86,7 @@ void gd_gl_area_draw(VirtualConsole *vc) #ifdef CONFIG_GBM if (dmabuf) { egl_dmabuf_create_fence(dmabuf); - if (dmabuf->fence_fd > 0) { + if (dmabuf->fence_fd >=3D 0) { qemu_set_fd_handler(dmabuf->fence_fd, gd_hw_gl_flushed, NU= LL, vc); return; } diff --git a/ui/gtk.c b/ui/gtk.c index 810d7fc796..7819a86321 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -597,10 +597,12 @@ void gd_hw_gl_flushed(void *vcon) VirtualConsole *vc =3D vcon; QemuDmaBuf *dmabuf =3D vc->gfx.guest_fb.dmabuf; =20 - qemu_set_fd_handler(dmabuf->fence_fd, NULL, NULL, NULL); - close(dmabuf->fence_fd); - dmabuf->fence_fd =3D -1; - graphic_hw_gl_block(vc->gfx.dcl.con, false); + if (dmabuf->fence_fd >=3D 0) { + qemu_set_fd_handler(dmabuf->fence_fd, NULL, NULL, NULL); + close(dmabuf->fence_fd); + dmabuf->fence_fd =3D -1; + graphic_hw_gl_block(vc->gfx.dcl.con, false); + } } =20 /** DisplayState Callbacks (opengl version) **/ --=20 2.34.1 From nobody Sat May 18 11:46:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1713553547; cv=none; d=zohomail.com; s=zohoarc; b=R5SfCdSDzMbFdJOQn4nSSYJ+QU4k9xp47k57MttCpoqa9XCGVahssXB4nejyt4XRp7cIq6S2E0rb+ycMHfHdM/Yi72S72C9SXSwh9LwyzBphqdErCME9xbdWtgi5b0zHOS7P4Ys44aVEi5TBxvwsBlpV5QREtmcfUj2xasp4Fo0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1713553547; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=UKfyL/LTGaad4tlGNjqr3zig5KWmYcqR86XfPtu+cL0=; b=VTA6r0HZ9TcGJBdtCiGH0hoo1dCqrv04h6PaYtXHjW/GBzM+lIwQRvtiCZShVon8Qe8lhUKYXXPXkGjNGPCoCHt6C6CzzDz7KPiJplmV1qC731IeOCPAmKtMLx2j7VKkwP6M8/l/tYmC2QeceDL4HuQKpVMK/obwkDsqTcnk4Zs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1713553546992298.5285387645132; Fri, 19 Apr 2024 12:05:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rxtX6-0005u9-3n; Fri, 19 Apr 2024 15:04:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtX0-0005sp-5H for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:18 -0400 Received: from mgamail.intel.com ([192.198.163.10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtWx-0004E7-Os for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:17 -0400 Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Apr 2024 12:04:07 -0700 Received: from dongwonk-z390-aorus-ultra.fm.intel.com ([10.105.129.124]) by orviesa002.jf.intel.com with ESMTP; 19 Apr 2024 12:04:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713553456; x=1745089456; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=5PO68DQNUZfb+SjBwv+nx/sOzc/sE+YKuFJciRspZUE=; b=bBThJllCS45kK31UH1D3tlq7585aV80ReqbDEnlwFObe4Q3XxynBb8+x 9iDVWDT6pKLE/7Y19nC3xo4WupHZInx/7m6bYADI21ojcmfS1swfgDqQI QezBn8b7jI5g46BZzz0MXvUnnN1os3PcW7gmuwWzx7P/VoUtxjDB2kqA7 8pQgV5CTETPwhVsreDoGAYaq1J8gKDXtOomUQc7iCDvDvSBkgJ5IOb7C8 p2E+0uzywgqpsgI0sdz7YRjYBTK4QGpVp+/lMULQrvdTKpZxHayhgi3DJ 41lcmVIxKKAE4q5kxSOoOb4nKW2nfZK42132bjvy8xFropbJY/8imLWri A==; X-CSE-ConnectionGUID: NQmsk+8wTfWhyzXaQrqPGA== X-CSE-MsgGUID: RkcePS5qSzW4ItB+Xv/RkA== X-IronPort-AV: E=McAfee;i="6600,9927,11049"; a="20564988" X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="20564988" X-CSE-ConnectionGUID: cgB8PhXmQNmfVrjA6LqNjg== X-CSE-MsgGUID: MCdzeAawTWigdyz+GsrQHA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="54346786" From: dongwon.kim@intel.com To: qemu-devel@nongnu.org Cc: marcandre.lureau@redhat.com, berrange@redhat.com, philmd@linaro.org Subject: [PATCH v8 2/6] ui/console: new dmabuf.h and dmabuf.c for QemuDmaBuf struct and helpers Date: Fri, 19 Apr 2024 11:59:48 -0700 Message-Id: <20240419185952.991930-3-dongwon.kim@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240419185952.991930-1-dongwon.kim@intel.com> References: <20240419185952.991930-1-dongwon.kim@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.198.163.10; envelope-from=dongwon.kim@intel.com; helo=mgamail.intel.com X-Spam_score_int: -66 X-Spam_score: -6.7 X-Spam_bar: ------ X-Spam_report: (-6.7 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.313, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1713553547306100001 From: Dongwon Kim New header and source files are added for containing QemuDmaBuf struct definition and newly introduced helpers for creating/freeing the struct and accessing its data. Suggested-by: Marc-Andr=C3=A9 Lureau Cc: Philippe Mathieu-Daud=C3=A9 Cc: Daniel P. Berrang=C3=A9 Cc: Vivek Kasireddy Signed-off-by: Dongwon Kim --- include/ui/console.h | 20 +---- include/ui/dmabuf.h | 81 +++++++++++++++++ ui/dmabuf.c | 206 +++++++++++++++++++++++++++++++++++++++++++ ui/meson.build | 1 + 4 files changed, 289 insertions(+), 19 deletions(-) create mode 100644 include/ui/dmabuf.h create mode 100644 ui/dmabuf.c diff --git a/include/ui/console.h b/include/ui/console.h index 0bc7a00ac0..a208a68b88 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -7,6 +7,7 @@ #include "qapi/qapi-types-ui.h" #include "ui/input.h" #include "ui/surface.h" +#include "ui/dmabuf.h" =20 #define TYPE_QEMU_CONSOLE "qemu-console" OBJECT_DECLARE_TYPE(QemuConsole, QemuConsoleClass, QEMU_CONSOLE) @@ -185,25 +186,6 @@ struct QEMUGLParams { int minor_ver; }; =20 -typedef struct QemuDmaBuf { - int fd; - uint32_t width; - uint32_t height; - uint32_t stride; - uint32_t fourcc; - uint64_t modifier; - uint32_t texture; - uint32_t x; - uint32_t y; - uint32_t backing_width; - uint32_t backing_height; - bool y0_top; - void *sync; - int fence_fd; - bool allow_fences; - bool draw_submitted; -} QemuDmaBuf; - enum display_scanout { SCANOUT_NONE, SCANOUT_SURFACE, diff --git a/include/ui/dmabuf.h b/include/ui/dmabuf.h new file mode 100644 index 0000000000..e332958c39 --- /dev/null +++ b/include/ui/dmabuf.h @@ -0,0 +1,81 @@ +/* + * SPDX-License-Identifier: MIT + * + * QemuDmaBuf struct and helpers used for accessing its data + * + * Copyright (c) 2024 Dongwon Kim + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#ifndef DMABUF_H +#define DMABUF_H + +typedef struct QemuDmaBuf { + int fd; + uint32_t width; + uint32_t height; + uint32_t stride; + uint32_t fourcc; + uint64_t modifier; + uint32_t texture; + uint32_t x; + uint32_t y; + uint32_t backing_width; + uint32_t backing_height; + bool y0_top; + void *sync; + int fence_fd; + bool allow_fences; + bool draw_submitted; +} QemuDmaBuf; + +QemuDmaBuf *qemu_dmabuf_new(uint32_t width, uint32_t height, + uint32_t stride, uint32_t x, + uint32_t y, uint32_t backing_width, + uint32_t backing_height, uint32_t fourc= c, + uint64_t modifier, int32_t dmabuf_fd, + bool allow_fences, bool y0_top); +void qemu_dmabuf_free(QemuDmaBuf *dmabuf); + +G_DEFINE_AUTOPTR_CLEANUP_FUNC(QemuDmaBuf, qemu_dmabuf_free); + +int32_t qemu_dmabuf_get_fd(QemuDmaBuf *dmabuf); +uint32_t qemu_dmabuf_get_width(QemuDmaBuf *dmabuf); +uint32_t qemu_dmabuf_get_height(QemuDmaBuf *dmabuf); +uint32_t qemu_dmabuf_get_stride(QemuDmaBuf *dmabuf); +uint32_t qemu_dmabuf_get_fourcc(QemuDmaBuf *dmabuf); +uint64_t qemu_dmabuf_get_modifier(QemuDmaBuf *dmabuf); +uint32_t qemu_dmabuf_get_texture(QemuDmaBuf *dmabuf); +uint32_t qemu_dmabuf_get_x(QemuDmaBuf *dmabuf); +uint32_t qemu_dmabuf_get_y(QemuDmaBuf *dmabuf); +uint32_t qemu_dmabuf_get_backing_width(QemuDmaBuf *dmabuf); +uint32_t qemu_dmabuf_get_backing_height(QemuDmaBuf *dmabuf); +bool qemu_dmabuf_get_y0_top(QemuDmaBuf *dmabuf); +void *qemu_dmabuf_get_sync(QemuDmaBuf *dmabuf); +int32_t qemu_dmabuf_get_fence_fd(QemuDmaBuf *dmabuf); +bool qemu_dmabuf_get_allow_fences(QemuDmaBuf *dmabuf); +bool qemu_dmabuf_get_draw_submitted(QemuDmaBuf *dmabuf); +void qemu_dmabuf_set_texture(QemuDmaBuf *dmabuf, uint32_t texture); +void qemu_dmabuf_set_fence_fd(QemuDmaBuf *dmabuf, int32_t fence_fd); +void qemu_dmabuf_set_sync(QemuDmaBuf *dmabuf, void *sync); +void qemu_dmabuf_set_draw_submitted(QemuDmaBuf *dmabuf, bool draw_submitte= d); +void qemu_dmabuf_set_fd(QemuDmaBuf *dmabuf, int32_t fd); + +#endif diff --git a/ui/dmabuf.c b/ui/dmabuf.c new file mode 100644 index 0000000000..ef3b07956e --- /dev/null +++ b/ui/dmabuf.c @@ -0,0 +1,206 @@ +/* + * SPDX-License-Identifier: MIT + * + * QemuDmaBuf struct and helpers used for accessing its data + * + * Copyright (c) 2024 Dongwon Kim + * + * Permission is hereby granted, free of charge, to any person obtaining a= copy + * of this software and associated documentation files (the "Software"), t= o deal + * in the Software without restriction, including without limitation the r= ights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or se= ll + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included= in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS= OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OT= HER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING= FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS = IN + * THE SOFTWARE. + */ + +#include "qemu/osdep.h" +#include "ui/dmabuf.h" + +QemuDmaBuf *qemu_dmabuf_new(uint32_t width, uint32_t height, + uint32_t stride, uint32_t x, + uint32_t y, uint32_t backing_width, + uint32_t backing_height, uint32_t fourcc, + uint64_t modifier, int32_t dmabuf_fd, + bool allow_fences, bool y0_top) { + QemuDmaBuf *dmabuf; + + dmabuf =3D g_new0(QemuDmaBuf, 1); + + dmabuf->width =3D width; + dmabuf->height =3D height; + dmabuf->stride =3D stride; + dmabuf->x =3D x; + dmabuf->y =3D y; + dmabuf->backing_width =3D backing_width; + dmabuf->backing_height =3D backing_height; + dmabuf->fourcc =3D fourcc; + dmabuf->modifier =3D modifier; + dmabuf->fd =3D dmabuf_fd; + dmabuf->allow_fences =3D allow_fences; + dmabuf->y0_top =3D y0_top; + dmabuf->fence_fd =3D -1; + + return dmabuf; +} + +void qemu_dmabuf_free(QemuDmaBuf *dmabuf) +{ + if (dmabuf =3D=3D NULL) { + return; + } + + g_free(dmabuf); +} + +int32_t qemu_dmabuf_get_fd(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->fd; +} + +uint32_t qemu_dmabuf_get_width(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->width; +} + +uint32_t qemu_dmabuf_get_height(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->height; +} + +uint32_t qemu_dmabuf_get_stride(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->stride; +} + +uint32_t qemu_dmabuf_get_fourcc(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->fourcc; +} + +uint64_t qemu_dmabuf_get_modifier(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->modifier; +} + +uint32_t qemu_dmabuf_get_texture(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->texture; +} + +uint32_t qemu_dmabuf_get_x(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->x; +} + +uint32_t qemu_dmabuf_get_y(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->y; +} + +uint32_t qemu_dmabuf_get_backing_width(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->backing_width; +} + +uint32_t qemu_dmabuf_get_backing_height(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->backing_height; +} + +bool qemu_dmabuf_get_y0_top(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->y0_top; +} + +void *qemu_dmabuf_get_sync(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->sync; +} + +int32_t qemu_dmabuf_get_fence_fd(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->fence_fd; +} + +bool qemu_dmabuf_get_allow_fences(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->allow_fences; +} + +bool qemu_dmabuf_get_draw_submitted(QemuDmaBuf *dmabuf) +{ + assert(dmabuf !=3D NULL); + + return dmabuf->draw_submitted; +} + +void qemu_dmabuf_set_texture(QemuDmaBuf *dmabuf, uint32_t texture) +{ + assert(dmabuf !=3D NULL); + dmabuf->texture =3D texture; +} + +void qemu_dmabuf_set_fence_fd(QemuDmaBuf *dmabuf, int32_t fence_fd) +{ + assert(dmabuf !=3D NULL); + dmabuf->fence_fd =3D fence_fd; +} + +void qemu_dmabuf_set_sync(QemuDmaBuf *dmabuf, void *sync) +{ + assert(dmabuf !=3D NULL); + dmabuf->sync =3D sync; +} + +void qemu_dmabuf_set_draw_submitted(QemuDmaBuf *dmabuf, bool draw_submitte= d) +{ + assert(dmabuf !=3D NULL); + dmabuf->draw_submitted =3D draw_submitted; +} + +void qemu_dmabuf_set_fd(QemuDmaBuf *dmabuf, int32_t fd) +{ + assert(dmabuf !=3D NULL); + dmabuf->fd =3D fd; +} diff --git a/ui/meson.build b/ui/meson.build index a5ce22a678..3b724eb2f1 100644 --- a/ui/meson.build +++ b/ui/meson.build @@ -17,6 +17,7 @@ system_ss.add(files( 'ui-hmp-cmds.c', 'ui-qmp-cmds.c', 'util.c', + 'dmabuf.c', )) system_ss.add(when: pixman, if_true: files('console-vc.c'), if_false: file= s('console-vc-stubs.c')) if dbus_display --=20 2.34.1 From nobody Sat May 18 11:46:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1713553529; cv=none; d=zohomail.com; s=zohoarc; b=UK99nbNLWbFF7TDjdjbLZzG8lL/FOEJSztNyMrd1htp+7bpuiJk6KmK99iHfdxxJwMpzclbhbZV9dCwnIg3Qlm5ZKm2wAE0pXCyC874D3nFOhYGFqJv9+jwEPkU8CAJ5YGQOd7PvS2mWQxp5gTsH/iGhyo0EyvO3Rkp7tJHwgx0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1713553529; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KFRxYuzI1njiQmpkRvq0nhBQjsMoGyQycV4l1DqIrrA=; b=GTFO1Cv6BTggkO9TzHUwzzXkMTJOinDwa4lcAmyuey/LmL4l+a+YSxIJXPiXakE4C6COAW28EruaCR0GHj6w/fNshNaVXhGnNtcBJTn8wnvPxgLdnCC+Sp3oQSn1dy39xITUk1AMcBqpIuC/QX9fquI5rdTmYIw98LZE+FFcbig= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1713553529824254.71985392027932; Fri, 19 Apr 2024 12:05:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rxtX9-0005vs-LI; Fri, 19 Apr 2024 15:04:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtX2-0005tK-Ld for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:22 -0400 Received: from mgamail.intel.com ([192.198.163.10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtWz-0004Dj-9D for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:20 -0400 Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Apr 2024 12:04:07 -0700 Received: from dongwonk-z390-aorus-ultra.fm.intel.com ([10.105.129.124]) by orviesa002.jf.intel.com with ESMTP; 19 Apr 2024 12:04:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713553457; x=1745089457; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7tsEKp1gSfKouV8beUNT8KhE3do+VRJ093EPXyR5Dzg=; b=RrE1dq7NXGdLQK5buVZHv0FspTuK62wOPgAdhLmU62H3RY3ya8/HZf9O eh1FnkrJQ7ofdQBsNgfUDp1tM17hIu2sfUz9DLDMkDnxRhC6Jk2hnvjmC l/zo4DBiGPT2nCLeqehEoJGrbCqa6Gxj+DnyJivXMCy0+Tho4+3BmJHLx K9rS8ToJF53zI9f8ukbD204rsrZ555HFI+udn9JAuqLZZgAvTW9DB4COu d3xxMq6WtKGunn5Kfb+EJRigYMX6H3/2hxQ6Fyn42bgHX1HLGhafQtnCL Q0RvZSI2pwQAmUqPrGkcVj00HhEIAracsNZsqBgZK5W0EEwqopF5R4slV g==; X-CSE-ConnectionGUID: 27KJPXoaRAuSI5BfhH7bSg== X-CSE-MsgGUID: W66s0Gl2R9q++w/bjiussg== X-IronPort-AV: E=McAfee;i="6600,9927,11049"; a="20564991" X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="20564991" X-CSE-ConnectionGUID: QmU6AE9rTJOJU/H7yznJ4g== X-CSE-MsgGUID: gWKF2KEORcqYJXGYEMk1pQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="54346788" From: dongwon.kim@intel.com To: qemu-devel@nongnu.org Cc: marcandre.lureau@redhat.com, berrange@redhat.com, philmd@linaro.org Subject: [PATCH v8 3/6] ui/console: Use qemu_dmabuf_get_..() helpers instead Date: Fri, 19 Apr 2024 11:59:49 -0700 Message-Id: <20240419185952.991930-4-dongwon.kim@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240419185952.991930-1-dongwon.kim@intel.com> References: <20240419185952.991930-1-dongwon.kim@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.198.163.10; envelope-from=dongwon.kim@intel.com; helo=mgamail.intel.com X-Spam_score_int: -66 X-Spam_score: -6.7 X-Spam_bar: ------ X-Spam_report: (-6.7 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.313, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1713553531305100009 From: Dongwon Kim This commit updates all instances where fields within the QemuDmaBuf struct are directly accessed, replacing them with calls to these new helper functions. v6: fix typos in helper names in ui/spice-display.c v7: removed prefix, "dpy_gl_" from all helpers v8: Introduction of helpers was removed as those were already added by the previous commit Suggested-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Marc-Andr=C3=A9 Lureau Cc: Philippe Mathieu-Daud=C3=A9 Cc: Daniel P. Berrang=C3=A9 Cc: Vivek Kasireddy Signed-off-by: Dongwon Kim --- hw/display/vhost-user-gpu.c | 6 ++-- hw/display/virtio-gpu-udmabuf.c | 7 +++-- hw/vfio/display.c | 15 +++++++--- ui/console.c | 4 +-- ui/dbus-console.c | 9 ++++-- ui/dbus-listener.c | 43 +++++++++++++++++----------- ui/egl-headless.c | 23 ++++++++++----- ui/egl-helpers.c | 47 ++++++++++++++++++------------- ui/gtk-egl.c | 48 ++++++++++++++++++++----------- ui/gtk-gl-area.c | 37 ++++++++++++++++-------- ui/gtk.c | 6 ++-- ui/spice-display.c | 50 +++++++++++++++++++-------------- 12 files changed, 187 insertions(+), 108 deletions(-) diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c index 709c8a02a1..ea9a6c5d10 100644 --- a/hw/display/vhost-user-gpu.c +++ b/hw/display/vhost-user-gpu.c @@ -249,6 +249,7 @@ vhost_user_gpu_handle_display(VhostUserGPU *g, VhostUse= rGpuMsg *msg) case VHOST_USER_GPU_DMABUF_SCANOUT: { VhostUserGpuDMABUFScanout *m =3D &msg->payload.dmabuf_scanout; int fd =3D qemu_chr_fe_get_msgfd(&g->vhost_chr); + int old_fd; QemuDmaBuf *dmabuf; =20 if (m->scanout_id >=3D g->parent_obj.conf.max_outputs) { @@ -262,8 +263,9 @@ vhost_user_gpu_handle_display(VhostUserGPU *g, VhostUse= rGpuMsg *msg) g->parent_obj.enable =3D 1; con =3D g->parent_obj.scanout[m->scanout_id].con; dmabuf =3D &g->dmabuf[m->scanout_id]; - if (dmabuf->fd >=3D 0) { - close(dmabuf->fd); + old_fd =3D qemu_dmabuf_get_fd(dmabuf); + if (old_fd >=3D 0) { + close(old_fd); dmabuf->fd =3D -1; } dpy_gl_release_dmabuf(con, dmabuf); diff --git a/hw/display/virtio-gpu-udmabuf.c b/hw/display/virtio-gpu-udmabu= f.c index d51184d658..c90eba281e 100644 --- a/hw/display/virtio-gpu-udmabuf.c +++ b/hw/display/virtio-gpu-udmabuf.c @@ -206,6 +206,7 @@ int virtio_gpu_update_dmabuf(VirtIOGPU *g, { struct virtio_gpu_scanout *scanout =3D &g->parent_obj.scanout[scanout_= id]; VGPUDMABuf *new_primary, *old_primary =3D NULL; + uint32_t width, height; =20 new_primary =3D virtio_gpu_create_dmabuf(g, scanout_id, res, fb, r); if (!new_primary) { @@ -216,10 +217,10 @@ int virtio_gpu_update_dmabuf(VirtIOGPU *g, old_primary =3D g->dmabuf.primary[scanout_id]; } =20 + width =3D qemu_dmabuf_get_width(&new_primary->buf); + height =3D qemu_dmabuf_get_height(&new_primary->buf); g->dmabuf.primary[scanout_id] =3D new_primary; - qemu_console_resize(scanout->con, - new_primary->buf.width, - new_primary->buf.height); + qemu_console_resize(scanout->con, width, height); dpy_gl_scanout_dmabuf(scanout->con, &new_primary->buf); =20 if (old_primary) { diff --git a/hw/vfio/display.c b/hw/vfio/display.c index 1aa440c663..4861c8161d 100644 --- a/hw/vfio/display.c +++ b/hw/vfio/display.c @@ -259,9 +259,13 @@ static VFIODMABuf *vfio_display_get_dmabuf(VFIOPCIDevi= ce *vdev, =20 static void vfio_display_free_one_dmabuf(VFIODisplay *dpy, VFIODMABuf *dma= buf) { + int fd; + QTAILQ_REMOVE(&dpy->dmabuf.bufs, dmabuf, next); + + fd =3D qemu_dmabuf_get_fd(&dmabuf->buf); dpy_gl_release_dmabuf(dpy->con, &dmabuf->buf); - close(dmabuf->buf.fd); + close(fd); g_free(dmabuf); } =20 @@ -286,6 +290,7 @@ static void vfio_display_dmabuf_update(void *opaque) VFIOPCIDevice *vdev =3D opaque; VFIODisplay *dpy =3D vdev->dpy; VFIODMABuf *primary, *cursor; + uint32_t width, height; bool free_bufs =3D false, new_cursor =3D false; =20 primary =3D vfio_display_get_dmabuf(vdev, DRM_PLANE_TYPE_PRIMARY); @@ -296,10 +301,12 @@ static void vfio_display_dmabuf_update(void *opaque) return; } =20 + width =3D qemu_dmabuf_get_width(&primary->buf); + height =3D qemu_dmabuf_get_height(&primary->buf); + if (dpy->dmabuf.primary !=3D primary) { dpy->dmabuf.primary =3D primary; - qemu_console_resize(dpy->con, - primary->buf.width, primary->buf.height); + qemu_console_resize(dpy->con, width, height); dpy_gl_scanout_dmabuf(dpy->con, &primary->buf); free_bufs =3D true; } @@ -328,7 +335,7 @@ static void vfio_display_dmabuf_update(void *opaque) cursor->pos_updates =3D 0; } =20 - dpy_gl_update(dpy->con, 0, 0, primary->buf.width, primary->buf.height); + dpy_gl_update(dpy->con, 0, 0, width, height); =20 if (free_bufs) { vfio_display_free_dmabufs(vdev); diff --git a/ui/console.c b/ui/console.c index 43226c5c14..1b2cd0c736 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1459,7 +1459,7 @@ int qemu_console_get_width(QemuConsole *con, int fall= back) } switch (con->scanout.kind) { case SCANOUT_DMABUF: - return con->scanout.dmabuf->width; + return qemu_dmabuf_get_width(con->scanout.dmabuf); case SCANOUT_TEXTURE: return con->scanout.texture.width; case SCANOUT_SURFACE: @@ -1476,7 +1476,7 @@ int qemu_console_get_height(QemuConsole *con, int fal= lback) } switch (con->scanout.kind) { case SCANOUT_DMABUF: - return con->scanout.dmabuf->height; + return qemu_dmabuf_get_height(con->scanout.dmabuf); case SCANOUT_TEXTURE: return con->scanout.texture.height; case SCANOUT_SURFACE: diff --git a/ui/dbus-console.c b/ui/dbus-console.c index 49da9ccc83..578b67f62b 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -110,11 +110,14 @@ static void dbus_gl_scanout_dmabuf(DisplayChangeListener *dcl, QemuDmaBuf *dmabuf) { + uint32_t width, height; + DBusDisplayConsole *ddc =3D container_of(dcl, DBusDisplayConsole, dcl); =20 - dbus_display_console_set_size(ddc, - dmabuf->width, - dmabuf->height); + width =3D qemu_dmabuf_get_width(dmabuf); + height =3D qemu_dmabuf_get_height(dmabuf); + + dbus_display_console_set_size(ddc, width, height); } =20 static void diff --git a/ui/dbus-listener.c b/ui/dbus-listener.c index 4a0a5d78f9..62d1e2d3f9 100644 --- a/ui/dbus-listener.c +++ b/ui/dbus-listener.c @@ -278,29 +278,33 @@ static void dbus_scanout_dmabuf(DisplayChangeListener= *dcl, DBusDisplayListener *ddl =3D container_of(dcl, DBusDisplayListener, dc= l); g_autoptr(GError) err =3D NULL; g_autoptr(GUnixFDList) fd_list =3D NULL; + int fd; + uint32_t width, height, stride, fourcc; + uint64_t modifier; + bool y0_top; =20 + fd =3D qemu_dmabuf_get_fd(dmabuf); fd_list =3D g_unix_fd_list_new(); - if (g_unix_fd_list_append(fd_list, dmabuf->fd, &err) !=3D 0) { + if (g_unix_fd_list_append(fd_list, fd, &err) !=3D 0) { error_report("Failed to setup dmabuf fdlist: %s", err->message); return; } =20 ddl_discard_pending_messages(ddl); =20 + width =3D qemu_dmabuf_get_width(dmabuf); + height =3D qemu_dmabuf_get_height(dmabuf); + stride =3D qemu_dmabuf_get_stride(dmabuf); + fourcc =3D qemu_dmabuf_get_fourcc(dmabuf); + modifier =3D qemu_dmabuf_get_modifier(dmabuf); + y0_top =3D qemu_dmabuf_get_y0_top(dmabuf); + /* FIXME: add missing x/y/w/h support */ qemu_dbus_display1_listener_call_scanout_dmabuf( - ddl->proxy, - g_variant_new_handle(0), - dmabuf->width, - dmabuf->height, - dmabuf->stride, - dmabuf->fourcc, - dmabuf->modifier, - dmabuf->y0_top, - G_DBUS_CALL_FLAGS_NONE, - -1, - fd_list, - NULL, NULL, NULL); + ddl->proxy, g_variant_new_handle(0), + width, height, stride, fourcc, modifier, + y0_top, G_DBUS_CALL_FLAGS_NONE, + -1, fd_list, NULL, NULL, NULL); } #endif /* GBM */ #endif /* OPENGL */ @@ -488,6 +492,7 @@ static void dbus_cursor_dmabuf(DisplayChangeListener *d= cl, DisplaySurface *ds; GVariant *v_data =3D NULL; egl_fb cursor_fb =3D EGL_FB_INIT; + uint32_t width, height, texture; =20 if (!dmabuf) { qemu_dbus_display1_listener_call_mouse_set( @@ -497,12 +502,16 @@ static void dbus_cursor_dmabuf(DisplayChangeListener = *dcl, } =20 egl_dmabuf_import_texture(dmabuf); - if (!dmabuf->texture) { + texture =3D qemu_dmabuf_get_texture(dmabuf); + if (!texture) { return; } - egl_fb_setup_for_tex(&cursor_fb, dmabuf->width, dmabuf->height, - dmabuf->texture, false); - ds =3D qemu_create_displaysurface(dmabuf->width, dmabuf->height); + + width =3D qemu_dmabuf_get_width(dmabuf); + height =3D qemu_dmabuf_get_height(dmabuf); + + egl_fb_setup_for_tex(&cursor_fb, width, height, texture, false); + ds =3D qemu_create_displaysurface(width, height); egl_fb_read(ds, &cursor_fb); =20 v_data =3D g_variant_new_from_data( diff --git a/ui/egl-headless.c b/ui/egl-headless.c index d5637dadb2..6187249c73 100644 --- a/ui/egl-headless.c +++ b/ui/egl-headless.c @@ -85,29 +85,38 @@ static void egl_scanout_texture(DisplayChangeListener *= dcl, static void egl_scanout_dmabuf(DisplayChangeListener *dcl, QemuDmaBuf *dmabuf) { + uint32_t width, height, texture; + egl_dmabuf_import_texture(dmabuf); - if (!dmabuf->texture) { + texture =3D qemu_dmabuf_get_texture(dmabuf); + if (!texture) { return; } =20 - egl_scanout_texture(dcl, dmabuf->texture, - false, dmabuf->width, dmabuf->height, - 0, 0, dmabuf->width, dmabuf->height, NULL); + width =3D qemu_dmabuf_get_width(dmabuf); + height =3D qemu_dmabuf_get_height(dmabuf); + + egl_scanout_texture(dcl, texture, false, width, height, 0, 0, + width, height, NULL); } =20 static void egl_cursor_dmabuf(DisplayChangeListener *dcl, QemuDmaBuf *dmabuf, bool have_hot, uint32_t hot_x, uint32_t hot_y) { + uint32_t width, height, texture; egl_dpy *edpy =3D container_of(dcl, egl_dpy, dcl); =20 if (dmabuf) { egl_dmabuf_import_texture(dmabuf); - if (!dmabuf->texture) { + texture =3D qemu_dmabuf_get_texture(dmabuf); + if (!texture) { return; } - egl_fb_setup_for_tex(&edpy->cursor_fb, dmabuf->width, dmabuf->heig= ht, - dmabuf->texture, false); + + width =3D qemu_dmabuf_get_width(dmabuf); + height =3D qemu_dmabuf_get_height(dmabuf); + egl_fb_setup_for_tex(&edpy->cursor_fb, width, height, texture, fal= se); } else { egl_fb_destroy(&edpy->cursor_fb); } diff --git a/ui/egl-helpers.c b/ui/egl-helpers.c index 3d19dbe382..3f96e63d25 100644 --- a/ui/egl-helpers.c +++ b/ui/egl-helpers.c @@ -146,10 +146,10 @@ void egl_fb_blit(egl_fb *dst, egl_fb *src, bool flip) glViewport(0, 0, dst->width, dst->height); =20 if (src->dmabuf) { - x1 =3D src->dmabuf->x; - y1 =3D src->dmabuf->y; - w =3D src->dmabuf->width; - h =3D src->dmabuf->height; + x1 =3D qemu_dmabuf_get_x(src->dmabuf); + y1 =3D qemu_dmabuf_get_y(src->dmabuf); + w =3D qemu_dmabuf_get_width(src->dmabuf); + h =3D qemu_dmabuf_get_height(src->dmabuf); } =20 w =3D (x1 + w) > src->width ? src->width - x1 : w; @@ -308,30 +308,33 @@ void egl_dmabuf_import_texture(QemuDmaBuf *dmabuf) EGLImageKHR image =3D EGL_NO_IMAGE_KHR; EGLint attrs[64]; int i =3D 0; + uint64_t modifier; + uint32_t texture =3D qemu_dmabuf_get_texture(dmabuf); =20 - if (dmabuf->texture !=3D 0) { + if (texture !=3D 0) { return; } =20 attrs[i++] =3D EGL_WIDTH; - attrs[i++] =3D dmabuf->backing_width; + attrs[i++] =3D qemu_dmabuf_get_backing_width(dmabuf); attrs[i++] =3D EGL_HEIGHT; - attrs[i++] =3D dmabuf->backing_height; + attrs[i++] =3D qemu_dmabuf_get_backing_height(dmabuf); attrs[i++] =3D EGL_LINUX_DRM_FOURCC_EXT; - attrs[i++] =3D dmabuf->fourcc; + attrs[i++] =3D qemu_dmabuf_get_fourcc(dmabuf); =20 attrs[i++] =3D EGL_DMA_BUF_PLANE0_FD_EXT; - attrs[i++] =3D dmabuf->fd; + attrs[i++] =3D qemu_dmabuf_get_fd(dmabuf); attrs[i++] =3D EGL_DMA_BUF_PLANE0_PITCH_EXT; - attrs[i++] =3D dmabuf->stride; + attrs[i++] =3D qemu_dmabuf_get_stride(dmabuf); attrs[i++] =3D EGL_DMA_BUF_PLANE0_OFFSET_EXT; attrs[i++] =3D 0; #ifdef EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT - if (dmabuf->modifier) { + modifier =3D qemu_dmabuf_get_modifier(dmabuf); + if (modifier) { attrs[i++] =3D EGL_DMA_BUF_PLANE0_MODIFIER_LO_EXT; - attrs[i++] =3D (dmabuf->modifier >> 0) & 0xffffffff; + attrs[i++] =3D (modifier >> 0) & 0xffffffff; attrs[i++] =3D EGL_DMA_BUF_PLANE0_MODIFIER_HI_EXT; - attrs[i++] =3D (dmabuf->modifier >> 32) & 0xffffffff; + attrs[i++] =3D (modifier >> 32) & 0xffffffff; } #endif attrs[i++] =3D EGL_NONE; @@ -346,7 +349,8 @@ void egl_dmabuf_import_texture(QemuDmaBuf *dmabuf) } =20 glGenTextures(1, &dmabuf->texture); - glBindTexture(GL_TEXTURE_2D, dmabuf->texture); + texture =3D qemu_dmabuf_get_texture(dmabuf); + glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); =20 @@ -356,11 +360,14 @@ void egl_dmabuf_import_texture(QemuDmaBuf *dmabuf) =20 void egl_dmabuf_release_texture(QemuDmaBuf *dmabuf) { - if (dmabuf->texture =3D=3D 0) { + uint32_t texture; + + texture =3D qemu_dmabuf_get_texture(dmabuf); + if (texture =3D=3D 0) { return; } =20 - glDeleteTextures(1, &dmabuf->texture); + glDeleteTextures(1, &texture); dmabuf->texture =3D 0; } =20 @@ -382,10 +389,12 @@ void egl_dmabuf_create_sync(QemuDmaBuf *dmabuf) =20 void egl_dmabuf_create_fence(QemuDmaBuf *dmabuf) { - if (dmabuf->sync) { + void *sync =3D qemu_dmabuf_get_sync(dmabuf); + + if (sync) { dmabuf->fence_fd =3D eglDupNativeFenceFDANDROID(qemu_egl_display, - dmabuf->sync); - eglDestroySyncKHR(qemu_egl_display, dmabuf->sync); + sync); + eglDestroySyncKHR(qemu_egl_display, sync); dmabuf->sync =3D NULL; } } diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c index 955234429d..7a45daefa1 100644 --- a/ui/gtk-egl.c +++ b/ui/gtk-egl.c @@ -70,6 +70,7 @@ void gd_egl_draw(VirtualConsole *vc) QemuDmaBuf *dmabuf =3D vc->gfx.guest_fb.dmabuf; #endif int ww, wh, ws; + int fence_fd; =20 if (!vc->gfx.gls) { return; @@ -83,7 +84,7 @@ void gd_egl_draw(VirtualConsole *vc) if (vc->gfx.scanout_mode) { #ifdef CONFIG_GBM if (dmabuf) { - if (!dmabuf->draw_submitted) { + if (!qemu_dmabuf_get_draw_submitted(dmabuf)) { return; } else { dmabuf->draw_submitted =3D false; @@ -99,8 +100,9 @@ void gd_egl_draw(VirtualConsole *vc) #ifdef CONFIG_GBM if (dmabuf) { egl_dmabuf_create_fence(dmabuf); - if (dmabuf->fence_fd >=3D 0) { - qemu_set_fd_handler(dmabuf->fence_fd, gd_hw_gl_flushed, NU= LL, vc); + fence_fd =3D qemu_dmabuf_get_fence_fd(dmabuf); + if (fence_fd >=3D 0) { + qemu_set_fd_handler(fence_fd, gd_hw_gl_flushed, NULL, vc); return; } graphic_hw_gl_block(vc->gfx.dcl.con, false); @@ -149,7 +151,8 @@ void gd_egl_refresh(DisplayChangeListener *dcl) gd_update_monitor_refresh_rate( vc, vc->window ? vc->window : vc->gfx.drawing_area); =20 - if (vc->gfx.guest_fb.dmabuf && vc->gfx.guest_fb.dmabuf->draw_submitted= ) { + if (vc->gfx.guest_fb.dmabuf && + qemu_dmabuf_get_draw_submitted(vc->gfx.guest_fb.dmabuf)) { return; } =20 @@ -264,22 +267,30 @@ void gd_egl_scanout_dmabuf(DisplayChangeListener *dcl, { #ifdef CONFIG_GBM VirtualConsole *vc =3D container_of(dcl, VirtualConsole, gfx.dcl); + uint32_t x, y, width, height, backing_width, backing_height, texture; + bool y0_top; =20 eglMakeCurrent(qemu_egl_display, vc->gfx.esurface, vc->gfx.esurface, vc->gfx.ectx); =20 egl_dmabuf_import_texture(dmabuf); - if (!dmabuf->texture) { + texture =3D qemu_dmabuf_get_texture(dmabuf); + if (!texture) { return; } =20 - gd_egl_scanout_texture(dcl, dmabuf->texture, - dmabuf->y0_top, - dmabuf->backing_width, dmabuf->backing_height, - dmabuf->x, dmabuf->y, dmabuf->width, - dmabuf->height, NULL); + x =3D qemu_dmabuf_get_x(dmabuf); + y =3D qemu_dmabuf_get_y(dmabuf); + width =3D qemu_dmabuf_get_width(dmabuf); + height =3D qemu_dmabuf_get_height(dmabuf); + backing_width =3D qemu_dmabuf_get_backing_width(dmabuf); + backing_height =3D qemu_dmabuf_get_backing_height(dmabuf); + y0_top =3D qemu_dmabuf_get_y0_top(dmabuf); =20 - if (dmabuf->allow_fences) { + gd_egl_scanout_texture(dcl, texture, y0_top, backing_width, backing_he= ight, + x, y, width, height, NULL); + + if (qemu_dmabuf_get_allow_fences(dmabuf)) { vc->gfx.guest_fb.dmabuf =3D dmabuf; } #endif @@ -291,15 +302,19 @@ void gd_egl_cursor_dmabuf(DisplayChangeListener *dcl, { #ifdef CONFIG_GBM VirtualConsole *vc =3D container_of(dcl, VirtualConsole, gfx.dcl); + uint32_t backing_width, backing_height, texture; =20 if (dmabuf) { egl_dmabuf_import_texture(dmabuf); - if (!dmabuf->texture) { + texture =3D qemu_dmabuf_get_texture(dmabuf); + if (!texture) { return; } - egl_fb_setup_for_tex(&vc->gfx.cursor_fb, - dmabuf->backing_width, dmabuf->backing_height, - dmabuf->texture, false); + + backing_width =3D qemu_dmabuf_get_backing_width(dmabuf); + backing_height =3D qemu_dmabuf_get_backing_height(dmabuf); + egl_fb_setup_for_tex(&vc->gfx.cursor_fb, backing_width, backing_he= ight, + texture, false); } else { egl_fb_destroy(&vc->gfx.cursor_fb); } @@ -363,7 +378,8 @@ void gd_egl_flush(DisplayChangeListener *dcl, VirtualConsole *vc =3D container_of(dcl, VirtualConsole, gfx.dcl); GtkWidget *area =3D vc->gfx.drawing_area; =20 - if (vc->gfx.guest_fb.dmabuf && !vc->gfx.guest_fb.dmabuf->draw_submitte= d) { + if (vc->gfx.guest_fb.dmabuf && + !qemu_dmabuf_get_draw_submitted(vc->gfx.guest_fb.dmabuf)) { graphic_hw_gl_block(vc->gfx.dcl.con, true); vc->gfx.guest_fb.dmabuf->draw_submitted =3D true; gtk_egl_set_scanout_mode(vc, true); diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c index 7fffd0544e..2d70280803 100644 --- a/ui/gtk-gl-area.c +++ b/ui/gtk-gl-area.c @@ -60,7 +60,7 @@ void gd_gl_area_draw(VirtualConsole *vc) =20 #ifdef CONFIG_GBM if (dmabuf) { - if (!dmabuf->draw_submitted) { + if (!qemu_dmabuf_get_draw_submitted(dmabuf)) { return; } else { dmabuf->draw_submitted =3D false; @@ -85,9 +85,11 @@ void gd_gl_area_draw(VirtualConsole *vc) glFlush(); #ifdef CONFIG_GBM if (dmabuf) { + int fence_fd; egl_dmabuf_create_fence(dmabuf); - if (dmabuf->fence_fd >=3D 0) { - qemu_set_fd_handler(dmabuf->fence_fd, gd_hw_gl_flushed, NU= LL, vc); + fence_fd =3D qemu_dmabuf_get_fence_fd(dmabuf); + if (fence_fd >=3D 0) { + qemu_set_fd_handler(fence_fd, gd_hw_gl_flushed, NULL, vc); return; } graphic_hw_gl_block(vc->gfx.dcl.con, false); @@ -125,7 +127,8 @@ void gd_gl_area_refresh(DisplayChangeListener *dcl) =20 gd_update_monitor_refresh_rate(vc, vc->window ? vc->window : vc->gfx.d= rawing_area); =20 - if (vc->gfx.guest_fb.dmabuf && vc->gfx.guest_fb.dmabuf->draw_submitted= ) { + if (vc->gfx.guest_fb.dmabuf && + qemu_dmabuf_get_draw_submitted(vc->gfx.guest_fb.dmabuf)) { return; } =20 @@ -285,7 +288,8 @@ void gd_gl_area_scanout_flush(DisplayChangeListener *dc= l, { VirtualConsole *vc =3D container_of(dcl, VirtualConsole, gfx.dcl); =20 - if (vc->gfx.guest_fb.dmabuf && !vc->gfx.guest_fb.dmabuf->draw_submitte= d) { + if (vc->gfx.guest_fb.dmabuf && + !qemu_dmabuf_get_draw_submitted(vc->gfx.guest_fb.dmabuf)) { graphic_hw_gl_block(vc->gfx.dcl.con, true); vc->gfx.guest_fb.dmabuf->draw_submitted =3D true; gtk_gl_area_set_scanout_mode(vc, true); @@ -298,20 +302,29 @@ void gd_gl_area_scanout_dmabuf(DisplayChangeListener = *dcl, { #ifdef CONFIG_GBM VirtualConsole *vc =3D container_of(dcl, VirtualConsole, gfx.dcl); + uint32_t x, y, width, height, backing_width, backing_height, texture; + bool y0_top; =20 gtk_gl_area_make_current(GTK_GL_AREA(vc->gfx.drawing_area)); egl_dmabuf_import_texture(dmabuf); - if (!dmabuf->texture) { + texture =3D qemu_dmabuf_get_texture(dmabuf); + if (!texture) { return; } =20 - gd_gl_area_scanout_texture(dcl, dmabuf->texture, - dmabuf->y0_top, - dmabuf->backing_width, dmabuf->backing_heig= ht, - dmabuf->x, dmabuf->y, dmabuf->width, - dmabuf->height, NULL); + x =3D qemu_dmabuf_get_x(dmabuf); + y =3D qemu_dmabuf_get_y(dmabuf); + width =3D qemu_dmabuf_get_width(dmabuf); + height =3D qemu_dmabuf_get_height(dmabuf); + backing_width =3D qemu_dmabuf_get_backing_width(dmabuf); + backing_height =3D qemu_dmabuf_get_backing_height(dmabuf); + y0_top =3D qemu_dmabuf_get_y0_top(dmabuf); =20 - if (dmabuf->allow_fences) { + gd_gl_area_scanout_texture(dcl, texture, y0_top, + backing_width, backing_height, + x, y, width, height, NULL); + + if (qemu_dmabuf_get_allow_fences(dmabuf)) { vc->gfx.guest_fb.dmabuf =3D dmabuf; } #endif diff --git a/ui/gtk.c b/ui/gtk.c index 7819a86321..237c913b26 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -596,10 +596,12 @@ void gd_hw_gl_flushed(void *vcon) { VirtualConsole *vc =3D vcon; QemuDmaBuf *dmabuf =3D vc->gfx.guest_fb.dmabuf; + int fence_fd; =20 if (dmabuf->fence_fd >=3D 0) { - qemu_set_fd_handler(dmabuf->fence_fd, NULL, NULL, NULL); - close(dmabuf->fence_fd); + fence_fd =3D qemu_dmabuf_get_fence_fd(dmabuf); + qemu_set_fd_handler(fence_fd, NULL, NULL, NULL); + close(fence_fd); dmabuf->fence_fd =3D -1; graphic_hw_gl_block(vc->gfx.dcl.con, false); } diff --git a/ui/spice-display.c b/ui/spice-display.c index 6eb98a5a5c..5d607cb830 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -976,6 +976,7 @@ static void qemu_spice_gl_cursor_dmabuf(DisplayChangeLi= stener *dcl, uint32_t hot_x, uint32_t hot_y) { SimpleSpiceDisplay *ssd =3D container_of(dcl, SimpleSpiceDisplay, dcl); + uint32_t width, height, texture; =20 ssd->have_hot =3D have_hot; ssd->hot_x =3D hot_x; @@ -984,11 +985,13 @@ static void qemu_spice_gl_cursor_dmabuf(DisplayChange= Listener *dcl, trace_qemu_spice_gl_cursor(ssd->qxl.id, dmabuf !=3D NULL, have_hot); if (dmabuf) { egl_dmabuf_import_texture(dmabuf); - if (!dmabuf->texture) { + texture =3D qemu_dmabuf_get_texture(dmabuf); + if (!texture) { return; } - egl_fb_setup_for_tex(&ssd->cursor_fb, dmabuf->width, dmabuf->heigh= t, - dmabuf->texture, false); + width =3D qemu_dmabuf_get_width(dmabuf); + height =3D qemu_dmabuf_get_height(dmabuf); + egl_fb_setup_for_tex(&ssd->cursor_fb, width, height, texture, fals= e); } else { egl_fb_destroy(&ssd->cursor_fb); } @@ -1026,6 +1029,7 @@ static void qemu_spice_gl_update(DisplayChangeListene= r *dcl, bool y_0_top =3D false; /* FIXME */ uint64_t cookie; int fd; + uint32_t width, height, texture; =20 if (!ssd->have_scanout) { return; @@ -1042,41 +1046,45 @@ static void qemu_spice_gl_update(DisplayChangeListe= ner *dcl, =20 if (ssd->guest_dmabuf_refresh) { QemuDmaBuf *dmabuf =3D ssd->guest_dmabuf; + width =3D qemu_dmabuf_get_width(dmabuf); + height =3D qemu_dmabuf_get_height(dmabuf); + if (render_cursor) { egl_dmabuf_import_texture(dmabuf); - if (!dmabuf->texture) { + texture =3D qemu_dmabuf_get_texture(dmabuf); + if (!texture) { return; } =20 /* source framebuffer */ - egl_fb_setup_for_tex(&ssd->guest_fb, - dmabuf->width, dmabuf->height, - dmabuf->texture, false); + egl_fb_setup_for_tex(&ssd->guest_fb, width, height, + texture, false); =20 /* dest framebuffer */ - if (ssd->blit_fb.width !=3D dmabuf->width || - ssd->blit_fb.height !=3D dmabuf->height) { - trace_qemu_spice_gl_render_dmabuf(ssd->qxl.id, dmabuf->wid= th, - dmabuf->height); + if (ssd->blit_fb.width !=3D width || + ssd->blit_fb.height !=3D height) { + trace_qemu_spice_gl_render_dmabuf(ssd->qxl.id, width, + height); egl_fb_destroy(&ssd->blit_fb); egl_fb_setup_new_tex(&ssd->blit_fb, - dmabuf->width, dmabuf->height); + width, height); fd =3D egl_get_fd_for_texture(ssd->blit_fb.texture, &stride, &fourcc, NULL); - spice_qxl_gl_scanout(&ssd->qxl, fd, - dmabuf->width, dmabuf->height, + spice_qxl_gl_scanout(&ssd->qxl, fd, width, height, stride, fourcc, false); } } else { - trace_qemu_spice_gl_forward_dmabuf(ssd->qxl.id, - dmabuf->width, dmabuf->heig= ht); + stride =3D qemu_dmabuf_get_stride(dmabuf); + fourcc =3D qemu_dmabuf_get_fourcc(dmabuf); + y_0_top =3D qemu_dmabuf_get_y0_top(dmabuf); + fd =3D qemu_dmabuf_get_fd(dmabuf); + + trace_qemu_spice_gl_forward_dmabuf(ssd->qxl.id, width, height); /* note: spice server will close the fd, so hand over a dup */ - spice_qxl_gl_scanout(&ssd->qxl, dup(dmabuf->fd), - dmabuf->width, dmabuf->height, - dmabuf->stride, dmabuf->fourcc, - dmabuf->y0_top); + spice_qxl_gl_scanout(&ssd->qxl, dup(fd), width, height, + stride, fourcc, y_0_top); } - qemu_spice_gl_monitor_config(ssd, 0, 0, dmabuf->width, dmabuf->hei= ght); + qemu_spice_gl_monitor_config(ssd, 0, 0, width, height); ssd->guest_dmabuf_refresh =3D false; } =20 --=20 2.34.1 From nobody Sat May 18 11:46:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1713553529; cv=none; d=zohomail.com; s=zohoarc; b=oBQD/9L1ELZ7IM3RhJefmOYsxQYtapjtMZsn4OQ4y4V8xx44kZxW1FPNAolG5M57PE70tWiCr9cYm1HOiWxR90PiSjrglu8pfGTL/nGcGWOtAz6+KvpiLYKzAS5NOVNwk5q2uvABgGxACDJBBXZ1QCCf0+VWbJuhMn5AUcuSVRU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1713553529; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=w+TlZj9wCRV275ErQRyboYb0iy9yxxVSSRsI+45Zazs=; b=avMHbK5NOP+sIQ9Xcs+/On9vHI7MFWBDdvrvsxdL6lwYuCslRYzT0vv0sUlEWkXHPZfieXkfcHAMwAp1ZxdnjuStRKCPRxapRpMPr1FFDdg8WKLCIz8yMSQDQfqHg0PUDAfmuE/mnWi6rzWsNicNQsUx9Awgh3GEO9OJ7sF2/G8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 171355352987543.335494334712735; Fri, 19 Apr 2024 12:05:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rxtX8-0005vI-1V; Fri, 19 Apr 2024 15:04:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtX1-0005tJ-UO for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:22 -0400 Received: from mgamail.intel.com ([192.198.163.10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtWz-0004ET-UE for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:19 -0400 Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Apr 2024 12:04:08 -0700 Received: from dongwonk-z390-aorus-ultra.fm.intel.com ([10.105.129.124]) by orviesa002.jf.intel.com with ESMTP; 19 Apr 2024 12:04:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713553458; x=1745089458; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4Mu1YpsAIPjq/dbYK/pcOXYqsZQcKtqf2Ob/6M7rVpg=; b=WoV/z0/FqDSesDPAd8bskQqVNPPUSmE7NzVPG1JuRPXPRcN5AF6laEbd oINjW2suYWBgi7VlPl8002rYs8QMy3eKnDpXu5MJl1UKnQvZr1jV/5nGw 8AemeexhA6MFeHTMuFAmHdwIVLxcWqUABxgb2BxftwTpbPpTP+LCdHNsd BAyWx7W6bVC1WORbl7HIVBuoY5o7htERay0DKY3OWauNaj+zGjNSVNELy t4KgNRlZ2YCh2aGIghf4Nf9Ci/zi9BD9NYu99W2MOzNLHVKSyCAXxwmgP HB4ycuXiZDiRYp+nuizo3Z74KV94S7H6rTSqU9rPMH4Xgwhia2XT6eiab Q==; X-CSE-ConnectionGUID: 0P2VV2DJTr6Hpzbgfei/mA== X-CSE-MsgGUID: JDFSjoDZQEGi5LFiFhS11w== X-IronPort-AV: E=McAfee;i="6600,9927,11049"; a="20564996" X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="20564996" X-CSE-ConnectionGUID: XtcNlRzDTDK++g2DIafhYg== X-CSE-MsgGUID: ADEU9BLNRPGG0QCqFIDdDw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="54346789" From: dongwon.kim@intel.com To: qemu-devel@nongnu.org Cc: marcandre.lureau@redhat.com, berrange@redhat.com, philmd@linaro.org Subject: [PATCH v8 4/6] ui/console: Use qemu_dmabuf_set_..() helpers instead Date: Fri, 19 Apr 2024 11:59:50 -0700 Message-Id: <20240419185952.991930-5-dongwon.kim@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240419185952.991930-1-dongwon.kim@intel.com> References: <20240419185952.991930-1-dongwon.kim@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.198.163.10; envelope-from=dongwon.kim@intel.com; helo=mgamail.intel.com X-Spam_score_int: -66 X-Spam_score: -6.7 X-Spam_bar: ------ X-Spam_report: (-6.7 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.313, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1713553531264100005 From: Dongwon Kim This commit updates all occurrences where these fields were set directly have been updated to utilize helper functions. v7: removed prefix, "dpy_gl_" from all helpers v8: Introduction of helpers was removed as those were already added by the previous commit Suggested-by: Marc-Andr=C3=A9 Lureau Cc: Philippe Mathieu-Daud=C3=A9 Cc: Daniel P. Berrang=C3=A9 Cc: Vivek Kasireddy Signed-off-by: Dongwon Kim --- ui/egl-helpers.c | 16 +++++++++------- ui/gtk-egl.c | 4 ++-- ui/gtk-gl-area.c | 4 ++-- ui/gtk.c | 6 +++--- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/ui/egl-helpers.c b/ui/egl-helpers.c index 3f96e63d25..99b2ebbe23 100644 --- a/ui/egl-helpers.c +++ b/ui/egl-helpers.c @@ -348,8 +348,8 @@ void egl_dmabuf_import_texture(QemuDmaBuf *dmabuf) return; } =20 - glGenTextures(1, &dmabuf->texture); - texture =3D qemu_dmabuf_get_texture(dmabuf); + glGenTextures(1, &texture); + qemu_dmabuf_set_texture(dmabuf, texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); @@ -368,7 +368,7 @@ void egl_dmabuf_release_texture(QemuDmaBuf *dmabuf) } =20 glDeleteTextures(1, &texture); - dmabuf->texture =3D 0; + qemu_dmabuf_set_texture(dmabuf, 0); } =20 void egl_dmabuf_create_sync(QemuDmaBuf *dmabuf) @@ -382,7 +382,7 @@ void egl_dmabuf_create_sync(QemuDmaBuf *dmabuf) sync =3D eglCreateSyncKHR(qemu_egl_display, EGL_SYNC_NATIVE_FENCE_ANDROID, NULL); if (sync !=3D EGL_NO_SYNC_KHR) { - dmabuf->sync =3D sync; + qemu_dmabuf_set_sync(dmabuf, sync); } } } @@ -390,12 +390,14 @@ void egl_dmabuf_create_sync(QemuDmaBuf *dmabuf) void egl_dmabuf_create_fence(QemuDmaBuf *dmabuf) { void *sync =3D qemu_dmabuf_get_sync(dmabuf); + int fence_fd; =20 if (sync) { - dmabuf->fence_fd =3D eglDupNativeFenceFDANDROID(qemu_egl_display, - sync); + fence_fd =3D eglDupNativeFenceFDANDROID(qemu_egl_display, + sync); + qemu_dmabuf_set_fence_fd(dmabuf, fence_fd); eglDestroySyncKHR(qemu_egl_display, sync); - dmabuf->sync =3D NULL; + qemu_dmabuf_set_sync(dmabuf, NULL); } } =20 diff --git a/ui/gtk-egl.c b/ui/gtk-egl.c index 7a45daefa1..ec0bf45482 100644 --- a/ui/gtk-egl.c +++ b/ui/gtk-egl.c @@ -87,7 +87,7 @@ void gd_egl_draw(VirtualConsole *vc) if (!qemu_dmabuf_get_draw_submitted(dmabuf)) { return; } else { - dmabuf->draw_submitted =3D false; + qemu_dmabuf_set_draw_submitted(dmabuf, false); } } #endif @@ -381,7 +381,7 @@ void gd_egl_flush(DisplayChangeListener *dcl, if (vc->gfx.guest_fb.dmabuf && !qemu_dmabuf_get_draw_submitted(vc->gfx.guest_fb.dmabuf)) { graphic_hw_gl_block(vc->gfx.dcl.con, true); - vc->gfx.guest_fb.dmabuf->draw_submitted =3D true; + qemu_dmabuf_set_draw_submitted(vc->gfx.guest_fb.dmabuf, true); gtk_egl_set_scanout_mode(vc, true); gtk_widget_queue_draw_area(area, x, y, w, h); return; diff --git a/ui/gtk-gl-area.c b/ui/gtk-gl-area.c index 2d70280803..9a3f3d0d71 100644 --- a/ui/gtk-gl-area.c +++ b/ui/gtk-gl-area.c @@ -63,7 +63,7 @@ void gd_gl_area_draw(VirtualConsole *vc) if (!qemu_dmabuf_get_draw_submitted(dmabuf)) { return; } else { - dmabuf->draw_submitted =3D false; + qemu_dmabuf_set_draw_submitted(dmabuf, false); } } #endif @@ -291,7 +291,7 @@ void gd_gl_area_scanout_flush(DisplayChangeListener *dc= l, if (vc->gfx.guest_fb.dmabuf && !qemu_dmabuf_get_draw_submitted(vc->gfx.guest_fb.dmabuf)) { graphic_hw_gl_block(vc->gfx.dcl.con, true); - vc->gfx.guest_fb.dmabuf->draw_submitted =3D true; + qemu_dmabuf_set_draw_submitted(vc->gfx.guest_fb.dmabuf, true); gtk_gl_area_set_scanout_mode(vc, true); } gtk_gl_area_queue_render(GTK_GL_AREA(vc->gfx.drawing_area)); diff --git a/ui/gtk.c b/ui/gtk.c index 237c913b26..3a6832eb1b 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -598,11 +598,11 @@ void gd_hw_gl_flushed(void *vcon) QemuDmaBuf *dmabuf =3D vc->gfx.guest_fb.dmabuf; int fence_fd; =20 - if (dmabuf->fence_fd >=3D 0) { - fence_fd =3D qemu_dmabuf_get_fence_fd(dmabuf); + fence_fd =3D qemu_dmabuf_get_fence_fd(dmabuf); + if (fence_fd >=3D 0) { qemu_set_fd_handler(fence_fd, NULL, NULL, NULL); close(fence_fd); - dmabuf->fence_fd =3D -1; + qemu_dmabuf_set_fence_fd(dmabuf, -1); graphic_hw_gl_block(vc->gfx.dcl.con, false); } } --=20 2.34.1 From nobody Sat May 18 11:46:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1713553530; cv=none; d=zohomail.com; s=zohoarc; b=n4h376f4600bXVXxUFXNOK4qKmhfi1fM1fkn11+NZYVrFEE9pm8X0FpU2RcfUDv3+MTexeWr7d0jCFvY6e4ULPtQ3O9j2TiLpY/Pe8wvz4gxVt9SbhJoJfOjTqNUW3NgQKyjaE/e1UFTK3fs2+4xJg26Nukai7mbUBBICI+xlWY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1713553530; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=gg7b3k5U35zd8o1Y4/Ikxg3PppczhmpRKWjFCDdBaHE=; b=WbrKGMCWLJhREXDxaLaxCti4Vq3tZQdcLS/ndVVUEpK2xpzZKFT+0kz8A4lwFXbxpNw8sZ0Uw6xHxDNYqTBhmYNo5+9Tb3YU/WOXMS8r5nEJp54pQc3lAnvYJZnBY+aGK2m+qy8G4ja8iY0JgTXmaKqVp28oDMOy07rG6sUCsDw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1713553530202828.6865829153908; Fri, 19 Apr 2024 12:05:30 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rxtX7-0005uf-CY; Fri, 19 Apr 2024 15:04:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtX4-0005tO-AQ for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:22 -0400 Received: from mgamail.intel.com ([192.198.163.10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtX0-0004E7-FI for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:21 -0400 Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Apr 2024 12:04:08 -0700 Received: from dongwonk-z390-aorus-ultra.fm.intel.com ([10.105.129.124]) by orviesa002.jf.intel.com with ESMTP; 19 Apr 2024 12:04:08 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713553458; x=1745089458; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=J5wMjdZAV9y5LkDR9fEtCnh+qRnNfQQ5G1PJk9EMPR4=; b=F/jbB49SM1/kgbukia/Bq3EfGSMKXT/Fhyjtx8cTQrq4C5jqIVXelkgY fYR6DjiLfuarEz20EhwW50k+VfBk6xY/GTAmC1/Ga0VF7T34dZ/YFwPBP UY73o9EPkpI5Y4jq7R8e895j8iYJUiqJVtflGSNMGrVhR21Kul98uuemU ezC200WeEYEyCMSvdkI5fs+x+d54yAsq+MlqvLThz/0RrEN5hNPOww0bP irJmC4yywxnflOHTp7HZyr1oUr2M6E83HLnHGDMCwRETjDyQj0l5kYSim I9Lm74auM78zb0J4ZyCwVma7AhdHo4vnWOUGVAMU6FjGknc5m149fT1t8 A==; X-CSE-ConnectionGUID: QQAFrbjNR9CNS/I2m9qOdg== X-CSE-MsgGUID: 20igW323S2iJDxTMdzGyRg== X-IronPort-AV: E=McAfee;i="6600,9927,11049"; a="20565000" X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="20565000" X-CSE-ConnectionGUID: YJX17AxqTBOJbIokJekROQ== X-CSE-MsgGUID: re7z3vFzSPi7GE8SOY+hfA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="54346790" From: dongwon.kim@intel.com To: qemu-devel@nongnu.org Cc: marcandre.lureau@redhat.com, berrange@redhat.com, philmd@linaro.org Subject: [PATCH v8 5/6] ui/console: Use qemu_dmabuf_new() and free() helpers instead Date: Fri, 19 Apr 2024 11:59:51 -0700 Message-Id: <20240419185952.991930-6-dongwon.kim@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240419185952.991930-1-dongwon.kim@intel.com> References: <20240419185952.991930-1-dongwon.kim@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.198.163.10; envelope-from=dongwon.kim@intel.com; helo=mgamail.intel.com X-Spam_score_int: -66 X-Spam_score: -6.7 X-Spam_bar: ------ X-Spam_report: (-6.7 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.313, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1713553531316100010 From: Dongwon Kim This commit introduces utility functions for the creation and deallocation of QemuDmaBuf instances. Additionally, it updates all relevant sections of the codebase to utilize these new utility functions. v7: remove prefix, "dpy_gl_" from all helpers qemu_dmabuf_free() returns without doing anything if input is null (Daniel P. Berrang=C3=A9 ) call G_DEFINE_AUTOPTR_CLEANUP_FUNC for qemu_dmabuf_free() (Daniel P. Berrang=C3=A9 ) v8: Introduction of helpers was removed as those were already added by the previous commit Suggested-by: Marc-Andr=C3=A9 Lureau Cc: Philippe Mathieu-Daud=C3=A9 Cc: Daniel P. Berrang=C3=A9 Cc: Vivek Kasireddy Signed-off-by: Dongwon Kim --- include/hw/vfio/vfio-common.h | 2 +- include/hw/virtio/virtio-gpu.h | 4 ++-- hw/display/vhost-user-gpu.c | 32 ++++++++++++++++++-------------- hw/display/virtio-gpu-udmabuf.c | 24 +++++++++--------------- hw/vfio/display.c | 26 ++++++++++++-------------- ui/dbus-listener.c | 28 ++++++++++++---------------- 6 files changed, 54 insertions(+), 62 deletions(-) diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index b9da6c08ef..d66e27db02 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -148,7 +148,7 @@ typedef struct VFIOGroup { } VFIOGroup; =20 typedef struct VFIODMABuf { - QemuDmaBuf buf; + QemuDmaBuf *buf; uint32_t pos_x, pos_y, pos_updates; uint32_t hot_x, hot_y, hot_updates; int dmabuf_id; diff --git a/include/hw/virtio/virtio-gpu.h b/include/hw/virtio/virtio-gpu.h index ed44cdad6b..56d6e821bf 100644 --- a/include/hw/virtio/virtio-gpu.h +++ b/include/hw/virtio/virtio-gpu.h @@ -169,7 +169,7 @@ struct VirtIOGPUBaseClass { DEFINE_PROP_UINT32("yres", _state, _conf.yres, 800) =20 typedef struct VGPUDMABuf { - QemuDmaBuf buf; + QemuDmaBuf *buf; uint32_t scanout_id; QTAILQ_ENTRY(VGPUDMABuf) next; } VGPUDMABuf; @@ -238,7 +238,7 @@ struct VhostUserGPU { VhostUserBackend *vhost; int vhost_gpu_fd; /* closed by the chardev */ CharBackend vhost_chr; - QemuDmaBuf dmabuf[VIRTIO_GPU_MAX_SCANOUTS]; + QemuDmaBuf *dmabuf[VIRTIO_GPU_MAX_SCANOUTS]; bool backend_blocked; }; =20 diff --git a/hw/display/vhost-user-gpu.c b/hw/display/vhost-user-gpu.c index ea9a6c5d10..7f8cf38647 100644 --- a/hw/display/vhost-user-gpu.c +++ b/hw/display/vhost-user-gpu.c @@ -250,6 +250,7 @@ vhost_user_gpu_handle_display(VhostUserGPU *g, VhostUse= rGpuMsg *msg) VhostUserGpuDMABUFScanout *m =3D &msg->payload.dmabuf_scanout; int fd =3D qemu_chr_fe_get_msgfd(&g->vhost_chr); int old_fd; + uint64_t modifier =3D 0; QemuDmaBuf *dmabuf; =20 if (m->scanout_id >=3D g->parent_obj.conf.max_outputs) { @@ -262,31 +263,34 @@ vhost_user_gpu_handle_display(VhostUserGPU *g, VhostU= serGpuMsg *msg) =20 g->parent_obj.enable =3D 1; con =3D g->parent_obj.scanout[m->scanout_id].con; - dmabuf =3D &g->dmabuf[m->scanout_id]; - old_fd =3D qemu_dmabuf_get_fd(dmabuf); - if (old_fd >=3D 0) { - close(old_fd); - dmabuf->fd =3D -1; + dmabuf =3D g->dmabuf[m->scanout_id]; + if (dmabuf) { + old_fd =3D qemu_dmabuf_get_fd(dmabuf); + if (old_fd >=3D 0) { + close(old_fd); + qemu_dmabuf_set_fd(dmabuf, -1); + } } dpy_gl_release_dmabuf(con, dmabuf); + g_clear_pointer(&dmabuf, qemu_dmabuf_free); if (fd =3D=3D -1) { dpy_gl_scanout_disable(con); break; } - *dmabuf =3D (QemuDmaBuf) { - .fd =3D fd, - .width =3D m->fd_width, - .height =3D m->fd_height, - .stride =3D m->fd_stride, - .fourcc =3D m->fd_drm_fourcc, - .y0_top =3D m->fd_flags & VIRTIO_GPU_RESOURCE_FLAG_Y_0_TOP, - }; + if (msg->request =3D=3D VHOST_USER_GPU_DMABUF_SCANOUT2) { VhostUserGpuDMABUFScanout2 *m2 =3D &msg->payload.dmabuf_scanou= t2; - dmabuf->modifier =3D m2->modifier; + modifier =3D m2->modifier; } =20 + dmabuf =3D qemu_dmabuf_new(m->fd_width, m->fd_height, + m->fd_stride, 0, 0, 0, 0, + m->fd_drm_fourcc, modifier, + fd, false, m->fd_flags & + VIRTIO_GPU_RESOURCE_FLAG_Y_0_TOP); + dpy_gl_scanout_dmabuf(con, dmabuf); + g->dmabuf[m->scanout_id] =3D dmabuf; break; } case VHOST_USER_GPU_DMABUF_UPDATE: { diff --git a/hw/display/virtio-gpu-udmabuf.c b/hw/display/virtio-gpu-udmabu= f.c index c90eba281e..edd7886cf2 100644 --- a/hw/display/virtio-gpu-udmabuf.c +++ b/hw/display/virtio-gpu-udmabuf.c @@ -162,7 +162,8 @@ static void virtio_gpu_free_dmabuf(VirtIOGPU *g, VGPUDM= ABuf *dmabuf) struct virtio_gpu_scanout *scanout; =20 scanout =3D &g->parent_obj.scanout[dmabuf->scanout_id]; - dpy_gl_release_dmabuf(scanout->con, &dmabuf->buf); + dpy_gl_release_dmabuf(scanout->con, dmabuf->buf); + g_clear_pointer(&dmabuf->buf, qemu_dmabuf_free); QTAILQ_REMOVE(&g->dmabuf.bufs, dmabuf, next); g_free(dmabuf); } @@ -181,17 +182,10 @@ static VGPUDMABuf } =20 dmabuf =3D g_new0(VGPUDMABuf, 1); - dmabuf->buf.width =3D r->width; - dmabuf->buf.height =3D r->height; - dmabuf->buf.stride =3D fb->stride; - dmabuf->buf.x =3D r->x; - dmabuf->buf.y =3D r->y; - dmabuf->buf.backing_width =3D fb->width; - dmabuf->buf.backing_height =3D fb->height; - dmabuf->buf.fourcc =3D qemu_pixman_to_drm_format(fb->format); - dmabuf->buf.fd =3D res->dmabuf_fd; - dmabuf->buf.allow_fences =3D true; - dmabuf->buf.draw_submitted =3D false; + dmabuf->buf =3D qemu_dmabuf_new(r->width, r->height, fb->stride, + r->x, r->y, fb->width, fb->height, + qemu_pixman_to_drm_format(fb->for= mat), + 0, res->dmabuf_fd, false, 0); dmabuf->scanout_id =3D scanout_id; QTAILQ_INSERT_HEAD(&g->dmabuf.bufs, dmabuf, next); =20 @@ -217,11 +211,11 @@ int virtio_gpu_update_dmabuf(VirtIOGPU *g, old_primary =3D g->dmabuf.primary[scanout_id]; } =20 - width =3D qemu_dmabuf_get_width(&new_primary->buf); - height =3D qemu_dmabuf_get_height(&new_primary->buf); + width =3D qemu_dmabuf_get_width(new_primary->buf); + height =3D qemu_dmabuf_get_height(new_primary->buf); g->dmabuf.primary[scanout_id] =3D new_primary; qemu_console_resize(scanout->con, width, height); - dpy_gl_scanout_dmabuf(scanout->con, &new_primary->buf); + dpy_gl_scanout_dmabuf(scanout->con, new_primary->buf); =20 if (old_primary) { virtio_gpu_free_dmabuf(g, old_primary); diff --git a/hw/vfio/display.c b/hw/vfio/display.c index 4861c8161d..ad15b383f5 100644 --- a/hw/vfio/display.c +++ b/hw/vfio/display.c @@ -241,14 +241,11 @@ static VFIODMABuf *vfio_display_get_dmabuf(VFIOPCIDev= ice *vdev, =20 dmabuf =3D g_new0(VFIODMABuf, 1); dmabuf->dmabuf_id =3D plane.dmabuf_id; - dmabuf->buf.width =3D plane.width; - dmabuf->buf.height =3D plane.height; - dmabuf->buf.backing_width =3D plane.width; - dmabuf->buf.backing_height =3D plane.height; - dmabuf->buf.stride =3D plane.stride; - dmabuf->buf.fourcc =3D plane.drm_format; - dmabuf->buf.modifier =3D plane.drm_format_mod; - dmabuf->buf.fd =3D fd; + dmabuf->buf =3D qemu_dmabuf_new(plane.width, plane.height, + plane.stride, 0, 0, plane.width, + plane.height, plane.drm_format, + plane.drm_format_mod, fd, false, = 0); + if (plane_type =3D=3D DRM_PLANE_TYPE_CURSOR) { vfio_display_update_cursor(dmabuf, &plane); } @@ -263,8 +260,9 @@ static void vfio_display_free_one_dmabuf(VFIODisplay *d= py, VFIODMABuf *dmabuf) =20 QTAILQ_REMOVE(&dpy->dmabuf.bufs, dmabuf, next); =20 - fd =3D qemu_dmabuf_get_fd(&dmabuf->buf); - dpy_gl_release_dmabuf(dpy->con, &dmabuf->buf); + fd =3D qemu_dmabuf_get_fd(dmabuf->buf); + dpy_gl_release_dmabuf(dpy->con, dmabuf->buf); + g_clear_pointer(&dmabuf->buf, qemu_dmabuf_free); close(fd); g_free(dmabuf); } @@ -301,13 +299,13 @@ static void vfio_display_dmabuf_update(void *opaque) return; } =20 - width =3D qemu_dmabuf_get_width(&primary->buf); - height =3D qemu_dmabuf_get_height(&primary->buf); + width =3D qemu_dmabuf_get_width(primary->buf); + height =3D qemu_dmabuf_get_height(primary->buf); =20 if (dpy->dmabuf.primary !=3D primary) { dpy->dmabuf.primary =3D primary; qemu_console_resize(dpy->con, width, height); - dpy_gl_scanout_dmabuf(dpy->con, &primary->buf); + dpy_gl_scanout_dmabuf(dpy->con, primary->buf); free_bufs =3D true; } =20 @@ -321,7 +319,7 @@ static void vfio_display_dmabuf_update(void *opaque) if (cursor && (new_cursor || cursor->hot_updates)) { bool have_hot =3D (cursor->hot_x !=3D 0xffffffff && cursor->hot_y !=3D 0xffffffff); - dpy_gl_cursor_dmabuf(dpy->con, &cursor->buf, have_hot, + dpy_gl_cursor_dmabuf(dpy->con, cursor->buf, have_hot, cursor->hot_x, cursor->hot_y); cursor->hot_updates =3D 0; } else if (!cursor && new_cursor) { diff --git a/ui/dbus-listener.c b/ui/dbus-listener.c index 62d1e2d3f9..f1775a0a39 100644 --- a/ui/dbus-listener.c +++ b/ui/dbus-listener.c @@ -442,28 +442,24 @@ static void dbus_scanout_texture(DisplayChangeListene= r *dcl, trace_dbus_scanout_texture(tex_id, backing_y_0_top, backing_width, backing_height, x, y, w, h); #ifdef CONFIG_GBM - QemuDmaBuf dmabuf =3D { - .width =3D w, - .height =3D h, - .y0_top =3D backing_y_0_top, - .x =3D x, - .y =3D y, - .backing_width =3D backing_width, - .backing_height =3D backing_height, - }; + int32_t fd; + uint32_t stride, fourcc; + uint64_t modifier; + QemuDmaBuf *dmabuf; =20 assert(tex_id); - dmabuf.fd =3D egl_get_fd_for_texture( - tex_id, (EGLint *)&dmabuf.stride, - (EGLint *)&dmabuf.fourcc, - &dmabuf.modifier); - if (dmabuf.fd < 0) { + fd =3D egl_get_fd_for_texture(tex_id, (EGLint *)&stride, (EGLint *)&fo= urcc, + &modifier); + if (fd < 0) { error_report("%s: failed to get fd for texture", __func__); return; } + dmabuf =3D qemu_dmabuf_new(w, h, stride, x, y, backing_width, + backing_height, fourcc, modifier, fd, + false, backing_y_0_top); =20 - dbus_scanout_dmabuf(dcl, &dmabuf); - close(dmabuf.fd); + dbus_scanout_dmabuf(dcl, dmabuf); + close(fd); #endif =20 #ifdef WIN32 --=20 2.34.1 From nobody Sat May 18 11:46:57 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1713553529; cv=none; d=zohomail.com; s=zohoarc; b=L26CmckHWND/Bb8SmgPm17Jmazn3uBMRzO0ArND4aOsfv+O5pTpNZ/yaNJOFD8FIn13sguFkQVvPoe0Ha44sUJmcr9glov7/VCxUWJF5A/XwRj8Psci6LryEcB2f69mULBqDYeyr0s8otlee7O31/+FV+qps/GrHMCrdNKIYQxw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1713553529; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=rJltyz2lFEaK3GLvgQ8Ui26m6vbZfmGP0mmoe2bkHuI=; b=XVReYV9LyQlk+m1dsw2KucGgSQzu1NZR3DI3ZoCB6jN+xVxNRN02IEIYyO0efEV6VlS3dPvbzspEoXWyNXPW+qn1+QGJAv9q0pcvjyJizYjcloLgTzhDOLLVYLPzcD4x5zxoxlGu+FmUYF4Olrq5VaOMx67BoaUg98+Wa0FumzQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1713553529824870.1863929284679; Fri, 19 Apr 2024 12:05:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rxtXA-0005vv-Dq; Fri, 19 Apr 2024 15:04:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtX4-0005tP-An for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:22 -0400 Received: from mgamail.intel.com ([192.198.163.10]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rxtX2-0004ET-7O for qemu-devel@nongnu.org; Fri, 19 Apr 2024 15:04:21 -0400 Received: from orviesa002.jf.intel.com ([10.64.159.142]) by fmvoesa104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Apr 2024 12:04:08 -0700 Received: from dongwonk-z390-aorus-ultra.fm.intel.com ([10.105.129.124]) by orviesa002.jf.intel.com with ESMTP; 19 Apr 2024 12:04:09 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1713553460; x=1745089460; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sO7a70G4LBuEj95EnA0tucUSAOBNfhfKnI1rEBBPdbc=; b=k+d8UWJwHJyj6W2qu/G3H9e7rZXQI5ZtRrL16nyG1sn+rLtGhy+Eu7E5 Phrnyky3bD9ySzGL5HtWg+GLzRw5PUSB8Mb7x5PjNXU6H/so9rZpXFwZT bYjb7zmBsVr5tnQ9B8LawGB1QkxQcwGjUmmRnPXb5WKcT8WCIxYWnL1f6 4WYoUhlSSLEhNbLyuQl74mTvh8Lztv+6vw8wDGMHk9pXh9kbaoSVhY8HG uRGc6QebeHUVixmaNzUusrZ8MR3XP0cSfNtZQhm2xWFvayJty2X/Zm8+p GQfvn2hgToiBg1jYjbnRBE2vV0tTeZP0/fDiLy7AnCQ/eizQPCdauWdFE Q==; X-CSE-ConnectionGUID: /rijgTEhSZavws7aZLXXSw== X-CSE-MsgGUID: dc3AMfoTQ8eya+3vFxl+EQ== X-IronPort-AV: E=McAfee;i="6600,9927,11049"; a="20565003" X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="20565003" X-CSE-ConnectionGUID: 6BGczYvMQZOk0Bl2ZygGag== X-CSE-MsgGUID: i9K444ZKRr2deviIKWhP9g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.07,214,1708416000"; d="scan'208";a="54346791" From: dongwon.kim@intel.com To: qemu-devel@nongnu.org Cc: marcandre.lureau@redhat.com, berrange@redhat.com, philmd@linaro.org Subject: [PATCH v8 6/6] ui/console: move QemuDmaBuf struct def to dmabuf.c Date: Fri, 19 Apr 2024 11:59:52 -0700 Message-Id: <20240419185952.991930-7-dongwon.kim@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20240419185952.991930-1-dongwon.kim@intel.com> References: <20240419185952.991930-1-dongwon.kim@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.198.163.10; envelope-from=dongwon.kim@intel.com; helo=mgamail.intel.com X-Spam_score_int: -66 X-Spam_score: -6.7 X-Spam_bar: ------ X-Spam_report: (-6.7 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-2.313, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1713553531277100006 From: Dongwon Kim To complete privatizing process of QemuDmaBuf, QemuDmaBuf struct def is moved to dmabuf.c Suggested-by: Marc-Andr=C3=A9 Lureau Cc: Philippe Mathieu-Daud=C3=A9 Cc: Daniel P. Berrang=C3=A9 Cc: Vivek Kasireddy Signed-off-by: Dongwon Kim --- include/ui/dmabuf.h | 19 +------------------ ui/dmabuf.c | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/include/ui/dmabuf.h b/include/ui/dmabuf.h index e332958c39..0723846a3a 100644 --- a/include/ui/dmabuf.h +++ b/include/ui/dmabuf.h @@ -27,24 +27,7 @@ #ifndef DMABUF_H #define DMABUF_H =20 -typedef struct QemuDmaBuf { - int fd; - uint32_t width; - uint32_t height; - uint32_t stride; - uint32_t fourcc; - uint64_t modifier; - uint32_t texture; - uint32_t x; - uint32_t y; - uint32_t backing_width; - uint32_t backing_height; - bool y0_top; - void *sync; - int fence_fd; - bool allow_fences; - bool draw_submitted; -} QemuDmaBuf; +typedef struct QemuDmaBuf QemuDmaBuf; =20 QemuDmaBuf *qemu_dmabuf_new(uint32_t width, uint32_t height, uint32_t stride, uint32_t x, diff --git a/ui/dmabuf.c b/ui/dmabuf.c index ef3b07956e..7a919160dc 100644 --- a/ui/dmabuf.c +++ b/ui/dmabuf.c @@ -27,6 +27,25 @@ #include "qemu/osdep.h" #include "ui/dmabuf.h" =20 +struct QemuDmaBuf { + int fd; + uint32_t width; + uint32_t height; + uint32_t stride; + uint32_t fourcc; + uint64_t modifier; + uint32_t texture; + uint32_t x; + uint32_t y; + uint32_t backing_width; + uint32_t backing_height; + bool y0_top; + void *sync; + int fence_fd; + bool allow_fences; + bool draw_submitted; +}; + QemuDmaBuf *qemu_dmabuf_new(uint32_t width, uint32_t height, uint32_t stride, uint32_t x, uint32_t y, uint32_t backing_width, --=20 2.34.1