- 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
This commit is contained in:
parent
e81dc8bbd0
commit
a595b0677c
@ -1,187 +0,0 @@
|
||||
From 0945bea5fc32eacb7bf42639efbd45dcd43e7ab5 Mon Sep 17 00:00:00 2001
|
||||
From: Rob Clark <robdclark@gmail.com>
|
||||
Date: Mon, 10 Jun 2013 13:31:31 -0400
|
||||
Subject: [PATCH 1/5] vmwgfx: update for XA API changes
|
||||
|
||||
Signed-off-by: Rob Clark <robdclark@gmail.com>
|
||||
Signed-off-by: Jakob Bornecrantz <jakob@vmware.com>
|
||||
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
|
||||
Tested-by: Jakob Bornecrantz <jakob@vmware.com>
|
||||
---
|
||||
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
|
||||
|
@ -1,240 +0,0 @@
|
||||
From 835ce4698f916ba080f4132988fd4caf898e0b1e Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
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 <thellstrom@vmware.com>
|
||||
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
|
||||
---
|
||||
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
|
||||
|
@ -1,195 +0,0 @@
|
||||
From 7192acf9f0bf8e7176ab0b803b861a858623f709 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
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 <thellstrom@vmware.com>
|
||||
Reviewed-by: Zack Rusin <zackr@vmware.com>
|
||||
---
|
||||
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
|
||||
|
@ -1,240 +0,0 @@
|
||||
From 45b2457516a9db4bd1d60fbb24a1efbe2d9dd932 Mon Sep 17 00:00:00 2001
|
||||
From: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
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 <thellstrom@vmware.com>
|
||||
Reviewed-by: Zack Rusin <zackr@vmware.com>
|
||||
---
|
||||
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
|
||||
|
@ -1,43 +0,0 @@
|
||||
From e26dec8f5278df74a102493bf6d2d8444dab5d6d Mon Sep 17 00:00:00 2001
|
||||
From: Gaetan Nadon <memsize@videotron.ca>
|
||||
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 <jakob@vmware.com>
|
||||
Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
|
||||
Signed-off-by: Jakob Bornecrantz <jakob@vmware.com>
|
||||
---
|
||||
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 <xorg-server.h>
|
||||
+#include <xorgVersion.h>
|
||||
#include <mi.h>
|
||||
#include <fb.h>
|
||||
#include <xf86drmMode.h>
|
||||
@@ -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
|
||||
|
3
xf86-video-vmware-13.0.1-51cdfa6.tar.bz2
Normal file
3
xf86-video-vmware-13.0.1-51cdfa6.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:16d00141b6efab7d25605263941a3107b5a99aeedb05ef3d33b48bbe9a4cc0fe
|
||||
size 423553
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:802dda415c22412edad6c3df44fe18a06e91d0f8456d9a58bac0d340fdf8fe3d
|
||||
size 432401
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user