Author: krejzi
Date: Sat Aug 23 07:36:09 2014
New Revision: 3004
Log:
Add upstream fixes.
Added:
trunk/xf86-video-vmware/xf86-video-vmware-13.0.2-upstream_fixes-1.patch
Added: trunk/xf86-video-vmware/xf86-video-vmware-13.0.2-upstream_fixes-1.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ trunk/xf86-video-vmware/xf86-video-vmware-13.0.2-upstream_fixes-1.patch
Sat Aug 23 07:36:09 2014 (r3004)
@@ -0,0 +1,626 @@
+Submitted By: Armin K. <krejzi at email dot com>
+Date: 2014-07-22
+Initial Package Version: 13.0.2
+Upstream Status: Fixed
+Origin: Upstream
+Description: All fixes from git repository. Fixes failure at
runtime with systemd enabled
+ xserver among others.
+
+--- a/saa/saa_unaccel.c 2012-06-15 20:19:33.000000000 +0200
++++ b/saa/saa_unaccel.c 2014-08-23 16:31:34.114196582 +0200
+@@ -396,6 +396,7 @@
+ * region fragmentation. In any case, this greatly improves on the
performance of
+ * shaped windows on top of accelerated contents, for example unscaled OSD in
xine.
+ */
++#if 0
+ static Bool
+ saa_check_poly_fill_rect_noreadback(DrawablePtr pDrawable, GCPtr pGC,
+ int nrect, xRectangle *prect)
+@@ -476,7 +477,7 @@
+
+ return FALSE;
+ }
+-
++#endif
+ void
+ saa_check_poly_fill_rect(DrawablePtr pDrawable, GCPtr pGC,
+ int nrect, xRectangle * prect)
+@@ -487,8 +488,17 @@
+
+ SAA_FALLBACK(("to %p (%c)\n", pDrawable, saa_drawable_loc(pDrawable)));
+
++
++ /*
++ * Disable saa_check_poly_fill_rect_noreadback as it causes rendering
++ * artefacts with some motif applications. There seems to be some
++ * confusion with the damage area.
++ */
++
++#if 0
+ if (saa_check_poly_fill_rect_noreadback(pDrawable, pGC, nrect, prect))
+ return;
++#endif
+
+ sscreen->fallback_count++;
+
+--- a/src/vmware_bootstrap.c 2014-03-20 14:15:03.000000000 +0100
++++ b/src/vmware_bootstrap.c 2014-08-23 16:31:34.117196634 +0200
+@@ -30,6 +30,7 @@
+ #endif
+
+ #include "xf86.h"
++#include <xorgVersion.h>
+ #include "compiler.h"
+ #include "xf86Pci.h" /* pci */
+ #include "vm_device_version.h"
+@@ -50,6 +51,10 @@
+ #include <xf86_libc.h>
+ #endif
+
++#ifdef XSERVER_PLATFORM_BUS
++#include "xf86platformBus.h"
++#endif
++
+ #ifdef HaveDriverFuncs
+ #define VMWARE_DRIVER_FUNC HaveDriverFuncs
+ #else
+@@ -247,9 +252,6 @@
+ vmwlegacy_hookup(pScrn);
+
+ pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
+- if (pEnt->location.type != BUS_PCI)
+- return FALSE;
+-
+ pciInfo = xf86GetPciInfoForEntity(pEnt->index);
+ if (pciInfo == NULL)
+ return FALSE;
+@@ -407,6 +409,45 @@
+ }
+ #endif
+
++#ifdef XSERVER_PLATFORM_BUS
++static Bool
++VMwarePlatformProbe(DriverPtr drv, int entity, int flags,
++ struct xf86_platform_device *dev, intptr_t match_data)
++{
++ ScrnInfoPtr pScrn;
++ int scrnFlag = 0;
++
++ if (!dev->pdev)
++ return FALSE;
++
++ if (flags & PLATFORM_PROBE_GPU_SCREEN)
++ scrnFlag = XF86_ALLOCATE_GPU_SCREEN;
++
++ pScrn = xf86AllocateScreen(drv, scrnFlag);
++ if (!pScrn)
++ return FALSE;
++
++ if (xf86IsEntitySharable(entity))
++ xf86SetEntityShared(entity);
++
++ xf86AddEntityToScreen(pScrn, entity);
++
++ pScrn->driverVersion = VMWARE_DRIVER_VERSION;
++ pScrn->driverName = VMWARE_DRIVER_NAME;
++ pScrn->name = VMWARE_NAME;
++ pScrn->Probe = NULL;
++#ifdef BUILD_VMWGFX
++ vmwgfx_hookup(pScrn);
++#else
++ vmwlegacy_hookup(pScrn);
++#endif
++ pScrn->driverPrivate = pScrn->PreInit;
++ pScrn->PreInit = VMwarePreinitStub;
++
++ return TRUE;
++}
++#endif
++
+ static void
+ VMWAREIdentify(int flags)
+ {
+@@ -456,6 +497,10 @@
+ pScrn->yDpi / 2) / pScrn->yDpi;
+ }
+ return TRUE;
++#if XORG_VERSION_CURRENT >= XORG_VERSION_NUMERIC(1,15,99,902,0)
++ case SUPPORTS_SERVER_FDS:
++ return TRUE;
++#endif
+ default:
+ return FALSE;
+ }
+@@ -481,6 +526,14 @@
+ #if XSERVER_LIBPCIACCESS
+ VMwareDeviceMatch,
+ VMwarePciProbe,
++#else
++ NULL,
++ NULL,
++#endif
++#ifdef XSERVER_PLATFORM_BUS
++ VMwarePlatformProbe,
++#else
++ NULL,
+ #endif
+ };
+
+--- a/src/vmware.c 2013-04-17 12:02:10.000000000 +0200
++++ b/src/vmware.c 2014-08-23 16:31:34.115196599 +0200
+@@ -310,9 +310,6 @@
+ pVMWARE->pvtSema = &pScrn->vtSema;
+
+ pVMWARE->pEnt = xf86GetEntityInfo(pScrn->entityList[0]);
+- if (pVMWARE->pEnt->location.type != BUS_PCI) {
+- return FALSE;
+- }
+ pVMWARE->PciInfo = xf86GetPciInfoForEntity(pVMWARE->pEnt->index);
+ if (pVMWARE->PciInfo == NULL) {
+ return FALSE;
+--- a/src/vmwarevideo.c 2012-08-07 00:31:14.000000000 +0200
++++ b/src/vmwarevideo.c 2014-08-23 16:31:34.124196753 +0200
+@@ -687,7 +687,12 @@
+ int nBoxes = REGION_NUM_RECTS(&pVid->clipBoxes);
+
+ #if HAVE_FILLKEYHELPERDRAWABLE
+- xf86XVFillKeyHelperDrawable(draw, pVid->colorKey, clipBoxes);
++ if (draw->type == DRAWABLE_WINDOW) {
++ xf86XVFillKeyHelperDrawable(draw, pVid->colorKey, clipBoxes);
++ DamageDamageRegion(draw, clipBoxes);
++ } else {
++ xf86XVFillKeyHelper(pScrn->pScreen, pVid->colorKey, clipBoxes);
++ }
+ #else
+ xf86XVFillKeyHelper(pScrn->pScreen, pVid->colorKey, clipBoxes);
+ #endif
+@@ -789,7 +794,8 @@
+ struct PACKED _body {
+ uint32 escape;
+ uint32 streamId;
+- struct _item items[SVGA_VIDEO_NUM_REGS];
++ /* Old hosts can not handle more then these regs */
++ struct _item items[SVGA_VIDEO_DATA_GMRID];
+ };
+
+ struct PACKED _cmdSetRegs {
+@@ -831,7 +837,7 @@
+ cmdSetRegs.body.streamId = pVid->streamId;
+
+ items = cmdSetRegs.body.items;
+- for (i = SVGA_VIDEO_ENABLED; i < SVGA_VIDEO_NUM_REGS; i++) {
++ for (i = SVGA_VIDEO_ENABLED; i < SVGA_VIDEO_DATA_GMRID; i++) {
+ items[i].regId = i;
+ }
+
+--- a/vmwgfx/vmwgfx_crtc.c 2013-04-17 12:02:10.000000000 +0200
++++ b/vmwgfx/vmwgfx_crtc.c 2014-08-23 16:31:34.122196719 +0200
+@@ -193,6 +193,7 @@
+ crtcp->entry.pixmap = pixmap;
+ crtcp->scanout_id = vmwgfx_scanout_ref(&crtcp->entry);
+ if (crtcp->scanout_id == -1) {
++ crtcp->entry.pixmap = NULL;
+ LogMessage(X_ERROR, "Failed to convert pixmap to scanout.\n");
+ return FALSE;
+ }
+@@ -276,6 +277,10 @@
+ modesettingPtr ms = modesettingPTR(crtc->scrn);
+ struct crtc_private *crtcp = crtc->driver_private;
+
++ /* Seems like newer X servers try to move cursors without images */
++ if (!crtcp->cursor_bo)
++ return;
++
+ drmModeMoveCursor(ms->fd, crtcp->drm_crtc->crtc_id, x, y);
+ }
+
+@@ -296,8 +301,11 @@
+ if (!crtcp->cursor_bo) {
+ size_t size = 64*64*4;
+ crtcp->cursor_bo = vmwgfx_dmabuf_alloc(ms->fd, size);
+- if (!crtcp->cursor_bo)
++ if (!crtcp->cursor_bo) {
++ xf86DrvMsg(crtc->scrn->scrnIndex, X_ERROR,
++ "Failed to create a dmabuf for cursor.\n");
+ return;
++ }
+ crtcp->cursor_handle = crtcp->cursor_bo->handle;
+ }
+
+@@ -305,6 +313,9 @@
+ if (ptr) {
+ memcpy(ptr, image, 64*64*4);
+ vmwgfx_dmabuf_unmap(crtcp->cursor_bo);
++ } else {
++ xf86DrvMsg(crtc->scrn->scrnIndex, X_ERROR,
++ "Failed to map cursor dmabuf.\n");
+ }
+
+ if (crtc->cursor_shown)
+--- a/vmwgfx/vmwgfx_driver.c 2014-03-20 14:15:03.000000000 +0100
++++ b/vmwgfx/vmwgfx_driver.c 2014-08-23 16:31:34.123196736 +0200
+@@ -54,6 +54,10 @@
+
+ #include <pciaccess.h>
+
++#ifdef XSERVER_PLATFORM_BUS
++#include "xf86platformBus.h"
++#endif
++
+ #include "vmwgfx_driver.h"
+
+ #include <saa.h>
+@@ -243,6 +247,15 @@
+ .resize = drv_crtc_resize
+ };
+
++static Bool vmwgfx_use_server_fd(modesettingPtr ms)
++{
++#ifdef XF86_PDEV_SERVER_FD
++ return ms->platform_dev && (ms->platform_dev->flags &
XF86_PDEV_SERVER_FD);
++#else
++ return FALSE;
++#endif
++}
++
+ static Bool
+ drv_init_drm(ScrnInfoPtr pScrn)
+ {
+@@ -253,6 +266,12 @@
+
+ ms->fd = vmwgfx_hosted_drm_fd(ms->hdriver, ms->hosted, ms->PciInfo);
+
++#ifdef ODEV_ATTRIB_FD
++ if (ms->fd < 0 && vmwgfx_use_server_fd(ms))
++ ms->fd = xf86_get_platform_device_int_attrib(ms->platform_dev,
++ ODEV_ATTRIB_FD, -1);
++#endif
++
+ if (ms->fd < 0) {
+
+ char bus_id[64];
+@@ -465,13 +484,18 @@
+
+ pScrn->displayWidth = 640; /* default it */
+
+- if (ms->pEnt->location.type != BUS_PCI) {
++ ms->PciInfo = xf86GetPciInfoForEntity(ms->pEnt->index);
++ if (!ms->PciInfo) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Incorrect bus for device.\n");
+ goto out_err_bus;
+ }
+
+- ms->PciInfo = xf86GetPciInfoForEntity(ms->pEnt->index);
++#ifdef XSERVER_PLATFORM_BUS
++ if (pEnt->location.type == BUS_PLATFORM)
++ ms->platform_dev = pEnt->location.id.plat;
++#endif
++
+ xf86SetPrimInitDone(pScrn->entityList[0]);
+
+ ms->hdriver = vmwgfx_hosted_detect();
+@@ -605,7 +629,7 @@
+ free(ms->Options);
+ out_depth:
+ out_drm_version:
+- if (!vmwgfx_is_hosted(ms->hdriver))
++ if (!vmwgfx_is_hosted(ms->hdriver) && !vmwgfx_use_server_fd(ms))
+ close(ms->fd);
+ out_no_drm:
+ vmwgfx_hosted_destroy(ms->hdriver, ms->hosted);
+@@ -783,8 +807,8 @@
+ {
+ modesettingPtr ms = modesettingPTR(pScrn);
+
+- if (!vmwgfx_is_hosted(ms->hdriver) && !ms->isMaster &&
+- drmSetMaster(ms->fd) != 0) {
++ if (!vmwgfx_is_hosted(ms->hdriver) && !vmwgfx_use_server_fd(ms) &&
++ !ms->isMaster && drmSetMaster(ms->fd) != 0) {
+ if (errno == EINVAL) {
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "drmSetMaster failed: 2.6.29 or newer kernel required
for "
+@@ -1184,7 +1208,8 @@
+
+ vmwgfx_saa_drop_master(pScrn->pScreen);
+
+- if (!vmwgfx_is_hosted(ms->hdriver) && drmDropMaster(ms->fd))
++ if (!vmwgfx_is_hosted(ms->hdriver) && !vmwgfx_use_server_fd(ms) &&
++ drmDropMaster(ms->fd))
+ xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
+ "drmDropMaster failed: %s\n", strerror(errno));
+ ms->isMaster = FALSE;
+--- a/vmwgfx/vmwgfx_driver.h 2014-03-20 14:15:03.000000000 +0100
++++ b/vmwgfx/vmwgfx_driver.h 2014-08-23 16:31:34.117196634 +0200
+@@ -83,6 +83,7 @@
+ };
+
+ struct vmwgfx_hosted;
++struct xf86_platform_device;
+
+ typedef struct _modesettingRec
+ {
+@@ -98,6 +99,7 @@
+ int Chipset;
+ EntityInfoPtr pEnt;
+ struct pci_device *PciInfo;
++ struct xf86_platform_device *platform_dev;
+
+ /* Accel */
+ Bool accelerate_render;
+--- a/vmwgfx/vmwgfx_overlay.c 2014-03-20 14:15:03.000000000 +0100
++++ b/vmwgfx/vmwgfx_overlay.c 2014-08-23 16:31:34.120196685 +0200
+@@ -162,7 +162,7 @@
+ int (*play)(ScrnInfoPtr, struct vmwgfx_overlay_port *,
+ short, short, short, short, short,
+ short, short, short, int, unsigned char*,
+- short, short, RegionPtr);
++ short, short, RegionPtr, DrawablePtr);
+
+ /* values to go into the SVGAOverlayUnit */
+ uint32 streamId;
+@@ -217,13 +217,15 @@
+ short drw_y, short src_w, short src_h,
+ short drw_w, short drw_h, int format,
+ unsigned char *buf, short width,
+- short height, RegionPtr clipBoxes);
++ short height, RegionPtr clipBoxes,
++ DrawablePtr pDraw);
+ static int vmw_video_port_play(ScrnInfoPtr pScrn, struct vmwgfx_overlay_port
*port,
+ short src_x, short src_y, short drw_x,
+ short drw_y, short src_w, short src_h,
+ short drw_w, short drw_h, int format,
+ unsigned char *buf, short width,
+- short height, RegionPtr clipBoxes);
++ short height, RegionPtr clipBoxes,
++ DrawablePtr pDraw);
+ static void vmw_video_port_cleanup(ScrnInfoPtr pScrn, struct
vmwgfx_overlay_port *port);
+
+ static int vmw_video_buffer_alloc(int drm_fd, int size,
+@@ -380,7 +382,7 @@
+ short drw_y, short src_w, short src_h,
+ short drw_w, short drw_h, int format,
+ unsigned char *buf, short width,
+- short height, RegionPtr clipBoxes)
++ short height, RegionPtr clipBoxes, DrawablePtr pDraw)
+ {
+ unsigned short w, h;
+ int i, ret;
+@@ -412,7 +414,7 @@
+ REGION_NULL(pScrn->pScreen, &port->clipBoxes);
+ port->play = vmw_video_port_play;
+ 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);
++ drw_w, drw_h, format, buf, width, height, clipBoxes,
pDraw);
+
+ out_no_buffer:
+ while(i-- != 0) {
+@@ -448,7 +450,7 @@
+ short drw_y, short src_w, short src_h,
+ short drw_w, short drw_h, int format,
+ unsigned char *buf, short width,
+- short height, RegionPtr clipBoxes)
++ short height, RegionPtr clipBoxes, DrawablePtr pDraw)
+ {
+ struct drm_vmw_control_stream_arg arg;
+ unsigned short w, h;
+@@ -468,7 +470,7 @@
+ vmw_xv_stop_video(pScrn, port, TRUE);
+ 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);
++ clipBoxes, pDraw);
+ }
+
+ memcpy(port->bufs[port->currBuf].data, buf, port->size);
+@@ -502,8 +504,14 @@
+ */
+ if (!REGION_EQUAL(pScrn->pScreen, &port->clipBoxes, clipBoxes)) {
+ REGION_COPY(pScrn->pScreen, &port->clipBoxes, clipBoxes);
+- if (port->isAutoPaintColorkey)
+- xf86XVFillKeyHelper(pScrn->pScreen, port->colorKey, clipBoxes);
++ if (port->isAutoPaintColorkey) {
++ if (pDraw->type == DRAWABLE_WINDOW) {
++ xf86XVFillKeyHelperDrawable(pDraw, port->colorKey, clipBoxes);
++ DamageDamageRegion(pDraw, clipBoxes);
++ } else {
++ xf86XVFillKeyHelper(pScrn->pScreen, port->colorKey,
clipBoxes);
++ }
++ }
+ }
+
+ xorg_flush(pScrn->pScreen);
+@@ -667,7 +675,7 @@
+ width, height);
+
+ 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);
++ drw_w, drw_h, format, buf, width, height, clipBoxes,
dst);
+ }
+
+
+--- a/vmwgfx/vmwgfx_saa.c 2014-03-20 14:15:03.000000000 +0100
++++ b/vmwgfx/vmwgfx_saa.c 2014-08-23 16:31:34.113196565 +0200
+@@ -610,9 +610,9 @@
+ }
+
+ if (vpix->hw) {
+- if (xa_surface_redefine(vpix->hw, draw->width, draw->height,
+- draw->depth, xa_type_argb,
+- xa_format_unknown, vpix->xa_flags, 1) != 0)
++ if (!vmwgfx_xa_surface_redefine(vpix, vpix->hw, draw->width,
++ draw->height, draw->depth, xa_type_argb,
++ xa_format_unknown, vpix->xa_flags, 1))
+ return FALSE;
+ }
+
+@@ -824,11 +824,11 @@
+ return FALSE;
+
+ vpix->xa_flags = new_flags;
++ vpix->hw = hw;
+
+ if (!vmwgfx_pixmap_add_damage(pixmap))
+ goto out_no_damage;
+
+- vpix->hw = hw;
+ vpix->backing |= VMWGFX_PIX_SURFACE;
+ vmwgfx_pixmap_free_storage(vpix);
+
+@@ -841,6 +841,7 @@
+ return TRUE;
+
+ out_no_damage:
++ vpix->hw = NULL;
+ xa_surface_destroy(hw);
+ return FALSE;
+ }
+@@ -1158,6 +1159,8 @@
+ * and check whether XA can accelerate.
+ */
+
++ if (!mask_pix)
++ mask_pict = NULL;
+ xa_comp = vmwgfx_xa_setup_comp(vsaa->vcomp, op,
+ src_pict, mask_pict, dst_pict);
+ if (!xa_comp)
+@@ -1504,7 +1507,8 @@
+ * The KMS fb will be a HW surface. Create it, add damage
+ * and get the handle.
+ */
+- if (!vmwgfx_hw_accel_validate(pixmap, 0, XA_FLAG_SCANOUT, 0, NULL))
++ if (!vmwgfx_hw_accel_validate(pixmap, 0, XA_FLAG_SCANOUT |
++ XA_FLAG_RENDER_TARGET, 0, NULL))
+ goto out_err;
+ if (_xa_surface_handle(vpix->hw, &handle, &dummy) != 0)
+ goto out_err;
+--- a/vmwgfx/vmwgfx_saa_priv.h 2014-03-20 14:15:03.000000000 +0100
++++ b/vmwgfx/vmwgfx_saa_priv.h 2014-08-23 16:31:34.110196514 +0200
+@@ -100,6 +100,17 @@
+ Bool
+ vmwgfx_hw_commit(PixmapPtr pixmap);
+
++Bool
++vmwgfx_xa_surface_redefine(struct vmwgfx_saa_pixmap *vpix,
++ struct xa_surface *srf,
++ int width,
++ int height,
++ int depth,
++ enum xa_surface_type stype,
++ enum xa_formats rgb_format,
++ unsigned int new_flags,
++ int copy_contents);
++
+ /*
+ * vmwgfx_xa_composite.c
+ */
+--- a/vmwgfx/vmwgfx_xa_surface.c 2014-03-20 14:15:03.000000000 +0100
++++ b/vmwgfx/vmwgfx_xa_surface.c 2014-08-23 16:31:34.111196531 +0200
+@@ -43,6 +43,52 @@
+ static const unsigned int vmwgfx_stype_map_size =
+ sizeof(vmwgfx_stype_map) / sizeof(enum xa_surface_type);
+
++/**
++ * vmwgfx_xa_surface_redefine - wrapper around xa_surface_redefine
++ *
++ * @vpix: Pointer to the struct vmwgfx_saa_pixmap the surface is attached to.
++ * @srf: The surface.
++ * @width: New width.
++ * @height: New height.
++ * @depth: New pixel depth.
++ * @stype: New surface type.
++ * @rgb_format: New rgb format.
++ * @new_flags: New surface flags.
++ * @copy_contents: Copy contents if new backing store is allocated.
++ *
++ * This is a wrapper that prints out an error message if the backing store
++ * of an active scanout surface is changed.
++ */
++Bool
++vmwgfx_xa_surface_redefine(struct vmwgfx_saa_pixmap *vpix,
++ struct xa_surface *srf,
++ int width,
++ int height,
++ int depth,
++ enum xa_surface_type stype,
++ enum xa_formats rgb_format,
++ unsigned int new_flags,
++ int copy_contents)
++{
++ uint32_t handle, new_handle, dummy;
++ Bool have_handle = FALSE;
++
++ if (!WSBMLISTEMPTY(&vpix->scanout_list))
++ have_handle = (_xa_surface_handle(srf, &handle, &dummy) == XA_ERR_NONE);
++
++ if (xa_surface_redefine(srf, width, height, depth, stype, rgb_format,
++ new_flags, copy_contents) != XA_ERR_NONE)
++ return FALSE;
++
++ if (!WSBMLISTEMPTY(&vpix->scanout_list) && have_handle &&
++ _xa_surface_handle(srf, &new_handle, &dummy) == XA_ERR_NONE &&
++ new_handle != handle) {
++ LogMessage(X_ERROR, "Changed active scanout surface handle.\n");
++ }
++
++ return TRUE;
++}
++
+
+ /*
+ * Create an xa format from a PICT format.
+@@ -323,13 +369,14 @@
+ if (vpix->staging_format != xa_surface_format(vpix->hw))
+ LogMessage(X_INFO, "Changing hardware format.\n");
+
+- if (xa_surface_redefine(vpix->hw,
+- pixmap->drawable.width,
+- pixmap->drawable.height,
+- 0,
+- xa_type_other,
+- vpix->staging_format,
+- new_flags, 1) != XA_ERR_NONE)
++ if (!vmwgfx_xa_surface_redefine(vpix,
++ vpix->hw,
++ pixmap->drawable.width,
++ pixmap->drawable.height,
++ 0,
++ xa_type_other,
++ vpix->staging_format,
++ new_flags, 1) != XA_ERR_NONE)
+ return FALSE;
+ vpix->xa_flags = new_flags;
+ } else if (!vmwgfx_create_hw(vsaa, pixmap))
+--- a/vmwgfx/vmwgfx_xmir.c 2014-03-20 14:15:03.000000000 +0100
++++ b/vmwgfx/vmwgfx_xmir.c 2014-08-23 16:31:34.112196548 +0200
+@@ -36,6 +36,7 @@
+
+ #include "vmwgfx_hosted.h"
+ #include "vmwgfx_saa.h"
++#include <xf86Crtc.h>
+ #include <xf86Priv.h>
+ #include <xmir.h>
+
+@@ -103,6 +104,11 @@
+ return FALSE;
+
+ hosted->pScreen = pScreen;
++ if (!xf86SetDesiredModes(hosted->pScrn)) {
++ xmir_screen_close(hosted->pScreen, hosted->xmir);
++ hosted->pScreen = NULL;
++ return FALSE;
++ }
+
+ return TRUE;
+ }
+--- a/vmwgfx/vmwgfx_xwayland.c 2014-03-20 14:15:03.000000000 +0100
++++ b/vmwgfx/vmwgfx_xwayland.c 2014-08-23 16:31:34.118196651 +0200
+@@ -62,7 +62,7 @@
+ * surface.
+ */
+ vpix->hw_is_hosted = TRUE;
+- if (xa_surface_handle(vpix->hw, &name, &pitch) != XA_ERR_NONE)
++ if (_xa_surface_handle(vpix->hw, &name, &pitch) != XA_ERR_NONE)
+ return BadDrawable;
+
+ return xwl_create_window_buffer_drm(xwl_window, pixmap, name);
--
http://lists.linuxfromscratch.org/listinfo/patches
FAQ: http://www.linuxfromscratch.org/blfs/faq.html
Unsubscribe: See the above information page