Commit 6dd687b4 authored by Thomas Hellstrom's avatar Thomas Hellstrom

drm/vmwgfx: Calculate the cursor position based on the crtc gui origin

Base the cursor position on the coordinate of the crtc origin in the
gui coordinate system rather than in the framebuffer coordinate system.

With explicit placement, these may differ (for example when two crtcs
scan out of the same framebuffer location).
Signed-off-by: default avatarThomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: default avatarSinclair Yeh <syeh@vmware.com>
parent 76404ac0
...@@ -236,8 +236,8 @@ int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y) ...@@ -236,8 +236,8 @@ int vmw_du_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
struct vmw_display_unit *du = vmw_crtc_to_du(crtc); struct vmw_display_unit *du = vmw_crtc_to_du(crtc);
bool shown = du->cursor_surface || du->cursor_dmabuf ? true : false; bool shown = du->cursor_surface || du->cursor_dmabuf ? true : false;
du->cursor_x = x + crtc->x; du->cursor_x = x + du->set_gui_x;
du->cursor_y = y + crtc->y; du->cursor_y = y + du->set_gui_y;
/* /*
* FIXME: Unclear whether there's any global state touched by the * FIXME: Unclear whether there's any global state touched by the
......
...@@ -179,6 +179,8 @@ struct vmw_display_unit { ...@@ -179,6 +179,8 @@ struct vmw_display_unit {
int gui_y; int gui_y;
bool is_implicit; bool is_implicit;
bool active_implicit; bool active_implicit;
int set_gui_x;
int set_gui_y;
}; };
#define vmw_crtc_to_du(x) \ #define vmw_crtc_to_du(x) \
......
...@@ -288,6 +288,8 @@ static int vmw_ldu_crtc_set_config(struct drm_mode_set *set) ...@@ -288,6 +288,8 @@ static int vmw_ldu_crtc_set_config(struct drm_mode_set *set)
crtc->y = set->y; crtc->y = set->y;
crtc->mode = *mode; crtc->mode = *mode;
crtc->enabled = true; crtc->enabled = true;
ldu->base.set_gui_x = set->x;
ldu->base.set_gui_y = set->y;
vmw_ldu_add_active(dev_priv, ldu, vfb); vmw_ldu_add_active(dev_priv, ldu, vfb);
......
...@@ -144,6 +144,8 @@ static int vmw_sou_fifo_create(struct vmw_private *dev_priv, ...@@ -144,6 +144,8 @@ static int vmw_sou_fifo_create(struct vmw_private *dev_priv,
cmd->obj.root.x = sou->base.gui_x; cmd->obj.root.x = sou->base.gui_x;
cmd->obj.root.y = sou->base.gui_y; cmd->obj.root.y = sou->base.gui_y;
} }
sou->base.set_gui_x = cmd->obj.root.x;
sou->base.set_gui_y = cmd->obj.root.y;
/* Ok to assume that buffer is pinned in vram */ /* Ok to assume that buffer is pinned in vram */
vmw_bo_get_guest_ptr(&sou->buffer->base, &cmd->obj.backingStore.ptr); vmw_bo_get_guest_ptr(&sou->buffer->base, &cmd->obj.backingStore.ptr);
......
...@@ -202,6 +202,8 @@ static int vmw_stdu_define_st(struct vmw_private *dev_priv, ...@@ -202,6 +202,8 @@ static int vmw_stdu_define_st(struct vmw_private *dev_priv,
cmd->body.xRoot = stdu->base.gui_x; cmd->body.xRoot = stdu->base.gui_x;
cmd->body.yRoot = stdu->base.gui_y; cmd->body.yRoot = stdu->base.gui_y;
} }
stdu->base.set_gui_x = cmd->body.xRoot;
stdu->base.set_gui_y = cmd->body.yRoot;
vmw_fifo_commit(dev_priv, sizeof(*cmd)); vmw_fifo_commit(dev_priv, sizeof(*cmd));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment