diff --git a/.gitignore b/.gitignore index 066c675..b474f05 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ xf86-video-nouveau-0.0.16-20100615gitdb98ad2.tar.bz2 /xf86-video-nouveau-20120426.tar.xz /xf86-video-nouveau-1.0.0.tar.bz2 /xf86-video-nouveau-1.0.1.tar.bz2 +/xf86-video-nouveau-20120816.tar.xz diff --git a/nouveau-prime.patch b/nouveau-prime.patch new file mode 100644 index 0000000..d50cbe9 --- /dev/null +++ b/nouveau-prime.patch @@ -0,0 +1,510 @@ +diff --git a/src/drmmode_display.c b/src/drmmode_display.c +index 62838fa..71f38c9 100644 +--- a/src/drmmode_display.c ++++ b/src/drmmode_display.c +@@ -1199,6 +1199,8 @@ Bool drmmode_pre_init(ScrnInfoPtr pScrn, int fd, int cpp) + for (i = 0; i < drmmode->mode_res->count_connectors; i++) + drmmode_output_init(pScrn, drmmode, i); + ++ xf86ProviderSetup(pScrn, NULL, "nouveau"); ++ + xf86InitialConfiguration(pScrn, TRUE); + + return TRUE; +diff --git a/src/nouveau_dri2.c b/src/nouveau_dri2.c +index 62333b1..fbcc35c 100644 +--- a/src/nouveau_dri2.c ++++ b/src/nouveau_dri2.c +@@ -22,33 +22,27 @@ nouveau_dri2_buffer(DRI2BufferPtr buf) + } + + DRI2BufferPtr +-nouveau_dri2_create_buffer(DrawablePtr pDraw, unsigned int attachment, ++nouveau_dri2_create_buffer2(ScreenPtr pScreen, DrawablePtr pDraw, unsigned int attachment, + unsigned int format) + { +- ScreenPtr pScreen = pDraw->pScreen; + NVPtr pNv = NVPTR(xf86ScreenToScrn(pScreen)); + struct nouveau_dri2_buffer *nvbuf; + struct nouveau_pixmap *nvpix; +- PixmapPtr ppix; ++ PixmapPtr ppix = NULL; + + nvbuf = calloc(1, sizeof(*nvbuf)); + if (!nvbuf) + return NULL; + + if (attachment == DRI2BufferFrontLeft) { +- if (pDraw->type == DRAWABLE_PIXMAP) { +- ppix = (PixmapPtr)pDraw; +- } else { +- WindowPtr pwin = (WindowPtr)pDraw; +- ppix = pScreen->GetWindowPixmap(pwin); +- ++ if (pDraw->type == DRAWABLE_WINDOW) { + #if DRI2INFOREC_VERSION >= 6 + /* Set initial swap limit on drawable. */ + DRI2SwapLimit(pDraw, pNv->swap_limit); + #endif + } +- +- ppix->refcnt++; ++ if (ppix) ++ ppix->refcnt++; + } else { + int bpp; + unsigned int usage_hint = NOUVEAU_CREATE_PIXMAP_TILED; +@@ -67,31 +61,43 @@ nouveau_dri2_create_buffer(DrawablePtr pDraw, unsigned int attachment, + usage_hint); + } + +- pNv->exa_force_cp = TRUE; +- exaMoveInPixmap(ppix); +- pNv->exa_force_cp = FALSE; ++ if (ppix) { ++ pNv->exa_force_cp = TRUE; ++ exaMoveInPixmap(ppix); ++ pNv->exa_force_cp = FALSE; ++ ++ nvbuf->base.pitch = ppix->devKind; ++ nvbuf->base.cpp = ppix->drawable.bitsPerPixel / 8; ++ } + + nvbuf->base.attachment = attachment; +- nvbuf->base.pitch = ppix->devKind; +- nvbuf->base.cpp = ppix->drawable.bitsPerPixel / 8; + nvbuf->base.driverPrivate = nvbuf; + nvbuf->base.format = format; + nvbuf->base.flags = 0; + nvbuf->ppix = ppix; + +- nvpix = nouveau_pixmap(ppix); +- if (!nvpix || !nvpix->bo || +- nouveau_bo_name_get(nvpix->bo, &nvbuf->base.name)) { +- pScreen->DestroyPixmap(nvbuf->ppix); +- free(nvbuf); +- return NULL; ++ if (ppix) { ++ nvpix = nouveau_pixmap(ppix); ++ if (!nvpix || !nvpix->bo || ++ nouveau_bo_name_get(nvpix->bo, &nvbuf->base.name)) { ++ pScreen->DestroyPixmap(nvbuf->ppix); ++ free(nvbuf); ++ return NULL; ++ } + } +- + return &nvbuf->base; + } + ++DRI2BufferPtr ++nouveau_dri2_create_buffer(DrawablePtr pDraw, unsigned int attachment, ++ unsigned int format) ++{ ++ return nouveau_dri2_create_buffer2(pDraw->pScreen, pDraw, ++ attachment, format); ++} ++ + void +-nouveau_dri2_destroy_buffer(DrawablePtr pDraw, DRI2BufferPtr buf) ++nouveau_dri2_destroy_buffer2(ScreenPtr pScreen, DrawablePtr pDraw, DRI2BufferPtr buf) + { + struct nouveau_dri2_buffer *nvbuf; + +@@ -99,38 +105,80 @@ nouveau_dri2_destroy_buffer(DrawablePtr pDraw, DRI2BufferPtr buf) + if (!nvbuf) + return; + +- pDraw->pScreen->DestroyPixmap(nvbuf->ppix); ++ if (nvbuf->ppix) ++ pScreen->DestroyPixmap(nvbuf->ppix); + free(nvbuf); + } + + void +-nouveau_dri2_copy_region(DrawablePtr pDraw, RegionPtr pRegion, ++nouveau_dri2_destroy_buffer(DrawablePtr pDraw, DRI2BufferPtr buf) ++{ ++ nouveau_dri2_destroy_buffer2(pDraw->pScreen, pDraw, buf); ++} ++ ++void ++nouveau_dri2_copy_region2(ScreenPtr pScreen, DrawablePtr pDraw, RegionPtr pRegion, + DRI2BufferPtr pDstBuffer, DRI2BufferPtr pSrcBuffer) + { + struct nouveau_dri2_buffer *src = nouveau_dri2_buffer(pSrcBuffer); + struct nouveau_dri2_buffer *dst = nouveau_dri2_buffer(pDstBuffer); +- PixmapPtr pspix = src->ppix, pdpix = dst->ppix; +- ScreenPtr pScreen = pDraw->pScreen; + RegionPtr pCopyClip; + GCPtr pGC; +- ++ DrawablePtr src_draw, dst_draw; ++ Bool translate = FALSE; ++ int off_x = 0, off_y = 0; ++ ++ src_draw = &src->ppix->drawable; ++ dst_draw = &dst->ppix->drawable; ++#if 0 ++ ErrorF("attachments src %d, dst %d, drawable %p %p pDraw %p\n", ++ src->base.attachment, dst->base.attachment, ++ src_draw, dst_draw, pDraw); ++#endif + if (src->base.attachment == DRI2BufferFrontLeft) +- pspix = (PixmapPtr)pDraw; +- if (dst->base.attachment == DRI2BufferFrontLeft) +- pdpix = (PixmapPtr)pDraw; ++ src_draw = pDraw; ++ if (dst->base.attachment == DRI2BufferFrontLeft) { ++ if (pDraw->pScreen != pScreen) { ++ dst_draw = DRI2UpdatePrime(pDraw, pDstBuffer); ++ if (!dst_draw) ++ return; ++ } ++ else ++ dst_draw = pDraw; ++ } ++ ++ if (dst_draw != pDraw) ++ translate = TRUE; ++ ++ if (translate && pDraw->type == DRAWABLE_WINDOW) { ++ WindowPtr pWin = (WindowPtr)pDraw; ++ off_x = pWin->origin.x; ++ off_y = pWin->origin.y; ++ } + + pGC = GetScratchGC(pDraw->depth, pScreen); + pCopyClip = REGION_CREATE(pScreen, NULL, 0); + REGION_COPY(pScreen, pCopyClip, pRegion); +- pGC->funcs->ChangeClip(pGC, CT_REGION, pCopyClip, 0); +- ValidateGC(&pdpix->drawable, pGC); + +- pGC->ops->CopyArea(&pspix->drawable, &pdpix->drawable, pGC, 0, 0, +- pDraw->width, pDraw->height, 0, 0); ++ if (translate) { ++ REGION_TRANSLATE(pScreen, pCopyClip, off_x, off_y); ++ } ++ pGC->funcs->ChangeClip(pGC, CT_REGION, pCopyClip, 0); ++ ValidateGC(dst_draw, pGC); ++ pGC->ops->CopyArea(src_draw, dst_draw, pGC, 0, 0, ++ pDraw->width, pDraw->height, off_x, off_y); + + FreeScratchGC(pGC); + } + ++void ++nouveau_dri2_copy_region(DrawablePtr pDraw, RegionPtr pRegion, ++ DRI2BufferPtr pDstBuffer, DRI2BufferPtr pSrcBuffer) ++{ ++ return nouveau_dri2_copy_region2(pDraw->pScreen, pDraw, pRegion, ++ pDstBuffer, pSrcBuffer); ++} ++ + struct nouveau_dri2_vblank_state { + enum { + SWAP, +@@ -169,7 +217,9 @@ update_front(DrawablePtr draw, DRI2BufferPtr front) + return FALSE; + } + +- (*draw->pScreen->DestroyPixmap)(nvbuf->ppix); ++ if (nvbuf->ppix) ++ (*draw->pScreen->DestroyPixmap)(nvbuf->ppix); ++ + front->pitch = pixmap->devKind; + front->cpp = pixmap->drawable.bitsPerPixel / 8; + nvbuf->ppix = pixmap; +@@ -689,6 +739,17 @@ nouveau_dri2_init(ScreenPtr pScreen) + dri2.SwapLimitValidate = nouveau_dri2_swap_limit_validate; + #endif + ++#if DRI2INFOREC_VERSION >= 7 ++ dri2.version = 7; ++ dri2.GetParam = NULL; ++#endif ++ ++#if DRI2INFOREC_VERSION >= 9 ++ dri2.version = 9; ++ dri2.CreateBuffer2 = nouveau_dri2_create_buffer2; ++ dri2.DestroyBuffer2 = nouveau_dri2_destroy_buffer2; ++ dri2.CopyRegion2 = nouveau_dri2_copy_region2; ++#endif + return DRI2ScreenInit(pScreen, &dri2); + } + +diff --git a/src/nouveau_exa.c b/src/nouveau_exa.c +index 9b6b1f3..29bf003 100644 +--- a/src/nouveau_exa.c ++++ b/src/nouveau_exa.c +@@ -154,6 +154,45 @@ nouveau_exa_destroy_pixmap(ScreenPtr pScreen, void *priv) + free(nvpix); + } + ++static Bool ++nouveau_exa_share_pixmap_backing(PixmapPtr ppix, ScreenPtr slave, void **handle_p) ++{ ++ struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); ++ struct nouveau_pixmap *nvpix = nouveau_pixmap(ppix); ++ int ret; ++ int handle; ++ ++ ret = nouveau_bo_set_prime(bo, &handle); ++ if (ret != 0) { ++ ErrorF("%s: ret is %d errno is %d\n", __func__, ret, errno); ++ return FALSE; ++ } ++ nvpix->shared = TRUE; ++ *handle_p = (void *)(long)handle; ++ return TRUE; ++} ++ ++static Bool ++nouveau_exa_set_shared_pixmap_backing(PixmapPtr ppix, void *handle) ++{ ++ ScrnInfoPtr pScrn = xf86ScreenToScrn(ppix->drawable.pScreen); ++ NVPtr pNv = NVPTR(pScrn); ++ struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); ++ struct nouveau_pixmap *nvpix = nouveau_pixmap(ppix); ++ int ret; ++ int ihandle = (int)(long)(handle); ++ ++ ret = nouveau_bo_prime_handle_ref(pNv->dev, ihandle, &bo); ++ if (ret) { ++ ErrorF("failed to get BO with handle %d\n", ihandle); ++ return FALSE; ++ } ++ nvpix->bo = bo; ++ nvpix->shared = TRUE; ++ close(ihandle); ++ return TRUE; ++} ++ + bool + nv50_style_tiled_pixmap(PixmapPtr ppix) + { +@@ -381,6 +420,8 @@ nouveau_exa_init(ScreenPtr pScreen) + + exa->CreatePixmap2 = nouveau_exa_create_pixmap; + exa->DestroyPixmap = nouveau_exa_destroy_pixmap; ++ exa->SharePixmapBacking = nouveau_exa_share_pixmap_backing; ++ exa->SetSharedPixmapBacking = nouveau_exa_set_shared_pixmap_backing; + + if (pNv->Architecture >= NV_ARCH_50) { + exa->maxX = 8192; +diff --git a/src/nv50_exa.c b/src/nv50_exa.c +index 2a25e74..d6f38eb 100644 +--- a/src/nv50_exa.c ++++ b/src/nv50_exa.c +@@ -94,10 +94,11 @@ NV50EXAAcquireSurface2D(PixmapPtr ppix, int is_src, uint32_t fmt) + { + NV50EXA_LOCALS(ppix); + struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); ++ struct nouveau_pixmap *nvpix = nouveau_pixmap(ppix); + int mthd = is_src ? NV50_2D_SRC_FORMAT : NV50_2D_DST_FORMAT; + uint32_t bo_flags; + +- bo_flags = NOUVEAU_BO_VRAM; ++ bo_flags = nvpix->shared ? NOUVEAU_BO_GART : NOUVEAU_BO_VRAM; + bo_flags |= is_src ? NOUVEAU_BO_RD : NOUVEAU_BO_WR; + + if (!nv50_style_tiled_pixmap(ppix)) { +diff --git a/src/nv_driver.c b/src/nv_driver.c +index e8725f5..e17be19 100644 +--- a/src/nv_driver.c ++++ b/src/nv_driver.c +@@ -73,6 +73,39 @@ static Bool NVPciProbe ( DriverPtr drv, + struct pci_device *dev, + intptr_t match_data ); + ++#ifdef XSERVER_PLATFORM_BUS ++static Bool ++NVPlatformProbe(DriverPtr driver, ++ int entity_num, int flags, struct xf86_platform_device *dev, intptr_t dev_match_data) ++{ ++ ScrnInfoPtr scrn = NULL; ++ uint32_t scr_flags = 0; ++ ++ if (!dev->pdev) ++ return FALSE; ++ ++ if (flags & PLATFORM_PROBE_GPU_SCREEN) ++ scr_flags = XF86_ALLOCATE_GPU_SCREEN; ++ ++ scrn = xf86AllocateScreen(driver, scr_flags); ++ xf86AddEntityToScreen(scrn, entity_num); ++ ++ scrn->driverVersion = NV_VERSION; ++ scrn->driverName = NV_DRIVER_NAME; ++ scrn->name = NV_NAME; ++ ++ scrn->Probe = NULL; ++ scrn->PreInit = NVPreInit; ++ scrn->ScreenInit = NVScreenInit; ++ scrn->SwitchMode = NVSwitchMode; ++ scrn->AdjustFrame = NVAdjustFrame; ++ scrn->EnterVT = NVEnterVT; ++ scrn->LeaveVT = NVLeaveVT; ++ scrn->FreeScreen = NVFreeScreen; ++ return scrn != NULL; ++} ++#endif ++ + /* + * This contains the functions needed by the server after loading the + * driver module. It must be supplied, and gets added the driver list by +@@ -91,7 +124,10 @@ _X_EXPORT DriverRec NV = { + 0, + NVDriverFunc, + nouveau_device_match, +- NVPciProbe ++ NVPciProbe, ++#ifdef XSERVER_PLATFORM_BUS ++ NVPlatformProbe, ++#endif + }; + + struct NvFamily +@@ -392,6 +428,37 @@ NVFlushCallback(CallbackListPtr *list, pointer user_data, pointer call_data) + nouveau_pushbuf_kick(pNv->pushbuf, pNv->pushbuf->channel); + } + ++static void ++redisplay_dirty(ScreenPtr screen, PixmapDirtyUpdatePtr dirty) ++{ ++ RegionRec pixregion; ++ ++ PixmapRegionInit(&pixregion, dirty->slave_dst->master_pixmap); ++ ++ PixmapSyncDirtyHelper(dirty, &pixregion); ++ ++ DamageRegionAppend(&dirty->slave_dst->drawable, &pixregion); ++ RegionUninit(&pixregion); ++} ++ ++static void ++nouveau_dirty_update(ScreenPtr screen) ++{ ++ RegionPtr region; ++ PixmapDirtyUpdatePtr ent; ++ ++ if (xorg_list_is_empty(&screen->pixmap_dirty_list)) ++ return; ++ ++ xorg_list_for_each_entry(ent, &screen->pixmap_dirty_list, ent) { ++ region = DamageRegion(ent->damage); ++ if (RegionNotEmpty(region)) { ++ redisplay_dirty(screen, ent); ++ DamageEmpty(ent->damage); ++ } ++ } ++} ++ + static void + NVBlockHandler (BLOCKHANDLER_ARGS_DECL) + { +@@ -399,6 +466,8 @@ NVBlockHandler (BLOCKHANDLER_ARGS_DECL) + ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen); + NVPtr pNv = NVPTR(pScrn); + ++ nouveau_dirty_update(pScreen); ++ + pScreen->BlockHandler = pNv->BlockHandler; + (*pScreen->BlockHandler) (BLOCKHANDLER_ARGS); + pScreen->BlockHandler = NVBlockHandler; +@@ -570,6 +639,23 @@ NVDRIGetVersion(ScrnInfoPtr pScrn) + return TRUE; + } + ++static void ++nouveau_setup_capabilities(ScrnInfoPtr pScrn) ++{ ++ NVPtr pNv = NVPTR(pScrn); ++ uint64_t value; ++ int ret; ++ ++ pScrn->capabilities = 0; ++ ret = drmGetCap(pNv->dev->fd, DRM_CAP_PRIME, &value); ++ if (ret == 0) { ++ if (value & DRM_PRIME_CAP_EXPORT) ++ pScrn->capabilities |= RR_Capability_SourceOutput; ++ if (value & DRM_PRIME_CAP_IMPORT) ++ pScrn->capabilities |= RR_Capability_SourceOffload; ++ } ++} ++ + static Bool + NVPreInitDRM(ScrnInfoPtr pScrn) + { +@@ -654,7 +740,7 @@ NVPreInit(ScrnInfoPtr pScrn, int flags) + + /* Get the entity, and make sure it is PCI. */ + pNv->pEnt = xf86GetEntityInfo(pScrn->entityList[0]); +- if (pNv->pEnt->location.type != BUS_PCI) ++ if (pNv->pEnt->location.type != BUS_PCI && pNv->pEnt->location.type != BUS_PLATFORM) + return FALSE; + + if (xf86IsEntityShared(pScrn->entityList[0])) { +@@ -674,6 +760,8 @@ NVPreInit(ScrnInfoPtr pScrn, int flags) + NVPreInitFail("\n"); + dev = pNv->dev; + ++ nouveau_setup_capabilities(pScrn); ++ + pScrn->chipset = malloc(sizeof(char) * 25); + sprintf(pScrn->chipset, "NVIDIA NV%02x", dev->chipset); + xf86DrvMsg(pScrn->scrnIndex, X_PROBED, "Chipset: \"%s\"\n", pScrn->chipset); +@@ -1238,6 +1326,9 @@ NVScreenInit(SCREEN_INIT_ARGS_DECL) + pNv->CreateScreenResources = pScreen->CreateScreenResources; + pScreen->CreateScreenResources = NVCreateScreenResources; + ++ pScreen->StartPixmapTracking = PixmapStartDirtyTracking; ++ pScreen->StopPixmapTracking = PixmapStopDirtyTracking; ++ + if (!xf86CrtcScreenInit(pScreen)) + return FALSE; + +diff --git a/src/nv_include.h b/src/nv_include.h +index 1e382b2..3984227 100644 +--- a/src/nv_include.h ++++ b/src/nv_include.h +@@ -20,6 +20,10 @@ + /* Drivers that need to access the PCI config space directly need this */ + #include "xf86Pci.h" + ++#ifdef XSERVER_PLATFORM_BUS ++#include "xf86platformBus.h" ++#endif ++ + /* All drivers initialising the SW cursor need this */ + #include "mipointer.h" + +diff --git a/src/nv_type.h b/src/nv_type.h +index 930b7ee..b6007e5 100644 +--- a/src/nv_type.h ++++ b/src/nv_type.h +@@ -165,6 +165,7 @@ struct nouveau_pixmap { + struct nouveau_bo *bo; + void *linear; + unsigned size; ++ Bool shared; + }; + + static inline struct nouveau_pixmap * +diff --git a/src/nvc0_exa.c b/src/nvc0_exa.c +index 6a8f1a1..dc8ba0b 100644 +--- a/src/nvc0_exa.c ++++ b/src/nvc0_exa.c +@@ -95,10 +95,11 @@ NVC0EXAAcquireSurface2D(PixmapPtr ppix, int is_src, uint32_t fmt) + { + NVC0EXA_LOCALS(ppix); + struct nouveau_bo *bo = nouveau_pixmap_bo(ppix); ++ struct nouveau_pixmap *nvpix = nouveau_pixmap(ppix); + int mthd = is_src ? NV50_2D_SRC_FORMAT : NV50_2D_DST_FORMAT; + uint32_t bo_flags; + +- bo_flags = NOUVEAU_BO_VRAM; ++ bo_flags = nvpix->shared ? NOUVEAU_BO_GART : NOUVEAU_BO_VRAM; + bo_flags |= is_src ? NOUVEAU_BO_RD : NOUVEAU_BO_WR; + + if (!nv50_style_tiled_pixmap(ppix)) { diff --git a/sources b/sources index c33f134..124602d 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ d120bdd4ee9fc3581f3b93e3b31c4574 xf86-video-nouveau-1.0.1.tar.bz2 +608d314e7bda7a13c140e01d534e11f9 xf86-video-nouveau-20120816.tar.xz diff --git a/xorg-x11-drv-nouveau-ppc.patch b/xorg-x11-drv-nouveau-ppc.patch deleted file mode 100644 index e64a4e6..0000000 --- a/xorg-x11-drv-nouveau-ppc.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff -up xf86-video-nouveau-1.0.1/src/nv_driver.c.ppc xf86-video-nouveau-1.0.1/src/nv_driver.c ---- xf86-video-nouveau-1.0.1/src/nv_driver.c.ppc 2012-07-02 12:08:19.172163488 +0200 -+++ xf86-video-nouveau-1.0.1/src/nv_driver.c 2012-07-02 12:08:57.547809381 +0200 -@@ -25,7 +25,9 @@ - #include "nv_include.h" - - #include "xorg-server.h" -+#if !defined(__powerpc__) - #include "xf86int10.h" -+#endif - #include "xf86drm.h" - #include "xf86drmMode.h" - #include "nouveau_drm.h" -diff -up xf86-video-nouveau-1.0.1/src/nv_include.h.ppc xf86-video-nouveau-1.0.1/src/nv_include.h ---- xf86-video-nouveau-1.0.1/src/nv_include.h.ppc 2012-07-02 11:40:16.658531972 +0200 -+++ xf86-video-nouveau-1.0.1/src/nv_include.h 2012-07-02 11:46:14.203915773 +0200 -@@ -30,7 +30,9 @@ - - #include "xf86DDC.h" - -+#if !defined(__powerpc__) - #include "vbe.h" -+#endif - - #include "xf86RandR12.h" - -diff -up xf86-video-nouveau-1.0.1/src/nv_type.h.ppc xf86-video-nouveau-1.0.1/src/nv_type.h ---- xf86-video-nouveau-1.0.1/src/nv_type.h.ppc 2012-07-02 12:07:22.543161675 +0200 -+++ xf86-video-nouveau-1.0.1/src/nv_type.h 2012-07-02 12:09:03.701592241 +0200 -@@ -3,7 +3,9 @@ - - #include "colormapst.h" - #include "xf86Cursor.h" -+#if !defined(__powerpc__) - #include "xf86int10.h" -+#endif - #include "exa.h" - #ifdef XF86DRI - #define _XF86DRI_SERVER_ diff --git a/xorg-x11-drv-nouveau.spec b/xorg-x11-drv-nouveau.spec index 33ef399..d1c4393 100644 --- a/xorg-x11-drv-nouveau.spec +++ b/xorg-x11-drv-nouveau.spec @@ -1,28 +1,29 @@ %define tarball xf86-video-nouveau %define moduledir %(pkg-config xorg-server --variable=moduledir ) %define driverdir %{moduledir}/drivers -#define gitdate 20120426 +%define gitdate 20120816 Summary: Xorg X11 nouveau video driver for NVIDIA graphics chipsets Name: xorg-x11-drv-nouveau # need to set an epoch to get version number in sync with upstream Epoch: 1 Version: 1.0.1 -Release: 4%{?dist} +Release: 5%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X Hardware Support # Fedora specific snapshot no upstream release %if 0%{?gitdate} -Source0: xf86-video-nouveau-%{gitdate}.tar.bz2 +Source0: xf86-video-nouveau-%{gitdate}.tar.xz %else Source0: http://nouveau.freedesktop.org/release/xf86-video-nouveau-%{version}.tar.bz2 %endif Source1: make-git-snapshot.sh +Patch1: nouveau-prime.patch + ExcludeArch: s390 s390x %{?rhel:ppc ppc64} -Patch0: xorg-x11-drv-nouveau-ppc.patch BuildRequires: libtool automake autoconf BuildRequires: xorg-x11-server-devel > 1.7.99.3-3 @@ -50,9 +51,7 @@ X.Org X11 nouveau video driver. %prep %setup -q -n xf86-video-nouveau-%{dirsuffix} -%ifarch ppc %{power64} -%patch0 -p1 -%endif +%patch1 -p1 -b .prime %build autoreconf -v --install @@ -76,6 +75,9 @@ rm -rf $RPM_BUILD_ROOT %{_mandir}/man4/nouveau.4* %changelog +* Thu Aug 16 2012 Dave Airlie 1.0.1-5 +- upstream snapshot + prime support + * Sun Jul 22 2012 Fedora Release Engineering - 1:1.0.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild