diff options
author | Jakob Bornecrantz <jakob@vmware.com> | 2014-01-17 09:12:26 +0100 |
---|---|---|
committer | Thomas Hellstrom <thellstrom@vmware.com> | 2014-01-17 09:12:26 +0100 |
commit | 1985f99987ff04e1bb0405101dd8e25cf1b6b037 (patch) | |
tree | 7cd7d3b6782eb733cc1791ef5acb35c406ee026a /drivers/gpu/drm/vmwgfx | |
parent | 96b43626a54317233f3e2c9750967e085b8d2850 (diff) | |
download | op-kernel-dev-1985f99987ff04e1bb0405101dd8e25cf1b6b037.zip op-kernel-dev-1985f99987ff04e1bb0405101dd8e25cf1b6b037.tar.gz |
drm/vmwgfx: Invalidate surface on non-readback unbind
Fixes error messages in vmware.log
Signed-off-by: Jakob Bornecrantz <jakob@vmware.com>
Reviewed-by: Michael Banack <banackm@vmware.com>
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Diffstat (limited to 'drivers/gpu/drm/vmwgfx')
-rw-r--r-- | drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 26 |
1 files 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); |