rpms/xorg-x11-drv-i810/devel intel-modeset.patch, 1.2, 1.3 xorg-x11-drv-i810.spec, 1.82, 1.83
Dave Airlie (airlied)
fedora-extras-commits at redhat.com
Fri Mar 7 06:53:28 UTC 2008
Author: airlied
Update of /cvs/pkgs/rpms/xorg-x11-drv-i810/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12430
Modified Files:
intel-modeset.patch xorg-x11-drv-i810.spec
Log Message:
* Fri Mar 07 2008 Dave Airlie <airlied at redhat.com> 2.2.1-9
- update modesetting patch to include 965 video + fix for memory
space leak
intel-modeset.patch:
Index: intel-modeset.patch
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-i810/devel/intel-modeset.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- intel-modeset.patch 6 Mar 2008 07:08:53 -0000 1.2
+++ intel-modeset.patch 7 Mar 2008 06:53:24 -0000 1.3
@@ -740,7 +740,7 @@
+#endif
+#endif
diff --git a/src/i830.h b/src/i830.h
-index c61767d..02c547d 100644
+index c61767d..d19ba7f 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -86,8 +86,12 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -832,8 +832,93 @@
unsigned long intel_get_pixmap_offset(PixmapPtr pPix);
unsigned long intel_get_pixmap_pitch(PixmapPtr pPix);
extern Bool I830AccelInit(ScreenPtr pScreen);
+@@ -890,4 +906,11 @@ extern void i830_fixup_devices(ScrnInfoPtr);
+
+ #include "intel_batchbuffer.h"
+
++/* Mirrors CARD32 definition in Xmd.h */
++#ifdef LONG64
++#define CARD32_HEX "x"
++#else
++#define CARD32_HEX "lx"
++#endif
++
+ #endif /* _I830_H_ */
+diff --git a/src/i830_debug.c b/src/i830_debug.c
+index 7d0c0a0..17044b2 100644
+--- a/src/i830_debug.c
++++ b/src/i830_debug.c
+@@ -957,13 +957,14 @@ i830_dump_error_state(ScrnInfoPtr pScrn)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+
+- ErrorF("pgetbl_ctl: 0x%" PRIx32 "getbl_err: 0x%" PRIx32 "\n",
++ ErrorF("pgetbl_ctl: 0x%" CARD32_HEX "getbl_err: 0x%" CARD32_HEX "\n",
+ INREG(PGETBL_CTL), INREG(PGE_ERR));
+
+- ErrorF("ipeir: %" PRIx32 " iphdr: %" PRIx32 "\n", INREG(IPEIR),
++ ErrorF("ipeir: %" CARD32_HEX " iphdr: %" CARD32_HEX "\n", INREG(IPEIR),
+ INREG(IPEHR));
+
+- ErrorF("LP ring tail: %" PRIx32 " head: %" PRIx32 " len: %" PRIx32 " start %" PRIx32 "\n",
++ ErrorF("LP ring tail: %" CARD32_HEX " head: %" CARD32_HEX
++ " len: %" CARD32_HEX " start %" CARD32_HEX "\n",
+ INREG(LP_RING + RING_TAIL),
+ INREG(LP_RING + RING_HEAD) & HEAD_ADDR,
+ INREG(LP_RING + RING_LEN),
+@@ -974,8 +975,8 @@ i830_dump_error_state(ScrnInfoPtr pScrn)
+
+ ErrorF("instdone: %x instpm: %x\n", INREG16(INST_DONE), INREG8(INST_PM));
+
+- ErrorF("memmode: %" PRIx32 " instps: %" PRIx32 "\n", INREG(MEMMODE),
+- INREG(INST_PS));
++ ErrorF("memmode: %" CARD32_HEX " instps: %" CARD32_HEX "\n",
++ INREG(MEMMODE), INREG(INST_PS));
+
+ ErrorF("hwstam: %x ier: %x imr: %x iir: %x\n",
+ INREG16(HWSTAM), INREG16(IER), INREG16(IMR), INREG16(IIR));
+@@ -987,12 +988,14 @@ i965_dump_error_state(ScrnInfoPtr pScrn)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+
+- ErrorF("pgetbl_ctl: 0x%" PRIx32 " pgetbl_err: 0x%" PRIx32 "\n",
++ ErrorF("pgetbl_ctl: 0x%" CARD32_HEX " pgetbl_err: 0x%" CARD32_HEX "\n",
+ INREG(PGETBL_CTL), INREG(PGE_ERR));
+
+- ErrorF("ipeir: %" PRIx32 " iphdr: %" PRIx32 "\n", INREG(IPEIR_I965), INREG(IPEHR_I965));
++ ErrorF("ipeir: %" CARD32_HEX " iphdr: %" CARD32_HEX "\n",
++ INREG(IPEIR_I965), INREG(IPEHR_I965));
+
+- ErrorF("LP ring tail: %" PRIx32 " head: %" PRIx32 " len: %" PRIx32 " start %" PRIx32 "\n",
++ ErrorF("LP ring tail: %" CARD32_HEX " head: %" CARD32_HEX
++ " len: %" CARD32_HEX " start %" CARD32_HEX "\n",
+ INREG(LP_RING + RING_TAIL),
+ INREG(LP_RING + RING_HEAD) & HEAD_ADDR,
+ INREG(LP_RING + RING_LEN), INREG(LP_RING + RING_START));
+@@ -1004,15 +1007,18 @@ i965_dump_error_state(ScrnInfoPtr pScrn)
+ (int)INREG(INST_DONE_1));
+ ErrorF("instpm: %x\n", (int)INREG(INST_PM));
+
+- ErrorF("memmode: %" PRIx32 " instps: %" PRIx32 "\n", INREG(MEMMODE), INREG(INST_PS_I965));
++ ErrorF("memmode: %" CARD32_HEX " instps: %" CARD32_HEX "\n",
++ INREG(MEMMODE), INREG(INST_PS_I965));
+
+ ErrorF("HW Status mask (hwstam): %x\nIRQ enable (ier): %x "
+ "imr: %x iir: %x\n",
+ (int)INREG(HWSTAM), (int)INREG(IER), (int)INREG(IMR),
+ (int)INREG(IIR));
+
+- ErrorF("acthd: %" PRIx32 " dma_fadd_p: %" PRIx32 "\n", INREG(ACTHD), INREG(DMA_FADD_P));
+- ErrorF("ecoskpd: %" PRIx32 " excc: %" PRIx32 "\n", INREG(ECOSKPD), INREG(EXCC));
++ ErrorF("acthd: %" CARD32_HEX " dma_fadd_p: %" CARD32_HEX "\n",
++ INREG(ACTHD), INREG(DMA_FADD_P));
++ ErrorF("ecoskpd: %" CARD32_HEX " excc: %" CARD32_HEX "\n",
++ INREG(ECOSKPD), INREG(EXCC));
+
+ ErrorF("cache_mode: %x/%x\n", (int)INREG(CACHE_MODE_0),
+ (int)INREG(CACHE_MODE_1));
diff --git a/src/i830_dri.c b/src/i830_dri.c
-index d95ecb2..cfe7220 100644
+index d95ecb2..3e47e92 100644
--- a/src/i830_dri.c
+++ b/src/i830_dri.c
@@ -177,10 +177,12 @@ I830InitDma(ScrnInfoPtr pScrn)
@@ -952,7 +1037,15 @@
if (!I830InitDma(pScrn)) {
DRICloseScreen(pScreen);
-@@ -1892,22 +1899,24 @@ I830DRI2Prepare(ScreenPtr pScreen)
+@@ -971,7 +978,6 @@ I830DRICloseScreen(ScreenPtr pScreen)
+ {
+ ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
+ I830Ptr pI830 = I830PTR(pScrn);
+- I830DRIPtr pI830DRI = (I830DRIPtr) pI830->pDRIInfo->devPrivate;
+
+ DPRINTF(PFX, "I830DRICloseScreen\n");
+
+@@ -1892,22 +1898,24 @@ I830DRI2Prepare(ScreenPtr pScreen)
char busId[64];
drmVersionPtr version;
@@ -989,7 +1082,7 @@
}
version = drmGetVersion(pI830->drmSubFD);
-@@ -1931,7 +1940,11 @@ I830DRI2Prepare(ScreenPtr pScreen)
+@@ -1931,7 +1939,11 @@ I830DRI2Prepare(ScreenPtr pScreen)
xf86DrvMsg(pScrn->scrnIndex, X_INFO,
"[DRI2] Opened DRM device successfully\n");
@@ -1002,7 +1095,16 @@
if (!pI830->use_ttm_batch)
return;
-@@ -1994,9 +2007,11 @@ I830DRI2ScreenInit(ScreenPtr pScreen)
+@@ -1954,7 +1966,7 @@ I830DRI2ScreenInit(ScreenPtr pScreen)
+ I830Ptr pI830 = I830PTR(pScrn);
+ I830RingBuffer *ring = pI830->LpRing;
+ drm_i915_init_t info;
+- int fd, major, minor, patch;
++ int fd;
+ const char *driverName;
+ unsigned int sarea_handle;
+ void *p;
+@@ -1994,9 +2006,11 @@ I830DRI2ScreenInit(ScreenPtr pScreen)
memset(&info, 0, sizeof(info));
info.func = I915_INIT_DMA2;
@@ -1018,7 +1120,7 @@
info.sarea_priv_offset = 0;
info.sarea_handle = sarea_handle;
diff --git a/src/i830_driver.c b/src/i830_driver.c
-index ba44645..ef9ac24 100644
+index ba44645..953762b 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -198,6 +198,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -1745,7 +1847,15 @@
#if defined(XF86DRI)
/* Load the dri module if requested. */
-@@ -2362,7 +2453,7 @@ I830BlockHandler(int i,
+@@ -2316,7 +2407,6 @@ void
+ IntelEmitInvarientState(ScrnInfoPtr pScrn)
+ {
+ I830Ptr pI830 = I830PTR(pScrn);
+- CARD32 ctx_addr;
+
+ if (pI830->noAccel)
+ return;
+@@ -2362,7 +2452,7 @@ I830BlockHandler(int i,
pScreen->BlockHandler = I830BlockHandler;
if (pI830->batch)
@@ -1754,7 +1864,7 @@
I830VideoBlockHandler(i, blockData, pTimeout, pReadmask);
}
-@@ -2384,7 +2475,9 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2384,7 +2474,9 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
pScrn = xf86Screens[pScreen->myNum];
pI830 = I830PTR(pScrn);
@@ -1765,7 +1875,7 @@
pScrn->displayWidth = (pScrn->virtualX + 63) & ~63;
-@@ -2430,48 +2523,74 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2430,48 +2522,74 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
#endif
}
@@ -1880,7 +1990,7 @@
}
pI830->directRendering = DRI_TYPE_NONE;
-@@ -2499,6 +2618,12 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2499,6 +2617,12 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
}
#endif
@@ -1893,7 +2003,7 @@
/* The batchbuffer branch won't work without a bufmgr, so fail now
* if neither XF86DRI or DRI2 managed to set that up. */
if (pI830->bufmgr == NULL) {
-@@ -2515,6 +2640,8 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2515,6 +2639,8 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
return FALSE;
}
@@ -1902,7 +2012,7 @@
xf86DrvMsg(pScrn->scrnIndex,
pI830->pEnt->device->videoRam ? X_CONFIG : X_DEFAULT,
"VideoRam: %d KB\n", pScrn->videoRam);
-@@ -2580,12 +2707,14 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2580,12 +2706,14 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
pI830->LpRing = pI8301->LpRing;
pI830->overlay_regs = pI8301->overlay_regs;
@@ -1918,7 +2028,7 @@
#if defined(XF86DRI) || defined(DRI2)
/*
-@@ -2776,7 +2905,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2776,7 +2904,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
pI830->XvEnabled = FALSE;
#endif
@@ -1927,7 +2037,7 @@
if (pI830->LpRing->mem->size == 0) {
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"Disabling acceleration because the ring buffer "
-@@ -2792,7 +2921,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2792,7 +2920,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
"needs 2D acceleration.\n");
pI830->XvEnabled = FALSE;
}
@@ -1936,7 +2046,7 @@
xf86DrvMsg(pScrn->scrnIndex, X_WARNING,
"Disabling Xv because the overlay register buffer "
"allocation failed.\n");
-@@ -2829,30 +2958,32 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2829,30 +2957,32 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
if (pI830->directRendering == DRI_TYPE_NONE)
i830_free_3d_memory(pScrn);
@@ -1992,7 +2102,7 @@
}
#endif
-@@ -2862,11 +2993,13 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2862,11 +2992,13 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
pI830->allowPageFlip ? "en" : "dis");
#endif
@@ -2011,7 +2121,7 @@
if (I830IsPrimary(pScrn)) {
pScrn->fbOffset = pI830->front_buffer->offset;
-@@ -2877,12 +3010,13 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2877,12 +3009,13 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
pI830->xoffset = (pScrn->fbOffset / pI830->cpp) % pScrn->displayWidth;
pI830->yoffset = (pScrn->fbOffset / pI830->cpp) / pScrn->displayWidth;
@@ -2031,7 +2141,7 @@
DPRINTF(PFX, "assert( if(!I830EnterVT(scrnIndex, 0)) )\n");
if (!pI830->useEXA) {
-@@ -2902,9 +3036,6 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -2902,9 +3035,6 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
if (pScrn->virtualX > pScrn->displayWidth)
pScrn->displayWidth = pScrn->virtualX;
@@ -2041,7 +2151,7 @@
DPRINTF(PFX, "assert( if(!fbScreenInit(pScreen, ...) )\n");
if (!fbScreenInit(pScreen, pI830->FbBase + pScrn->fbOffset,
pScrn->virtualX, pScrn->virtualY,
-@@ -3023,7 +3154,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -3023,7 +3153,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
}
#endif
@@ -2050,7 +2160,7 @@
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering: Not available\n");
#endif
-@@ -3035,7 +3166,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
+@@ -3035,7 +3165,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
if (serverGeneration == 1)
xf86ShowUnusedOptions(pScrn->scrnIndex, pScrn->options);
@@ -2059,7 +2169,7 @@
/* turn off clock gating */
#if 0
OUTREG(0x6204, 0x70804000);
-@@ -3124,9 +3255,11 @@ I830LeaveVT(int scrnIndex, int flags)
+@@ -3124,9 +3254,11 @@ I830LeaveVT(int scrnIndex, int flags)
xf86_hide_cursors (pScrn);
@@ -2074,7 +2184,7 @@
#if defined(XF86DRI) || defined(DRI2)
/* don't disable interrupt before stopping the ring for fencing */
-@@ -3134,7 +3267,7 @@ I830LeaveVT(int scrnIndex, int flags)
+@@ -3134,7 +3266,7 @@ I830LeaveVT(int scrnIndex, int flags)
drmCtlUninstHandler(pI830->drmSubFD);
}
#endif
@@ -2083,7 +2193,7 @@
i830CompareRegsToSnapshot(pScrn, "After LeaveVT");
i830DumpRegs (pScrn);
}
-@@ -3146,7 +3279,7 @@ I830LeaveVT(int scrnIndex, int flags)
+@@ -3146,7 +3278,7 @@ I830LeaveVT(int scrnIndex, int flags)
* allocations until we relese the lock.
*/
#ifdef XF86DRI_MM
@@ -2092,7 +2202,7 @@
if (pI830->memory_manager != NULL && pScrn->vtSema) {
drmMMLock(pI830->drmSubFD, DRM_BO_MEM_TT, 1, 0);
}
-@@ -3176,7 +3309,8 @@ I830EnterVT(int scrnIndex, int flags)
+@@ -3176,7 +3308,8 @@ I830EnterVT(int scrnIndex, int flags)
*/
if (pI830->SaveGeneration != serverGeneration) {
pI830->SaveGeneration = serverGeneration;
@@ -2102,7 +2212,7 @@
}
pI830->leaving = FALSE;
-@@ -3186,7 +3320,7 @@ I830EnterVT(int scrnIndex, int flags)
+@@ -3186,7 +3319,7 @@ I830EnterVT(int scrnIndex, int flags)
/* Unlock the memory manager first of all so that we can pin our
* buffer objects
*/
@@ -2111,7 +2221,7 @@
drmMMUnlock(pI830->drmSubFD, DRM_BO_MEM_TT, 1);
}
}
-@@ -3201,34 +3335,39 @@ I830EnterVT(int scrnIndex, int flags)
+@@ -3201,34 +3334,39 @@ I830EnterVT(int scrnIndex, int flags)
/* Update the screen pixmap in case the buffer moved */
i830_update_front_offset(pScrn);
@@ -2171,7 +2281,7 @@
#ifdef DRI2
if (pI830->directRendering == DRI_TYPE_DRI2) {
-@@ -3318,6 +3457,9 @@ I830EnterVT(int scrnIndex, int flags)
+@@ -3318,6 +3456,9 @@ I830EnterVT(int scrnIndex, int flags)
if (pI830->checkDevices)
pI830->devicesTimer = TimerSet(NULL, 0, 1000, I830CheckDevicesTimer, pScrn);
@@ -2181,7 +2291,7 @@
/* Mark 3D state as being clobbered and setup the basics */
*pI830->last_3d = LAST_3D_OTHER;
IntelEmitInvarientState(pScrn);
-@@ -3361,9 +3503,11 @@ I830CloseScreen(int scrnIndex, ScreenPtr pScreen)
+@@ -3361,9 +3502,11 @@ I830CloseScreen(int scrnIndex, ScreenPtr pScreen)
TimerCancel(pI830->devicesTimer);
pI830->devicesTimer = NULL;
@@ -2233,20 +2343,19 @@
/* this is the front buffer pixmap so set it up as such..*/
driver_priv->flags |= I830_EXA_PIXMAP_IS_FRONTBUFFER;
diff --git a/src/i830_memory.c b/src/i830_memory.c
-index 634a796..92f062a 100644
+index 634a796..405d426 100644
--- a/src/i830_memory.c
+++ b/src/i830_memory.c
-@@ -165,13 +165,16 @@ i830_bind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
+@@ -165,13 +165,15 @@ i830_bind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
if (mem->bo.size != 0) {
I830Ptr pI830 = I830PTR(pScrn);
int ret;
-+ int flags = DRM_BO_FLAG_MEM_VRAM |
-+ DRM_BO_FLAG_MEM_TT |
-+ DRM_BO_FLAG_READ |
-+ DRM_BO_FLAG_WRITE;
++ int flags = DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE;
+
-+ if (mem->need_vram)
-+ flags &= ~DRM_BO_FLAG_MEM_TT;
++ if (mem->need_vram)
++ flags |= DRM_BO_FLAG_MEM_VRAM;
++ else
++ flags |= DRM_BO_FLAG_MEM_TT;
ret = drmBOSetStatus(pI830->drmSubFD, &mem->bo,
- DRM_BO_FLAG_MEM_VRAM |
@@ -2258,7 +2367,7 @@
DRM_BO_MASK_MEM |
DRM_BO_FLAG_READ |
DRM_BO_FLAG_WRITE |
-@@ -199,16 +202,18 @@ i830_bind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
+@@ -199,16 +201,18 @@ i830_bind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
mem->bound = TRUE;
}
@@ -2281,7 +2390,7 @@
}
return TRUE;
-@@ -223,13 +228,15 @@ i830_unbind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
+@@ -223,13 +227,15 @@ i830_unbind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
return TRUE;
/* Mark the pages accessible now that they're bound. */
@@ -2300,7 +2409,7 @@
i830_clear_tiling(pScrn, mem->fence_nr);
#ifdef XF86DRI_MM
-@@ -353,6 +360,7 @@ i830_reset_allocations(ScrnInfoPtr pScrn)
+@@ -353,6 +359,7 @@ i830_reset_allocations(ScrnInfoPtr pScrn)
pI830->exa_offscreen = NULL;
pI830->exa_965_state = NULL;
pI830->overlay_regs = NULL;
@@ -2308,7 +2417,7 @@
#ifdef XF86DRI
pI830->back_buffer = NULL;
pI830->third_buffer = NULL;
-@@ -488,16 +496,18 @@ i830_allocator_init(ScrnInfoPtr pScrn, unsigned long offset, unsigned long size)
+@@ -488,16 +495,18 @@ i830_allocator_init(ScrnInfoPtr pScrn, unsigned long offset, unsigned long size)
if (pI830->memory_manager != NULL) {
int ret;
@@ -2333,7 +2442,7 @@
}
} else {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
-@@ -522,9 +532,10 @@ i830_allocator_fini(ScrnInfoPtr pScrn)
+@@ -522,9 +531,10 @@ i830_allocator_fini(ScrnInfoPtr pScrn)
#ifdef XF86DRI_MM
/* The memory manager is more special */
if (pI830->memory_manager) {
@@ -2347,7 +2456,7 @@
}
#endif /* XF86DRI_MM */
-@@ -789,6 +800,7 @@ i830_allocate_memory_bo(ScrnInfoPtr pScrn, const char *name,
+@@ -789,6 +799,7 @@ i830_allocate_memory_bo(ScrnInfoPtr pScrn, const char *name,
mem->end = -1;
mem->size = size;
mem->allocated_size = size;
@@ -2355,7 +2464,7 @@
if (flags & NEED_LIFETIME_FIXED)
mem->lifetime_fixed_offset = TRUE;
-@@ -840,8 +852,8 @@ i830_allocate_memory(ScrnInfoPtr pScrn, const char *name,
+@@ -840,8 +851,8 @@ i830_allocate_memory(ScrnInfoPtr pScrn, const char *name,
#ifdef XF86DRI_MM
I830Ptr pI830 = I830PTR(pScrn);
@@ -2366,7 +2475,7 @@
{
return i830_allocate_memory_bo(pScrn, name, size, alignment, flags);
} else
-@@ -1046,6 +1058,24 @@ i830_allocate_overlay(ScrnInfoPtr pScrn)
+@@ -1046,6 +1057,24 @@ i830_allocate_overlay(ScrnInfoPtr pScrn)
if (!OVERLAY_NOPHYSICAL(pI830))
flags |= NEED_PHYSICAL_ADDR;
@@ -2391,7 +2500,7 @@
if (!IS_I965G(pI830)) {
pI830->overlay_regs = i830_allocate_memory(pScrn, "overlay registers",
OVERLAY_SIZE, GTT_PAGE_SIZE,
-@@ -1203,6 +1233,9 @@ i830_allocate_framebuffer(ScrnInfoPtr pScrn, I830Ptr pI830, BoxPtr FbMemBox,
+@@ -1203,6 +1232,9 @@ i830_allocate_framebuffer(ScrnInfoPtr pScrn, I830Ptr pI830, BoxPtr FbMemBox,
else
tiling = pI830->tiling;
@@ -2401,7 +2510,7 @@
/* Attempt to allocate it tiled first if we have page flipping on. */
if (tiling && IsTileable(pScrn, pitch)) {
/* XXX: probably not the case on 965 */
-@@ -1227,8 +1260,12 @@ i830_allocate_framebuffer(ScrnInfoPtr pScrn, I830Ptr pI830, BoxPtr FbMemBox,
+@@ -1227,8 +1259,12 @@ i830_allocate_framebuffer(ScrnInfoPtr pScrn, I830Ptr pI830, BoxPtr FbMemBox,
return NULL;
}
@@ -2416,7 +2525,7 @@
return front_buffer;
}
-@@ -1237,10 +1274,13 @@ i830_allocate_cursor_buffers(ScrnInfoPtr pScrn)
+@@ -1237,10 +1273,13 @@ i830_allocate_cursor_buffers(ScrnInfoPtr pScrn)
{
I830Ptr pI830 = I830PTR(pScrn);
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
@@ -2431,7 +2540,7 @@
/* Try to allocate one big blob for our cursor memory. This works
* around a limitation in the FreeBSD AGP driver that allows only one
* physical allocation larger than a page, and could allow us
-@@ -1353,18 +1393,20 @@ i830_allocate_2d_memory(ScrnInfoPtr pScrn)
+@@ -1353,18 +1392,20 @@ i830_allocate_2d_memory(ScrnInfoPtr pScrn)
unsigned int pitch = pScrn->displayWidth * pI830->cpp;
long size;
@@ -2457,7 +2566,7 @@
if (pI830->fb_compression)
i830_setup_fb_compression(pScrn);
-@@ -1925,14 +1967,16 @@ i830_bind_all_memory(ScrnInfoPtr pScrn)
+@@ -1925,14 +1966,16 @@ i830_bind_all_memory(ScrnInfoPtr pScrn)
if (pI830->StolenOnly == TRUE || pI830->memory_list == NULL)
return TRUE;
@@ -2479,7 +2588,7 @@
for (mem = pI830->memory_list->next; mem->next != NULL;
mem = mem->next)
-@@ -1949,7 +1993,7 @@ i830_bind_all_memory(ScrnInfoPtr pScrn)
+@@ -1949,7 +1992,7 @@ i830_bind_all_memory(ScrnInfoPtr pScrn)
}
#endif
}
@@ -2488,7 +2597,7 @@
i830_update_cursor_offsets(pScrn);
return TRUE;
-@@ -1964,7 +2008,7 @@ i830_unbind_all_memory(ScrnInfoPtr pScrn)
+@@ -1964,7 +2007,7 @@ i830_unbind_all_memory(ScrnInfoPtr pScrn)
if (pI830->StolenOnly == TRUE)
return TRUE;
@@ -2497,7 +2606,7 @@
i830_memory *mem;
for (mem = pI830->memory_list->next; mem->next != NULL;
-@@ -1982,10 +2026,12 @@ i830_unbind_all_memory(ScrnInfoPtr pScrn)
+@@ -1982,10 +2025,12 @@ i830_unbind_all_memory(ScrnInfoPtr pScrn)
}
#endif
@@ -2514,7 +2623,7 @@
return TRUE;
diff --git a/src/i830_video.c b/src/i830_video.c
-index 8f0ac30..3fb702d 100644
+index 8f0ac30..7738d3d 100644
--- a/src/i830_video.c
+++ b/src/i830_video.c
@@ -75,6 +75,7 @@
@@ -2663,7 +2772,7 @@
}
/* Wait for the overlay to light up before attempting to use it */
OUT_BATCH(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
-@@ -443,35 +535,40 @@ i830_overlay_on(ScrnInfoPtr pScrn)
+@@ -443,35 +535,41 @@ i830_overlay_on(ScrnInfoPtr pScrn)
i830_pipe_a_require_deactivate (pScrn);
OVERLAY_DEBUG("overlay_on\n");
@@ -2701,6 +2810,7 @@
- OVERLAY_DEBUG ("overlay_continue cmd 0x%08" PRIx32 " -> 0x%08" PRIx32
- " sta 0x%08" PRIx32 "\n",
- overlay->OCMD, INREG(OCMD_REGISTER), INREG(DOVSTA));
++
BEGIN_BATCH(4);
OUT_BATCH(MI_FLUSH | MI_WRITE_DIRTY_STATE);
OUT_BATCH(MI_NOOP);
@@ -2714,7 +2824,7 @@
ADVANCE_BATCH();
OVERLAY_DEBUG("overlay_continue\n");
}
-@@ -480,7 +577,7 @@ static void
+@@ -480,7 +578,7 @@ static void
i830_overlay_off(ScrnInfoPtr pScrn)
{
I830Ptr pI830 = I830PTR(pScrn);
@@ -2723,7 +2833,7 @@
if (!*pI830->overlayOn)
return;
-@@ -504,17 +601,24 @@ i830_overlay_off(ScrnInfoPtr pScrn)
+@@ -504,17 +602,22 @@ i830_overlay_off(ScrnInfoPtr pScrn)
* Turn overlay off
*/
{
@@ -2731,8 +2841,6 @@
overlay->OCMD &= ~OVERLAY_ENABLE;
- OVERLAY_DEBUG ("overlay_off cmd 0x%08" PRIx32 " -> 0x%08" PRIx32 " sta 0x%08" PRIx32 "\n",
- overlay->OCMD, INREG(OCMD_REGISTER), INREG(DOVSTA));
-+ // OVERLAY_DEBUG ("overlay_off cmd 0x%08lx -> 0x%08lx sta 0x%08lx\n",
-+ // overlay->OCMD, INREG(OCMD_REGISTER), INREG(DOVSTA));
+ overlay_reg_finish(pI830);
+
BEGIN_BATCH(6);
@@ -2753,7 +2861,7 @@
}
OUT_BATCH(MI_WAIT_FOR_EVENT | MI_WAIT_FOR_OVERLAY_FLIP);
OUT_BATCH(MI_NOOP);
-@@ -583,7 +687,7 @@ I830InitVideo(ScreenPtr pScreen)
+@@ -583,7 +686,7 @@ I830InitVideo(ScreenPtr pScreen)
/* Set up overlay video if we can do it at this depth. */
if (!IS_I965G(pI830) && pScrn->bitsPerPixel != 8 &&
@@ -2762,7 +2870,7 @@
{
overlayAdaptor = I830SetupImageVideoOverlay(pScreen);
if (overlayAdaptor != NULL) {
-@@ -607,14 +711,14 @@ I830ResetVideo(ScrnInfoPtr pScrn)
+@@ -607,14 +710,14 @@ I830ResetVideo(ScrnInfoPtr pScrn)
{
I830Ptr pI830 = I830PTR(pScrn);
I830PortPrivPtr pPriv = pI830->adaptor->pPortPrivates[0].ptr;
@@ -2779,7 +2887,7 @@
memset(overlay, 0, sizeof(*overlay));
overlay->YRGB_VPH = 0;
overlay->UV_VPH = 0;
-@@ -669,6 +773,7 @@ I830ResetVideo(ScrnInfoPtr pScrn)
+@@ -669,6 +772,7 @@ I830ResetVideo(ScrnInfoPtr pScrn)
else
overlay->OCONFIG |= OVERLAY_PIPE_B;
@@ -2787,7 +2895,7 @@
#if 0
/*
* XXX DUMP REGISTER CODE !!!
-@@ -678,7 +783,7 @@ I830ResetVideo(ScrnInfoPtr pScrn)
+@@ -678,7 +782,7 @@ I830ResetVideo(ScrnInfoPtr pScrn)
{
int i;
for (i = 0x30000; i < 0x31000; i += 4)
@@ -2796,7 +2904,7 @@
}
#endif
}
-@@ -742,33 +847,41 @@ I830UpdateGamma(ScrnInfoPtr pScrn)
+@@ -742,33 +846,41 @@ I830UpdateGamma(ScrnInfoPtr pScrn)
{
I830Ptr pI830 = I830PTR(pScrn);
I830PortPrivPtr pPriv = pI830->adaptor->pPortPrivates[0].ptr;
@@ -2855,16 +2963,37 @@
}
static XF86VideoAdaptorPtr
-@@ -1018,7 +1131,7 @@ I830StopVideo(ScrnInfoPtr pScrn, pointer data, Bool shutdown)
+@@ -841,6 +953,7 @@ I830SetupImageVideoOverlay(ScreenPtr pScreen)
+ pPriv->current_crtc = NULL;
+ pPriv->desired_crtc = NULL;
+ pPriv->buf = NULL;
++ pPriv->state = NULL;
+ pPriv->currentBuf = 0;
+ pPriv->gamma5 = 0xc0c0c0;
+ pPriv->gamma4 = 0x808080;
+@@ -954,6 +1067,7 @@ I830SetupImageVideoTextured(ScreenPtr pScreen)
+ pPriv->textured = TRUE;
+ pPriv->videoStatus = 0;
+ pPriv->buf = NULL;
++ pPriv->state = NULL;
+ pPriv->currentBuf = 0;
+ pPriv->doubleBuffer = 0;
+
+@@ -1018,8 +1132,12 @@ I830StopVideo(ScrnInfoPtr pScrn, pointer data, Bool shutdown)
/* Sync before freeing the buffer, because the pages will be unbound.
*/
I830Sync(pScrn);
- i830_free_memory(pScrn, pPriv->buf);
+ dri_bo_unreference(pPriv->buf);
pPriv->buf = NULL;
++ if (pPriv->state) {
++ dri_bo_unreference(pPriv->state);
++ pPriv->state = NULL;
++ }
pPriv->videoStatus = 0;
} else {
-@@ -1037,7 +1150,8 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
+ if (pPriv->videoStatus & CLIENT_VIDEO_ON) {
+@@ -1037,7 +1155,8 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
I830PortPrivPtr pPriv = (I830PortPrivPtr) data;
I830Ptr pI830 = I830PTR(pScrn);
I830OverlayRegPtr overlay;
@@ -2874,7 +3003,7 @@
if (pPriv->textured) {
/* XXX: Currently the brightness/saturation attributes aren't hooked up.
* However, apps expect them to be there, and the spec seems to let us
-@@ -1046,32 +1160,40 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
+@@ -1046,32 +1165,40 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
return Success;
}
@@ -2927,7 +3056,7 @@
if (value < 0)
pPriv->desired_crtc = NULL;
else
-@@ -1105,17 +1227,23 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
+@@ -1105,17 +1232,23 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
break;
}
OVERLAY_DEBUG("COLORKEY\n");
@@ -2954,7 +3083,7 @@
/* Ensure that the overlay is off, ready for updating */
if ((attribute == xvGamma0 ||
attribute == xvGamma1 ||
-@@ -1128,6 +1256,9 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
+@@ -1128,6 +1261,9 @@ I830SetPortAttribute(ScrnInfoPtr pScrn,
}
return Success;
@@ -2964,7 +3093,15 @@
}
static int
-@@ -1209,10 +1340,11 @@ I830CopyPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+@@ -1196,7 +1332,6 @@ I830CopyPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+ int srcPitch,
+ int dstPitch, int top, int left, int h, int w)
+ {
+- I830Ptr pI830 = I830PTR(pScrn);
+ unsigned char *src, *dst;
+ int i,j;
+ unsigned char *s;
+@@ -1209,10 +1344,11 @@ I830CopyPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
src = buf + (top * srcPitch) + (left << 1);
@@ -2978,7 +3115,7 @@
switch (pPriv->rotation) {
case RR_Rotate_0:
-@@ -1285,6 +1417,7 @@ I830CopyPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+@@ -1285,6 +1421,7 @@ I830CopyPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
}
break;
}
@@ -2986,7 +3123,11 @@
}
/* Copies planar data in *buf to UYVY-packed data in the screen atYBufXOffset.
-@@ -1299,10 +1432,12 @@ I830CopyPlanarToPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+@@ -1295,14 +1432,15 @@ I830CopyPlanarToPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+ int srcPitch2, int dstPitch, int srcH,
+ int top, int left, int h, int w, int id)
+ {
+- I830Ptr pI830 = I830PTR(pScrn);
CARD8 *dst1, *srcy, *srcu, *srcv;
int y;
@@ -3001,7 +3142,7 @@
srcy = buf + (top * srcPitch) + left;
if (id == FOURCC_YV12) {
-@@ -1344,6 +1479,7 @@ I830CopyPlanarToPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+@@ -1344,6 +1482,7 @@ I830CopyPlanarToPackedData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
srcv += srcPitch2;
}
}
@@ -3009,7 +3150,7 @@
}
static void
-@@ -1371,10 +1507,11 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+@@ -1371,10 +1510,11 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
ErrorF("src1 is %p, offset is %ld\n", src1,
(unsigned long)src1 - (unsigned long)buf);
#endif
@@ -3023,7 +3164,7 @@
switch (pPriv->rotation) {
case RR_Rotate_0:
-@@ -1413,22 +1550,25 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+@@ -1413,22 +1553,25 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
break;
}
@@ -3053,7 +3194,7 @@
}
switch (pPriv->rotation) {
-@@ -1467,6 +1607,7 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+@@ -1467,6 +1610,7 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
}
break;
}
@@ -3061,7 +3202,7 @@
/* Copy U data for YV12, or V data for I420 */
src3 = buf + (srcH * srcPitch) + ((srcH >> 1) * srcPitch2) +
-@@ -1475,16 +1616,17 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+@@ -1475,16 +1619,17 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
ErrorF("src3 is %p, offset is %ld\n", src3,
(unsigned long)src3 - (unsigned long)buf);
#endif
@@ -3083,7 +3224,7 @@
}
switch (pPriv->rotation) {
-@@ -1523,6 +1665,7 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
+@@ -1523,6 +1668,7 @@ I830CopyPlanarData(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv,
}
break;
}
@@ -3091,7 +3232,7 @@
}
typedef struct {
-@@ -1750,7 +1893,7 @@ i830_display_video(ScrnInfoPtr pScrn, xf86CrtcPtr crtc,
+@@ -1750,7 +1896,7 @@ i830_display_video(ScrnInfoPtr pScrn, xf86CrtcPtr crtc,
{
I830Ptr pI830 = I830PTR(pScrn);
I830PortPrivPtr pPriv = pI830->adaptor->pPortPrivates[0].ptr;
@@ -3100,7 +3241,7 @@
unsigned int swidth, swidthy, swidthuv;
unsigned int mask, shift, offsety, offsetu;
int tmp;
-@@ -1761,7 +1904,9 @@ i830_display_video(ScrnInfoPtr pScrn, xf86CrtcPtr crtc,
+@@ -1761,7 +1907,9 @@ i830_display_video(ScrnInfoPtr pScrn, xf86CrtcPtr crtc,
dstPitch);
#if VIDEO_DEBUG
@@ -3110,7 +3251,7 @@
#endif
/*
-@@ -1865,6 +2010,7 @@ i830_display_video(ScrnInfoPtr pScrn, xf86CrtcPtr crtc,
+@@ -1865,6 +2013,7 @@ i830_display_video(ScrnInfoPtr pScrn, xf86CrtcPtr crtc,
offsetu = pPriv->UBuf1offset;
}
@@ -3118,7 +3259,7 @@
switch (id) {
case FOURCC_YV12:
case FOURCC_I420:
-@@ -1907,16 +2053,33 @@ i830_display_video(ScrnInfoPtr pScrn, xf86CrtcPtr crtc,
+@@ -1907,16 +2056,33 @@ i830_display_video(ScrnInfoPtr pScrn, xf86CrtcPtr crtc,
dstBox->x1, dstBox->y1, dstBox->x2, dstBox->y2);
/* buffer locations */
@@ -3157,18 +3298,43 @@
overlay->DWINPOS, overlay->DWINSZ);
OVERLAY_DEBUG("dst: %d x %d, src: %d x %d\n", drw_w, drw_h, src_w, src_h);
-@@ -2078,8 +2241,9 @@ i830_display_video(ScrnInfoPtr pScrn, xf86CrtcPtr crtc,
+@@ -2078,8 +2244,9 @@ i830_display_video(ScrnInfoPtr pScrn, xf86CrtcPtr crtc,
OCMD |= BUFFER1;
overlay->OCMD = OCMD;
- OVERLAY_DEBUG("OCMD is 0x%" PRIx32 "\n", OCMD);
-+ OVERLAY_DEBUG("OCMD is 0x%lx\n", OCMD);
++ OVERLAY_DEBUG("OCMD is 0x%" CARD32_HEX "\n", OCMD);
+ overlay_reg_finish(pI830);
/* make sure the overlay is on */
i830_overlay_on (pScrn);
/* and show this frame */
-@@ -2341,23 +2505,22 @@ I830PutImage(ScrnInfoPtr pScrn,
+@@ -2198,7 +2365,7 @@ I830PutImage(ScrnInfoPtr pScrn,
+ int top, left, npixels, nlines, size;
+ BoxRec dstBox;
+ int pitchAlignMask;
+- int alloc_size, extraLinear;
++ int alloc_size;
+ xf86CrtcPtr crtc;
+
+ if (pPriv->textured)
+@@ -2321,15 +2488,9 @@ I830PutImage(ScrnInfoPtr pScrn,
+ ErrorF("srcPitch: %d, dstPitch: %d, size: %d\n", srcPitch, dstPitch, size);
+ #endif
+
+- if (IS_I965G(pI830))
+- extraLinear = BRW_LINEAR_EXTRA;
+- else
+- extraLinear = 0;
+-
+ alloc_size = size;
+ if (pPriv->doubleBuffer)
+ alloc_size *= 2;
+- alloc_size += extraLinear;
+
+ if (pPriv->buf) {
+ /* Wait for any previous acceleration to the buffer to have completed.
+@@ -2341,23 +2502,34 @@ I830PutImage(ScrnInfoPtr pScrn,
/* Free the current buffer if we're going to have to reallocate */
if (pPriv->buf && pPriv->buf->size < alloc_size) {
@@ -3181,15 +3347,28 @@
- pPriv->buf = i830_allocate_memory(pScrn, "xv buffer", alloc_size, 16,
- 0);
+ pPriv->buf = dri_bo_alloc(pI830->bufmgr,
-+ "xv buffer", alloc_size, 16, 0);
++ "xv buffer", alloc_size, 4096,
++ DRM_BO_FLAG_MEM_LOCAL |
++ DRM_BO_FLAG_CACHED |
++ DRM_BO_FLAG_CACHED_MAPPED);
}
-
+-
if (pPriv->buf == NULL)
return BadAlloc;
- pPriv->extra_offset = pPriv->buf->offset +
- (pPriv->doubleBuffer ? size * 2 : size);
-+ pPriv->extra_offset = (pPriv->doubleBuffer ? size * 2 : size);
++ if (pPriv->state == NULL && IS_I965G(pI830)) {
++ pPriv->state = dri_bo_alloc(pI830->bufmgr,
++ "xv buffer", BRW_LINEAR_EXTRA, 4096,
++ DRM_BO_FLAG_MEM_LOCAL |
++ DRM_BO_FLAG_CACHED |
++ DRM_BO_FLAG_CACHED_MAPPED);
++ if (pPriv->state == NULL) {
++ dri_bo_unreference(pPriv->buf);
++ return BadAlloc;
++ }
++ }
/* fixup pointers */
- pPriv->YBuf0offset = pPriv->buf->offset;
@@ -3197,7 +3376,7 @@
if (pPriv->rotation & (RR_Rotate_90 | RR_Rotate_270)) {
pPriv->UBuf0offset = pPriv->YBuf0offset + (dstPitch * 2 * width);
pPriv->VBuf0offset = pPriv->UBuf0offset + (dstPitch * width / 2);
-@@ -2378,7 +2541,7 @@ I830PutImage(ScrnInfoPtr pScrn,
+@@ -2378,7 +2550,7 @@ I830PutImage(ScrnInfoPtr pScrn,
/* Pick the idle buffer */
if (!pPriv->textured && *pI830->overlayOn && pPriv->doubleBuffer)
@@ -3206,16 +3385,21 @@
/* copy data */
top = y1 >> 16;
-@@ -2596,7 +2759,7 @@ I830VideoBlockHandler(int i, pointer blockData, pointer pTimeout,
+@@ -2596,8 +2768,12 @@ I830VideoBlockHandler(int i, pointer blockData, pointer pTimeout,
* unbound.
*/
I830Sync(pScrn);
- i830_free_memory(pScrn, pPriv->buf);
+ dri_bo_unreference(pPriv->buf);
pPriv->buf = NULL;
++ if (pPriv->state) {
++ dri_bo_unreference(pPriv->state);
++ pPriv->state = NULL;
++ }
pPriv->videoStatus = 0;
}
-@@ -2609,7 +2772,7 @@ I830VideoBlockHandler(int i, pointer blockData, pointer pTimeout,
+ }
+@@ -2609,7 +2785,7 @@ I830VideoBlockHandler(int i, pointer blockData, pointer pTimeout,
***************************************************************************/
typedef struct {
@@ -3224,16 +3408,19 @@
Bool isOn;
} OffscreenPrivRec, *OffscreenPrivPtr;
-@@ -2654,7 +2817,7 @@ I830AllocateSurface(ScrnInfoPtr pScrn,
+@@ -2654,7 +2830,10 @@ I830AllocateSurface(ScrnInfoPtr pScrn,
fbpitch = pI830->cpp * pScrn->displayWidth;
size = pitch * h;
- pPriv->buf = i830_allocate_memory(pScrn, "xv surface buffer", size, 16, 0);
-+ pPriv->buf = dri_bo_alloc(pI830->bufmgr, "xv surface buffer", size, 16, 0);
++ pPriv->buf = dri_bo_alloc(pI830->bufmgr, "xv surface buffer", size, 4096,
++ DRM_BO_FLAG_MEM_LOCAL |
++ DRM_BO_FLAG_CACHED |
++ DRM_BO_FLAG_CACHED_MAPPED);
if (pPriv->buf == NULL) {
xfree(surface->pitches);
xfree(surface->offsets);
-@@ -2670,10 +2833,11 @@ I830AllocateSurface(ScrnInfoPtr pScrn,
+@@ -2670,10 +2849,11 @@ I830AllocateSurface(ScrnInfoPtr pScrn,
surface->pScrn = pScrn;
surface->id = id;
surface->pitches[0] = pitch;
@@ -3247,7 +3434,7 @@
return Success;
}
-@@ -2709,7 +2873,7 @@ I830FreeSurface(XF86SurfacePtr surface)
+@@ -2709,7 +2889,7 @@ I830FreeSurface(XF86SurfacePtr surface)
I830StopSurface(surface);
/* Sync before freeing the buffer, because the pages will be unbound. */
I830Sync(pScrn);
@@ -3256,7 +3443,7 @@
pPriv->buf = NULL;
xfree(surface->pitches);
xfree(surface->offsets);
-@@ -2785,7 +2949,7 @@ I830DisplaySurface(XF86SurfacePtr surface,
+@@ -2785,7 +2965,7 @@ I830DisplaySurface(XF86SurfacePtr surface,
/* Pick the idle buffer */
if (!pI830Priv->textured && *pI830->overlayOn && pI830Priv->doubleBuffer)
@@ -3266,18 +3453,20 @@
i830_display_video(pScrn, crtc, surface->id, surface->width, surface->height,
surface->pitches[0], x1, y1, x2, y2, &dstBox,
diff --git a/src/i830_video.h b/src/i830_video.h
-index 1768913..c21e5fa 100644
+index 1768913..b5f6a47 100644
--- a/src/i830_video.h
+++ b/src/i830_video.h
-@@ -58,7 +58,7 @@ typedef struct {
+@@ -58,8 +58,8 @@ typedef struct {
CARD32 videoStatus;
Time offTime;
Time freeTime;
- i830_memory *buf; /** YUV data buffer */
+- unsigned int extra_offset;
+ dri_bo *buf; /** YUV data buffer */
- unsigned int extra_offset;
++ dri_bo *state; /** State buffer */
Bool overlayOK;
+ int oneLineMode;
diff --git a/src/i915_video.c b/src/i915_video.c
index 6b20ad2..6b3b15e 100644
--- a/src/i915_video.c
@@ -3421,33 +3610,83 @@
pI830->exa965->vbo_prim_start = pI830->exa965->vbo_used;
diff --git a/src/i965_video.c b/src/i965_video.c
-index 6d04613..fc8b42c 100644
+index 6d04613..91b9f39 100644
--- a/src/i965_video.c
+++ b/src/i965_video.c
-@@ -251,7 +251,9 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
- state_base_offset = pPriv->extra_offset;
- state_base_offset = ALIGN(state_base_offset, 64);
+@@ -183,7 +183,6 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+ int next_offset, total_state_size;
+ int vb_size = (4 * 4) * 4; /* 4 DWORDS per vertex */
+ char *state_base;
+- int state_base_offset;
+ #if 0
+ ErrorF("BroadwaterDisplayVideoTextured: %dx%d (pitch %d)\n", width, height,
+@@ -241,17 +240,12 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+ binding_table_offset = ALIGN(next_offset, 32);
+ next_offset = binding_table_offset + (WM_BINDING_TABLE_ENTRIES * 4);
+
+- /* Allocate an area in framebuffer for our state layout we just set up */
+ total_state_size = next_offset;
+- assert (total_state_size < BRW_LINEAR_EXTRA);
++ assert (total_state_size < pPriv->state->size);
+
+- /*
+- * Use the extra space allocated at the end of the Xv buffer
+- */
+- state_base_offset = pPriv->extra_offset;
+- state_base_offset = ALIGN(state_base_offset, 64);
+-
- state_base = (char *)(pI830->FbBase + state_base_offset);
-+ dri_bo_map(pPriv->buf, TRUE);
++ dri_bo_map(pPriv->state, TRUE);
+
-+ state_base = (char *) pPriv->buf->virtual + state_base_offset;
++ state_base = (char *) pPriv->state->virtual;
/* Set up our pointers to state structures in framebuffer. It would
* probably be a good idea to fill these structures out in system memory
* and then dump them there, instead.
-@@ -340,7 +342,10 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+@@ -272,19 +266,19 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+ vb = (void *)(state_base + vb_offset);
+
+ #if 0
+- ErrorF("vs: 0x%08x\n", state_base_offset + vs_offset);
+- ErrorF("wm: 0x%08x\n", state_base_offset + wm_offset);
+- ErrorF("sf: 0x%08x\n", state_base_offset + sf_offset);
+- ErrorF("cc: 0x%08x\n", state_base_offset + cc_offset);
+- ErrorF("sf kernel: 0x%08x\n", state_base_offset + sf_kernel_offset);
+- ErrorF("ps kernel: 0x%08x\n", state_base_offset + ps_kernel_offset);
+- ErrorF("sip kernel: 0x%08x\n", state_base_offset + sip_kernel_offset);
+- ErrorF("cc_vp: 0x%08x\n", state_base_offset + cc_viewport_offset);
+- ErrorF("src sampler: 0x%08x\n", state_base_offset + src_sampler_offset);
+- ErrorF("vb: 0x%08x\n", state_base_offset + vb_offset);
+- ErrorF("dst surf: 0x%08x\n", state_base_offset + dest_surf_offset);
+- ErrorF("src surf: 0x%08x\n", state_base_offset + src_surf_offset);
+- ErrorF("binding table: 0x%08x\n", state_base_offset + binding_table_offset);
++ ErrorF("vs: 0x%08x\n", vs_offset);
++ ErrorF("wm: 0x%08x\n", wm_offset);
++ ErrorF("sf: 0x%08x\n", sf_offset);
++ ErrorF("cc: 0x%08x\n", cc_offset);
++ ErrorF("sf kernel: 0x%08x\n", sf_kernel_offset);
++ ErrorF("ps kernel: 0x%08x\n", ps_kernel_offset);
++ ErrorF("sip kernel: 0x%08x\n", sip_kernel_offset);
++ ErrorF("cc_vp: 0x%08x\n", cc_viewport_offset);
++ ErrorF("src sampler: 0x%08x\n", src_sampler_offset);
++ ErrorF("vb: 0x%08x\n", vb_offset);
++ ErrorF("dst surf: 0x%08x\n", dest_surf_offset);
++ ErrorF("src surf: 0x%08x\n", src_surf_offset);
++ ErrorF("binding table: 0x%08x\n", binding_table_offset);
+ #endif
+
+ /* For 3D, the VS must have 8, 12, 16, 24, or 32 VUEs allocated to it.
+@@ -340,8 +334,7 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
cc_state->cc3.ia_blend_enable = 1; /* blend alpha just like colors */
cc_state->cc3.blend_enable = 0; /* disable color blend */
cc_state->cc3.alpha_test = 0; /* disable alpha test */
- cc_state->cc4.cc_viewport_state_offset = (state_base_offset +
-+
-+ /* FIXME: Eek! No relocation to match this... */
-+ cc_state->cc4.cc_viewport_state_offset = (pPriv->buf->offset +
-+ state_base_offset +
- cc_viewport_offset) >> 5;
+- cc_viewport_offset) >> 5;
++ cc_state->cc4.cc_viewport_state_offset = cc_viewport_offset >> 5;
cc_state->cc5.dither_enable = 0; /* disable dither */
cc_state->cc5.logicop_func = 0xc; /* WHITE */
-@@ -371,7 +376,19 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+ cc_state->cc5.statistics_enable = 1;
+@@ -371,7 +364,19 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
dest_surf_state->ss0.mipmap_layout_mode = 0;
dest_surf_state->ss0.render_cache_read_mode = 0;
@@ -3458,9 +3697,9 @@
+ DRM_BO_FLAG_MEM_TT |
+ DRM_BO_FLAG_WRITE |
+ DRM_BO_FLAG_READ,
-+ pPriv->buf,
++ pPriv->state,
+ (char *) &dest_surf_state->ss1.base_addr -
-+ (char *) pPriv->buf->virtual,
++ state_base,
+ 0);
+ else
+ dest_surf_state->ss1.base_addr = intel_get_pixmap_offset(pPixmap);
@@ -3468,51 +3707,59 @@
dest_surf_state->ss2.height = pScrn->virtualY - 1;
dest_surf_state->ss2.width = pScrn->virtualX - 1;
dest_surf_state->ss2.mip_count = 0;
-@@ -403,7 +420,20 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+@@ -403,7 +408,21 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
src_surf_state->ss0.mipmap_layout_mode = 0;
src_surf_state->ss0.render_cache_read_mode = 0;
- src_surf_state->ss1.base_addr = pPriv->YBuf0offset;
-+
-+ if (pI830->use_ttm_batch)
++ if (pI830->use_ttm_batch) {
++ dri_emit_reloc(pPriv->state,
++ DRM_BO_FLAG_MEM_TT |
++ DRM_BO_FLAG_WRITE |
++ DRM_BO_FLAG_READ,
++ pPriv->YBuf0offset,
++ (char *) &src_surf_state->ss1.base_addr - state_base,
++ pPriv->buf);
+ src_surf_state->ss1.base_addr =
-+ intelddx_batchbuffer_emit_pixmap(pPixmap,
-+ DRM_BO_FLAG_MEM_TT |
-+ DRM_BO_FLAG_READ,
-+ pPriv->buf,
-+ (char *) &src_surf_state->ss1.base_addr -
-+ (char *) pPriv->buf->virtual,
-+ pPriv->YBuf0offset);
-+ else
++ pPriv->buf->offset + pPriv->YBuf0offset;
++ } else {
+ src_surf_state->ss1.base_addr =
+ pPriv->buf->offset + pPriv->YBuf0offset;
++ }
+
src_surf_state->ss2.width = width - 1;
src_surf_state->ss2.height = height - 1;
src_surf_state->ss2.mip_count = 0;
-@@ -439,8 +469,11 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+@@ -413,8 +432,8 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+
+ /* Set up a binding table for our two surfaces. Only the PS will use it */
+ /* XXX: are these offset from the right place? */
+- binding_table[0] = state_base_offset + dest_surf_offset;
+- binding_table[1] = state_base_offset + src_surf_offset;
++ binding_table[0] = dest_surf_offset;
++ binding_table[1] = src_surf_offset;
+
+ /* Set up the packed YUV source sampler. Doesn't do colorspace conversion.
+ */
+@@ -439,8 +458,8 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
memcpy (sf_kernel, sf_kernel_static, sizeof (sf_kernel_static));
memset(sf_state, 0, sizeof(*sf_state));
-+
-+ /* FIXME: Eek! No relocation to match this... */
- sf_state->thread0.kernel_start_pointer =
+- sf_state->thread0.kernel_start_pointer =
- (state_base_offset + sf_kernel_offset) >> 6;
-+ (pPriv->buf->offset + state_base_offset + sf_kernel_offset) >> 6;
+
++ sf_state->thread0.kernel_start_pointer = sf_kernel_offset >> 6;
sf_state->thread0.grf_reg_count = BRW_GRF_BLOCKS(SF_KERNEL_NUM_GRF);
sf_state->sf1.single_program_flow = 1; /* XXX */
sf_state->sf1.binding_table_entry_count = 0;
-@@ -470,16 +503,22 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+@@ -470,16 +489,15 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
memcpy (ps_kernel, ps_kernel_static, sizeof (ps_kernel_static));
memset (wm_state, 0, sizeof (*wm_state));
-+
-+ /* FIXME: Eek! No relocation to match this... */
- wm_state->thread0.kernel_start_pointer =
+- wm_state->thread0.kernel_start_pointer =
- (state_base_offset + ps_kernel_offset) >> 6;
-+ (pPriv->buf->offset + state_base_offset + ps_kernel_offset) >> 6;
+
++ wm_state->thread0.kernel_start_pointer = ps_kernel_offset >> 6;
wm_state->thread0.grf_reg_count = BRW_GRF_BLOCKS(PS_KERNEL_NUM_GRF);
wm_state->thread1.single_program_flow = 1; /* XXX */
wm_state->thread1.binding_table_entry_count = 2;
@@ -3520,52 +3767,79 @@
* set, and the minimum allocation is 1024 bytes.
*/
- wm_state->thread2.scratch_space_base_pointer = (state_base_offset +
-+ /* FIXME: Eek! No relocation to match this... */
-+ wm_state->thread2.scratch_space_base_pointer = (pPriv->buf->offset +
-+ state_base_offset +
- wm_scratch_offset) >> 10;
-+
+- wm_scratch_offset) >> 10;
++ wm_state->thread2.scratch_space_base_pointer = wm_scratch_offset >> 10;
wm_state->thread2.per_thread_scratch_space = 0; /* 1024 bytes */
wm_state->thread3.dispatch_grf_start_reg = 3; /* XXX */
wm_state->thread3.const_urb_entry_read_length = 0;
-@@ -487,8 +526,12 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+@@ -487,8 +505,7 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
wm_state->thread3.urb_entry_read_length = 1; /* XXX */
wm_state->thread3.urb_entry_read_offset = 0; /* XXX */
wm_state->wm4.stats_enable = 1;
- wm_state->wm4.sampler_state_pointer = (state_base_offset +
-+
-+ /* FIXME: Eek! No relocation to match this... */
-+ wm_state->wm4.sampler_state_pointer = (pPriv->buf->offset +
-+ state_base_offset +
- src_sampler_offset) >> 5;
-+
+- src_sampler_offset) >> 5;
++ wm_state->wm4.sampler_state_pointer = src_sampler_offset >> 5;
wm_state->wm4.sampler_count = 1; /* 1-4 samplers used */
wm_state->wm5.max_threads = PS_MAX_THREADS - 1;
wm_state->wm5.thread_dispatch_enable = 1;
-@@ -535,8 +578,9 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+@@ -496,6 +513,8 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+ wm_state->wm5.enable_8_pix = 0;
+ wm_state->wm5.early_depth_test = 1;
+
++ dri_bo_unmap(pPriv->state);
++
+ {
+ BEGIN_BATCH(2);
+ OUT_BATCH(MI_FLUSH |
+@@ -520,12 +539,16 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+ OUT_BATCH((0 << 4) | /* URB Entry Allocation Size */
+ (0 << 0)); /* Number of URB Entries */
+
+- /* Zero out the two base address registers so all offsets are
+- * absolute
++ /* Set the base addresses for general state and surface state
++ * to our buffer.
+ */
+ OUT_BATCH(BRW_STATE_BASE_ADDRESS | 4);
+- OUT_BATCH(0 | BASE_ADDRESS_MODIFY); /* Generate state base address */
+- OUT_BATCH(0 | BASE_ADDRESS_MODIFY); /* Surface state base address */
++ OUT_RELOC(pPriv->state, /* General state base address */
++ DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_READ,
++ BASE_ADDRESS_MODIFY);
++ OUT_RELOC(pPriv->state, /* Surface state base address */
++ DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_READ,
++ BASE_ADDRESS_MODIFY);
+ OUT_BATCH(0 | BASE_ADDRESS_MODIFY); /* media base addr, don't care */
+ /* general state max addr, disabled */
+ OUT_BATCH(0x10000000 | BASE_ADDRESS_MODIFY);
+@@ -535,8 +558,9 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
/* Set system instruction pointer */
OUT_BATCH(BRW_STATE_SIP | 0);
/* system instruction pointer */
- OUT_BATCH(state_base_offset + sip_kernel_offset);
-
-+ OUT_RELOC(pPriv->buf,
++ OUT_RELOC(pPriv->state,
+ DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_READ,
-+ state_base_offset + sip_kernel_offset);
++ sip_kernel_offset);
OUT_BATCH(MI_NOOP);
ADVANCE_BATCH();
}
-@@ -564,7 +608,9 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+@@ -564,7 +588,7 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
OUT_BATCH(0); /* clip */
OUT_BATCH(0); /* sf */
/* Only the PS uses the binding table */
- OUT_BATCH(state_base_offset + binding_table_offset); /* ps */
-+ OUT_RELOC(pPriv->buf,
-+ DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_READ,
-+ state_base_offset + binding_table_offset); /* ps */
++ OUT_BATCH(binding_table_offset); /* ps */
/* Blend constant color (magenta is fun) */
OUT_BATCH(BRW_3DSTATE_CONSTANT_COLOR | 3);
-@@ -594,9 +640,16 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+@@ -589,14 +613,15 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+
+ /* Set the pointers to the 3d pipeline state */
+ OUT_BATCH(BRW_3DSTATE_PIPELINED_POINTERS | 5);
+- OUT_BATCH(state_base_offset + vs_offset); /* 32 byte aligned */
++ OUT_BATCH(vs_offset); /* 32 byte aligned */
+ /* disable GS, resulting in passthrough */
OUT_BATCH(BRW_GS_DISABLE);
/* disable CLIP, resulting in passthrough */
OUT_BATCH(BRW_CLIP_DISABLE);
@@ -3573,29 +3847,43 @@
- OUT_BATCH(state_base_offset + wm_offset); /* 32 byte aligned */
- OUT_BATCH(state_base_offset + cc_offset); /* 64 byte aligned */
+
-+ OUT_RELOC(pPriv->buf,
-+ DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_READ,
-+ state_base_offset + sf_offset); /* 32 byte aligned */
-+ OUT_RELOC(pPriv->buf,
-+ DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_READ,
-+ state_base_offset + wm_offset); /* 32 byte aligned */
-+ OUT_RELOC(pPriv->buf,
-+ DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_READ,
-+ state_base_offset + cc_offset); /* 64 byte aligned */
++ OUT_BATCH(sf_offset); /* 32 byte aligned */
++ OUT_BATCH(wm_offset); /* 32 byte aligned */
++ OUT_BATCH(cc_offset); /* 64 byte aligned */
/* URB fence */
OUT_BATCH(BRW_URB_FENCE |
-@@ -623,7 +676,9 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+@@ -617,14 +642,19 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+ OUT_BATCH(((URB_CS_ENTRY_SIZE - 1) << 4) |
+ (URB_CS_ENTRIES << 0));
+
+- /* Set up the pointer to our vertex buffer */
+- OUT_BATCH(BRW_3DSTATE_VERTEX_BUFFERS | 2);
++ /* Set up the pointer to our vertex buffer. The vertex buffer
++ * addresses aren't relative to any of the base addresses so we
++ * have to emit a relocation. */
++ OUT_BATCH(BRW_3DSTATE_VERTEX_BUFFERS | 3);
+ /* four 32-bit floats per vertex */
OUT_BATCH((0 << VB0_BUFFER_INDEX_SHIFT) |
VB0_VERTEXDATA |
((4 * 4) << VB0_BUFFER_PITCH_SHIFT));
- OUT_BATCH(state_base_offset + vb_offset);
-+ OUT_RELOC(pPriv->buf,
++ OUT_RELOC(pPriv->state,
+ DRM_BO_FLAG_MEM_TT | DRM_BO_FLAG_READ,
-+ state_base_offset + vb_offset);
++ vb_offset);
OUT_BATCH(3); /* four corners to our rectangle */
++ OUT_BATCH(0); /* reserved */
/* Set up our vertex elements, sourced from the single vertex buffer. */
+ OUT_BATCH(BRW_3DSTATE_VERTEX_ELEMENTS | 3);
+@@ -649,7 +679,6 @@ I965DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id,
+ (BRW_VFCOMPONENT_STORE_1_FLT << VE1_VFCOMPONENT_3_SHIFT) |
+ (4 << VE1_DESTINATION_ELEMENT_OFFSET_SHIFT));
+
+- OUT_BATCH(MI_NOOP); /* pad to quadword */
+ ADVANCE_BATCH();
+ }
+
diff --git a/src/intel_batchbuffer.c b/src/intel_batchbuffer.c
index e15c6ce..3362a46 100644
--- a/src/intel_batchbuffer.c
Index: xorg-x11-drv-i810.spec
===================================================================
RCS file: /cvs/pkgs/rpms/xorg-x11-drv-i810/devel/xorg-x11-drv-i810.spec,v
retrieving revision 1.82
retrieving revision 1.83
diff -u -r1.82 -r1.83
--- xorg-x11-drv-i810.spec 6 Mar 2008 22:16:44 -0000 1.82
+++ xorg-x11-drv-i810.spec 7 Mar 2008 06:53:24 -0000 1.83
@@ -5,7 +5,7 @@
Summary: Xorg X11 Intel video driver(s)
Name: xorg-x11-drv-i810
Version: 2.2.1
-Release: 8%{?dist}
+Release: 9%{?dist}
URL: http://www.x.org
License: MIT
Group: User Interface/X Hardware Support
@@ -135,6 +135,10 @@
%{_libdir}/libI810XvMC.so
%changelog
+* Fri Mar 07 2008 Dave Airlie <airlied at redhat.com> 2.2.1-9
+- update modesetting patch to include 965 video + fix for memory
+ space leak
+
* Fri Mar 07 2008 Dave Airlie <airlied at redhat.com> 2.2.1-8
- fixup pciaccess version check and autoconf and fallout
More information about the fedora-extras-commits
mailing list