[PATCH 14/32] drm/vmwgfx: Populate fb->pixel_format

Ville Syrjälä ville.syrjala at linux.intel.com
Thu Nov 17 19:27:25 UTC 2016


On Thu, Nov 17, 2016 at 07:52:23PM +0200, Laurent Pinchart wrote:
> Hi Ville,
> 
> Thank you for the patch.
> 
> On Thursday 17 Nov 2016 18:14:13 ville.syrjala at linux.intel.com wrote:
> > From: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > 
> > 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.
> 
> The vmgfx driver should really be converted to using struct drm_mode_fb_cmd2 
> through the whole code instead of converting struct drm_mode_fb_cmd2 to struct 
> drm_mode_fb_cmd in vmw_kms_fb_create(). I gave it a go a few months back but 
> the structure is passed around so many functions that conversion requires more 
> knowledge about the driver than I have. I don't expect you to fix that, but it 
> would be nice if Sinclair or Thomas could give it a go.

Indeed. Would be nice to bring all drivers into the fold. I didn't
want to start down this particular hole with the series already
too big as is.

> 
> > Cc: linux-graphics-maintainer at vmware.com
> > Cc: Sinclair Yeh <syeh at vmware.com>
> > Cc: Thomas Hellstrom <thellstrom at vmware.com>
> > Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> > ---
> >  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;
> 
> -- 
> Regards,
> 
> Laurent Pinchart

-- 
Ville Syrjälä
Intel OTC


More information about the dri-devel mailing list