Re: [PATCH v2] drm/vmwgfx: Cleanup kms setup without 3d

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 8/26/24 21:39, Zack Rusin wrote:
> Do not validate format equality for the non 3d cases to allow xrgb to
> argb copies and make sure the dx binding flags are only used
> on dx compatible surfaces.
> 
> Fixes basic 2d kms setup on configurations without 3d. There's little
> practical benefit to it because kms framebuffer coherence is disabled
> on configurations without 3d but with those changes the code actually
> makes sense.
> 
> v2: Remove the now unused format variable
> 
> Signed-off-by: Zack Rusin <zack.rusin@xxxxxxxxxxxx>
> Fixes: d6667f0ddf46 ("drm/vmwgfx: Fix handling of dumb buffers")
> Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list@xxxxxxxxxxxx>
> Cc: dri-devel@xxxxxxxxxxxxxxxxxxxxx
> Cc: <stable@xxxxxxxxxxxxxxx> # v6.9+
> Cc: Maaz Mombasawala <maaz.mombasawala@xxxxxxxxxxxx>
> Cc: Martin Krastev <martin.krastev@xxxxxxxxxxxx>
> ---
>  drivers/gpu/drm/vmwgfx/vmwgfx_kms.c     | 29 -------------------------
>  drivers/gpu/drm/vmwgfx/vmwgfx_surface.c |  9 +++++---
>  2 files changed, 6 insertions(+), 32 deletions(-)
> 
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> index 288ed0bb75cb..282b6153bcdd 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_kms.c
> @@ -1283,7 +1283,6 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
>  {
>  	struct drm_device *dev = &dev_priv->drm;
>  	struct vmw_framebuffer_surface *vfbs;
> -	enum SVGA3dSurfaceFormat format;
>  	struct vmw_surface *surface;
>  	int ret;
>  
> @@ -1320,34 +1319,6 @@ static int vmw_kms_new_framebuffer_surface(struct vmw_private *dev_priv,
>  		return -EINVAL;
>  	}
>  
> -	switch (mode_cmd->pixel_format) {
> -	case DRM_FORMAT_ARGB8888:
> -		format = SVGA3D_A8R8G8B8;
> -		break;
> -	case DRM_FORMAT_XRGB8888:
> -		format = SVGA3D_X8R8G8B8;
> -		break;
> -	case DRM_FORMAT_RGB565:
> -		format = SVGA3D_R5G6B5;
> -		break;
> -	case DRM_FORMAT_XRGB1555:
> -		format = SVGA3D_A1R5G5B5;
> -		break;
> -	default:
> -		DRM_ERROR("Invalid pixel format: %p4cc\n",
> -			  &mode_cmd->pixel_format);
> -		return -EINVAL;
> -	}
> -
> -	/*
> -	 * For DX, surface format validation is done when surface->scanout
> -	 * is set.
> -	 */
> -	if (!has_sm4_context(dev_priv) && format != surface->metadata.format) {
> -		DRM_ERROR("Invalid surface format for requested mode.\n");
> -		return -EINVAL;
> -	}
> -
>  	vfbs = kzalloc(sizeof(*vfbs), GFP_KERNEL);
>  	if (!vfbs) {
>  		ret = -ENOMEM;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
> index 1625b30d9970..5721c74da3e0 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
> @@ -2276,9 +2276,12 @@ int vmw_dumb_create(struct drm_file *file_priv,
>  	const struct SVGA3dSurfaceDesc *desc = vmw_surface_get_desc(format);
>  	SVGA3dSurfaceAllFlags flags = SVGA3D_SURFACE_HINT_TEXTURE |
>  				      SVGA3D_SURFACE_HINT_RENDERTARGET |
> -				      SVGA3D_SURFACE_SCREENTARGET |
> -				      SVGA3D_SURFACE_BIND_SHADER_RESOURCE |
> -				      SVGA3D_SURFACE_BIND_RENDER_TARGET;
> +				      SVGA3D_SURFACE_SCREENTARGET;
> +
> +	if (vmw_surface_is_dx_screen_target_format(format)) {
> +		flags |= SVGA3D_SURFACE_BIND_SHADER_RESOURCE |
> +			 SVGA3D_SURFACE_BIND_RENDER_TARGET;
> +	}
>  
>  	/*
>  	 * Without mob support we're just going to use raw memory buffer

LGTM

Reviewed-by: Maaz Mombasawala <maaz.mombasawala@xxxxxxxxxxxx>

-- 
Maaz Mombasawala <maaz.mombasawala@xxxxxxxxxxxx>




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux