| From 9b3810406263eff42548e3c5aaac195ab332c7a5 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 4 May 2021 23:57:36 -0400 |
| Subject: drm/vmwgfx: Mark a surface gpu-dirty after the SVGA3dCmdDXGenMips |
| command |
| |
| From: Thomas Hellstrom <thellstrom@vmware.com> |
| |
| [ Upstream commit 75156a887b6cea6e09d83ec19f4ebfd7c86265f0 ] |
| |
| The SVGA3dCmdDXGenMips command uses a shader-resource view to access |
| the underlying surface. Normally accesses using that view-type are not |
| dirtying the underlying surface, but that particular command is an |
| exception. |
| Mark the surface gpu-dirty after a SVGA3dCmdDXGenMips command has been |
| submitted. |
| |
| This fixes the piglit getteximage-formats test run with |
| SVGA_FORCE_COHERENT=1 |
| |
| Fixes: a9f58c456e9d ("drm/vmwgfx: Be more restrictive when dirtying resources") |
| Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com> |
| Reviewed-by: Charmaine Lee <charmainel@vmware.com> |
| Reviewed-by: Roland Scheidegger <sroland@vmware.com> |
| Signed-off-by: Zack Rusin <zackr@vmware.com> |
| Link: https://patchwork.freedesktop.org/patch/msgid/20210505035740.286923-3-zackr@vmware.com |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c | 20 ++++++++++++++++---- |
| 1 file changed, 16 insertions(+), 4 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c |
| index e67e2e8f6e6f..83e1b54eb864 100644 |
| --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c |
| +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c |
| @@ -2759,12 +2759,24 @@ static int vmw_cmd_dx_genmips(struct vmw_private *dev_priv, |
| { |
| VMW_DECLARE_CMD_VAR(*cmd, SVGA3dCmdDXGenMips) = |
| container_of(header, typeof(*cmd), header); |
| - struct vmw_resource *ret; |
| + struct vmw_resource *view; |
| + struct vmw_res_cache_entry *rcache; |
| |
| - ret = vmw_view_id_val_add(sw_context, vmw_view_sr, |
| - cmd->body.shaderResourceViewId); |
| + view = vmw_view_id_val_add(sw_context, vmw_view_sr, |
| + cmd->body.shaderResourceViewId); |
| + if (IS_ERR(view)) |
| + return PTR_ERR(view); |
| |
| - return PTR_ERR_OR_ZERO(ret); |
| + /* |
| + * Normally the shader-resource view is not gpu-dirtying, but for |
| + * this particular command it is... |
| + * So mark the last looked-up surface, which is the surface |
| + * the view points to, gpu-dirty. |
| + */ |
| + rcache = &sw_context->res_cache[vmw_res_surface]; |
| + vmw_validation_res_set_dirty(sw_context->ctx, rcache->private, |
| + VMW_RES_DIRTY_SET); |
| + return 0; |
| } |
| |
| /** |
| -- |
| 2.30.2 |
| |