From a595b0677cf7ef0aa6f72170d9b1941cb97aa39de5d5b6b916e29ab0b1615de6 Mon Sep 17 00:00:00 2001 From: Stefan Dirsch Date: Wed, 19 Mar 2014 17:22:00 +0000 Subject: [PATCH] - update to current git commit 51cdfa6 in order to fix build against latest xserver - obsoletes U_0001-vmwgfx-update-for-XA-API-changes.patch, U_0002-vmwgfx-Avoid-HW-operations-when-not-master.patch, U_0003-vmwgfx-Implement-textured-video-completely-on-top-of.patch, U_0004-vmwgfx-Get-rid-of-device-specific-DMA-code.patch, U_0005-vmwgfx-handle-changes-of-DamageUnregister-API-in-1.1.patch OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xf86-video-vmware?expand=0&rev=23 --- U_0001-vmwgfx-update-for-XA-API-changes.patch | 187 -------------- ...-Avoid-HW-operations-when-not-master.patch | 240 ------------------ ...-textured-video-completely-on-top-of.patch | 195 -------------- ...-Get-rid-of-device-specific-DMA-code.patch | 240 ------------------ ...anges-of-DamageUnregister-API-in-1.1.patch | 43 ---- xf86-video-vmware-13.0.1-51cdfa6.tar.bz2 | 3 + xf86-video-vmware-13.0.1.tar.bz2 | 3 - xf86-video-vmware.changes | 11 + xf86-video-vmware.spec | 15 +- 9 files changed, 17 insertions(+), 920 deletions(-) delete mode 100644 U_0001-vmwgfx-update-for-XA-API-changes.patch delete mode 100644 U_0002-vmwgfx-Avoid-HW-operations-when-not-master.patch delete mode 100644 U_0003-vmwgfx-Implement-textured-video-completely-on-top-of.patch delete mode 100644 U_0004-vmwgfx-Get-rid-of-device-specific-DMA-code.patch delete mode 100644 U_0005-vmwgfx-handle-changes-of-DamageUnregister-API-in-1.1.patch create mode 100644 xf86-video-vmware-13.0.1-51cdfa6.tar.bz2 delete mode 100644 xf86-video-vmware-13.0.1.tar.bz2 diff --git a/U_0001-vmwgfx-update-for-XA-API-changes.patch b/U_0001-vmwgfx-update-for-XA-API-changes.patch deleted file mode 100644 index a4ade1d..0000000 --- a/U_0001-vmwgfx-update-for-XA-API-changes.patch +++ /dev/null @@ -1,187 +0,0 @@ -From 0945bea5fc32eacb7bf42639efbd45dcd43e7ab5 Mon Sep 17 00:00:00 2001 -From: Rob Clark -Date: Mon, 10 Jun 2013 13:31:31 -0400 -Subject: [PATCH 1/5] vmwgfx: update for XA API changes - -Signed-off-by: Rob Clark -Signed-off-by: Jakob Bornecrantz -Reviewed-by: Jakob Bornecrantz -Tested-by: Jakob Bornecrantz ---- - configure.ac | 2 +- - vmwgfx/vmwgfx_dri2.c | 5 +++-- - vmwgfx/vmwgfx_driver.c | 3 ++- - vmwgfx/vmwgfx_saa.c | 20 ++++++++++++++------ - vmwgfx/vmwgfx_tex_video.c | 5 +++-- - 5 files changed, 23 insertions(+), 12 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 0631bcc..dccfb27 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -118,7 +118,7 @@ if test x$BUILD_VMWGFX = xyes; then - PKG_CHECK_MODULES([LIBDRM], [libdrm],[],[BUILD_VMWGFX=no]) - fi - if test x$BUILD_VMWGFX = xyes; then -- PKG_CHECK_MODULES([XATRACKER], [xatracker >= 0.4.0],[],[BUILD_VMWGFX=no]) -+ PKG_CHECK_MODULES([XATRACKER], [xatracker >= 2.0.0],[],[BUILD_VMWGFX=no]) - fi - - DRIVER_NAME=vmware -diff --git a/vmwgfx/vmwgfx_dri2.c b/vmwgfx/vmwgfx_dri2.c -index 7de0772..2f007f0 100644 ---- a/vmwgfx/vmwgfx_dri2.c -+++ b/vmwgfx/vmwgfx_dri2.c -@@ -201,7 +201,8 @@ dri2_do_create_buffer(DrawablePtr pDraw, DRI2Buffer2Ptr buffer, unsigned int for - } - - private->srf = srf; -- if (xa_surface_handle(srf, &buffer->name, &buffer->pitch) != 0) -+ if (xa_surface_handle(srf, xa_handle_type_shared, -+ &buffer->name, &buffer->pitch) != 0) - return FALSE; - - buffer->cpp = xa_format_depth(xa_surface_format(srf)) / 8; -@@ -222,7 +223,7 @@ dri2_do_destroy_buffer(DrawablePtr pDraw, DRI2BufferPtr buffer) - struct vmwgfx_saa_pixmap *vpix = vmwgfx_saa_pixmap(private->pPixmap); - - if (--private->refcount == 0 && srf) { -- xa_surface_destroy(srf); -+ xa_surface_unref(srf); - } - - /* -diff --git a/vmwgfx/vmwgfx_driver.c b/vmwgfx/vmwgfx_driver.c -index 7863ba2..3002285 100644 ---- a/vmwgfx/vmwgfx_driver.c -+++ b/vmwgfx/vmwgfx_driver.c -@@ -617,7 +617,8 @@ vmwgfx_scanout_present(ScreenPtr pScreen, int drm_fd, - return FALSE; - } - -- if (xa_surface_handle(vpix->hw, &handle, &dummy) != 0) { -+ if (xa_surface_handle(vpix->hw, xa_handle_type_shared, -+ &handle, &dummy) != 0) { - LogMessage(X_ERROR, "Could not get present surface handle.\n"); - return FALSE; - } -diff --git a/vmwgfx/vmwgfx_saa.c b/vmwgfx/vmwgfx_saa.c -index 63df3a1..ed3c1ee 100644 ---- a/vmwgfx/vmwgfx_saa.c -+++ b/vmwgfx/vmwgfx_saa.c -@@ -140,7 +140,7 @@ vmwgfx_pixmap_free_storage(struct vmwgfx_saa_pixmap *vpix) - vpix->malloc = NULL; - } - if (!(vpix->backing & VMWGFX_PIX_SURFACE) && vpix->hw) { -- xa_surface_destroy(vpix->hw); -+ xa_surface_unref(vpix->hw); - vpix->hw = NULL; - } - if (!(vpix->backing & VMWGFX_PIX_GMR) && vpix->gmr) { -@@ -286,7 +286,8 @@ vmwgfx_saa_dma(struct vmwgfx_saa *vsaa, - if (vpix->gmr && vsaa->can_optimize_dma) { - uint32_t handle, dummy; - -- if (xa_surface_handle(vpix->hw, &handle, &dummy) != 0) -+ if (xa_surface_handle(vpix->hw, xa_handle_type_shared, -+ &handle, &dummy) != 0) - goto out_err; - if (vmwgfx_dma(0, 0, reg, vpix->gmr, pixmap->devKind, handle, - to_hw) != 0) -@@ -305,6 +306,8 @@ vmwgfx_saa_dma(struct vmwgfx_saa *vsaa, - (int) to_hw, - (struct xa_box *) REGION_RECTS(reg), - REGION_NUM_RECTS(reg)); -+ if (to_hw) -+ xa_context_flush(vsaa->xa_ctx); - if (vpix->gmr) - vmwgfx_dmabuf_unmap(vpix->gmr); - if (ret) -@@ -441,7 +444,7 @@ vmwgfx_hw_kill(struct vmwgfx_saa *vsaa, - &spix->dirty_hw)) - return FALSE; - -- xa_surface_destroy(vpix->hw); -+ xa_surface_unref(vpix->hw); - vpix->hw = NULL; - - /* -@@ -683,7 +686,8 @@ vmwgfx_present_prepare(struct vmwgfx_saa *vsaa, - - (void) pScreen; - if (src_vpix == dst_vpix || !src_vpix->hw || -- xa_surface_handle(src_vpix->hw, &vsaa->src_handle, &dummy) != 0) -+ xa_surface_handle(src_vpix->hw, xa_handle_type_shared, -+ &vsaa->src_handle, &dummy) != 0) - return FALSE; - - REGION_NULL(pScreen, &vsaa->present_region); -@@ -784,7 +788,7 @@ vmwgfx_create_hw(struct vmwgfx_saa *vsaa, - return TRUE; - - out_no_damage: -- xa_surface_destroy(hw); -+ xa_surface_unref(hw); - return FALSE; - } - -@@ -929,6 +933,7 @@ vmwgfx_copy_prepare(struct saa_driver *driver, - - if (!vmwgfx_hw_validate(src_pixmap, src_reg)) { - xa_copy_done(vsaa->xa_ctx); -+ xa_context_flush(vsaa->xa_ctx); - return FALSE; - } - -@@ -1029,6 +1034,7 @@ vmwgfx_copy_done(struct saa_driver *driver) - return; - } - xa_copy_done(vsaa->xa_ctx); -+ xa_context_flush(vsaa->xa_ctx); - } - - static Bool -@@ -1175,6 +1181,7 @@ vmwgfx_composite_done(struct saa_driver *driver) - struct vmwgfx_saa *vsaa = to_vmwgfx_saa(driver); - - xa_composite_done(vsaa->xa_ctx); -+ xa_context_flush(vsaa->xa_ctx); - } - - static void -@@ -1436,7 +1443,8 @@ vmwgfx_scanout_ref(struct vmwgfx_screen_entry *entry) - */ - if (!vmwgfx_hw_accel_validate(pixmap, 0, XA_FLAG_SCANOUT, 0, NULL)) - goto out_err; -- if (xa_surface_handle(vpix->hw, &handle, &dummy) != 0) -+ if (xa_surface_handle(vpix->hw, xa_handle_type_shared, -+ &handle, &dummy) != 0) - goto out_err; - depth = xa_format_depth(xa_surface_format(vpix->hw)); - -diff --git a/vmwgfx/vmwgfx_tex_video.c b/vmwgfx/vmwgfx_tex_video.c -index 449266b..2971ed7 100644 ---- a/vmwgfx/vmwgfx_tex_video.c -+++ b/vmwgfx/vmwgfx_tex_video.c -@@ -199,7 +199,7 @@ stop_video(ScrnInfoPtr pScrn, pointer data, Bool shutdown) - - for (i=0; i<3; ++i) { - if (priv->yuv[i]) { -- xa_surface_destroy(priv->yuv[i]); -+ xa_surface_unref(priv->yuv[i]); - priv->yuv[i] = NULL; - } - for (j=0; j<2; ++j) { -@@ -539,7 +539,8 @@ copy_packed_data(ScrnInfoPtr pScrn, - REGION_RESET(pScrn->pScreen, ®, &box); - } - -- if (xa_surface_handle(srf, &handle, &stride) != 0) { -+ if (xa_surface_handle(srf, xa_handle_type_shared, -+ &handle, &stride) != 0) { - ret = BadAlloc; - break; - } --- -1.8.1.4 - diff --git a/U_0002-vmwgfx-Avoid-HW-operations-when-not-master.patch b/U_0002-vmwgfx-Avoid-HW-operations-when-not-master.patch deleted file mode 100644 index b8028fa..0000000 --- a/U_0002-vmwgfx-Avoid-HW-operations-when-not-master.patch +++ /dev/null @@ -1,240 +0,0 @@ -From 835ce4698f916ba080f4132988fd4caf898e0b1e Mon Sep 17 00:00:00 2001 -From: Thomas Hellstrom -Date: Thu, 26 Sep 2013 01:25:33 -0700 -Subject: [PATCH 2/5] vmwgfx: Avoid HW operations when not master - -Note that for DRI2, a dri2_copy_region becomes a NOP when not master. -Additionally, all dri2 operations that lead to a potential kernel -access will return FALSE. - -Signed-off-by: Thomas Hellstrom -Reviewed-by: Jakob Bornecrantz ---- - vmwgfx/vmwgfx_dri2.c | 13 +++++++++++++ - vmwgfx/vmwgfx_driver.c | 3 +++ - vmwgfx/vmwgfx_saa.c | 44 +++++++++++++++++++++++++++++++++++++++++++- - vmwgfx/vmwgfx_saa.h | 8 ++++++++ - vmwgfx/vmwgfx_saa_priv.h | 2 ++ - vmwgfx/vmwgfx_xa_surface.c | 6 ++++++ - 6 files changed, 75 insertions(+), 1 deletion(-) - -diff --git a/vmwgfx/vmwgfx_dri2.c b/vmwgfx/vmwgfx_dri2.c -index 2f007f0..57f2d9d 100644 ---- a/vmwgfx/vmwgfx_dri2.c -+++ b/vmwgfx/vmwgfx_dri2.c -@@ -138,6 +138,8 @@ dri2_do_create_buffer(DrawablePtr pDraw, DRI2Buffer2Ptr buffer, unsigned int for - return TRUE; - case DRI2BufferStencil: - case DRI2BufferDepthStencil: -+ if (!pScrn->vtSema) -+ return FALSE; - - depth = (format) ? vmwgfx_zs_format_to_depth(format) : 32; - -@@ -155,6 +157,9 @@ dri2_do_create_buffer(DrawablePtr pDraw, DRI2Buffer2Ptr buffer, unsigned int for - - break; - case DRI2BufferDepth: -+ if (!pScrn->vtSema) -+ return FALSE; -+ - depth = (format) ? vmwgfx_z_format_to_depth(format) : - pDraw->bitsPerPixel; - -@@ -291,6 +296,14 @@ dri2_copy_region(DrawablePtr pDraw, RegionPtr pRegion, - DrawablePtr dst_draw; - RegionPtr myClip; - GCPtr gc; -+ ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); -+ -+ /* -+ * This is a fragile protection against HW operations when not master. -+ * Needs to be blocked higher up in the dri2 code. -+ */ -+ if (!pScrn->vtSema) -+ return; - - /* - * In driCreateBuffers we dewrap windows into the -diff --git a/vmwgfx/vmwgfx_driver.c b/vmwgfx/vmwgfx_driver.c -index 3002285..eeaea4b 100644 ---- a/vmwgfx/vmwgfx_driver.c -+++ b/vmwgfx/vmwgfx_driver.c -@@ -1116,6 +1116,7 @@ drv_leave_vt(VT_FUNC_ARGS_DECL) - - vmwgfx_cursor_bypass(ms->fd, 0, 0); - vmwgfx_disable_scanout(pScrn); -+ vmwgfx_saa_drop_master(pScrn->pScreen); - - if (drmDropMaster(ms->fd)) - xf86DrvMsg(pScrn->scrnIndex, X_WARNING, -@@ -1136,6 +1137,8 @@ drv_enter_vt(VT_FUNC_ARGS_DECL) - if (!drv_set_master(pScrn)) - return FALSE; - -+ vmwgfx_saa_set_master(pScrn->pScreen); -+ - if (!xf86SetDesiredModes(pScrn)) - return FALSE; - -diff --git a/vmwgfx/vmwgfx_saa.c b/vmwgfx/vmwgfx_saa.c -index ed3c1ee..5534ca3 100644 ---- a/vmwgfx/vmwgfx_saa.c -+++ b/vmwgfx/vmwgfx_saa.c -@@ -423,6 +423,7 @@ vmwgfx_create_pixmap(struct saa_driver *driver, struct saa_pixmap *spix, - - WSBMINITLISTHEAD(&vpix->sync_x_head); - WSBMINITLISTHEAD(&vpix->scanout_list); -+ WSBMINITLISTHEAD(&vpix->pixmap_list); - - return TRUE; - } -@@ -499,6 +500,7 @@ vmwgfx_destroy_pixmap(struct saa_driver *driver, PixmapPtr pixmap) - */ - - vmwgfx_pixmap_remove_present(vpix); -+ WSBMLISTDELINIT(&vpix->pixmap_list); - WSBMLISTDELINIT(&vpix->sync_x_head); - - if (vpix->hw_is_dri2_fronts) -@@ -627,6 +629,8 @@ vmwgfx_modify_pixmap_header (PixmapPtr pixmap, int w, int h, int depth, - int bpp, int devkind, void *pixdata) - { - struct vmwgfx_saa_pixmap *vpix = vmwgfx_saa_pixmap(pixmap); -+ ScreenPtr pScreen = pixmap->drawable.pScreen; -+ struct vmwgfx_saa *vsaa = to_vmwgfx_saa(saa_get_driver(pScreen)); - unsigned int old_height; - unsigned int old_width; - unsigned int old_pitch; -@@ -670,6 +674,8 @@ vmwgfx_modify_pixmap_header (PixmapPtr pixmap, int w, int h, int depth, - - vmwgfx_pix_resize(pixmap, old_pitch, old_height, old_width); - vmwgfx_pixmap_free_storage(vpix); -+ WSBMLISTADDTAIL(&vpix->pixmap_list, &vsaa->pixmaps); -+ - return TRUE; - - out_no_modify: -@@ -860,7 +866,7 @@ vmwgfx_copy_prepare(struct saa_driver *driver, - Bool has_valid_hw; - - if (!vsaa->xat || !SAA_PM_IS_SOLID(&dst_pixmap->drawable, plane_mask) || -- alu != GXcopy) -+ alu != GXcopy || !vsaa->is_master) - return FALSE; - - src_vpix = vmwgfx_saa_pixmap(src_pixmap); -@@ -1057,6 +1063,9 @@ vmwgfx_composite_prepare(struct saa_driver *driver, CARD8 op, - RegionRec empty; - struct xa_composite *xa_comp; - -+ if (!vsaa->is_master) -+ return FALSE; -+ - REGION_NULL(pScreen, &empty); - - /* -@@ -1367,7 +1376,9 @@ vmwgfx_saa_init(ScreenPtr pScreen, int drm_fd, struct xa_tracker *xat, - vsaa->use_present_opt = direct_presents; - vsaa->only_hw_presents = only_hw_presents; - vsaa->rendercheck = rendercheck; -+ vsaa->is_master = TRUE; - WSBMINITLISTHEAD(&vsaa->sync_x_list); -+ WSBMINITLISTHEAD(&vsaa->pixmaps); - - vsaa->driver = vmwgfx_saa_driver; - vsaa->vcomp = vmwgfx_alloc_composite(); -@@ -1518,3 +1529,34 @@ vmwgfx_scanout_unref(struct vmwgfx_screen_entry *entry) - entry->pixmap = NULL; - pixmap->drawable.pScreen->DestroyPixmap(pixmap); - } -+ -+void -+vmwgfx_saa_set_master(ScreenPtr pScreen) -+{ -+ struct vmwgfx_saa *vsaa = to_vmwgfx_saa(saa_get_driver(pScreen)); -+ -+ vsaa->is_master = TRUE; -+} -+ -+void -+vmwgfx_saa_drop_master(ScreenPtr pScreen) -+{ -+ struct vmwgfx_saa *vsaa = to_vmwgfx_saa(saa_get_driver(pScreen)); -+ struct _WsbmListHead *list; -+ struct vmwgfx_saa_pixmap *vpix; -+ struct saa_pixmap *spix; -+ -+ WSBMLISTFOREACH(list, &vsaa->pixmaps) { -+ vpix = WSBMLISTENTRY(list, struct vmwgfx_saa_pixmap, pixmap_list); -+ spix = &vpix->base; -+ -+ if (!vpix->hw) -+ continue; -+ -+ (void) vmwgfx_download_from_hw(&vsaa->driver, spix->pixmap, -+ &spix->dirty_hw); -+ REGION_EMPTY(draw->pScreen, &spix->dirty_hw); -+ } -+ -+ vsaa->is_master = FALSE; -+} -diff --git a/vmwgfx/vmwgfx_saa.h b/vmwgfx/vmwgfx_saa.h -index bb8ec96..d8aa3d3 100644 ---- a/vmwgfx/vmwgfx_saa.h -+++ b/vmwgfx/vmwgfx_saa.h -@@ -54,6 +54,7 @@ struct vmwgfx_saa_pixmap { - int hw_is_dri2_fronts; - struct _WsbmListHead sync_x_head; - struct _WsbmListHead scanout_list; -+ struct _WsbmListHead pixmap_list; - - uint32_t xa_flags; - uint32_t staging_add_flags; -@@ -107,4 +108,11 @@ Bool - vmwgfx_hw_accel_validate(PixmapPtr pixmap, unsigned int depth, - uint32_t add_flags, uint32_t remove_flags, - RegionPtr region); -+ -+void -+vmwgfx_saa_set_master(ScreenPtr pScreen); -+ -+void -+vmwgfx_saa_drop_master(ScreenPtr pScreen); -+ - #endif -diff --git a/vmwgfx/vmwgfx_saa_priv.h b/vmwgfx/vmwgfx_saa_priv.h -index 5f46dee..16583b0 100644 ---- a/vmwgfx/vmwgfx_saa_priv.h -+++ b/vmwgfx/vmwgfx_saa_priv.h -@@ -54,8 +54,10 @@ struct vmwgfx_saa { - Bool use_present_opt; - Bool only_hw_presents; - Bool rendercheck; -+ Bool is_master; - void (*present_flush) (ScreenPtr pScreen); - struct _WsbmListHead sync_x_list; -+ struct _WsbmListHead pixmaps; - struct vmwgfx_composite *vcomp; - }; - -diff --git a/vmwgfx/vmwgfx_xa_surface.c b/vmwgfx/vmwgfx_xa_surface.c -index 8b30e45..2f23c57 100644 ---- a/vmwgfx/vmwgfx_xa_surface.c -+++ b/vmwgfx/vmwgfx_xa_surface.c -@@ -362,6 +362,12 @@ vmwgfx_hw_accel_validate(PixmapPtr pixmap, unsigned int depth, - Bool - vmwgfx_hw_dri2_validate(PixmapPtr pixmap, unsigned int depth) - { -+ struct vmwgfx_saa *vsaa = -+ to_vmwgfx_saa(saa_get_driver(pixmap->drawable.pScreen)); -+ -+ if (!vsaa->is_master) -+ return FALSE; -+ - return (vmwgfx_hw_dri2_stage(pixmap, depth) && - vmwgfx_hw_commit(pixmap) && - vmwgfx_hw_validate(pixmap, NULL)); --- -1.8.1.4 - diff --git a/U_0003-vmwgfx-Implement-textured-video-completely-on-top-of.patch b/U_0003-vmwgfx-Implement-textured-video-completely-on-top-of.patch deleted file mode 100644 index 15fa913..0000000 --- a/U_0003-vmwgfx-Implement-textured-video-completely-on-top-of.patch +++ /dev/null @@ -1,195 +0,0 @@ -From 7192acf9f0bf8e7176ab0b803b861a858623f709 Mon Sep 17 00:00:00 2001 -From: Thomas Hellstrom -Date: Wed, 19 Sep 2012 20:36:57 +0200 -Subject: [PATCH 3/5] vmwgfx: Implement textured video completely on top of XA. - -Remove device-specific hacks. This may increase resource usage a little -on old hardware revisions, but we don't need separate code paths on -different hardware revisions. - -Signed-off-by: Thomas Hellstrom -Reviewed-by: Zack Rusin ---- - vmwgfx/vmwgfx_tex_video.c | 109 ++++++---------------------------------------- - 1 file changed, 14 insertions(+), 95 deletions(-) - -diff --git a/vmwgfx/vmwgfx_tex_video.c b/vmwgfx/vmwgfx_tex_video.c -index 2971ed7..a0a4f4a 100644 ---- a/vmwgfx/vmwgfx_tex_video.c -+++ b/vmwgfx/vmwgfx_tex_video.c -@@ -111,8 +111,7 @@ struct xorg_xv_port_priv { - int hue; - - int current_set; -- struct vmwgfx_dmabuf *bounce[2][3]; -- struct xa_surface *yuv[3]; -+ struct xa_surface *yuv[2][3]; - - int drm_fd; - -@@ -198,14 +197,10 @@ stop_video(ScrnInfoPtr pScrn, pointer data, Bool shutdown) - priv->fence = NULL; - - for (i=0; i<3; ++i) { -- if (priv->yuv[i]) { -- xa_surface_unref(priv->yuv[i]); -- priv->yuv[i] = NULL; -- } - for (j=0; j<2; ++j) { -- if (priv->bounce[j][i]) { -- vmwgfx_dmabuf_destroy(priv->bounce[j][i]); -- priv->bounce[0][i] = NULL; -+ if (priv->yuv[i]) { -+ xa_surface_unref(priv->yuv[j][i]); -+ priv->yuv[j][i] = NULL; - } - } - } -@@ -297,11 +292,9 @@ static int - check_yuv_surfaces(struct xorg_xv_port_priv *priv, int id, - int width, int height) - { -- struct xa_surface **yuv = priv->yuv; -- struct vmwgfx_dmabuf **bounce = priv->bounce[priv->current_set]; -+ struct xa_surface **yuv = priv->yuv[priv->current_set]; - int ret = 0; - int i; -- size_t size; - - for (i=0; i<3; ++i) { - -@@ -334,19 +327,6 @@ check_yuv_surfaces(struct xorg_xv_port_priv *priv, int id, - if (ret || !yuv[i]) - return BadAlloc; - -- size = width * height; -- -- if (bounce[i] && (bounce[i]->size < size || -- bounce[i]->size > 2*size)) { -- vmwgfx_dmabuf_destroy(bounce[i]); -- bounce[i] = NULL; -- } -- -- if (!bounce[i]) { -- bounce[i] = vmwgfx_dmabuf_alloc(priv->drm_fd, size); -- if (!bounce[i]) -- return BadAlloc; -- } - } - return Success; - } -@@ -413,28 +393,20 @@ copy_packed_data(ScrnInfoPtr pScrn, - unsigned short w, unsigned short h) - { - int i; -- struct vmwgfx_dmabuf **bounce = port->bounce[port->current_set]; -+ struct xa_surface **yuv = port->yuv[port->current_set]; - char *ymap, *vmap, *umap; - unsigned char y1, y2, u, v; - int yidx, uidx, vidx; - int y_array_size = w * h; - int ret = BadAlloc; - -- /* -- * Here, we could use xa_surface_[map|unmap], but given the size of -- * the yuv textures, that could stress the xa tracker dma buffer pool, -- * particularaly with multiple videos rendering simultaneously. -- * -- * Instead, cheat and allocate vmwgfx dma buffers directly. -- */ -- -- ymap = (char *)vmwgfx_dmabuf_map(bounce[0]); -+ ymap = xa_surface_map(port->r, yuv[0], XA_MAP_WRITE); - if (!ymap) - return BadAlloc; -- umap = (char *)vmwgfx_dmabuf_map(bounce[1]); -+ umap = xa_surface_map(port->r, yuv[1], XA_MAP_WRITE); - if (!umap) - goto out_no_umap; -- vmap = (char *)vmwgfx_dmabuf_map(bounce[2]); -+ vmap = xa_surface_map(port->r, yuv[2], XA_MAP_WRITE); - if (!vmap) - goto out_no_vmap; - -@@ -493,65 +465,11 @@ copy_packed_data(ScrnInfoPtr pScrn, - } - - ret = Success; -- vmwgfx_dmabuf_unmap(bounce[2]); -+ xa_surface_unmap(yuv[2]); - out_no_vmap: -- vmwgfx_dmabuf_unmap(bounce[1]); -+ xa_surface_unmap(yuv[1]); - out_no_umap: -- vmwgfx_dmabuf_unmap(bounce[0]); -- -- if (ret == Success) { -- struct xa_surface *srf; -- struct vmwgfx_dmabuf *buf; -- uint32_t handle; -- unsigned int stride; -- BoxRec box; -- RegionRec reg; -- -- box.x1 = 0; -- box.x2 = w; -- box.y1 = 0; -- box.y2 = h; -- -- REGION_INIT(pScrn->pScreen, ®, &box, 1); -- -- for (i=0; i<3; ++i) { -- srf = port->yuv[i]; -- buf = bounce[i]; -- -- if (i == 1) { -- switch(id) { -- case FOURCC_YV12: -- h /= 2; -- /* Fall through */ -- case FOURCC_YUY2: -- case FOURCC_UYVY: -- w /= 2; -- break; -- default: -- break; -- } -- -- box.x1 = 0; -- box.x2 = w; -- box.y1 = 0; -- box.y2 = h; -- -- REGION_RESET(pScrn->pScreen, ®, &box); -- } -- -- if (xa_surface_handle(srf, xa_handle_type_shared, -- &handle, &stride) != 0) { -- ret = BadAlloc; -- break; -- } -- -- if (vmwgfx_dma(0, 0, ®, buf, w, handle, 1) != 0) { -- ret = BadAlloc; -- break; -- } -- } -- REGION_UNINIT(pScrn->pScreen, ®); -- } -+ xa_surface_unmap(yuv[0]); - - return ret; - } -@@ -610,7 +528,8 @@ display_video(ScreenPtr pScreen, struct xorg_xv_port_priv *pPriv, int id, - (struct xa_box *)REGION_RECTS(dstRegion), - REGION_NUM_RECTS(dstRegion), - pPriv->cm, -- vpix->hw, pPriv->yuv); -+ vpix->hw, -+ pPriv->yuv[pPriv->current_set ]); - - saa_pixmap_dirty(pPixmap, TRUE, dstRegion); - DamageRegionProcessPending(&pPixmap->drawable); --- -1.8.1.4 - diff --git a/U_0004-vmwgfx-Get-rid-of-device-specific-DMA-code.patch b/U_0004-vmwgfx-Get-rid-of-device-specific-DMA-code.patch deleted file mode 100644 index cf98edf..0000000 --- a/U_0004-vmwgfx-Get-rid-of-device-specific-DMA-code.patch +++ /dev/null @@ -1,240 +0,0 @@ -From 45b2457516a9db4bd1d60fbb24a1efbe2d9dd932 Mon Sep 17 00:00:00 2001 -From: Thomas Hellstrom -Date: Wed, 19 Sep 2012 21:50:40 +0200 -Subject: [PATCH 4/5] vmwgfx: Get rid of device-specific DMA code - -It's rarely used and things seem to work well enough on top of XA. - -Signed-off-by: Thomas Hellstrom -Reviewed-by: Zack Rusin ---- - vmwgfx/vmwgfx_drmi.c | 103 ----------------------------------------------- - vmwgfx/vmwgfx_drmi.h | 5 --- - vmwgfx/vmwgfx_saa.c | 53 ++++++++++++------------ - vmwgfx/vmwgfx_saa_priv.h | 1 - - 4 files changed, 26 insertions(+), 136 deletions(-) - -diff --git a/vmwgfx/vmwgfx_drmi.c b/vmwgfx/vmwgfx_drmi.c -index 496a16b..1e23f4a 100644 ---- a/vmwgfx/vmwgfx_drmi.c -+++ b/vmwgfx/vmwgfx_drmi.c -@@ -284,109 +284,6 @@ vmwgfx_dmabuf_destroy(struct vmwgfx_dmabuf *buf) - } - - int --vmwgfx_dma(unsigned int host_x, unsigned int host_y, -- RegionPtr region, struct vmwgfx_dmabuf *buf, -- uint32_t buf_pitch, uint32_t surface_handle, int to_surface) --{ -- BoxPtr clips = REGION_RECTS(region); -- unsigned int num_clips = REGION_NUM_RECTS(region); -- struct drm_vmw_execbuf_arg arg; -- struct drm_vmw_fence_rep rep; -- int ret; -- unsigned int size; -- unsigned i; -- SVGA3dCopyBox *cb; -- SVGA3dCmdSurfaceDMASuffix *suffix; -- SVGA3dCmdSurfaceDMA *body; -- struct vmwgfx_int_dmabuf *ibuf = vmwgfx_int_dmabuf(buf); -- -- struct { -- SVGA3dCmdHeader header; -- SVGA3dCmdSurfaceDMA body; -- SVGA3dCopyBox cb; -- } *cmd; -- -- if (num_clips == 0) -- return 0; -- -- size = sizeof(*cmd) + (num_clips - 1) * sizeof(cmd->cb) + -- sizeof(*suffix); -- cmd = malloc(size); -- if (!cmd) -- return -1; -- -- cmd->header.id = SVGA_3D_CMD_SURFACE_DMA; -- cmd->header.size = sizeof(cmd->body) + num_clips * sizeof(cmd->cb) + -- sizeof(*suffix); -- cb = &cmd->cb; -- -- suffix = (SVGA3dCmdSurfaceDMASuffix *) &cb[num_clips]; -- suffix->suffixSize = sizeof(*suffix); -- suffix->maximumOffset = (uint32_t) -1; -- suffix->flags.discard = 0; -- suffix->flags.unsynchronized = 0; -- suffix->flags.reserved = 0; -- -- body = &cmd->body; -- body->guest.ptr.gmrId = buf->gmr_id; -- body->guest.ptr.offset = buf->gmr_offset; -- body->guest.pitch = buf_pitch; -- body->host.sid = surface_handle; -- body->host.face = 0; -- body->host.mipmap = 0; -- -- body->transfer = (to_surface ? SVGA3D_WRITE_HOST_VRAM : -- SVGA3D_READ_HOST_VRAM); -- -- -- for (i=0; i < num_clips; i++, cb++, clips++) { -- cb->x = (uint16_t) clips->x1 + host_x; -- cb->y = (uint16_t) clips->y1 + host_y; -- cb->z = 0; -- cb->srcx = (uint16_t) clips->x1; -- cb->srcy = (uint16_t) clips->y1; -- cb->srcz = 0; -- cb->w = (uint16_t) (clips->x2 - clips->x1); -- cb->h = (uint16_t) (clips->y2 - clips->y1); -- cb->d = 1; --#if 0 -- LogMessage(X_INFO, "DMA! x: %u y: %u srcx: %u srcy: %u w: %u h: %u %s\n", -- cb->x, cb->y, cb->srcx, cb->srcy, cb->w, cb->h, -- to_surface ? "to" : "from"); --#endif -- -- } -- -- memset(&arg, 0, sizeof(arg)); -- memset(&rep, 0, sizeof(rep)); -- -- rep.error = -EFAULT; -- arg.fence_rep = ((to_surface) ? 0UL : (unsigned long)&rep); -- arg.commands = (unsigned long)cmd; -- arg.command_size = size; -- arg.throttle_us = 0; -- arg.version = DRM_VMW_EXECBUF_VERSION; -- -- ret = drmCommandWrite(ibuf->drm_fd, DRM_VMW_EXECBUF, &arg, sizeof(arg)); -- if (ret) { -- LogMessage(X_ERROR, "DMA error %s.\n", strerror(-ret)); -- } -- -- free(cmd); -- -- if (rep.error == 0) { -- ret = vmwgfx_fence_wait(ibuf->drm_fd, rep.handle, TRUE); -- if (ret) { -- LogMessage(X_ERROR, "DMA from host fence wait error %s.\n", -- strerror(-ret)); -- vmwgfx_fence_unref(ibuf->drm_fd, rep.handle); -- } -- } -- -- return 0; --} -- --int - vmwgfx_get_param(int drm_fd, uint32_t param, uint64_t *out) - { - struct drm_vmw_getparam_arg gp_arg; -diff --git a/vmwgfx/vmwgfx_drmi.h b/vmwgfx/vmwgfx_drmi.h -index 2435009..fff728a 100644 ---- a/vmwgfx/vmwgfx_drmi.h -+++ b/vmwgfx/vmwgfx_drmi.h -@@ -60,11 +60,6 @@ extern void - vmwgfx_dmabuf_unmap(struct vmwgfx_dmabuf *buf); - - extern int --vmwgfx_dma(unsigned int host_x, unsigned int host_y, -- RegionPtr region, struct vmwgfx_dmabuf *buf, -- uint32_t buf_pitch, uint32_t surface_handle, int to_surface); -- --extern int - vmwgfx_num_streams(int drm_fd, uint32_t *ntot, uint32_t *nfree); - - extern int -diff --git a/vmwgfx/vmwgfx_saa.c b/vmwgfx/vmwgfx_saa.c -index 5534ca3..fd80682 100644 ---- a/vmwgfx/vmwgfx_saa.c -+++ b/vmwgfx/vmwgfx_saa.c -@@ -279,40 +279,40 @@ vmwgfx_saa_dma(struct vmwgfx_saa *vsaa, - Bool to_hw) - { - struct vmwgfx_saa_pixmap *vpix = vmwgfx_saa_pixmap(pixmap); -+ void *data = vpix->malloc; -+ int ret; - - if (!vpix->hw || (!vpix->gmr && !vpix->malloc)) - return TRUE; - -- if (vpix->gmr && vsaa->can_optimize_dma) { -- uint32_t handle, dummy; - -- if (xa_surface_handle(vpix->hw, xa_handle_type_shared, -- &handle, &dummy) != 0) -- goto out_err; -- if (vmwgfx_dma(0, 0, reg, vpix->gmr, pixmap->devKind, handle, -- to_hw) != 0) -+ if (vpix->gmr) { -+ data = vmwgfx_dmabuf_map(vpix->gmr); -+ if (!data) - goto out_err; -- } else { -- void *data = vpix->malloc; -- int ret; -+ } - -- if (vpix->gmr) { -- data = vmwgfx_dmabuf_map(vpix->gmr); -- if (!data) -- goto out_err; -- } -+ ret = xa_surface_dma(vsaa->xa_ctx, vpix->hw, data, pixmap->devKind, -+ (int) to_hw, -+ (struct xa_box *) REGION_RECTS(reg), -+ REGION_NUM_RECTS(reg)); -+ if (vpix->gmr) -+ vmwgfx_dmabuf_unmap(vpix->gmr); -+ -+ if (ret) -+ goto out_err; -+ -+ ret = xa_surface_dma(vsaa->xa_ctx, vpix->hw, data, pixmap->devKind, -+ (int) to_hw, -+ (struct xa_box *) REGION_RECTS(reg), -+ REGION_NUM_RECTS(reg)); -+ if (to_hw) -+ xa_context_flush(vsaa->xa_ctx); -+ if (vpix->gmr) -+ vmwgfx_dmabuf_unmap(vpix->gmr); -+ if (ret) -+ goto out_err; - -- ret = xa_surface_dma(vsaa->xa_ctx, vpix->hw, data, pixmap->devKind, -- (int) to_hw, -- (struct xa_box *) REGION_RECTS(reg), -- REGION_NUM_RECTS(reg)); -- if (to_hw) -- xa_context_flush(vsaa->xa_ctx); -- if (vpix->gmr) -- vmwgfx_dmabuf_unmap(vpix->gmr); -- if (ret) -- goto out_err; -- } - return TRUE; - out_err: - LogMessage(X_ERROR, "DMA %s surface failed.\n", -@@ -1372,7 +1372,6 @@ vmwgfx_saa_init(ScreenPtr pScreen, int drm_fd, struct xa_tracker *xat, - vsaa->xa_ctx = xa_context_default(xat); - vsaa->drm_fd = drm_fd; - vsaa->present_flush = present_flush; -- vsaa->can_optimize_dma = FALSE; - vsaa->use_present_opt = direct_presents; - vsaa->only_hw_presents = only_hw_presents; - vsaa->rendercheck = rendercheck; -diff --git a/vmwgfx/vmwgfx_saa_priv.h b/vmwgfx/vmwgfx_saa_priv.h -index 16583b0..f5f45ba 100644 ---- a/vmwgfx/vmwgfx_saa_priv.h -+++ b/vmwgfx/vmwgfx_saa_priv.h -@@ -50,7 +50,6 @@ struct vmwgfx_saa { - int ydiff; - RegionRec present_region; - uint32_t src_handle; -- Bool can_optimize_dma; - Bool use_present_opt; - Bool only_hw_presents; - Bool rendercheck; --- -1.8.1.4 - diff --git a/U_0005-vmwgfx-handle-changes-of-DamageUnregister-API-in-1.1.patch b/U_0005-vmwgfx-handle-changes-of-DamageUnregister-API-in-1.1.patch deleted file mode 100644 index d8d3474..0000000 --- a/U_0005-vmwgfx-handle-changes-of-DamageUnregister-API-in-1.1.patch +++ /dev/null @@ -1,43 +0,0 @@ -From e26dec8f5278df74a102493bf6d2d8444dab5d6d Mon Sep 17 00:00:00 2001 -From: Gaetan Nadon -Date: Mon, 28 Oct 2013 18:21:29 -0400 -Subject: [PATCH 5/5] vmwgfx: handle changes of DamageUnregister API in - 1.14.99.2 - -Fix is inspired from the intel driver. - -Reviewed-by: Jakob Bornecrantz -Signed-off-by: Gaetan Nadon -Signed-off-by: Jakob Bornecrantz ---- - vmwgfx/vmwgfx_saa.c | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/vmwgfx/vmwgfx_saa.c b/vmwgfx/vmwgfx_saa.c -index fd80682..346e7f4 100644 ---- a/vmwgfx/vmwgfx_saa.c -+++ b/vmwgfx/vmwgfx_saa.c -@@ -26,6 +26,7 @@ - */ - - #include -+#include - #include - #include - #include -@@ -76,7 +77,12 @@ vmwgfx_pixmap_remove_damage(PixmapPtr pixmap) - if (!spix->damage || vpix->hw || vpix->gmr || vpix->malloc) - return; - -+#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,14,99,2,0) -+ DamageUnregister(spix->damage); -+#else - DamageUnregister(&pixmap->drawable, spix->damage); -+#endif -+ - DamageDestroy(spix->damage); - spix->damage = NULL; - } --- -1.8.1.4 - diff --git a/xf86-video-vmware-13.0.1-51cdfa6.tar.bz2 b/xf86-video-vmware-13.0.1-51cdfa6.tar.bz2 new file mode 100644 index 0000000..bfcc0af --- /dev/null +++ b/xf86-video-vmware-13.0.1-51cdfa6.tar.bz2 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:16d00141b6efab7d25605263941a3107b5a99aeedb05ef3d33b48bbe9a4cc0fe +size 423553 diff --git a/xf86-video-vmware-13.0.1.tar.bz2 b/xf86-video-vmware-13.0.1.tar.bz2 deleted file mode 100644 index 9e10ce7..0000000 --- a/xf86-video-vmware-13.0.1.tar.bz2 +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:802dda415c22412edad6c3df44fe18a06e91d0f8456d9a58bac0d340fdf8fe3d -size 432401 diff --git a/xf86-video-vmware.changes b/xf86-video-vmware.changes index 6e17355..c94f944 100644 --- a/xf86-video-vmware.changes +++ b/xf86-video-vmware.changes @@ -1,3 +1,14 @@ +------------------------------------------------------------------- +Wed Mar 19 17:14:28 UTC 2014 - sndirsch@suse.com + +- update to current git commit 51cdfa6 in order to fix build against + latest xserver +- obsoletes U_0001-vmwgfx-update-for-XA-API-changes.patch, + U_0002-vmwgfx-Avoid-HW-operations-when-not-master.patch, + U_0003-vmwgfx-Implement-textured-video-completely-on-top-of.patch, + U_0004-vmwgfx-Get-rid-of-device-specific-DMA-code.patch, + U_0005-vmwgfx-handle-changes-of-DamageUnregister-API-in-1.1.patch + ------------------------------------------------------------------- Mon Dec 2 15:52:07 UTC 2013 - sndirsch@suse.com diff --git a/xf86-video-vmware.spec b/xf86-video-vmware.spec index fb55858..2e8c585 100644 --- a/xf86-video-vmware.spec +++ b/xf86-video-vmware.spec @@ -1,7 +1,7 @@ # # spec file for package xf86-video-vmware # -# Copyright (c) 2013 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -23,12 +23,8 @@ Summary: VMware SVGA video driver for the Xorg X server License: MIT Group: System/X11/Servers/XF86_4 Url: http://xorg.freedesktop.org/ -Source0: http://xorg.freedesktop.org/releases/individual/driver/%{name}-%{version}.tar.bz2 -Patch1: U_0001-vmwgfx-update-for-XA-API-changes.patch -Patch2: U_0002-vmwgfx-Avoid-HW-operations-when-not-master.patch -Patch3: U_0003-vmwgfx-Implement-textured-video-completely-on-top-of.patch -Patch4: U_0004-vmwgfx-Get-rid-of-device-specific-DMA-code.patch -Patch5: U_0005-vmwgfx-handle-changes-of-DamageUnregister-API-in-1.1.patch +#http://xorg.freedesktop.org/releases/individual/driver/ +Source0: %{name}-%{version}-51cdfa6.tar.bz2 ExclusiveArch: %ix86 x86_64 BuildRequires: pkg-config BuildRequires: pkgconfig(fontsproto) @@ -53,11 +49,6 @@ vmware is an Xorg driver for VMware virtual video cards. %prep %setup -q -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 %build %configure