lkml.org 
[lkml]   [2021]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.13 404/800] drm/vmwgfx: Mark a surface gpu-dirty after the SVGA3dCmdDXGenMips command
    Date
    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 7a24196f92c3..d6a6d8a3387a 100644
    --- a/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
    +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_execbuf.c
    @@ -2763,12 +2763,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


    \
     
     \ /
      Last update: 2021-07-12 10:45    [W:3.519 / U:0.436 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site