Hello community, here is the log from the commit of package xorg-x11-driver-video-nouveau for openSUSE:Factory checked in at 2012-10-26 17:37:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xorg-x11-driver-video-nouveau (Old) and /work/SRC/openSUSE:Factory/.xorg-x11-driver-video-nouveau.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xorg-x11-driver-video-nouveau", Maintainer is "[email protected]" Changes: -------- --- /work/SRC/openSUSE:Factory/xorg-x11-driver-video-nouveau/xorg-x11-driver-video-nouveau.changes 2012-09-18 14:03:34.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.xorg-x11-driver-video-nouveau.new/xorg-x11-driver-video-nouveau.changes 2012-10-26 17:37:40.000000000 +0200 @@ -1,0 +2,15 @@ +Thu Oct 25 06:23:44 UTC 2012 - [email protected] + +- Update to version 1.0.3: + + Remove mibstore.h + + shadowfb: fix segfault due to reading outside of shadow buffer + + nouveau/dri2: fix pixmap/window offset calcs. + + nvc0/exa: make solid fill actually work + + remove unused members from nv_type.h + + exa: fix up download_from/upload_to screen + + exa: fix comparison in download_from_screen + + exa: remove exaMarkSync from download/upload screen + + dri2: Fix potential race and crash for swap at next vblank. + + exa: use CLAMP_TO_EDGE for RepeatPad + +------------------------------------------------------------------- Old: ---- xf86-video-nouveau-1.0.2.tar.bz2 New: ---- xf86-video-nouveau-1.0.3.tar.bz2 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xorg-x11-driver-video-nouveau.spec ++++++ --- /var/tmp/diff_new_pack.qjG6Tw/_old 2012-10-26 17:37:41.000000000 +0200 +++ /var/tmp/diff_new_pack.qjG6Tw/_new 2012-10-26 17:37:41.000000000 +0200 @@ -25,7 +25,7 @@ BuildRequires: pkgconfig(libdrm_nouveau) >= 2.4.25 Url: http://nouveau.freedesktop.org/wiki/ -Version: 1.0.2 +Version: 1.0.3 Release: 0 Summary: Accelerated Open Source driver for nVidia cards License: MIT ++++++ xf86-video-nouveau-1.0.2.tar.bz2 -> xf86-video-nouveau-1.0.3.tar.bz2 ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/ChangeLog new/xf86-video-nouveau-1.0.3/ChangeLog --- old/xf86-video-nouveau-1.0.2/ChangeLog 2012-09-12 13:51:29.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/ChangeLog 2012-10-24 11:21:52.000000000 +0200 @@ -1,3 +1,150 @@ +commit 8c3e1623b0be15f8cc590d893bfd19be87bd079a +Author: Maarten Lankhorst <[email protected]> +Date: Wed Oct 24 11:19:04 2012 +0200 + + bump version to 1.0.3 + +commit 6644a3a724a11150eba0c0082c8d4fe167b1755e +Author: Maarten Lankhorst <[email protected]> +Date: Tue Oct 23 20:17:29 2012 +0200 + + exa: remove exaMarkSync from download/upload screen + + They're noops on nouveau since sync markers are unused and + download/upload are always synchronous anyway from exa's POV. + + Signed-off-by: Maarten Lankhorst <[email protected]> + +commit 2a757b7dffa85c30879653a1e52e33b8f4fa8806 +Author: Maarten Lankhorst <[email protected]> +Date: Tue Oct 23 17:04:37 2012 +0200 + + exa: fix comparison in download_from_screen + + Presumably a copy/paste error from upload_to_screen. + + Signed-off-by: Maarten Lankhorst <[email protected]> + +commit 72230cd5a7846f7a26f929262a745dc0bdc34a3d +Author: Maarten Lankhorst <[email protected]> +Date: Tue Oct 23 10:37:27 2012 +0200 + + exa: fix up download_from/upload_to screen + + Add a missing return TRUE to download_from_screen. + Add a missing exaMarkSync to memcpy in upload_to_screen. + Add a really loud warning to both if memcpy to/from tiled is done. + + Signed-off-by: Maarten Lankhorst <[email protected]> + +commit 1d7890ecb8b3188177ab85608ea232812672d923 +Author: Maarten Lankhorst <[email protected]> +Date: Tue Oct 23 09:53:39 2012 +0200 + + remove unused members from nv_type.h + +commit 0b2a548316b0ce88ba19d5e05fdca205fc139962 +Author: Maarten Lankhorst <[email protected]> +Date: Mon Oct 22 13:12:06 2012 +0200 + + nvc0/exa: make solid fill actually work + + Some investigation showed that the code for accelerating solid fill + didn't actually work because NVC0EXACheckTexture would fail. + + Making the check the same as in NV50EXACheckTexture fixes this, and + seems to get acceleration for solid fills working right. + + Signed-off-by: Maarten Lankhorst <[email protected]> + +commit b4231dd715a8a7f86b04519b5f4e8a8d93c2f561 +Author: Mario Kleiner <[email protected]> +Date: Tue Oct 9 09:06:59 2012 +0200 + + dri2: Fix potential race and crash for swap at next vblank. + + This fixes a potential race + crash that wasn't properly + handled by commit 248de8cdbd6d0bc062633b49896fa4791148cd3b + and happened at least on one users machine. + + That commit wrongly assumed no special action would be needed + for swaps at next vblank while triple-buffering is enabled on + XOrg server 1.12 or later. + + Closer inspection of the x-server main dispatch loop shows + it is possible that the client manages to get the server + to dispatch a new DRI2GetBuffersWithFormat() call before + the server calls the vblank event handler and executes + the nouveau_dri2_finish_swap() routine. Such a race would + cause a crash, as described in above commit. + + This commit handles the "swap at next vblank" case by + calling nouveau_dri2_finish_swap() immediately without + the roundtrip (queue vblank_event -> kernel -> deliver event + -> x-server processes event -> nouveau vblank event handler), + before control gets returned to the client. + + This avoids the race while retaining triple-buffering. As + a bonus, time-critical swaps at next vblank get processed + without roundtrip delay, increasing the chance of not + skipping a frame due to vblank miss while sync to vblank is + on. + + Thanks to Anssi for reporting this problem on the nouveau + mailing list at 12th July 2012 and for testing this patch. + + Reported-by: Anssi Hannula <[email protected]> + Tested-by: Anssi Hannula <[email protected]> + Signed-off-by: Mario Kleiner <[email protected]> + +commit 01c9a9cff7d6232ca6eafa59dd60833a0d9cdc5b +Author: Ben Skeggs <[email protected]> +Date: Thu Oct 18 18:38:21 2012 +1000 + + shadowfb: fix segfault due to reading outside of shadow buffer + + Probably caused by the new libdrm port, the new libdrm sets the bo + size field to the *allocated* size and not the *requested* size, + making the max_height calculation here invalid. + + Switched to using virtualX/virtualY as the bounds, which should + hopefully do the right thing.. + + Signed-off-by: Ben Skeggs <[email protected]> + +commit 297fd0d0755bda698be1d0b30cc60a41d7673c0b +Author: Dave Airlie <[email protected]> +Date: Tue Oct 16 16:15:16 2012 +1000 + + nouveau/dri2: fix pixmap/window offset calcs. + + This should fix prime rendering under kwin, and not break it under the + others. + + Signed-off-by: Dave Airlie <[email protected]> + +commit 5c9379b14cdabc81fd5d4c916dcd93dc77c4f683 +Author: Sebastian Keller <[email protected]> +Date: Tue Sep 25 11:35:35 2012 +0200 + + exa: use CLAMP_TO_EDGE for RepeatPad + + This fixes border rendering in some gtk3 themes. + https://bugs.freedesktop.org/show_bug.cgi?id=55310 + + v2 (Ben Skeggs): implement same fix for fermi/kepler too + + Signed-off-by: Sebastian Keller <[email protected]> + Signed-off-by: Ben Skeggs <[email protected]> + +commit 302b5da84b4890c067f5f7e8b0f4e689909bbb51 +Author: Adam Jackson <[email protected]> +Date: Tue Sep 25 10:44:32 2012 -0400 + + Remove mibstore.h + + Signed-off-by: Adam Jackson <[email protected]> + commit 20f3830ddf868c0d1a46c18fa381585c076bfb8d Author: Maarten Lankhorst <[email protected]> Date: Wed Sep 12 13:42:43 2012 +0200 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/configure new/xf86-video-nouveau-1.0.3/configure --- old/xf86-video-nouveau-1.0.2/configure 2012-09-12 13:44:08.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/configure 2012-10-24 11:19:12.000000000 +0200 @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for xf86-video-nouveau 1.0.2. +# Generated by GNU Autoconf 2.69 for xf86-video-nouveau 1.0.3. # # Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>. # @@ -591,8 +591,8 @@ # Identity of this package. PACKAGE_NAME='xf86-video-nouveau' PACKAGE_TARNAME='xf86-video-nouveau' -PACKAGE_VERSION='1.0.2' -PACKAGE_STRING='xf86-video-nouveau 1.0.2' +PACKAGE_VERSION='1.0.3' +PACKAGE_STRING='xf86-video-nouveau 1.0.3' PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg' PACKAGE_URL='' @@ -1358,7 +1358,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures xf86-video-nouveau 1.0.2 to adapt to many kinds of systems. +\`configure' configures xf86-video-nouveau 1.0.3 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1429,7 +1429,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of xf86-video-nouveau 1.0.2:";; + short | recursive ) echo "Configuration of xf86-video-nouveau 1.0.3:";; esac cat <<\_ACEOF @@ -1556,7 +1556,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -xf86-video-nouveau configure 1.0.2 +xf86-video-nouveau configure 1.0.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1834,7 +1834,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by xf86-video-nouveau $as_me 1.0.2, which was +It was created by xf86-video-nouveau $as_me 1.0.3, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2675,7 +2675,7 @@ # Define the identity of the package. PACKAGE='xf86-video-nouveau' - VERSION='1.0.2' + VERSION='1.0.3' cat >>confdefs.h <<_ACEOF @@ -13521,7 +13521,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by xf86-video-nouveau $as_me 1.0.2, which was +This file was extended by xf86-video-nouveau $as_me 1.0.3, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -13587,7 +13587,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -xf86-video-nouveau config.status 1.0.2 +xf86-video-nouveau config.status 1.0.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/configure.ac new/xf86-video-nouveau-1.0.3/configure.ac --- old/xf86-video-nouveau-1.0.2/configure.ac 2012-09-12 13:43:58.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/configure.ac 2012-10-24 11:18:52.000000000 +0200 @@ -22,7 +22,7 @@ AC_PREREQ([2.60]) AC_INIT([xf86-video-nouveau], - [1.0.2], + [1.0.3], [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], [xf86-video-nouveau]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/src/nouveau_dri2.c new/xf86-video-nouveau-1.0.3/src/nouveau_dri2.c --- old/xf86-video-nouveau-1.0.2/src/nouveau_dri2.c 2012-09-11 08:46:32.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/src/nouveau_dri2.c 2012-10-20 09:29:10.000000000 +0200 @@ -165,9 +165,9 @@ translate = TRUE; if (translate && pDraw->type == DRAWABLE_WINDOW) { - WindowPtr pWin = (WindowPtr)pDraw; - off_x = pWin->origin.x; - off_y = pWin->origin.y; + PixmapPtr pPix = get_drawable_pixmap(pDraw); + off_x = pDraw->x - pPix->screen_x; + off_y = pDraw->y - pPix->screen_y; } pGC = GetScratchGC(pDraw->depth, pScreen); @@ -479,6 +479,7 @@ { struct nouveau_dri2_vblank_state *s; CARD64 current_msc, expect_msc; + CARD64 current_ust; int ret; /* Initialize a swap structure */ @@ -490,9 +491,9 @@ { SWAP, client, draw->id, dst, src, func, data, 0 }; if (can_sync_to_vblank(draw)) { - /* Get current sequence */ + /* Get current sequence and vblank time*/ ret = nouveau_wait_vblank(draw, DRM_VBLANK_RELATIVE, 0, - ¤t_msc, NULL, NULL); + ¤t_msc, ¤t_ust, NULL); if (ret) goto fail; @@ -512,24 +513,48 @@ if (*target_msc == 0) *target_msc = 1; + /* Swap at next possible vblank requested? */ + if (current_msc >= *target_msc - 1) { + /* Special case: Need to swap at next vblank. + * Schedule swap immediately, bypassing the kernel + * vblank event mechanism to avoid a dangerous race + * between the client and the x-server vblank event + * dispatch in the main x-server dispatch loop when + * the swap_limit is set to 2 for triple-buffering. + * + * This also optimizes for the common case of swap + * at next vblank, avoiding vblank dispatch delay. + */ + s->frame = 1 + ((unsigned int) current_msc & 0xffffffff); + *target_msc = 1 + current_msc; + nouveau_dri2_finish_swap(draw, current_msc, + (unsigned int) (current_ust / 1000000), + (unsigned int) (current_ust % 1000000), + s); + return TRUE; + } + + /* This is a swap in the future, ie. the vblank event will + * only get dispatched at least 2 vblanks into the future. + */ + #if DRI2INFOREC_VERSION >= 6 - /* Is this a swap in the future, ie. the vblank event will - * not be immediately dispatched, but only at a future vblank? - * If so, we need to temporarily lower the swaplimit to 1, so - * that DRI2GetBuffersWithFormat() requests from the client get + /* On XOrg 1.12+ we need to temporarily lower the swaplimit to 1, + * so that DRI2GetBuffersWithFormat() requests from the client get * deferred in the x-server until the vblank event has been * dispatched to us and nouveau_dri2_finish_swap() is done. If * we wouldn't do this, DRI2GetBuffersWithFormat() would operate * on wrong (pre-swap) buffers, and cause a segfault later on in - * nouveau_dri2_finish_swap(). Our vblank event handler restores + * nouveau_dri2_finish_swap(). Our vblank event handler will restore * the old swaplimit immediately after nouveau_dri2_finish_swap() - * is done, so we still get 1 video refresh cycle worth of - * triple-buffering. For a swap at next vblank, dispatch of the - * vblank event happens immediately, so there isn't any need - * for this lowered swaplimit. + * is done, so we still get 1 video refresh cycle worth of triple- + * buffering, because the client can start rendering again 1 cycle + * before the pending swap is completed. + * + * The same race would happen for the "swap at next vblank" case, + * but the special case "swap immediately" code above prevents this. */ - if (current_msc < *target_msc - 1) - DRI2SwapLimit(draw, 1); + DRI2SwapLimit(draw, 1); #endif /* Request a vblank event one frame before the target */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/src/nouveau_exa.c new/xf86-video-nouveau-1.0.3/src/nouveau_exa.c --- old/xf86-video-nouveau-1.0.2/src/nouveau_exa.c 2012-09-11 08:46:32.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/src/nouveau_exa.c 2012-10-23 20:16:29.000000000 +0200 @@ -269,7 +269,7 @@ goto memcpy; nouveau_bo_wait(tmp, NOUVEAU_BO_RD, pNv->client); - if (src_pitch == tmp_pitch) { + if (dst_pitch == tmp_pitch) { memcpy(dst, tmp->map + tmp_offset, dst_pitch * lines); dst += dst_pitch * lines; } else { @@ -285,9 +285,14 @@ h -= lines; y += lines; } + return TRUE; memcpy: bo = nouveau_pixmap_bo(pspix); + if (nv50_style_tiled_pixmap(pspix)) + ErrorF("%s:%d - falling back to memcpy ignores tiling\n", + __func__, __LINE__); + if (nouveau_bo_map(bo, NOUVEAU_BO_RD, pNv->client)) return FALSE; src = (char *)bo->map + (y * src_pitch) + (x * cpp); @@ -316,20 +321,17 @@ if (pNv->Architecture < NV_ARCH_50) { if (NV04EXAUploadIFC(pScrn, src, src_pitch, pdpix, x, y, w, h, cpp)) { - exaMarkSync(pdpix->drawable.pScreen); return TRUE; } } else if (pNv->Architecture < NV_ARCH_C0) { if (NV50EXAUploadSIFC(src, src_pitch, pdpix, x, y, w, h, cpp)) { - exaMarkSync(pdpix->drawable.pScreen); return TRUE; } } else { if (NVC0EXAUploadSIFC(src, src_pitch, pdpix, x, y, w, h, cpp)) { - exaMarkSync(pdpix->drawable.pScreen); return TRUE; } } @@ -367,12 +369,15 @@ y += lines; } - exaMarkSync(pdpix->drawable.pScreen); return TRUE; /* fallback to memcpy-based transfer */ memcpy: bo = nouveau_pixmap_bo(pdpix); + if (nv50_style_tiled_pixmap(pdpix)) + ErrorF("%s:%d - falling back to memcpy ignores tiling\n", + __func__, __LINE__); + if (nouveau_bo_map(bo, NOUVEAU_BO_WR, pNv->client)) return FALSE; dst = (char *)bo->map + (y * dst_pitch) + (x * cpp); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/src/nv40_exa.c new/xf86-video-nouveau-1.0.3/src/nv40_exa.c --- old/xf86-video-nouveau-1.0.2/src/nv40_exa.c 2012-07-13 18:32:04.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/src/nv40_exa.c 2012-10-02 11:05:54.000000000 +0200 @@ -260,9 +260,9 @@ if (pPict->repeat) { switch(pPict->repeatType) { case RepeatPad: - PUSH_DATA (push, NV30_3D_TEX_WRAP_S_CLAMP | - NV30_3D_TEX_WRAP_T_CLAMP | - NV30_3D_TEX_WRAP_R_CLAMP); + PUSH_DATA (push, NV30_3D_TEX_WRAP_S_CLAMP_TO_EDGE | + NV30_3D_TEX_WRAP_T_CLAMP_TO_EDGE | + NV30_3D_TEX_WRAP_R_CLAMP_TO_EDGE); break; case RepeatReflect: PUSH_DATA (push, NV30_3D_TEX_WRAP_S_MIRRORED_REPEAT | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/src/nv50_exa.c new/xf86-video-nouveau-1.0.3/src/nv50_exa.c --- old/xf86-video-nouveau-1.0.2/src/nv50_exa.c 2012-09-11 08:46:32.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/src/nv50_exa.c 2012-10-02 11:05:54.000000000 +0200 @@ -665,9 +665,9 @@ if (ppict->repeat) { switch (ppict->repeatType) { case RepeatPad: - PUSH_DATA (push, NV50TSC_1_0_WRAPS_CLAMP | - NV50TSC_1_0_WRAPT_CLAMP | - NV50TSC_1_0_WRAPR_CLAMP | 0x00024000); + PUSH_DATA (push, NV50TSC_1_0_WRAPS_CLAMP_TO_EDGE | + NV50TSC_1_0_WRAPT_CLAMP_TO_EDGE | + NV50TSC_1_0_WRAPR_CLAMP_TO_EDGE | 0x00024000); break; case RepeatReflect: PUSH_DATA (push, NV50TSC_1_0_WRAPS_MIRROR_REPEAT | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/src/nv_driver.c new/xf86-video-nouveau-1.0.3/src/nv_driver.c --- old/xf86-video-nouveau-1.0.2/src/nv_driver.c 2012-09-11 08:46:32.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/src/nv_driver.c 2012-10-22 13:11:22.000000000 +0200 @@ -1283,7 +1283,6 @@ if (!pNv->NoAccel && !nouveau_exa_init(pScreen)) return FALSE; - miInitializeBackingStore(pScreen); xf86SetBackingStore(pScreen); xf86SetSilkenMouse(pScreen); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/src/nv_include.h new/xf86-video-nouveau-1.0.3/src/nv_include.h --- old/xf86-video-nouveau-1.0.2/src/nv_include.h 2012-09-11 08:46:32.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/src/nv_include.h 2012-10-02 11:05:54.000000000 +0200 @@ -27,9 +27,6 @@ /* All drivers initialising the SW cursor need this */ #include "mipointer.h" -/* All drivers implementing backing store need this */ -#include "mibstore.h" - #include "micmap.h" #include "xf86DDC.h" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/src/nv_shadow.c new/xf86-video-nouveau-1.0.3/src/nv_shadow.c --- old/xf86-video-nouveau-1.0.2/src/nv_shadow.c 2012-05-23 09:01:01.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/src/nv_shadow.c 2012-10-20 09:28:57.000000000 +0200 @@ -32,19 +32,18 @@ NVRefreshArea(ScrnInfoPtr pScrn, int num, BoxPtr pbox) { NVPtr pNv = NVPTR(pScrn); - int x1, y1, x2, y2, width, height, cpp, FBPitch, max_height; + int x1, y1, x2, y2, width, height, cpp, FBPitch; unsigned char *src, *dst; cpp = pScrn->bitsPerPixel >> 3; FBPitch = pScrn->displayWidth * cpp; - max_height = pNv->scanout->size/FBPitch; nouveau_bo_map(pNv->scanout, NOUVEAU_BO_WR, pNv->client); while(num--) { x1 = MAX(pbox->x1, 0); y1 = MAX(pbox->y1, 0); - x2 = MIN(pbox->x2, pScrn->displayWidth); - y2 = MIN(pbox->y2, max_height); + x2 = MIN(pbox->x2, pScrn->virtualX); + y2 = MIN(pbox->y2, pScrn->virtualY); width = (x2 - x1) * cpp; height = y2 - y1; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/src/nv_type.h new/xf86-video-nouveau-1.0.3/src/nv_type.h --- old/xf86-video-nouveau-1.0.2/src/nv_type.h 2012-09-11 08:46:32.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/src/nv_type.h 2012-10-23 11:00:19.000000000 +0200 @@ -167,8 +167,6 @@ struct nouveau_pixmap { struct nouveau_bo *bo; - void *linear; - unsigned size; Bool shared; }; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xf86-video-nouveau-1.0.2/src/nvc0_exa.c new/xf86-video-nouveau-1.0.3/src/nvc0_exa.c --- old/xf86-video-nouveau-1.0.2/src/nvc0_exa.c 2012-09-11 08:46:32.000000000 +0200 +++ new/xf86-video-nouveau-1.0.3/src/nvc0_exa.c 2012-10-22 13:15:27.000000000 +0200 @@ -459,14 +459,19 @@ static Bool NVC0EXACheckTexture(PicturePtr ppict, PicturePtr pdpict, int op) { - if (!ppict->pDrawable) - NOUVEAU_FALLBACK("Solid and gradient pictures unsupported.\n"); - - if (ppict->pDrawable->width > 8192 || - ppict->pDrawable->height > 8192) - NOUVEAU_FALLBACK("texture dimensions exceeded %dx%d\n", - ppict->pDrawable->width, - ppict->pDrawable->height); + if (ppict->pDrawable) { + if (ppict->pDrawable->width > 8192 || + ppict->pDrawable->height > 8192) + NOUVEAU_FALLBACK("texture too large\n"); + } else { + switch (ppict->pSourcePict->type) { + case SourcePictTypeSolidFill: + break; + default: + NOUVEAU_FALLBACK("pict %d\n", ppict->pSourcePict->type); + break; + } + } switch (ppict->format) { case PICT_a8r8g8b8: @@ -659,9 +664,9 @@ switch (ppict->repeatType) { case RepeatPad: PUSH_DATA (push, 0x00024000 | - NV50TSC_1_0_WRAPS_CLAMP | - NV50TSC_1_0_WRAPT_CLAMP | - NV50TSC_1_0_WRAPR_CLAMP); + NV50TSC_1_0_WRAPS_CLAMP_TO_EDGE | + NV50TSC_1_0_WRAPT_CLAMP_TO_EDGE | + NV50TSC_1_0_WRAPR_CLAMP_TO_EDGE); break; case RepeatReflect: PUSH_DATA (push, 0x00024000 | @@ -826,10 +831,8 @@ PicturePtr pspict, PicturePtr pmpict, PicturePtr pdpict, PixmapPtr pspix, PixmapPtr pmpix, PixmapPtr pdpix) { - struct nouveau_bo *src = nouveau_pixmap_bo(pspix); struct nouveau_bo *dst = nouveau_pixmap_bo(pdpix); - struct nouveau_bo *mask = pmpix ? nouveau_pixmap_bo(pmpix) : NULL; - NVC0EXA_LOCALS(pspix); + NVC0EXA_LOCALS(pdpix); if (!PUSH_SPACE(push, 256)) NOUVEAU_FALLBACK("space\n"); @@ -881,10 +884,13 @@ PUSH_RESET(push); PUSH_REFN (push, pNv->scratch, NOUVEAU_BO_VRAM | NOUVEAU_BO_RDWR); - PUSH_REFN (push, src, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); + if (pspict->pDrawable) + PUSH_REFN (push, nouveau_pixmap_bo(pspix), + NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); PUSH_REFN (push, dst, NOUVEAU_BO_VRAM | NOUVEAU_BO_WR); - if (pmpict) - PUSH_REFN (push, mask, NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); + if (pmpict && pmpict->pDrawable) + PUSH_REFN (push, nouveau_pixmap_bo(pmpix), + NOUVEAU_BO_VRAM | NOUVEAU_BO_RD); nouveau_pushbuf_bufctx(push, pNv->bufctx); if (nouveau_pushbuf_validate(push)) { -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
