gallium/targets/xorg-vmwgfx: Xv fixes
Make sure regions are properly updated and that the colorkey painting is flushed before we update the HW overlay. Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
This commit is contained in:
@@ -362,8 +362,10 @@ vmw_video_close(struct vmw_customizer *vmw)
|
||||
/* make sure the port is stoped as well */
|
||||
vmw_xv_stop_video(pScrn, &video->port[i], TRUE);
|
||||
vmw_ioctl_unref_stream(vmw, video->port[i].streamId);
|
||||
REGION_UNINIT(pScreen, &video->port[i].clipBoxes);
|
||||
}
|
||||
|
||||
|
||||
/* XXX: I'm sure this function is missing code for turning off Xv */
|
||||
|
||||
free(vmw->video_priv);
|
||||
@@ -463,6 +465,7 @@ vmw_video_init_adaptor(ScrnInfoPtr pScrn, struct vmw_customizer *vmw)
|
||||
video->port[i].flags = SVGA_VIDEO_FLAG_COLORKEY;
|
||||
video->port[i].colorKey = VMWARE_VIDEO_COLORKEY;
|
||||
video->port[i].isAutoPaintColorkey = TRUE;
|
||||
REGION_NULL(pScrn->pScreen, &video->port[i].clipBoxes);
|
||||
adaptor->pPortPrivates[i].ptr = &video->port[i];
|
||||
}
|
||||
|
||||
@@ -553,8 +556,10 @@ vmw_video_port_init(ScrnInfoPtr pScrn, struct vmw_video_port *port,
|
||||
|
||||
REGION_COPY(pScrn->pScreen, &port->clipBoxes, clipBoxes);
|
||||
|
||||
if (port->isAutoPaintColorkey)
|
||||
xf86XVFillKeyHelper(pScrn->pScreen, port->colorKey, clipBoxes);
|
||||
if (port->isAutoPaintColorkey) {
|
||||
xf86XVFillKeyHelper(pScrn->pScreen, port->colorKey, clipBoxes);
|
||||
xorg_flush(pScrn->pScreen);
|
||||
}
|
||||
|
||||
return port->play(pScrn, port, src_x, src_y, drw_x, drw_y, src_w, src_h,
|
||||
drw_w, drw_h, format, buf, width, height, clipBoxes);
|
||||
@@ -643,6 +648,7 @@ vmw_video_port_play(ScrnInfoPtr pScrn, struct vmw_video_port *port,
|
||||
REGION_COPY(pScrn->pScreen, &port->clipBoxes, clipBoxes);
|
||||
if (port->isAutoPaintColorkey) {
|
||||
xf86XVFillKeyHelper(pScrn->pScreen, port->colorKey, clipBoxes);
|
||||
xorg_flush(pScrn->pScreen);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -865,6 +871,8 @@ vmw_xv_stop_video(ScrnInfoPtr pScrn, pointer data, Bool cleanup)
|
||||
if (!vmw->video_priv)
|
||||
return;
|
||||
|
||||
REGION_EMPTY(pScrn->pScreen, &port->clipBoxes);
|
||||
|
||||
if (!cleanup)
|
||||
return;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user