[PATCH] drm/vmwgfx: Invalidate surface on non-readback unbind
Thomas Hellstrom
thellstrom at vmware.com
Fri Jan 17 00:27:15 PST 2014
From: Jakob Bornecrantz <jakob at vmware.com>
Fixes error messages in vmware.log
Signed-off-by: Jakob Bornecrantz <jakob at vmware.com>
Reviewed-by: Michael Banack <banackm at vmware.com>
Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>
---
drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 26 ++++++++++++++++++--------
1 file changed, 18 insertions(+), 8 deletions(-)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
index a729b20..3bb3331 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
@@ -1043,15 +1043,19 @@ static int vmw_gb_surface_unbind(struct vmw_resource *res,
} *cmd1;
struct {
SVGA3dCmdHeader header;
- SVGA3dCmdBindGBSurface body;
+ SVGA3dCmdInvalidateGBSurface body;
} *cmd2;
+ struct {
+ SVGA3dCmdHeader header;
+ SVGA3dCmdBindGBSurface body;
+ } *cmd3;
uint32_t submit_size;
uint8_t *cmd;
BUG_ON(bo->mem.mem_type != VMW_PL_MOB);
- submit_size = sizeof(*cmd2) + (readback ? sizeof(*cmd1) : 0);
+ submit_size = sizeof(*cmd3) + (readback ? sizeof(*cmd1) : sizeof(*cmd2));
cmd = vmw_fifo_reserve(dev_priv, submit_size);
if (unlikely(cmd == NULL)) {
DRM_ERROR("Failed reserving FIFO space for surface "
@@ -1059,18 +1063,24 @@ static int vmw_gb_surface_unbind(struct vmw_resource *res,
return -ENOMEM;
}
- cmd2 = (void *) cmd;
if (readback) {
cmd1 = (void *) cmd;
cmd1->header.id = SVGA_3D_CMD_READBACK_GB_SURFACE;
cmd1->header.size = sizeof(cmd1->body);
cmd1->body.sid = res->id;
- cmd2 = (void *) &cmd1[1];
+ cmd3 = (void *) &cmd1[1];
+ } else {
+ cmd2 = (void *) cmd;
+ cmd2->header.id = SVGA_3D_CMD_INVALIDATE_GB_SURFACE;
+ cmd2->header.size = sizeof(cmd2->body);
+ cmd2->body.sid = res->id;
+ cmd3 = (void *) &cmd2[1];
}
- cmd2->header.id = SVGA_3D_CMD_BIND_GB_SURFACE;
- cmd2->header.size = sizeof(cmd2->body);
- cmd2->body.sid = res->id;
- cmd2->body.mobid = SVGA3D_INVALID_ID;
+
+ cmd3->header.id = SVGA_3D_CMD_BIND_GB_SURFACE;
+ cmd3->header.size = sizeof(cmd3->body);
+ cmd3->body.sid = res->id;
+ cmd3->body.mobid = SVGA3D_INVALID_ID;
vmw_fifo_commit(dev_priv, submit_size);
--
1.8.3.2
More information about the dri-devel
mailing list