[PATCH v2] drm/vmwgfx: Cleanup kms setup without 3d
Martin Krastev
martin.krastev at broadcom.com
Tue Aug 27 09:16:58 UTC 2024
On Tue, Aug 27, 2024 at 7:39 AM Zack Rusin <zack.rusin at broadcom.com> 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 at broadcom.com>
> Fixes: d6667f0ddf46 ("drm/vmwgfx: Fix handling of dumb buffers")
> Cc: Broadcom internal kernel review list <bcm-kernel-feedback-list at broadcom.com>
> Cc: dri-devel at lists.freedesktop.org
> Cc: <stable at vger.kernel.org> # v6.9+
> Cc: Maaz Mombasawala <maaz.mombasawala at broadcom.com>
> Cc: Martin Krastev <martin.krastev at broadcom.com>
> ---
> 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
> --
> 2.43.0
>
LGTM.
Reviewed-by: Martin Krastev <martin.krastev at broadcom.com>
Regards,
Martin
More information about the dri-devel
mailing list