From patchwork Thu Nov 17 16:14:13 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?VmlsbGUgU3lyasOkbMOk?= X-Patchwork-Id: 9434515 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id A25476047D for ; Thu, 17 Nov 2016 16:15:54 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 93C2C1FF8F for ; Thu, 17 Nov 2016 16:15:54 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 883F229634; Thu, 17 Nov 2016 16:15:54 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 0818B1FF8F for ; Thu, 17 Nov 2016 16:15:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 9AEF46E823; Thu, 17 Nov 2016 16:15:35 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8E93B6E823 for ; Thu, 17 Nov 2016 16:15:26 +0000 (UTC) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga104.fm.intel.com with ESMTP; 17 Nov 2016 08:15:25 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,506,1473145200"; d="scan'208";a="5629895" Received: from stinkbox.fi.intel.com (HELO stinkbox) ([10.237.72.174]) by orsmga002.jf.intel.com with SMTP; 17 Nov 2016 08:15:23 -0800 Received: by stinkbox (sSMTP sendmail emulation); Thu, 17 Nov 2016 18:15:22 +0200 From: ville.syrjala@linux.intel.com To: dri-devel@lists.freedesktop.org Subject: [PATCH 14/32] drm/vmwgfx: Populate fb->pixel_format Date: Thu, 17 Nov 2016 18:14:13 +0200 Message-Id: <1479399271-31991-15-git-send-email-ville.syrjala@linux.intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1479399271-31991-1-git-send-email-ville.syrjala@linux.intel.com> References: <1479399271-31991-1-git-send-email-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Cc: Thomas Hellstrom , linux-graphics-maintainer@vmware.com, Laurent Pinchart X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Virus-Scanned: ClamAV using ClamSMTP From: Ville Syrjälä Stuff something semi-reasonable into fb->pixel_format. I had to guess as to which formats we should pick. Did I guess correctly? We can't quite use drm_mode_legacy_fb_format() due to the ARGB1555 vs. XRGB155 mess. However use of 'A' formats should imply per-pixel alpha blending as far as KMS is concerned so I'm not at all sure we want to have any 'A' formats exposed as opposed to just 'X' formats. OTOH vmvgfx doesn't do planes, and so the core won't enforce that these formats match any list of supported formats, so the choice shouldn't be super important at this point. Cc: linux-graphics-maintainer@vmware.com Cc: Sinclair Yeh Cc: Thomas Hellstrom Signed-off-by: Ville Syrjälä --- drivers/gpu/drm/vmwgfx/vmwgfx_kms.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c index 7d92ab56961b..5788913ca8f9 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c @@ -524,6 +524,7 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv, struct drm_device *dev = dev_priv->dev; struct vmw_framebuffer_surface *vfbs; enum SVGA3dSurfaceFormat format; + u32 pixel_format; int ret; /* 3D is only supported on HWv8 and newer hosts */ @@ -548,17 +549,22 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv, return -EINVAL; } + /* FIXME 'A' format implies per-pixel alpha blending for KMS */ switch (mode_cmd->depth) { case 32: + pixel_format = DRM_FORMAT_ARGB8888; format = SVGA3D_A8R8G8B8; break; case 24: + pixel_format = DRM_FORMAT_XRGB8888; format = SVGA3D_X8R8G8B8; break; case 16: + pixel_format = DRM_FORMAT_RGB565; format = SVGA3D_R5G6B5; break; case 15: + pixel_format = DRM_FORMAT_ARGB1555; format = SVGA3D_A1R5G5B5; break; default: @@ -582,7 +588,8 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv, } vfbs->base.base.dev = dev; - /* XXX get the first 3 from the surface info */ + /* XXX get the first 4 from the surface info */ + vfbs->base.base.pixel_format = pixel_format; vfbs->base.base.bits_per_pixel = mode_cmd->bpp; vfbs->base.base.pitches[0] = mode_cmd->pitch; vfbs->base.base.depth = mode_cmd->depth; @@ -834,6 +841,7 @@ static int vmw_kms_new_framebuffer_dmabuf(struct vmw_private *dev_priv, struct drm_device *dev = dev_priv->dev; struct vmw_framebuffer_dmabuf *vfbd; unsigned int requested_size; + u32 pixel_format; int ret; requested_size = mode_cmd->height * mode_cmd->pitch; @@ -852,6 +860,12 @@ static int vmw_kms_new_framebuffer_dmabuf(struct vmw_private *dev_priv, if (mode_cmd->bpp == 32) break; + /* FIXME 'A' format implies per-pixel alpha blending for KMS */ + if (mode_cmd->depth == 32) + pixel_format = DRM_FORMAT_ARGB8888; + else + pixel_format = DRM_FORMAT_XRGB8888; + DRM_ERROR("Invalid color depth/bbp: %d %d\n", mode_cmd->depth, mode_cmd->bpp); return -EINVAL; @@ -861,6 +875,12 @@ static int vmw_kms_new_framebuffer_dmabuf(struct vmw_private *dev_priv, if (mode_cmd->bpp == 16) break; + /* FIXME 'A' format implies per-pixel alpha blending for KMS */ + if (mode_cmd->depth == 16) + pixel_format = DRM_FORMAT_RGB565; + else + pixel_format = DRM_FORMAT_ARGB1555; + DRM_ERROR("Invalid color depth/bbp: %d %d\n", mode_cmd->depth, mode_cmd->bpp); return -EINVAL; @@ -877,6 +897,7 @@ static int vmw_kms_new_framebuffer_dmabuf(struct vmw_private *dev_priv, } vfbd->base.base.dev = dev; + vfbd->base.base.pixel_format = pixel_format; vfbd->base.base.bits_per_pixel = mode_cmd->bpp; vfbd->base.base.pitches[0] = mode_cmd->pitch; vfbd->base.base.depth = mode_cmd->depth;