From b09e74988305d0eb4d4d1d09372975a20f6aa779 Mon Sep 17 00:00:00 2001 From: matthieu Date: Sat, 16 Dec 2006 21:01:39 +0000 Subject: [PATCH] xf86-video-intel 1.7.3 --- driver/xf86-video-intel/Makefile.in | 14 +- driver/xf86-video-intel/config.h.in | 3 + driver/xf86-video-intel/configure.ac | 14 +- driver/xf86-video-intel/man/i810.man | 26 +- driver/xf86-video-intel/src/i810_dri.h | 2 +- driver/xf86-video-intel/src/i810_driver.c | 6 + driver/xf86-video-intel/src/i830.h | 15 + driver/xf86-video-intel/src/i830_cursor.c | 16 +- driver/xf86-video-intel/src/i830_dri.c | 52 +++- driver/xf86-video-intel/src/i830_dri.h | 2 +- driver/xf86-video-intel/src/i830_driver.c | 257 +++++++++++++++++- driver/xf86-video-intel/src/i830_memory.c | 76 +++--- driver/xf86-video-intel/src/i830_modes.c | 12 +- driver/xf86-video-intel/src/i830_rotate.c | 43 +-- driver/xf86-video-intel/src/i830_video.c | 18 +- driver/xf86-video-intel/src/i915_video.c | 4 + driver/xf86-video-intel/src/packed_yuv_wm.g4a | 2 +- driver/xf86-video-intel/src/wm_prog.h | 2 +- 18 files changed, 468 insertions(+), 96 deletions(-) diff --git a/driver/xf86-video-intel/Makefile.in b/driver/xf86-video-intel/Makefile.in index 839fe1af6..27124fc84 100644 --- a/driver/xf86-video-intel/Makefile.in +++ b/driver/xf86-video-intel/Makefile.in @@ -137,6 +137,7 @@ F77 = @F77@ FFLAGS = @FFLAGS@ FILE_MAN_DIR = @FILE_MAN_DIR@ FILE_MAN_SUFFIX = @FILE_MAN_SUFFIX@ +GREP = @GREP@ HAVE_GEN4ASM_FALSE = @HAVE_GEN4ASM_FALSE@ HAVE_GEN4ASM_TRUE = @HAVE_GEN4ASM_TRUE@ INSTALL_DATA = @INSTALL_DATA@ @@ -177,15 +178,13 @@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ +VIDEO_DEBUG_FALSE = @VIDEO_DEBUG_FALSE@ +VIDEO_DEBUG_TRUE = @VIDEO_DEBUG_TRUE@ XORG_CFLAGS = @XORG_CFLAGS@ XORG_LIBS = @XORG_LIBS@ -ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_F77 = @ac_ct_F77@ -ac_ct_RANLIB = @ac_ct_RANLIB@ -ac_ct_STRIP = @ac_ct_STRIP@ -ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ @@ -202,6 +201,9 @@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ exec_prefix = @exec_prefix@ gen4asm = @gen4asm@ host = @host@ @@ -209,18 +211,22 @@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ +htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ +localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ moduledir = @moduledir@ oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ +psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ sysconfdir = @sysconfdir@ diff --git a/driver/xf86-video-intel/config.h.in b/driver/xf86-video-intel/config.h.in index 9497c1494..df54774a9 100644 --- a/driver/xf86-video-intel/config.h.in +++ b/driver/xf86-video-intel/config.h.in @@ -65,6 +65,9 @@ /* Version number of package */ #undef VERSION +/* Enable debug support */ +#undef VIDEO_DEBUG + /* Enable DRI driver support */ #undef XF86DRI diff --git a/driver/xf86-video-intel/configure.ac b/driver/xf86-video-intel/configure.ac index 042d67da1..48b39a141 100644 --- a/driver/xf86-video-intel/configure.ac +++ b/driver/xf86-video-intel/configure.ac @@ -22,7 +22,7 @@ AC_PREREQ(2.57) AC_INIT([xf86-video-i810], - 1.7.2, + 1.7.3, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xf86-video-i810) @@ -65,6 +65,11 @@ AC_ARG_ENABLE(dri, AC_HELP_STRING([--disable-dri], [DRI="$enableval"], [DRI=auto]) +AC_ARG_ENABLE(video-debug, AC_HELP_STRING([--enable-video-debug], + [Enable video debugging support [[default=no]]]), + [VIDEO_DEBUG="$enableval"], + [VIDEO_DEBUG=no]) + # Checks for extensions XORG_DRIVER_CHECK_EXT(XINERAMA, xineramaproto) @@ -117,11 +122,16 @@ CFLAGS="$CFLAGS $WARN_CFLAGS" AM_CONDITIONAL(DRI, test x$DRI = xyes) if test "$DRI" = yes; then - PKG_CHECK_MODULES(DRI, [libdrm >= 2.0 xf86driproto]) + PKG_CHECK_MODULES(DRI, [libdrm >= 2.2 xf86driproto]) AC_DEFINE(XF86DRI,1,[Enable DRI driver support]) AC_DEFINE(XF86DRI_DEVEL,1,[Enable developmental DRI driver support]) fi +AM_CONDITIONAL(VIDEO_DEBUG, test x$VIDEO_DEBUG = xyes) +if test "$VIDEO_DEBUG" = yes; then + AC_DEFINE(VIDEO_DEBUG,1,[Enable debug support]) +fi + AC_SUBST([DRI_CFLAGS]) AC_SUBST([XORG_CFLAGS]) AC_SUBST([moduledir]) diff --git a/driver/xf86-video-intel/man/i810.man b/driver/xf86-video-intel/man/i810.man index fcc5dd852..a3f25ec6a 100644 --- a/driver/xf86-video-intel/man/i810.man +++ b/driver/xf86-video-intel/man/i810.man @@ -201,8 +201,32 @@ Default: 0 degrees. .BI "Option \*qLinearAlloc\*q \*q" integer \*q Allows more memory for the offscreen allocator. This usually helps in situations where HDTV movies are required to play but not enough offscreen -memory is usually available. Set this to 6144 for upto 1920x1080 HDTV support. +memory is usually available. Set this to 8160 for upto 1920x1080 HDTV support. Default 0KB (off). +.TP +.BI "Option \*qLegacy3D\*q \*q" boolean \*q +Enable support for the legacy i915_dri.so 3D driver. +This will, among other things, make the 2D driver tell libGL to +load the 3D driver i915_dri.so instead of the newer i915tex_dri.so. +This option is only used for chipsets in the range i830-i945. +Default for i830-i945 series: Enabled for i915 drm versions < 1.7.0. Otherwise +disabled. +Default for i810: The option is not used. +Default for i965: The option is always true. +.TP +.BI "Option \*qAperTexSize\*q \*q" integer \*q +Give the size in kiB of the AGP aperture area that is reserved for the +DRM memory manager present in i915 drm from version 1.7.0 and upwards, +and that is used with the 3D driver in Mesa from version 6.5.2 and +upwards. If the size is set too high to make room for pre-allocated +VideoRam, the driver will try to reduce it automatically. If you use only +older Mesa or DRM versions, you may set this value to zero, and +atctivate the legacy texture pool (see +.B "Option \*qLegacy3D\*q" +). If you run 3D programs with large texture memory requirements, you might +gain some performance by increasing this value. +Default: 32768. + .SH "SEE ALSO" __xservername__(__appmansuffix__), __xconfigfile__(__filemansuffix__), xorgconfig(__appmansuffix__), Xserver(__appmansuffix__), X(__miscmansuffix__) diff --git a/driver/xf86-video-intel/src/i810_dri.h b/driver/xf86-video-intel/src/i810_dri.h index f090b923c..70ea89993 100644 --- a/driver/xf86-video-intel/src/i810_dri.h +++ b/driver/xf86-video-intel/src/i810_dri.h @@ -10,7 +10,7 @@ #define I810_MAJOR_VERSION 1 #define I810_MINOR_VERSION 7 -#define I810_PATCHLEVEL 2 +#define I810_PATCHLEVEL 3 typedef struct { drm_handle_t regs; diff --git a/driver/xf86-video-intel/src/i810_driver.c b/driver/xf86-video-intel/src/i810_driver.c index cd6d9d7d2..5143fd40c 100644 --- a/driver/xf86-video-intel/src/i810_driver.c +++ b/driver/xf86-video-intel/src/i810_driver.c @@ -313,6 +313,12 @@ const char *I810drmSymbols[] = { "drmGetLibVersion", "drmGetVersion", "drmRmMap", +#ifdef XSERVER_LIBDRM_MM + "drmMMInit", + "drmMMTakedown", + "drmMMLock", + "drmMMUnlock", +#endif NULL }; diff --git a/driver/xf86-video-intel/src/i830.h b/driver/xf86-video-intel/src/i830.h index 38a880fb8..0df41e33e 100644 --- a/driver/xf86-video-intel/src/i830.h +++ b/driver/xf86-video-intel/src/i830.h @@ -107,6 +107,13 @@ typedef struct _VESARec { } VESARec, *VESAPtr; +#ifdef XF86DRI +#define I830_MM_MINPAGES 512 +#define I830_MM_MAXSIZE (32*1024) +#define I830_KERNEL_MM (1 << 0) /* Initialize the kernel memory manager*/ +#define I830_KERNEL_TEX (1 << 1) /* Allocate texture memory pool */ +#endif + typedef struct _I830Rec *I830Ptr; typedef void (*I830WriteIndexedByteFunc)(I830Ptr pI830, IOADDRESS addr, @@ -285,6 +292,8 @@ typedef struct _I830Rec { int TexGranularity; int drmMinor; Bool have3DWindows; + int mmModeFlags; + int mmSize; unsigned int front_tiled; unsigned int back_tiled; @@ -573,4 +582,10 @@ Rotation I830GetRotation(ScreenPtr pScreen); #define _845_DRAM_RW_CONTROL 0x90 #define DRAM_WRITE 0x33330000 +/* + * Xserver MM compatibility. Remove code guarded by this when the + * XServer contains the libdrm mm code + */ +#undef XSERVER_LIBDRM_MM + #endif /* _I830_H_ */ diff --git a/driver/xf86-video-intel/src/i830_cursor.c b/driver/xf86-video-intel/src/i830_cursor.c index c5c904c46..8343b6b12 100644 --- a/driver/xf86-video-intel/src/i830_cursor.c +++ b/driver/xf86-video-intel/src/i830_cursor.c @@ -520,11 +520,17 @@ I830SetCursorPosition(ScrnInfoPtr pScrn, int x, int y) x -= pScrn->frameX0; y -= pScrn->frameY0; - /* Clamp the cursor position to the visible screen area */ - if (x >= pScrn->currentMode->HDisplay) x = pScrn->currentMode->HDisplay - 1; - if (y >= pScrn->currentMode->VDisplay) y = pScrn->currentMode->VDisplay - 1; - if (x <= -I810_CURSOR_X) x = -I810_CURSOR_X + 1; - if (y <= -I810_CURSOR_Y) y = -I810_CURSOR_Y + 1; + if (pScrn->currentMode) { + /* Clamp the cursor position to the visible screen area */ + if (x >= pScrn->currentMode->HDisplay) x = pScrn->currentMode->HDisplay - 1; + if (y >= pScrn->currentMode->VDisplay) y = pScrn->currentMode->VDisplay - 1; + if (x <= -I810_CURSOR_X) x = -I810_CURSOR_X + 1; + if (y <= -I810_CURSOR_Y) y = -I810_CURSOR_Y + 1; + } else { + /* Can't ensure the cursor will be visible, so hide it */ + hide = TRUE; + show = FALSE; + } #if 0 /* diff --git a/driver/xf86-video-intel/src/i830_dri.c b/driver/xf86-video-intel/src/i830_dri.c index 21af65187..524c4de70 100644 --- a/driver/xf86-video-intel/src/i830_dri.c +++ b/driver/xf86-video-intel/src/i830_dri.c @@ -1,4 +1,4 @@ -/* $XFree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.c,v 1.15 2003/06/18 13:14:17 dawes Exp $ */ +/* $xfree86: xc/programs/Xserver/hw/xfree86/drivers/i810/i830_dri.c,v 1.15 2003/06/18 13:14:17 dawes Exp $ */ /************************************************************************** Copyright 2001 VA Linux Systems Inc., Fremont, California. @@ -84,8 +84,9 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. #include "dristruct.h" static char I830KernelDriverName[] = "i915"; -static char I830ClientDriverName[] = "i915"; +static char I830ClientDriverName[] = "i915tex"; static char I965ClientDriverName[] = "i965"; +static char I830LegacyClientDriverName[] = "i915"; static Bool I830InitVisualConfigs(ScreenPtr pScreen); static Bool I830CreateContext(ScreenPtr pScreen, VisualPtr visual, @@ -644,10 +645,31 @@ I830DRIScreenInit(ScreenPtr pScreen) return FALSE; } pI830->drmMinor = version->version_minor; + if (!(pI830->mmModeFlags & I830_KERNEL_TEX)) { + if ((version->version_major > 1) || + ((version->version_minor >= 7) && + (version->version_major == 1))) { + pI830->mmModeFlags |= I830_KERNEL_MM; + } else { + pI830->mmModeFlags |= I830_KERNEL_TEX; + } + } else { + xf86DrvMsg(pScreen->myNum, X_INFO, + "Not enabling the DRM memory manager.\n"); + } drmFreeVersion(version); } } + /* + * Backwards compatibility + */ + + if ((pDRIInfo->clientDriverName == I830ClientDriverName) && + (pI830->mmModeFlags & I830_KERNEL_TEX)) { + pDRIInfo->clientDriverName = I830LegacyClientDriverName; + } + return TRUE; } @@ -707,18 +729,20 @@ I830DRIMapScreenRegions(ScrnInfoPtr pScrn, drmI830Sarea *sarea) xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] Depth Buffer = 0x%08x\n", (int)sarea->depth_handle); - if (drmAddMap(pI830->drmSubFD, - (drm_handle_t)sarea->tex_offset + pI830->LinearAddr, - sarea->tex_size, DRM_AGP, 0, - (drmAddress) &sarea->tex_handle) < 0) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "[drm] drmAddMap(tex_handle) failed. Disabling DRI\n"); - DRICloseScreen(pScreen); - return FALSE; - } - xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] textures = 0x%08x\n", - (int)sarea->tex_handle); + if (pI830->mmModeFlags & I830_KERNEL_TEX) { + if (drmAddMap(pI830->drmSubFD, + (drm_handle_t)sarea->tex_offset + pI830->LinearAddr, + sarea->tex_size, DRM_AGP, 0, + (drmAddress) &sarea->tex_handle) < 0) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "[drm] drmAddMap(tex_handle) failed. Disabling DRI\n"); + DRICloseScreen(pScreen); + return FALSE; + } + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "[drm] textures = 0x%08x\n", + (int)sarea->tex_handle); + } return TRUE; } @@ -1475,7 +1499,7 @@ I830UpdateDRIBuffers(ScrnInfoPtr pScrn, drmI830Sarea *sarea) success = I830DRIMapScreenRegions(pScrn, sarea); - if (success) + if (success && (pI830->mmModeFlags & I830_KERNEL_TEX)) I830InitTextureHeap(pScrn, sarea); return success; diff --git a/driver/xf86-video-intel/src/i830_dri.h b/driver/xf86-video-intel/src/i830_dri.h index a14049784..969eb60e9 100644 --- a/driver/xf86-video-intel/src/i830_dri.h +++ b/driver/xf86-video-intel/src/i830_dri.h @@ -10,7 +10,7 @@ #define I830_MAJOR_VERSION 1 #define I830_MINOR_VERSION 7 -#define I830_PATCHLEVEL 2 +#define I830_PATCHLEVEL 3 #define I830_REG_SIZE 0x80000 diff --git a/driver/xf86-video-intel/src/i830_driver.c b/driver/xf86-video-intel/src/i830_driver.c index 3cee1c8bc..e950d7c3c 100644 --- a/driver/xf86-video-intel/src/i830_driver.c +++ b/driver/xf86-video-intel/src/i830_driver.c @@ -197,6 +197,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE. #ifdef XF86DRI #include "dri.h" +#include +#include #endif #define BIT(x) (1 << (x)) @@ -268,7 +270,9 @@ typedef enum { OPTION_SECONDHSYNC, OPTION_SECONDVREFRESH, OPTION_SECONDPOSITION, - OPTION_INTELXINERAMA + OPTION_INTELXINERAMA, + OPTION_INTELTEXPOOL, + OPTION_INTELMMSIZE } I830Opts; static OptionInfoRec I830BIOSOptions[] = { @@ -296,6 +300,8 @@ static OptionInfoRec I830BIOSOptions[] = { {OPTION_SECONDVREFRESH,"SecondMonitorVertRefresh",OPTV_STRING,{0}, FALSE }, {OPTION_SECONDPOSITION,"SecondPosition",OPTV_STRING, {0}, FALSE }, {OPTION_INTELXINERAMA,"MergedXinerama",OPTV_BOOLEAN, {0}, TRUE}, + {OPTION_INTELTEXPOOL,"Legacy3D", OPTV_BOOLEAN, {0}, FALSE}, + {OPTION_INTELMMSIZE, "AperTexSize", OPTV_INTEGER, {0}, FALSE}, {-1, NULL, OPTV_NONE, {0}, FALSE} }; /* *INDENT-ON* */ @@ -3825,6 +3831,28 @@ I830IsPrimary(ScrnInfoPtr pScrn) return TRUE; } +#ifdef XF86DRI +static void +I830ReduceMMSize(ScrnInfoPtr pScrn, unsigned long newSize, + const char *reason) +{ + I830Ptr pI830 = I830PTR(pScrn); + + newSize = ROUND_DOWN_TO(newSize, GTT_PAGE_SIZE); + if (newSize / GTT_PAGE_SIZE > I830_MM_MINPAGES) { + pI830->mmSize = newSize / 1024; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "DRM memory manager aperture size is reduced to %d kiB\n" + "\t%s\n", pI830->mmSize, reason); + } else { + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, + "DRM memory manager will be disabled\n\t%s\n", reason); + pI830->mmSize = 0; + } +} +#endif + + static Bool I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) { @@ -3847,6 +3875,9 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) const char *chipname; unsigned int ver; char v[5]; +#ifdef XF86DRI + unsigned long savedMMSize; +#endif if (pScrn->numEntities != 1) return FALSE; @@ -4243,7 +4274,46 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) "runs only at depths 16 and 24.\n"); pI830->directRenderingDisabled = TRUE; } - } + + pI830->mmModeFlags = 0; + + if (!pI830->directRenderingDisabled) { + Bool tmp = FALSE; + + if (IS_I965G(pI830)) + pI830->mmModeFlags |= I830_KERNEL_TEX; + + from = X_PROBED; + if (xf86GetOptValBool(pI830->Options, + OPTION_INTELTEXPOOL, &tmp)) { + from = X_CONFIG; + if (tmp) { + pI830->mmModeFlags |= I830_KERNEL_TEX; + } else { + pI830->mmModeFlags &= ~I830_KERNEL_TEX; + } + } + if (from == X_CONFIG || + (pI830->mmModeFlags & I830_KERNEL_TEX)) { + xf86DrvMsg(pScrn->scrnIndex, from, + "Will %stry to allocate texture pool " + "for old Mesa 3D driver.\n", + (pI830->mmModeFlags & I830_KERNEL_TEX) ? + "" : "not "); + } + pI830->mmSize = I830_MM_MAXSIZE; + from = X_INFO; + if (xf86GetOptValInteger(pI830->Options, OPTION_INTELMMSIZE, + &(pI830->mmSize))) { + from = X_CONFIG; + } + xf86DrvMsg(pScrn->scrnIndex, from, + "Will try to reserve %d kiB of AGP aperture space\n" + "\tfor the DRM memory manager.\n", + pI830->mmSize); + } + } + #endif pI830->LinearAlloc = 0; @@ -5351,9 +5421,15 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) * If DRI is potentially usable, check if there is enough memory available * for it, and if there's also enough to allow tiling to be enabled. */ + #if defined(XF86DRI) - if (!I830CheckDRIAvailable(pScrn)) + if (!I830CheckDRIAvailable(pScrn)) { pI830->directRenderingDisabled = TRUE; + pI830->mmSize = 0; + } else if (pScrn->videoRam > pI830->FbMapSize / 1024 - pI830->mmSize) { + I830ReduceMMSize(pScrn, pI830->FbMapSize - KB(pScrn->videoRam), + "to make room for video memory"); + } if (I830IsPrimary(pScrn) && !pI830->directRenderingDisabled) { int savedDisplayWidth = pScrn->displayWidth; @@ -5395,7 +5471,9 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) * If the displayWidth is a tilable pitch, test if there's enough * memory available to enable tiling. */ + savedMMSize = pI830->mmSize; if (pScrn->displayWidth == pitches[i]) { + retry_dryrun: I830ResetAllocations(pScrn, 0); if (I830Allocate2DMemory(pScrn, ALLOCATE_DRY_RUN | ALLOC_INITIAL) && I830Allocate3DMemory(pScrn, ALLOCATE_DRY_RUN)) { @@ -5407,7 +5485,13 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) "required to\n\tenable tiling mode for DRI.\n", (memNeeded + 1023) / 1024); } - if (pI830->MemoryAperture.Size < 0) { + if (pI830->MemoryAperture.Size < 0) { + if (KB(pI830->mmSize) > I830_MM_MINPAGES * GTT_PAGE_SIZE) { + I830ReduceMMSize(pScrn, I830_MM_MINPAGES * GTT_PAGE_SIZE, + "to make room in AGP aperture for tiling."); + goto retry_dryrun; + } + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Allocation with DRI tiling enabled would " "exceed the\n" @@ -5435,7 +5519,9 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) * Tiling can't be enabled. Check if there's enough memory for DRI * without tiling. */ + pI830->mmSize = savedMMSize; pI830->disableTiling = TRUE; + retry_dryrun2: I830ResetAllocations(pScrn, 0); if (I830Allocate2DMemory(pScrn, ALLOCATE_DRY_RUN | ALLOC_INITIAL) && I830Allocate3DMemory(pScrn, ALLOCATE_DRY_RUN | ALLOC_NO_TILING)) { @@ -5448,6 +5534,11 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) (memNeeded + 1023) / 1024); } if (pI830->MemoryAperture.Size < 0) { + if (KB(pI830->mmSize) > I830_MM_MINPAGES * GTT_PAGE_SIZE) { + I830ReduceMMSize(pScrn, I830_MM_MINPAGES * GTT_PAGE_SIZE, + "to save AGP aperture space for video memory."); + goto retry_dryrun2; + } xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "Allocation with DRI enabled would " "exceed the\n" @@ -5456,6 +5547,7 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) pI830->FbMapSize / 1024, -pI830->MemoryAperture.Size / 1024); } + pI830->mmSize = 0; pI830->directRenderingDisabled = TRUE; xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Disabling DRI.\n"); } @@ -5468,6 +5560,16 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int flags) #endif pI830->disableTiling = TRUE; /* no DRI - so disableTiling */ + if (pScrn->displayWidth >= 4096) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Cannot support > 1024x768 in leftof/rightof configurations. disabling DRI.\n"); + pI830->directRenderingDisabled = TRUE; + } + + if (pScrn->virtualY > 2048) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Cannot support > 2048 vertical lines. disabling acceleration.\n"); + pI830->noAccel = TRUE; + } + pI830->displayWidth = pScrn->displayWidth; SetPipeAccess(pScrn); @@ -7010,6 +7112,87 @@ IntelEmitInvarientState(ScrnInfoPtr pScrn) } } +#ifdef XF86DRI +#ifndef DRM_BO_MEM_TT +#error "Wrong drm.h file included. You need to compile and install a recent libdrm." +#endif + +#ifndef XSERVER_LIBDRM_MM + +static int +I830DrmMMInit(int drmFD, unsigned long pageOffs, unsigned long pageSize, + unsigned memType) +{ + + drm_mm_init_arg_t arg; + int ret; + + memset(&arg, 0, sizeof(arg)); + arg.req.op = mm_init; + arg.req.p_offset = pageOffs; + arg.req.p_size = pageSize; + arg.req.mem_type = memType; + + ret = ioctl(drmFD, DRM_IOCTL_MM_INIT, &arg); + + if (ret) + return -errno; + + return 0; + +} + +static int +I830DrmMMTakedown(int drmFD, unsigned memType) +{ + drm_mm_init_arg_t arg; + int ret = 0; + + memset(&arg, 0, sizeof(arg)); + arg.req.op = mm_takedown; + arg.req.mem_type = memType; + if (ioctl(drmFD, DRM_IOCTL_MM_INIT, &arg)) { + ret = -errno; + } + + return ret; +} + +static int I830DrmMMLock(int fd, unsigned memType) +{ + drm_mm_init_arg_t arg; + int ret; + + memset(&arg, 0, sizeof(arg)); + arg.req.op = mm_lock; + arg.req.mem_type = memType; + + do{ + ret = ioctl(fd, DRM_IOCTL_MM_INIT, &arg); + } while (ret && errno == EAGAIN); + + return ret; +} + +static int I830DrmMMUnlock(int fd, unsigned memType) +{ + drm_mm_init_arg_t arg; + int ret; + + memset(&arg, 0, sizeof(arg)); + arg.req.op = mm_unlock; + arg.req.mem_type = memType; + + do{ + ret = ioctl(fd, DRM_IOCTL_MM_INIT, &arg); + } while (ret && errno == EAGAIN); + + return ret; +} + +#endif +#endif + static Bool I830BIOSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) { @@ -7517,9 +7700,52 @@ I830BIOSScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) break; } + +#ifdef XF86DRI + if (pI830->directRenderingEnabled && (pI830->mmModeFlags & I830_KERNEL_MM)) { + unsigned long aperEnd = ROUND_DOWN_TO(pI830->FbMapSize, GTT_PAGE_SIZE) + / GTT_PAGE_SIZE; + unsigned long aperStart = ROUND_TO(pI830->FbMapSize - KB(pI830->mmSize), GTT_PAGE_SIZE) + / GTT_PAGE_SIZE; + + if (aperEnd < aperStart || aperEnd - aperStart < I830_MM_MINPAGES) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Too little AGP aperture space for DRM memory manager.\n" + "\tPlease increase AGP aperture size from BIOS configuration screen\n" + "\tor decrease the amount of video RAM using option \"VideoRam\".\n" + "\tDisabling DRI.\n"); + pI830->directRenderingOpen = FALSE; + I830DRICloseScreen(pScreen); + pI830->directRenderingEnabled = FALSE; + } else { +#ifndef XSERVER_LIBDRM_MM + if (I830DrmMMInit(pI830->drmSubFD, aperStart, aperEnd - aperStart, + DRM_BO_MEM_TT)) { +#else + if (drmMMInit(pI830->drmSubFD, aperStart, aperEnd - aperStart, + DRM_BO_MEM_TT)) { +#endif + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Could not initialize the DRM memory manager.\n"); + + pI830->directRenderingOpen = FALSE; + I830DRICloseScreen(pScreen); + pI830->directRenderingEnabled = FALSE; + } else { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, + "Initialized DRM memory manager, %ld AGP pages\n" + "\tat AGP offset 0x%lx\n", + aperEnd - aperStart, + aperStart); + } + } + } +#endif + return TRUE; } + static void I830AdjustFrame(int scrnIndex, int x, int y, int flags) { @@ -7673,7 +7899,13 @@ I830BIOSLeaveVT(int scrnIndex, int flags) #ifdef XF86DRI if (pI830->directRenderingOpen) { DRILock(screenInfo.screens[pScrn->scrnIndex], 0); - + if (pI830->mmModeFlags & I830_KERNEL_MM) { +#ifndef XSERVER_LIBDRM_MM + I830DrmMMLock(pI830->drmSubFD, DRM_BO_MEM_TT); +#else + drmMMLock(pI830->drmSubFD, DRM_BO_MEM_TT); +#endif + } I830DRISetVBlankInterrupt (pScrn, FALSE); drmCtlUninstHandler(pI830->drmSubFD); @@ -8128,6 +8360,14 @@ I830BIOSEnterVT(int scrnIndex, int flags) for(i = 0; i < I830_NR_TEX_REGIONS+1 ; i++) sarea->texList[i].age = sarea->texAge; + if (pI830->mmModeFlags & I830_KERNEL_MM) { +#ifndef XSERVER_LIBDRM_MM + I830DrmMMUnlock(pI830->drmSubFD, DRM_BO_MEM_TT); +#else + drmMMUnlock(pI830->drmSubFD, DRM_BO_MEM_TT); +#endif + } + DPRINTF(PFX, "calling dri unlock\n"); DRIUnlock(screenInfo.screens[pScrn->scrnIndex]); } @@ -8341,6 +8581,13 @@ I830BIOSCloseScreen(int scrnIndex, ScreenPtr pScreen) pI830->closing = TRUE; #ifdef XF86DRI if (pI830->directRenderingOpen) { + if (pI830->mmModeFlags & I830_KERNEL_MM) { +#ifndef XSERVER_LIBDRM_MM + I830DrmMMTakedown(pI830->drmSubFD, DRM_BO_MEM_TT); +#else + drmMMTakedown(pI830->drmSubFD, DRM_BO_MEM_TT); +#endif + } pI830->directRenderingOpen = FALSE; I830DRICloseScreen(pScreen); } diff --git a/driver/xf86-video-intel/src/i830_memory.c b/driver/xf86-video-intel/src/i830_memory.c index 2d09b2d4d..09ef5be8b 100644 --- a/driver/xf86-video-intel/src/i830_memory.c +++ b/driver/xf86-video-intel/src/i830_memory.c @@ -1107,6 +1107,12 @@ I830ResetAllocations(ScrnInfoPtr pScrn, const int flags) pI830->MemoryAperture.Start = pI830->StolenMemory.End; pI830->MemoryAperture.End = pI830->FbMapSize; pI830->MemoryAperture.Size = pI830->FbMapSize - pI830->StolenMemory.Size; +#ifdef XF86DRI + if (!pI830->directRenderingDisabled) { + pI830->MemoryAperture.End -= KB(pI830->mmSize); + pI830->MemoryAperture.Size -= KB(pI830->mmSize); + } +#endif pI830->StolenPool.Fixed = pI830->StolenMemory; pI830->StolenPool.Total = pI830->StolenMemory; #if ALLOCATE_ALL_BIOSMEM @@ -1286,37 +1292,41 @@ I830AllocateTextureMemory(ScrnInfoPtr pScrn, const int flags) /* Allocate the remaining space for textures. */ memset(&(pI830->TexMem), 0, sizeof(pI830->TexMem)); pI830->TexMem.Key = -1; - size = GetFreeSpace(pScrn); - if (dryrun && (size < MB(1))) - size = MB(1); - i = myLog2(size / I830_NR_TEX_REGIONS); - if (i < I830_LOG_MIN_TEX_REGION_SIZE) - i = I830_LOG_MIN_TEX_REGION_SIZE; - pI830->TexGranularity = i; - /* Truncate size */ - size >>= i; - size <<= i; - if (size < KB(512)) { - if (!dryrun) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Less than 512 kBytes for texture space (real %ld kBytes).\n", - size / 1024); + + if (pI830->mmModeFlags & I830_KERNEL_TEX) { + + size = GetFreeSpace(pScrn); + if (dryrun && (size < MB(1))) + size = MB(1); + i = myLog2(size / I830_NR_TEX_REGIONS); + if (i < I830_LOG_MIN_TEX_REGION_SIZE) + i = I830_LOG_MIN_TEX_REGION_SIZE; + pI830->TexGranularity = i; + /* Truncate size */ + size >>= i; + size <<= i; + if (size < KB(512)) { + if (!dryrun) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Less than 512 kBytes for texture space (real %ld kBytes).\n", + size / 1024); + } + return FALSE; } - return FALSE; - } - alloced = I830AllocVidMem(pScrn, &(pI830->TexMem), - &(pI830->StolenPool), size, GTT_PAGE_SIZE, - flags | FROM_ANYWHERE | ALLOCATE_AT_TOP); - if (alloced < size) { - if (!dryrun) { - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, - "Failed to allocate texture space.\n"); + alloced = I830AllocVidMem(pScrn, &(pI830->TexMem), + &(pI830->StolenPool), size, GTT_PAGE_SIZE, + flags | FROM_ANYWHERE | ALLOCATE_AT_TOP); + if (alloced < size) { + if (!dryrun) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Failed to allocate texture space.\n"); + } + return FALSE; } - return FALSE; + xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, verbosity, + "%sAllocated %ld kB for textures at 0x%lx\n", s, + alloced / 1024, pI830->TexMem.Start); } - xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, verbosity, - "%sAllocated %ld kB for textures at 0x%lx\n", s, - alloced / 1024, pI830->TexMem.Start); return TRUE; } @@ -1514,7 +1524,9 @@ I830FixupOffsets(ScrnInfoPtr pScrn) I830FixOffset(pScrn, &(pI830->ContextMem)); I830FixOffset(pScrn, &(pI830->BackBuffer)); I830FixOffset(pScrn, &(pI830->DepthBuffer)); - I830FixOffset(pScrn, &(pI830->TexMem)); + if (pI830->mmModeFlags & I830_KERNEL_TEX) { + I830FixOffset(pScrn, &(pI830->TexMem)); + } } #endif return TRUE; @@ -1913,7 +1925,8 @@ I830BindAGPMemory(ScrnInfoPtr pScrn) return FALSE; if (!BindMemRange(pScrn, &(pI830->DepthBuffer))) return FALSE; - if (!BindMemRange(pScrn, &(pI830->TexMem))) + if ((pI830->mmModeFlags & I830_KERNEL_TEX) && + !BindMemRange(pScrn, &(pI830->TexMem))) return FALSE; } #endif @@ -1997,7 +2010,8 @@ I830UnbindAGPMemory(ScrnInfoPtr pScrn) return FALSE; if (!UnbindMemRange(pScrn, &(pI830->DepthBuffer))) return FALSE; - if (!UnbindMemRange(pScrn, &(pI830->TexMem))) + if ((pI830->mmModeFlags & I830_KERNEL_TEX) && + !UnbindMemRange(pScrn, &(pI830->TexMem))) return FALSE; } #endif diff --git a/driver/xf86-video-intel/src/i830_modes.c b/driver/xf86-video-intel/src/i830_modes.c index 7d1451983..002c00489 100644 --- a/driver/xf86-video-intel/src/i830_modes.c +++ b/driver/xf86-video-intel/src/i830_modes.c @@ -394,7 +394,6 @@ CheckMode(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe, int id, !I830CheckModeSupport(pScrn, mode->XResolution, mode->YResolution, id)) modeOK = FALSE; - /* * Check if there's a valid monitor mode that this one can be matched * up with from the 'specified' modes list. @@ -410,6 +409,9 @@ CheckMode(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe, int id, if (status == MODE_OK) { modeOK = TRUE; break; + } else { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Not using mode \"%s\" (%s)\n", p->name, + xf86ModeStatusToString(status)); } } if (p) { @@ -442,6 +444,9 @@ CheckMode(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe, int id, newMode = p; } modeOK = TRUE; + } else { + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Not using mode \"%s\" (%s)\n", p->name, + xf86ModeStatusToString(status)); } } if (newMode) { @@ -487,8 +492,11 @@ CheckMode(ScrnInfoPtr pScrn, vbeInfoPtr pVbe, VbeInfoBlock *vbe, int id, modeOK = FALSE; } else modeOK = TRUE; - } else + } else { modeOK = FALSE; + xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Not using mode \"%s\" (%s)\n", pMode->name, + xf86ModeStatusToString(status)); + } pMode->status = status; } else { modeOK = FALSE; diff --git a/driver/xf86-video-intel/src/i830_rotate.c b/driver/xf86-video-intel/src/i830_rotate.c index 020d7e619..0471b55ad 100644 --- a/driver/xf86-video-intel/src/i830_rotate.c +++ b/driver/xf86-video-intel/src/i830_rotate.c @@ -778,7 +778,7 @@ I830Rotate(ScrnInfoPtr pScrn, DisplayModePtr mode) /* Do heap teardown here */ - { + if (pI8301->mmModeFlags & I830_KERNEL_TEX) { drmI830MemDestroyHeap destroy; destroy.region = I830_MEM_REGION_AGP; @@ -790,10 +790,11 @@ I830Rotate(ScrnInfoPtr pScrn, DisplayModePtr mode) } } - - if (pI8301->TexMem.Key != -1) - xf86UnbindGARTMemory(pScrn1->scrnIndex, pI8301->TexMem.Key); - I830FreeVidMem(pScrn1, &(pI8301->TexMem)); + if (pI8301->mmModeFlags & I830_KERNEL_TEX) { + if (pI8301->TexMem.Key != -1) + xf86UnbindGARTMemory(pScrn1->scrnIndex, pI8301->TexMem.Key); + I830FreeVidMem(pScrn1, &(pI8301->TexMem)); + } if (pI8301->StolenPool.Allocated.Key != -1) { xf86UnbindGARTMemory(pScrn1->scrnIndex, pI8301->StolenPool.Allocated.Key); xf86DeallocateGARTMemory(pScrn1->scrnIndex, pI8301->StolenPool.Allocated.Key); @@ -943,9 +944,11 @@ I830Rotate(ScrnInfoPtr pScrn, DisplayModePtr mode) pI8301->disableTiling ? ALLOC_NO_TILING : 0)) goto BAIL3; - if (!I830AllocateTextureMemory(pScrn1, - pI8301->disableTiling ? ALLOC_NO_TILING : 0)) - goto BAIL4; + if (pI8301->mmModeFlags & I830_KERNEL_TEX) { + if (!I830AllocateTextureMemory(pScrn1, + pI8301->disableTiling ? ALLOC_NO_TILING : 0)) + goto BAIL4; + } I830DoPoolAllocation(pScrn1, &(pI8301->StolenPool)); @@ -958,8 +961,10 @@ I830Rotate(ScrnInfoPtr pScrn, DisplayModePtr mode) xf86BindGARTMemory(pScrn1->scrnIndex, pI8301->DepthBuffer.Key, pI8301->DepthBuffer.Offset); if (pI8301->StolenPool.Allocated.Key != -1) xf86BindGARTMemory(pScrn1->scrnIndex, pI8301->StolenPool.Allocated.Key, pI8301->StolenPool.Allocated.Offset); - if (pI8301->TexMem.Key != -1) - xf86BindGARTMemory(pScrn1->scrnIndex, pI8301->TexMem.Key, pI8301->TexMem.Offset); + if (pI8301->mmModeFlags & I830_KERNEL_TEX) { + if (pI8301->TexMem.Key != -1) + xf86BindGARTMemory(pScrn1->scrnIndex, pI8301->TexMem.Key, pI8301->TexMem.Offset); + } I830SetupMemoryTiling(pScrn1); /* update fence registers */ for (i = 0; i < 8; i++) @@ -1031,7 +1036,6 @@ I830Rotate(ScrnInfoPtr pScrn, DisplayModePtr mode) pI830->AccelInfoRec->maxOffPixWidth = 1; pI830->AccelInfoRec->maxOffPixHeight = 1; } - return TRUE; BAIL4: @@ -1175,11 +1179,12 @@ BAIL0: pI8301->disableTiling ? ALLOC_NO_TILING : 0)) xf86DrvMsg(pScrn1->scrnIndex, X_INFO, "Oh dear, the depth buffer failed - badness\n"); - - if (!I830AllocateTextureMemory(pScrn1, - pI8301->disableTiling ? ALLOC_NO_TILING : 0)) - xf86DrvMsg(pScrn1->scrnIndex, X_INFO, - "Oh dear, the texture cache failed - badness\n"); + if (pI8301->mmModeFlags & I830_KERNEL_TEX) { + if (!I830AllocateTextureMemory(pScrn1, + pI8301->disableTiling ? ALLOC_NO_TILING : 0)) + xf86DrvMsg(pScrn1->scrnIndex, X_INFO, + "Oh dear, the texture cache failed - badness\n"); + } I830DoPoolAllocation(pScrn1, &(pI8301->StolenPool)); @@ -1192,8 +1197,10 @@ BAIL0: xf86BindGARTMemory(pScrn1->scrnIndex, pI8301->DepthBuffer.Key, pI8301->DepthBuffer.Offset); if (pI8301->StolenPool.Allocated.Key != -1) xf86BindGARTMemory(pScrn1->scrnIndex, pI8301->StolenPool.Allocated.Key, pI8301->StolenPool.Allocated.Offset); - if (pI8301->TexMem.Key != -1) - xf86BindGARTMemory(pScrn1->scrnIndex, pI8301->TexMem.Key, pI8301->TexMem.Offset); + if (pI8301->mmModeFlags & I830_KERNEL_TEX) { + if (pI8301->TexMem.Key != -1) + xf86BindGARTMemory(pScrn1->scrnIndex, pI8301->TexMem.Key, pI8301->TexMem.Offset); + } I830SetupMemoryTiling(pScrn1); /* update fence registers */ for (i = 0; i < 8; i++) diff --git a/driver/xf86-video-intel/src/i830_video.c b/driver/xf86-video-intel/src/i830_video.c index db21d8728..1a1b96802 100644 --- a/driver/xf86-video-intel/src/i830_video.c +++ b/driver/xf86-video-intel/src/i830_video.c @@ -1,4 +1,3 @@ -#define VIDEO_DEBUG 0 /*************************************************************************** Copyright 2000 Intel Corporation. All Rights Reserved. @@ -935,14 +934,16 @@ I830SetPortAttribute(ScrnInfoPtr pScrn, pPriv->brightness = value; overlay->OCLRC0 = (pPriv->contrast << 18) | (pPriv->brightness & 0xff); ErrorF("BRIGHTNESS\n"); - OVERLAY_UPDATE; + if (*pI830->overlayOn) + OVERLAY_UPDATE; } else if (attribute == xvContrast) { if ((value < 0) || (value > 255)) return BadValue; pPriv->contrast = value; overlay->OCLRC0 = (pPriv->contrast << 18) | (pPriv->brightness & 0xff); ErrorF("CONTRAST\n"); - OVERLAY_UPDATE; + if (*pI830->overlayOn) + OVERLAY_UPDATE; } else if (pI830->Clone && attribute == xvPipe) { if ((value < 0) || (value > 1)) return BadValue; @@ -956,7 +957,8 @@ I830SetPortAttribute(ScrnInfoPtr pScrn, else overlay->OCONFIG |= OVERLAY_PIPE_B; ErrorF("PIPE CHANGE\n"); - OVERLAY_UPDATE; + if (*pI830->overlayOn) + OVERLAY_UPDATE; } else if (attribute == xvGamma0 && (IS_I9XX(pI830))) { pPriv->gamma0 = value; } else if (attribute == xvGamma1 && (IS_I9XX(pI830))) { @@ -983,7 +985,8 @@ I830SetPortAttribute(ScrnInfoPtr pScrn, break; } ErrorF("COLORKEY\n"); - OVERLAY_UPDATE; + if (*pI830->overlayOn) + OVERLAY_UPDATE; REGION_EMPTY(pScrn->pScreen, &pPriv->clip); } else if(attribute == xvDoubleBuffer) { if ((value < 0) || (value > 1)) @@ -1001,13 +1004,8 @@ I830SetPortAttribute(ScrnInfoPtr pScrn, attribute == xvGamma3 || attribute == xvGamma4 || attribute == xvGamma5) && (IS_I9XX(pI830))) { - CARD32 r = overlay->OCMD & OVERLAY_ENABLE; ErrorF("GAMMA\n"); - overlay->OCMD &= ~OVERLAY_ENABLE; - OVERLAY_UPDATE; I830UpdateGamma(pScrn); - overlay->OCMD |= r; - OVERLAY_UPDATE; } return Success; diff --git a/driver/xf86-video-intel/src/i915_video.c b/driver/xf86-video-intel/src/i915_video.c index 0833d508d..78907efb2 100644 --- a/driver/xf86-video-intel/src/i915_video.c +++ b/driver/xf86-video-intel/src/i915_video.c @@ -65,8 +65,10 @@ I915DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id, int nbox, dxo, dyo; Bool planar; +#if 0 ErrorF("I915DisplayVideo: %dx%d (pitch %d)\n", width, height, video_pitch); +#endif switch (id) { case FOURCC_UYVY: @@ -78,7 +80,9 @@ I915DisplayVideoTextured(ScrnInfoPtr pScrn, I830PortPrivPtr pPriv, int id, planar = TRUE; break; default: +#if 0 ErrorF("Unknown format 0x%x\n", id); +#endif planar = FALSE; break; } diff --git a/driver/xf86-video-intel/src/packed_yuv_wm.g4a b/driver/xf86-video-intel/src/packed_yuv_wm.g4a index d312d170f..4b6391b0b 100644 --- a/driver/xf86-video-intel/src/packed_yuv_wm.g4a +++ b/driver/xf86-video-intel/src/packed_yuv_wm.g4a @@ -144,7 +144,7 @@ mac.sat (8) m8<1>F g15<8,8,1>F 1F { align1 }; */ mov (8) m1<1>UD g1<8,8,1>UD { align1 mask_disable }; /* Send framebuffer write message: XXX: acc0? */ -send (16) 0 null g0<8,8,1>UW write ( +send (16) 0 acc0<1>UW g0<8,8,1>UW write ( 0, /* binding table index 0 */ 8, /* pixel scoreboard clear */ 4, /* render target write */ diff --git a/driver/xf86-video-intel/src/wm_prog.h b/driver/xf86-video-intel/src/wm_prog.h index 708e6eb61..d72c65103 100644 --- a/driver/xf86-video-intel/src/wm_prog.h +++ b/driver/xf86-video-intel/src/wm_prog.h @@ -71,7 +71,7 @@ { 0x00600041, 0x20007fbc, 0x008d0220, 0x40011687 }, { 0x80600048, 0x21007fbe, 0x008d01e0, 0x3f800000 }, { 0x00600201, 0x20200022, 0x008d0020, 0x00000000 }, - { 0x00800031, 0x20001d3c, 0x008d0000, 0x85a04800 }, + { 0x00800031, 0x24001d28, 0x008d0000, 0x85a04800 }, { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 }, { 0x0000007e, 0x00000000, 0x00000000, 0x00000000 },