From: Thomas Hellstrom <thellst...@vmware.com>

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 resource")
Signed-off-by: Thomas Hellstrom <thellst...@vmware.com>
Reviewed-by: Charmaine Lee <charmai...@vmware.com>
Reviewed-by: Roland Scheidegger <srol...@vmware.com>
Signed-off-by: Zack Rusin <za...@vmware.com>
---
 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 ab752b102c9e..ca5360efa172 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.27.0

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to